projen 0.99.80 → 0.100.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 (220) hide show
  1. package/.jsii +1677 -3664
  2. package/BREAKING_CHANGES.md +855 -0
  3. package/lib/ai-instructions.d.ts +0 -1
  4. package/lib/ai-instructions.js +6 -12
  5. package/lib/awscdk/auto-discover.js +7 -14
  6. package/lib/awscdk/awscdk-app-java.d.ts +0 -7
  7. package/lib/awscdk/awscdk-app-java.js +28 -21
  8. package/lib/awscdk/awscdk-app-py.d.ts +0 -12
  9. package/lib/awscdk/awscdk-app-py.js +27 -24
  10. package/lib/awscdk/awscdk-app-ts.d.ts +0 -5
  11. package/lib/awscdk/awscdk-app-ts.js +57 -31
  12. package/lib/awscdk/awscdk-construct.d.ts +0 -26
  13. package/lib/awscdk/awscdk-construct.js +4 -44
  14. package/lib/awscdk/awscdk-deps-java.js +2 -6
  15. package/lib/awscdk/awscdk-deps-js.js +2 -7
  16. package/lib/awscdk/awscdk-deps-py.js +2 -7
  17. package/lib/awscdk/awscdk-deps.d.ts +1 -90
  18. package/lib/awscdk/awscdk-deps.js +68 -114
  19. package/lib/awscdk/cdk-config.d.ts +0 -21
  20. package/lib/awscdk/cdk-config.js +44 -51
  21. package/lib/awscdk/cdk-tasks.js +26 -4
  22. package/lib/awscdk/integration-test.js +10 -15
  23. package/lib/awscdk/internal.js +5 -2
  24. package/lib/awscdk/lambda-extension.js +4 -16
  25. package/lib/awscdk/lambda-function.d.ts +0 -10
  26. package/lib/awscdk/lambda-function.js +88 -78
  27. package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
  28. package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
  29. package/lib/build/build-workflow.js +51 -6
  30. package/lib/builtin-example.task.d.ts +1 -0
  31. package/lib/builtin-example.task.js +2 -1
  32. package/lib/cdk/auto-discover-base.js +43 -8
  33. package/lib/cdk/construct-lib.js +2 -4
  34. package/lib/cdk/integration-test-base.js +26 -4
  35. package/lib/cdk/jsii-build.d.ts +0 -1
  36. package/lib/cdk/jsii-build.js +4 -4
  37. package/lib/cdk/jsii-docgen.js +2 -4
  38. package/lib/cdk/jsii-project.d.ts +12 -9
  39. package/lib/cdk/jsii-project.js +22 -7
  40. package/lib/cdk8s/auto-discover.js +3 -6
  41. package/lib/cdk8s/cdk8s-app-py.js +7 -4
  42. package/lib/cdk8s/cdk8s-app-ts.js +43 -6
  43. package/lib/cdk8s/cdk8s-construct.js +44 -5
  44. package/lib/cdk8s/cdk8s-deps-py.js +2 -4
  45. package/lib/cdk8s/cdk8s-deps.js +50 -5
  46. package/lib/cdk8s/integration-test.js +2 -4
  47. package/lib/cdktf/cdktf-construct.js +36 -5
  48. package/lib/circleci/circleci.js +66 -44
  49. package/lib/cleanup.js +38 -5
  50. package/lib/cli/cmds/new.js +51 -20
  51. package/lib/cli/cmds/run-task.js +107 -0
  52. package/lib/cli/{synth.d.ts → cmds/synth.d.ts} +0 -5
  53. package/lib/cli/cmds/synth.js +90 -0
  54. package/lib/cli/index.js +47 -22
  55. package/lib/cli/macros.js +35 -2
  56. package/lib/{task-runtime.d.ts → cli/task-runtime.d.ts} +13 -2
  57. package/lib/cli/task-runtime.js +411 -0
  58. package/lib/cli/util.js +37 -4
  59. package/lib/component.js +3 -4
  60. package/lib/dependencies.js +43 -12
  61. package/lib/dev-env.js +10 -4
  62. package/lib/docker-compose/docker-compose-service.js +54 -4
  63. package/lib/docker-compose/docker-compose.js +8 -4
  64. package/lib/file.js +60 -5
  65. package/lib/gitattributes.js +7 -5
  66. package/lib/github/actions-provider.js +3 -7
  67. package/lib/github/auto-approve.js +3 -4
  68. package/lib/github/auto-merge.js +3 -5
  69. package/lib/github/auto-queue.js +36 -5
  70. package/lib/github/dependabot.js +13 -4
  71. package/lib/github/dependency-review.js +2 -4
  72. package/lib/github/github-credentials.js +37 -5
  73. package/lib/github/github-project.d.ts +1 -32
  74. package/lib/github/github-project.js +30 -8
  75. package/lib/github/github.d.ts +0 -9
  76. package/lib/github/github.js +27 -14
  77. package/lib/github/index.js +24 -2
  78. package/lib/github/merge-queue.js +3 -4
  79. package/lib/github/mergify.d.ts +0 -7
  80. package/lib/github/mergify.js +6 -13
  81. package/lib/github/pr-template.js +2 -4
  82. package/lib/github/pull-request-backport.js +4 -4
  83. package/lib/github/pull-request-lint.js +4 -4
  84. package/lib/github/stale.js +2 -4
  85. package/lib/github/task-workflow-job.js +20 -4
  86. package/lib/github/task-workflow.js +4 -4
  87. package/lib/github/workflow-actions.d.ts +0 -8
  88. package/lib/github/workflow-actions.js +2 -14
  89. package/lib/github/workflow-jobs.js +2 -4
  90. package/lib/github/workflow-steps.js +2 -4
  91. package/lib/github/workflows-model.d.ts +0 -8
  92. package/lib/github/workflows-model.js +1 -1
  93. package/lib/github/workflows.js +39 -6
  94. package/lib/gitlab/configuration-model.d.ts +0 -4
  95. package/lib/gitlab/configuration-model.js +1 -1
  96. package/lib/gitlab/configuration.js +125 -41
  97. package/lib/gitlab/gitlab-configuration.js +3 -5
  98. package/lib/gitlab/nested-configuration.js +3 -4
  99. package/lib/gitpod.js +11 -7
  100. package/lib/ignore-file.js +5 -4
  101. package/lib/index.d.ts +1 -2
  102. package/lib/index.js +38 -18
  103. package/lib/ini.js +36 -5
  104. package/lib/inventory.d.ts +32 -23
  105. package/lib/inventory.js +37 -4
  106. package/lib/java/java-project.js +26 -4
  107. package/lib/java/junit.js +2 -4
  108. package/lib/java/maven-compile.js +2 -4
  109. package/lib/java/maven-packaging.js +6 -4
  110. package/lib/java/maven-sample.js +2 -4
  111. package/lib/java/pom.js +45 -12
  112. package/lib/java/projenrc.js +10 -4
  113. package/lib/javascript/biome/biome.js +48 -6
  114. package/lib/javascript/bundler.d.ts +0 -8
  115. package/lib/javascript/bundler.js +48 -11
  116. package/lib/javascript/eslint.d.ts +0 -13
  117. package/lib/javascript/eslint.js +38 -37
  118. package/lib/javascript/index.js +24 -2
  119. package/lib/javascript/jest.d.ts +0 -20
  120. package/lib/javascript/jest.js +71 -15
  121. package/lib/javascript/license-checker.js +3 -4
  122. package/lib/javascript/node-package.d.ts +0 -28
  123. package/lib/javascript/node-package.js +136 -38
  124. package/lib/javascript/node-project.d.ts +5 -76
  125. package/lib/javascript/node-project.js +88 -81
  126. package/lib/javascript/npm-config.js +7 -9
  127. package/lib/javascript/prettier.js +16 -4
  128. package/lib/javascript/projenrc.js +3 -4
  129. package/lib/javascript/render-options.d.ts +2 -2
  130. package/lib/javascript/render-options.js +36 -5
  131. package/lib/javascript/typescript-config.js +45 -8
  132. package/lib/javascript/upgrade-dependencies.js +56 -36
  133. package/lib/javascript/util.js +35 -2
  134. package/lib/javascript/yarnrc.d.ts +1 -28
  135. package/lib/javascript/yarnrc.js +3 -45
  136. package/lib/json-patch.js +3 -4
  137. package/lib/json.js +4 -5
  138. package/lib/license.js +37 -5
  139. package/lib/logger.js +14 -11
  140. package/lib/logging.js +10 -7
  141. package/lib/makefile.js +7 -4
  142. package/lib/object-file.js +19 -4
  143. package/lib/project-build.js +26 -4
  144. package/lib/project-tree.js +3 -4
  145. package/lib/project.d.ts +0 -35
  146. package/lib/project.js +105 -58
  147. package/lib/projects.js +37 -6
  148. package/lib/projenrc-json.d.ts +0 -10
  149. package/lib/projenrc-json.js +4 -13
  150. package/lib/projenrc.js +2 -4
  151. package/lib/python/index.js +24 -2
  152. package/lib/python/pip.js +5 -4
  153. package/lib/python/poetry.js +63 -7
  154. package/lib/python/projenrc.js +10 -4
  155. package/lib/python/pyproject-toml-file.js +2 -4
  156. package/lib/python/pytest-sample.js +2 -4
  157. package/lib/python/pytest.d.ts +0 -12
  158. package/lib/python/pytest.js +3 -5
  159. package/lib/python/python-project.js +33 -10
  160. package/lib/python/python-sample.js +2 -4
  161. package/lib/python/requirements-file.js +4 -5
  162. package/lib/python/setuppy.d.ts +0 -8
  163. package/lib/python/setuppy.js +3 -4
  164. package/lib/python/setuptools.js +8 -4
  165. package/lib/python/uv.js +11 -4
  166. package/lib/python/venv.js +45 -6
  167. package/lib/readme.js +2 -4
  168. package/lib/release/bump-version.js +36 -3
  169. package/lib/release/bump-version.task.js +35 -2
  170. package/lib/release/commit-tag-version.js +39 -3
  171. package/lib/release/publisher.d.ts +0 -49
  172. package/lib/release/publisher.js +24 -22
  173. package/lib/release/release-trigger.js +33 -4
  174. package/lib/release/release.d.ts +0 -24
  175. package/lib/release/release.js +66 -31
  176. package/lib/release/tag-version.js +35 -2
  177. package/lib/release/update-changelog.js +36 -3
  178. package/lib/renovatebot.js +14 -4
  179. package/lib/run-projenrc-json.task.js +35 -2
  180. package/lib/run-task.cjs +12567 -271
  181. package/lib/sample-file.js +43 -9
  182. package/lib/smithy/smithy-build.js +46 -1
  183. package/lib/source-code.js +6 -5
  184. package/lib/task-runner.d.ts +25 -0
  185. package/lib/task-runner.js +92 -0
  186. package/lib/task.d.ts +0 -7
  187. package/lib/task.js +13 -13
  188. package/lib/tasks.d.ts +5 -9
  189. package/lib/tasks.js +64 -23
  190. package/lib/testing.js +2 -4
  191. package/lib/textfile.js +3 -4
  192. package/lib/toml.js +36 -5
  193. package/lib/typescript/projenrc-ts.js +8 -4
  194. package/lib/typescript/projenrc.js +6 -4
  195. package/lib/typescript/typescript-typedoc.js +2 -4
  196. package/lib/typescript/typescript.d.ts +0 -10
  197. package/lib/typescript/typescript.js +75 -29
  198. package/lib/util/synth.js +39 -6
  199. package/lib/util.js +38 -5
  200. package/lib/version.d.ts +0 -4
  201. package/lib/version.js +24 -10
  202. package/lib/vscode/devcontainer.js +11 -4
  203. package/lib/vscode/extensions.js +17 -18
  204. package/lib/vscode/launch-config.js +5 -6
  205. package/lib/vscode/settings.js +4 -4
  206. package/lib/vscode/vscode.js +5 -4
  207. package/lib/web/next.js +38 -8
  208. package/lib/web/postcss.js +5 -4
  209. package/lib/web/react.d.ts +0 -14
  210. package/lib/web/react.js +51 -25
  211. package/lib/web/tailwind.js +4 -4
  212. package/lib/xmlfile.js +2 -4
  213. package/lib/yaml.js +40 -5
  214. package/package.json +8 -9
  215. package/lib/cli/synth.js +0 -105
  216. package/lib/cli/tasks.js +0 -71
  217. package/lib/semver.d.ts +0 -34
  218. package/lib/semver.js +0 -56
  219. package/lib/task-runtime.js +0 -317
  220. /package/lib/cli/{tasks.d.ts → cmds/run-task.d.ts} +0 -0
@@ -31,4 +31,4 @@ var AppPermission;
31
31
  AppPermission["ADMIN"] = "admin";
32
32
  })(AppPermission || (exports.AppPermission = AppPermission = {}));
33
33
  //#endregion
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVGQUF1Rjs7O0FBNFZ2Rjs7R0FFRztBQUNILElBQVksYUFTWDtBQVRELFdBQVksYUFBYTtJQUN2Qix1QkFBdUI7SUFDdkIsOEJBQWEsQ0FBQTtJQUViLHdCQUF3QjtJQUN4QixnQ0FBZSxDQUFBO0lBRWYsdUJBQXVCO0lBQ3ZCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsYUFBYSw2QkFBYixhQUFhLFFBU3hCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBV1g7QUFYRCxXQUFZLGFBQWE7SUFDdkIsd0JBQXdCO0lBQ3hCLDhCQUFhLENBQUE7SUFDYix3QkFBd0I7SUFDeEIsZ0NBQWUsQ0FBQTtJQUNmOzs7O09BSUc7SUFDSCxnQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFYVyxhQUFhLDZCQUFiLGFBQWEsUUFXeEI7QUF3K0JELFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnNcblxuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBqb2IgZGlzcGxheWVkIG9uIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgYW55IGpvYnMgdGhhdCBtdXN0IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBiZWZvcmUgdGhpcyBqb2Igd2lsbFxuICAgKiBydW4uIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBJZiBhIGpvYiBmYWlscywgYWxsIGpvYnNcbiAgICogdGhhdCBuZWVkIGl0IGFyZSBza2lwcGVkIHVubGVzcyB0aGUgam9icyB1c2UgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAqIHRoYXQgY2F1c2VzIHRoZSBqb2IgdG8gY29udGludWUuXG4gICAqL1xuICByZWFkb25seSBuZWVkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIG1vZGlmeSB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBncmFudGVkIHRvIHRoZSBHSVRIVUJfVE9LRU4sIGFkZGluZ1xuICAgKiBvciByZW1vdmluZyBhY2Nlc3MgYXMgcmVxdWlyZWQsIHNvIHRoYXQgeW91IG9ubHkgYWxsb3cgdGhlIG1pbmltdW0gcmVxdWlyZWRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBVc2UgYHsgY29udGVudHM6IFJFQUQgfWAgaWYgeW91ciBqb2Igb25seSBuZWVkcyB0byBjbG9uZSBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGludGVudGlvbmFsbHkgYSByZXF1aXJlZCBmaWVsZCBzaW5jZSBpdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0b1xuICAgKiBhbGxvdyB3b3JrZmxvd3MgdG8gcnVuIGluIEdpdEh1YiByZXBvc2l0b3JpZXMgd2l0aCByZXN0cmljdGVkIGRlZmF1bHRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uLWluLWEtd29ya2Zsb3cjcGVybWlzc2lvbnMtZm9yLXRoZS1naXRodWJfdG9rZW5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBKb2JQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogQ29uY3VycmVuY3kgZW5zdXJlcyB0aGF0IG9ubHkgYSBzaW5nbGUgam9iIG9yIHdvcmtmbG93IHVzaW5nIHRoZSBzYW1lXG4gICAqIGNvbmN1cnJlbmN5IGdyb3VwIHdpbGwgcnVuIGF0IGEgdGltZS4gQSBjb25jdXJyZW5jeSBncm91cCBjYW4gYmUgYW55XG4gICAqIHN0cmluZyBvciBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBjYW4gdXNlIGFueSBjb250ZXh0IGV4Y2VwdCBmb3IgdGhlXG4gICAqIHNlY3JldHMgY29udGV4dC5cbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgaWYgY29uZGl0aW9uYWwgdG8gcHJldmVudCBhIGpvYiBmcm9tIHJ1bm5pbmcgdW5sZXNzIGFcbiAgICogY29uZGl0aW9uIGlzIG1ldC4gWW91IGNhbiB1c2UgYW55IHN1cHBvcnRlZCBjb250ZXh0IGFuZCBleHByZXNzaW9uIHRvXG4gICAqIGNyZWF0ZSBhIGNvbmRpdGlvbmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAgICogdmFyaWF0aW9ucyB0byBydW4gZWFjaCBqb2IgaW4uXG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneT86IEpvYlN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IEpvYiBjYWxsaW5nIGEgcmV1c2FibGUgd29ya2Zsb3dcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cgZXh0ZW5kcyBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBvZiBhIHJldXNhYmxlIHdvcmtmbG93IGZpbGUgdG8gcnVuIGFzIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgam9iIGlzIHVzZWQgdG8gY2FsbCBhIHJldXNhYmxlIHdvcmtmbG93LCB5b3UgY2FuIHVzZSB3aXRoIHRvXG4gICAqIHByb3ZpZGUgYSBtYXAgb2YgaW5wdXRzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGVkIHdvcmtmbG93LlxuICAgKlxuICAgKiBBbGxvd2VkIGV4cHJlc3Npb24gY29udGV4dHM6IGBnaXRodWJgLCBhbmQgYG5lZWRzYC5cbiAgICovXG4gIHJlYWRvbmx5IHdpdGg/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcblxuICAvKipcbiAgICogV2hlbiBhIGpvYiBpcyB1c2VkIHRvIGNhbGwgYSByZXVzYWJsZSB3b3JrZmxvdywgeW91IGNhbiB1c2Ugc2VjcmV0cyB0b1xuICAgKiBwcm92aWRlIGEgbWFwIG9mIHNlY3JldHMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3cuXG4gICAqXG4gICAqIFVzZSB0aGUgJ2luaGVyaXQnIGtleXdvcmQgdG8gcGFzcyBhbGwgdGhlIGNhbGxpbmcgd29ya2Zsb3cncyBzZWNyZXRzIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3dcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IGpvYiBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYiBleHRlbmRzIENvbW1vbkpvYkRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbWFjaGluZSB0byBydW4gdGhlIGpvYiBvbi4gVGhlIG1hY2hpbmUgY2FuIGJlIGVpdGhlciBhXG4gICAqIEdpdEh1Yi1ob3N0ZWQgcnVubmVyIG9yIGEgc2VsZi1ob3N0ZWQgcnVubmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqL1xuICByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2l0aHViIFJ1bm5lciBHcm91cCBzZWxlY3Rpb24gb3B0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgR3JvdXAgYnkgbmFtZSBhbmQvb3IgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGpvYiBjb250YWlucyBhIHNlcXVlbmNlIG9mIHRhc2tzIGNhbGxlZCBzdGVwcy4gU3RlcHMgY2FuIHJ1biBjb21tYW5kcyxcbiAgICogcnVuIHNldHVwIHRhc2tzLCBvciBydW4gYW4gYWN0aW9uIGluIHlvdXIgcmVwb3NpdG9yeSwgYSBwdWJsaWMgcmVwb3NpdG9yeSxcbiAgICogb3IgYW4gYWN0aW9uIHB1Ymxpc2hlZCBpbiBhIERvY2tlciByZWdpc3RyeS4gTm90IGFsbCBzdGVwcyBydW4gYWN0aW9ucyxcbiAgICogYnV0IGFsbCBhY3Rpb25zIHJ1biBhcyBhIHN0ZXAuIEVhY2ggc3RlcCBydW5zIGluIGl0cyBvd24gcHJvY2VzcyBpbiB0aGVcbiAgICogcnVubmVyIGVudmlyb25tZW50IGFuZCBoYXMgYWNjZXNzIHRvIHRoZSB3b3Jrc3BhY2UgYW5kIGZpbGVzeXN0ZW0uXG4gICAqIEJlY2F1c2Ugc3RlcHMgcnVuIGluIHRoZWlyIG93biBwcm9jZXNzLCBjaGFuZ2VzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiBhcmUgbm90IHByZXNlcnZlZCBiZXR3ZWVuIHN0ZXBzLiBHaXRIdWIgcHJvdmlkZXMgYnVpbHQtaW4gc3RlcHMgdG8gc2V0IHVwXG4gICAqIGFuZCBjb21wbGV0ZSBhIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHRoZSBqb2IgcmVmZXJlbmNlcy4gQWxsIGVudmlyb25tZW50IHByb3RlY3Rpb24gcnVsZXNcbiAgICogbXVzdCBwYXNzIGJlZm9yZSBhIGpvYiByZWZlcmVuY2luZyB0aGUgZW52aXJvbm1lbnQgaXMgc2VudCB0byBhIHJ1bm5lci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS9lbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogdW5rbm93bjtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb3V0cHV0cyBmb3IgYSBqb2IuIEpvYiBvdXRwdXRzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGRvd25zdHJlYW1cbiAgICogam9icyB0aGF0IGRlcGVuZCBvbiB0aGlzIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCBKb2JTdGVwT3V0cHV0PjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBhbGwgc3RlcHMgaW4gdGhlXG4gICAqIGpvYi4gWW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBlbnRpcmUgd29ya2Zsb3cgb3IgYW5cbiAgICogaW5kaXZpZHVhbCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IHdpbGwgYXBwbHkgdG8gYWxsIHN0ZXBzIGluIHRoZSBqb2IuIFlvdVxuICAgKiBjYW4gYWxzbyBzZXQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGVudGlyZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogSm9iRGVmYXVsdHM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaW51dGVzIHRvIGxldCBhIGpvYiBydW4gYmVmb3JlIEdpdEh1YlxuICAgKiBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDM2MFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dE1pbnV0ZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFByZXZlbnRzIGEgd29ya2Zsb3cgcnVuIGZyb20gZmFpbGluZyB3aGVuIGEgam9iIGZhaWxzLiBTZXQgdG8gdHJ1ZSB0b1xuICAgKiBhbGxvdyBhIHdvcmtmbG93IHJ1biB0byBwYXNzIHdoZW4gdGhpcyBqb2IgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciB0byBydW4gYW55IHN0ZXBzIGluIGEgam9iIHRoYXQgZG9uJ3QgYWxyZWFkeSBzcGVjaWZ5IGFcbiAgICogY29udGFpbmVyLiBJZiB5b3UgaGF2ZSBzdGVwcyB0aGF0IHVzZSBib3RoIHNjcmlwdCBhbmQgY29udGFpbmVyIGFjdGlvbnMsXG4gICAqIHRoZSBjb250YWluZXIgYWN0aW9ucyB3aWxsIHJ1biBhcyBzaWJsaW5nIGNvbnRhaW5lcnMgb24gdGhlIHNhbWUgbmV0d29ya1xuICAgKiB3aXRoIHRoZSBzYW1lIHZvbHVtZSBtb3VudHMuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXI/OiBDb250YWluZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGhvc3Qgc2VydmljZSBjb250YWluZXJzIGZvciBhIGpvYiBpbiBhIHdvcmtmbG93LiBTZXJ2aWNlXG4gICAqIGNvbnRhaW5lcnMgYXJlIHVzZWZ1bCBmb3IgY3JlYXRpbmcgZGF0YWJhc2VzIG9yIGNhY2hlIHNlcnZpY2VzIGxpa2UgUmVkaXMuXG4gICAqIFRoZSBydW5uZXIgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgRG9ja2VyIG5ldHdvcmsgYW5kIG1hbmFnZXMgdGhlIGxpZmVcbiAgICogY3ljbGUgb2YgdGhlIHNlcnZpY2UgY29udGFpbmVycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGFpbmVyT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIFRvb2xzIHJlcXVpcmVkIGZvciB0aGlzIGpvYi4gVHJhbnNsYXRlcyBpbnRvIGBhY3Rpb25zL3NldHVwLXh4eGAgc3RlcHMgYXRcbiAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbHM/OiBUb29scztcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgdG9vbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHMge1xuICAvKipcbiAgICogU2V0dXAgamF2YS5cbiAgICogQGRlZmF1bHQgLSBub3QgaW5zdGFsbGVkXG4gICAqL1xuICByZWFkb25seSBqYXZhPzogSmF2YVRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgcHl0aG9uLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbj86IFB5dGhvblRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgZ29sYW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IGdvPzogVG9vbFJlcXVpcmVtZW50O1xuXG4gIC8qKlxuICAgKiBTZXR1cCBub2RlLmpzXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZT86IFRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgLk5FVCBDb3JlXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZG90bmV0PzogVG9vbFJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIFZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xSZXF1aXJlbWVudCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IGNhY2hpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVmVyc2lvbiByZXF1aXJlbWVudCBmb3IgUHl0aG9uIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblRvb2xSZXF1aXJlbWVudCBleHRlbmRzIFRvb2xSZXF1aXJlbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSBmb3IgY2FjaGluZyAoZS5nLiBcInBpcFwiLCBcInBpcGVudlwiLCBcInBvZXRyeVwiKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgY2FjaGVgIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJzaW9uIHJlcXVpcmVtZW50IGZvciBKYXZhIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEphdmFUb29sUmVxdWlyZW1lbnQgZXh0ZW5kcyBUb29sUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIEpESyBkaXN0cmlidXRpb24gdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcImNvcnJldHRvXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIGZvciBjYWNoaW5nIChlLmcuIFwibWF2ZW5cIiwgXCJncmFkbGVcIiwgXCJzYnRcIikuXG4gICAqIFJlcXVpcmVkIHdoZW4gYGNhY2hlYCBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGF2YWlsYWJsZSBzY29wZXMgYW5kIGFjY2VzcyB2YWx1ZXMgZm9yIHdvcmtmbG93IHBlcm1pc3Npb25zLiBJZiB5b3VcbiAqIHNwZWNpZnkgdGhlIGFjY2VzcyBmb3IgYW55IG9mIHRoZXNlIHNjb3BlcywgYWxsIHRob3NlIHRoYXQgYXJlIG5vdFxuICogc3BlY2lmaWVkIGFyZSBzZXQgdG8gYEpvYlBlcm1pc3Npb24uTk9ORWAsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAqIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL2NvbnRyb2xsaW5nLXBlcm1pc3Npb25zLWZvci1naXRodWJfdG9rZW4jZGVmaW5pbmctYWNjZXNzLWZvci10aGUtZ2l0aHViX3Rva2VuLXBlcm1pc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUGVybWlzc2lvbnMge1xuICByZWFkb25seSBhY3Rpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgYXR0ZXN0YXRpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY2hlY2tzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY29udGVudHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkZXBsb3ltZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGlkVG9rZW4/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBtb2RlbHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkaXNjdXNzaW9ucz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBwdWxsUmVxdWVzdHM/OiBKb2JQZXJtaXNzaW9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBieSBHaXRIdWJcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlQcm9qZWN0cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNlY3VyaXR5RXZlbnRzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgc3RhdHVzZXM/OiBKb2JQZXJtaXNzaW9uO1xufVxuXG4vKipcbiAqIFRoZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUgdG8gYSBHaXRIdWIgQXBwLlxuICpcbiAqIFR5cGljYWxseSBhIHRva2VuIGZvciBhIEdpdEh1YiBBcHAgaGFzIGFsbCB0aGUgYXZhaWxhYmxlIHNjb3Blcy9wZXJtaXNzaW9ucyBhdmFpbGFibGUgdG8gdGhlIGFwcFxuICogaXRzZWxmOyBob3dldmVyLCBhIG1vcmUgbGltaXRlZCBzZXQgb2YgcGVybWlzc2lvbnMgY2FuIGJlIHNwZWNpZmllZC4gV2hlbiBwZXJtaXNzaW9ucyBhcmUgcHJvdmlkZWQsXG4gKiAqKm9ubHkqKiB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb25zIGFyZSBncmFudGVkIHRvIHRoZSB0b2tlbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL3Jlc3QvYXBwcy9hcHBzP2FwaVZlcnNpb249MjAyMi0xMS0yOCNjcmVhdGUtYW4taW5zdGFsbGF0aW9uLWFjY2Vzcy10b2tlbi1mb3ItYW4tYXBwXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hY3Rpb25zL2NyZWF0ZS1naXRodWItYXBwLXRva2VuL2Jsb2IvbWFpbi9hY3Rpb24ueW1sI0wyOFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcFBlcm1pc3Npb25zIHtcbiAgcmVhZG9ubHkgYWN0aW9ucz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGF0dGVzdGF0aW9ucz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGFkbWluaXN0cmF0aW9uPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY2hlY2tzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY29kZXNwYWNlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNvbnRlbnRzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZGVwZW5kYWJvdFNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBkZXBsb3ltZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGVtYWlsQWRkcmVzc2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnRzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZm9sbG93ZXJzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZ2l0U3NoS2V5cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGdwZ0tleXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBpbnRlcmFjdGlvbkxpbWl0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGlzc3Vlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG1lbWJlcnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkFkbWluaXN0cmF0aW9uPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uQW5ub3VuY2VtZW50QmFubmVycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkNvcGlsb3RTZWF0TWFuYWdlbWVudD86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkN1c3RvbU9yZ1JvbGVzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uQ3VzdG9tUHJvcGVydGllcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkN1c3RvbVJvbGVzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uRXZlbnRzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uSG9va3M/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QYWNrYWdlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblBlcnNvbmFsQWNjZXNzVG9rZW5SZXF1ZXN0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblBlcnNvbmFsQWNjZXNzVG9rZW5zPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUGxhbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblByb2plY3RzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uU2VjcmV0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblNlbGZIb3N0ZWRSdW5uZXJzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnbmFpemF0aW9uVXNlckJsb2NraW5nPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFja2FnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBwYWdlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBwdWxsUmVxdWVzdHM/OiBBcHBQZXJtaXNzaW9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBieSBHaXRIdWJcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlBbm5vdW5jZW1lbnRCYW5uZXJzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeUN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5SG9va3M/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5UHJvamVjdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWNyZXRTY2FubmluZ0FsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNpbmdsZUZpbGU/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzdGFycmluZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdGVhbURpc2N1c3Npb25zPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eUFsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IEFwcFBlcm1pc3Npb247XG59XG5cbi8qKlxuICogQWNjZXNzIGxldmVsIGZvciB3b3JrZmxvdyBwZXJtaXNzaW9uIHNjb3Blcy5cbiAqL1xuZXhwb3J0IGVudW0gSm9iUGVybWlzc2lvbiB7XG4gIC8qKiBSZWFkLW9ubHkgYWNjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcblxuICAvKiogUmVhZC13cml0ZSBhY2Nlc3MgKi9cbiAgV1JJVEUgPSBcIndyaXRlXCIsXG5cbiAgLyoqIE5vIGFjY2VzcyBhdCBhbGwgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIFRoZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUgZm9yIGFuIGFjY2VzcyB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwLlxuICovXG5leHBvcnQgZW51bSBBcHBQZXJtaXNzaW9uIHtcbiAgLyoqIFJlYWQtb25seSBhY2NjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcbiAgLyoqIFJlYWQtd3JpdGUgYWNjZXNzICovXG4gIFdSSVRFID0gXCJ3cml0ZVwiLFxuICAvKipcbiAgICogUmVhZC13cml0ZSBhbmQgYWRtaW4gYWNjZXNzLlxuICAgKlxuICAgKiBOb3QgYWxsIHBlcm1pc3Npb25zIHN1cHBvcnQgYGFkbWluYC5cbiAgICovXG4gIEFETUlOID0gXCJhZG1pblwiLFxufVxuXG4vKipcbiAqIEFuIG91dHB1dCBiaW5kaW5nIGZvciBhIGpvYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JTdGVwT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc3RlcCB0aGF0IGV4cG9zZXMgdGhlIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iIG91dHB1dCB0aGF0IGlzIGJlaW5nIGJvdW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBzdGVwcyBpbiB0aGUgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkRlZmF1bHRzIHtcbiAgLyoqIERlZmF1bHQgcnVuIHNldHRpbmdzLiAqL1xuICByZWFkb25seSBydW4/OiBSdW5TZXR0aW5ncztcbn1cblxuLyoqXG4gKiBSdW4gc2V0dGluZ3MgZm9yIGEgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoaWNoIHNoZWxsIHRvIHVzZSBmb3IgcnVubmluZyB0aGUgc3RlcC5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJiYXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JraW5nIGRpcmVjdG9yeSB0byB1c2Ugd2hlbiBydW5uaW5nIHRoZSBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWVsZHMgdGhhdCBkZXNjcmliZSB0aGUgSG93LCBXaHksIFdoZW4sIGFuZCBXaG8gb2YgYSBTdGVwLlxuICogVGhlc2UgZmllbGRzIGNhbiBoYXZlIG5vbmUgcHJlc2VudCwgYnV0IGNhbiBiZSBwcmVzZW50IG9uIGV2ZXJ5IFN0ZXAsIGFuZCBoYXZlIG5vIGVmZmVjdCBvbiBvbmUgYW5vdGhlci5cbiAqXG4gKiBUaGlzIHN0YW5kcyBpbiBjb250cmFzdCB0byB0aGUgQ29tbWFuZCAobm9uLUNvbmZpZ3VyYXRpb24pIGZpZWxkcywgd2hpY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIGRlc2NyaWJlIHRoZSBXaGF0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLiBZb3UgY2FuIHVzZSB0aGUgaWQgdG8gcmVmZXJlbmNlIHRoZVxuICAgKiBzdGVwIGluIGNvbnRleHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBpZiBjb25kaXRpb25hbCB0byBwcmV2ZW50IGEgam9iIGZyb20gcnVubmluZyB1bmxlc3MgYVxuICAgKiBjb25kaXRpb24gaXMgbWV0LiBZb3UgY2FuIHVzZSBhbnkgc3VwcG9ydGVkIGNvbnRleHQgYW5kIGV4cHJlc3Npb24gdG9cbiAgICogY3JlYXRlIGEgY29uZGl0aW9uYWwuXG4gICAqL1xuICByZWFkb25seSBpZj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB5b3VyIHN0ZXAgdG8gZGlzcGxheSBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igc3RlcHMgdG8gdXNlIGluIHRoZSBydW5uZXIgZW52aXJvbm1lbnQuXG4gICAqIFlvdSBjYW4gYWxzbyBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZW50aXJlIHdvcmtmbG93IG9yIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgd29ya2luZyBkaXJlY3RvcnkgZm9yIGEgc3RlcC5cbiAgICogT3ZlcnJpZGVzIGEgam9iJ3Mgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgc2hlbGwgc2V0dGluZ3MgaW4gdGhlIHJ1bm5lcidzIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSBqb2IncyBkZWZhdWx0LlxuICAgKlxuICAgKiBSZWZlciB0byBHaXRIdWIgZG9jdW1lbnRhdGlvbiBmb3IgYWxsb3dlZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc3NoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIGNvbnRhaW5zIHRoZSBmaWVsZHMgdGhhdCBhcmUgY29tbW9uIGFtb25nc3QgYm90aDpcbiAqIC0gSm9iU3RlcCwgd2hpY2ggaXMgYSBzdGVwIHRoYXQgaXMgcGFydCBvZiBhIEpvYiBpbiBHaXRodWIgQWN0aW9ucy4gVGhpcyBpcyBieSBmYXIgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlLlxuICogLSBUaGUgbWV0YWRhdGEgZmlsZSBgYWN0aW9uLnlhbWxgIHRoYXQgaXMgdXNlZCB0byBkZWZpbmUgYW4gQWN0aW9uIHdoZW4geW91IGFyZSBjcmVhdGluZyBvbmUuIEFzIGluLCBpZiB5b3Ugd2VyZSBjcmVhdGluZyBhbiBBY3Rpb24gdG8gYmUgdXNlZCBpbiBhIEpvYlN0ZXAuXG4gKiBUaGVyZSBpcyBzb21lIG92ZXJsYXAgYmV0d2VlbiB0aGUgdHdvLCBhbmQgdGhpcyBjYXB0dXJlcyB0aGF0IG92ZXJsYXAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2NyZWF0aW5nLWFjdGlvbnMvbWV0YWRhdGEtc3ludGF4LWZvci1naXRodWItYWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXAgZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBTZWxlY3RzIGFuIGFjdGlvbiB0byBydW4gYXMgcGFydCBvZiBhIHN0ZXAgaW4geW91ciBqb2IuIEFuIGFjdGlvbiBpcyBhXG4gICAqIHJldXNhYmxlIHVuaXQgb2YgY29kZS4gWW91IGNhbiB1c2UgYW4gYWN0aW9uIGRlZmluZWQgaW4gdGhlIHNhbWVcbiAgICogcmVwb3NpdG9yeSBhcyB0aGUgd29ya2Zsb3csIGEgcHVibGljIHJlcG9zaXRvcnksIG9yIGluIGEgcHVibGlzaGVkIERvY2tlclxuICAgKiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSB1c2VzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW5zIGNvbW1hbmQtbGluZSBwcm9ncmFtcyB1c2luZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHNoZWxsLiBJZiB5b3UgZG9cbiAgICogbm90IHByb3ZpZGUgYSBuYW1lLCB0aGUgc3RlcCBuYW1lIHdpbGwgZGVmYXVsdCB0byB0aGUgdGV4dCBzcGVjaWZpZWQgaW5cbiAgICogdGhlIHJ1biBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBhY3Rpb24uIEVhY2ggaW5wdXQgcGFyYW1ldGVyXG4gICAqIGlzIGEga2V5L3ZhbHVlIHBhaXIuIElucHV0IHBhcmFtZXRlcnMgYXJlIHNldCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIFRoZSB2YXJpYWJsZSBpcyBwcmVmaXhlZCB3aXRoIElOUFVUXyBhbmQgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuXG4gICAqL1xuICByZWFkb25seSB3aXRoPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBUaGVzZSBzZXR0aW5ncyBhcmUgdW5pcXVlIHRvIGEgSm9iU3RlcCBmcm9tIHRoZSBmaWVsZHMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWV0YWRhdGEgYWN0aW9uLnlhbWwgZmlsZSBwcmVzZW50IGluIHdoZW4gY3JlYXRpbmcgYSBuZXcgR2l0SHViIEFjdGlvbi5cbiAqIFRoZXNlIGZpZWxkcyBhcmUgbm90IHByZXNlbnQgaW4gYWN0aW9uLnltbCwgYnV0IGFyZSBpbiBKb2JTdGVwLCB3aGljaCBhcmUgdXNpbmcgd2hlbiBjcmVhdGluZyB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iU3RlcENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBQcmV2ZW50cyBhIGpvYiBmcm9tIGZhaWxpbmcgd2hlbiBhIHN0ZXAgZmFpbHMuIFNldCB0byB0cnVlIHRvIGFsbG93IGEgam9iXG4gICAqIHRvIHBhc3Mgd2hlbiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWludXRlcyB0byBydW4gdGhlIHN0ZXAgYmVmb3JlIGtpbGxpbmcgdGhlIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0TWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBKb2JTdGVwcyBydW4gYXMgcGFydCBvZiBhIEdpdEh1YiBXb3JrZmxvdyBKb2IuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlN0ZXAgZXh0ZW5kcyBTdGVwLCBKb2JTdGVwQ29uZmlndXJhdGlvbiB7fVxuXG4vKipcbiAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAqIHZhcmlhdGlvbnMgdG8gcnVuIGVhY2ggam9iIGluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFlvdSBjYW4gZGVmaW5lIGEgbWF0cml4IG9mIGRpZmZlcmVudCBqb2IgY29uZmlndXJhdGlvbnMuIEEgbWF0cml4IGFsbG93c1xuICAgKiB5b3UgdG8gY3JlYXRlIG11bHRpcGxlIGpvYnMgYnkgcGVyZm9ybWluZyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gaW4gYVxuICAgKiBzaW5nbGUgam9iIGRlZmluaXRpb24uIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBhIG1hdHJpeCB0byBjcmVhdGUgam9ic1xuICAgKiBmb3IgbW9yZSB0aGFuIG9uZSBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBhIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvcGVyYXRpbmdcbiAgICogc3lzdGVtLCBvciB0b29sLiBBIG1hdHJpeCByZXVzZXMgdGhlIGpvYidzIGNvbmZpZ3VyYXRpb24gYW5kIGNyZWF0ZXMgYVxuICAgKiBqb2IgZm9yIGVhY2ggbWF0cml4IHlvdSBjb25maWd1cmUuXG4gICAqXG4gICAqIEEgam9iIG1hdHJpeCBjYW4gZ2VuZXJhdGUgYSBtYXhpbXVtIG9mIDI1NiBqb2JzIHBlciB3b3JrZmxvdyBydW4uIFRoaXNcbiAgICogbGltaXQgYWxzbyBhcHBsaWVzIHRvIHNlbGYtaG9zdGVkIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBtYXRyaXg/OiBKb2JNYXRyaXg7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIEdpdEh1YiBjYW5jZWxzIGFsbCBpbi1wcm9ncmVzcyBqb2JzIGlmIGFueSBtYXRyaXggam9iXG4gICAqIGZhaWxzLiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICByZWFkb25seSBmYWlsRmFzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBqb2JzIHRoYXQgY2FuIHJ1biBzaW11bHRhbmVvdXNseSB3aGVuIHVzaW5nIGFcbiAgICogbWF0cml4IGpvYiBzdHJhdGVneS4gQnkgZGVmYXVsdCwgR2l0SHViIHdpbGwgbWF4aW1pemUgdGhlIG51bWJlciBvZiBqb2JzXG4gICAqIHJ1biBpbiBwYXJhbGxlbCBkZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBydW5uZXJzIG9uIEdpdEh1Yi1ob3N0ZWRcbiAgICogdmlydHVhbCBtYWNoaW5lcy5cbiAgICovXG4gIHJlYWRvbmx5IG1heFBhcmFsbGVsPzogbnVtYmVyO1xufVxuXG50eXBlIEpvYk1hdHJpeFZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblxuLyoqXG4gKiBBIGpvYiBtYXRyaXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iTWF0cml4IHtcbiAgLyoqXG4gICAqIEVhY2ggb3B0aW9uIHlvdSBkZWZpbmUgaW4gdGhlIG1hdHJpeCBoYXMgYSBrZXkgYW5kIHZhbHVlLiBUaGUga2V5cyB5b3VcbiAgICogZGVmaW5lIGJlY29tZSBwcm9wZXJ0aWVzIGluIHRoZSBtYXRyaXggY29udGV4dCBhbmQgeW91IGNhbiByZWZlcmVuY2UgdGhlXG4gICAqIHByb3BlcnR5IGluIG90aGVyIGFyZWFzIG9mIHlvdXIgd29ya2Zsb3cgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZpbmVcbiAgICogdGhlIGtleSBvcyB0aGF0IGNvbnRhaW5zIGFuIGFycmF5IG9mIG9wZXJhdGluZyBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGVcbiAgICogbWF0cml4Lm9zIHByb3BlcnR5IGFzIHRoZSB2YWx1ZSBvZiB0aGUgcnVucy1vbiBrZXl3b3JkIHRvIGNyZWF0ZSBhIGpvYlxuICAgKiBmb3IgZWFjaCBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgSm9iTWF0cml4VmFsdWVbXT47XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGEgYnVpbGQgbWF0cml4IGpvYiB0aGF0XG4gICAqIGFscmVhZHkgZXhpc3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBucG1cbiAgICogd2hlbiB0aGUgam9iIHRoYXQgdXNlcyB3aW5kb3dzLWxhdGVzdCBhbmQgdmVyc2lvbiA4IG9mIG5vZGUgcnVucywgeW91IGNhblxuICAgKiB1c2UgaW5jbHVkZSB0byBzcGVjaWZ5IHRoYXQgYWRkaXRpb25hbCBvcHRpb24uXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlPzogQXJyYXk8UmVjb3JkPHN0cmluZywgSm9iTWF0cml4VmFsdWU+PjtcblxuICAvKipcbiAgICogWW91IGNhbiByZW1vdmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkZWZpbmVkIGluIHRoZSBidWlsZCBtYXRyaXhcbiAgICogdXNpbmcgdGhlIGV4Y2x1ZGUgb3B0aW9uLiBVc2luZyBleGNsdWRlIHJlbW92ZXMgYSBqb2IgZGVmaW5lZCBieSB0aGVcbiAgICogYnVpbGQgbWF0cml4LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IEFycmF5PFJlY29yZDxzdHJpbmcsIEpvYk1hdHJpeFZhbHVlPj47XG59XG5cbi8qKlxuICogT3B0aW9ucyBwZXJ0YWluaW5nIHRvIGNvbnRhaW5lciBlbnZpcm9ubWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgRG9ja2VyIGltYWdlIHRvIHVzZSBhcyB0aGUgY29udGFpbmVyIHRvIHJ1biB0aGUgYWN0aW9uLiBUaGUgdmFsdWUgY2FuXG4gICAqIGJlIHRoZSBEb2NrZXIgSHViIGltYWdlIG5hbWUgb3IgYSByZWdpc3RyeSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogZiB0aGUgaW1hZ2UncyBjb250YWluZXIgcmVnaXN0cnkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gdG8gcHVsbCB0aGVcbiAgICogaW1hZ2UsIHlvdSBjYW4gdXNlIGNyZWRlbnRpYWxzIHRvIHNldCBhIG1hcCBvZiB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAgKiBUaGUgY3JlZGVudGlhbHMgYXJlIHRoZSBzYW1lIHZhbHVlcyB0aGF0IHlvdSB3b3VsZCBwcm92aWRlIHRvIHRoZSBkb2NrZXJcbiAgICogbG9naW4gY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzPzogQ29udGFpbmVyQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFNldHMgYSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSBjb250YWluZXIuXG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGFycmF5IG9mIHBvcnRzIHRvIGV4cG9zZSBvbiB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogU2V0cyBhbiBhcnJheSBvZiB2b2x1bWVzIGZvciB0aGUgY29udGFpbmVyIHRvIHVzZS4gWW91IGNhbiB1c2Ugdm9sdW1lcyB0b1xuICAgKiBzaGFyZSBkYXRhIGJldHdlZW4gc2VydmljZXMgb3Igb3RoZXIgc3RlcHMgaW4gYSBqb2IuIFlvdSBjYW4gc3BlY2lmeVxuICAgKiBuYW1lZCBEb2NrZXIgdm9sdW1lcywgYW5vbnltb3VzIERvY2tlciB2b2x1bWVzLCBvciBiaW5kIG1vdW50cyBvbiB0aGVcbiAgICogaG9zdC5cbiAgICpcbiAgICogVG8gc3BlY2lmeSBhIHZvbHVtZSwgeW91IHNwZWNpZnkgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcGF0aDpcbiAgICogYDxzb3VyY2U+OjxkZXN0aW5hdGlvblBhdGg+YC5cbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBEb2NrZXIgY29udGFpbmVyIHJlc291cmNlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9jcmVhdGUvI29wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDcmVkZW50aWFscyB0byB1c2UgdG8gYXV0aGVudGljYXRlIHRvIERvY2tlciByZWdpc3RyaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckNyZWRlbnRpYWxzIHtcbiAgLyoqIFRoZSB1c2VybmFtZS4gKi9cbiAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcblxuICAvKiogVGhlIHBhc3N3b3JkLiAqL1xuICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIHRyaWdnZXJzIGZvciBHaXRIdWIgV29ya2Zsb3dzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2UvZXZlbnRzLXRoYXQtdHJpZ2dlci13b3JrZmxvd3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VycyB7XG4gIC8vI3JlZ2lvbiBTY2hlZHVsZWQgZXZlbnRzXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNjaGVkdWxlIGEgd29ya2Zsb3cgdG8gcnVuIGF0IHNwZWNpZmljIFVUQyB0aW1lcyB1c2luZyBQT1NJWCBjcm9uXG4gICAqIHN5bnRheC4gU2NoZWR1bGVkIHdvcmtmbG93cyBydW4gb24gdGhlIGxhdGVzdCBjb21taXQgb24gdGhlIGRlZmF1bHQgb3JcbiAgICogYmFzZSBicmFuY2guIFRoZSBzaG9ydGVzdCBpbnRlcnZhbCB5b3UgY2FuIHJ1biBzY2hlZHVsZWQgd29ya2Zsb3dzIGlzXG4gICAqIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS91dGlsaXRpZXMvY3JvbnRhYi5odG1sI3RhZ18yMF8yNV8wN1xuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBDcm9uU2NoZWR1bGVPcHRpb25zW107XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNYW51YWwgZXZlbnRzXG4gIC8qKlxuICAgKiBZb3UgY2FuIGNvbmZpZ3VyZSBjdXN0b20tZGVmaW5lZCBpbnB1dCBwcm9wZXJ0aWVzLCBkZWZhdWx0IGlucHV0IHZhbHVlcyxcbiAgICogYW5kIHJlcXVpcmVkIGlucHV0cyBmb3IgdGhlIGV2ZW50IGRpcmVjdGx5IGluIHlvdXIgd29ya2Zsb3cuIFdoZW4gdGhlXG4gICAqIHdvcmtmbG93IHJ1bnMsIHlvdSBjYW4gYWNjZXNzIHRoZSBpbnB1dCB2YWx1ZXMgaW4gdGhlIGdpdGh1Yi5ldmVudC5pbnB1dHNcbiAgICogY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93RGlzcGF0Y2g/OiBXb3JrZmxvd0Rpc3BhdGNoT3B0aW9ucztcblxuICAvKipcbiAgICogWW91IGNhbiB1c2UgdGhlIEdpdEh1YiBBUEkgdG8gdHJpZ2dlciBhIHdlYmhvb2sgZXZlbnQgY2FsbGVkXG4gICAqIHJlcG9zaXRvcnlfZGlzcGF0Y2ggd2hlbiB5b3Ugd2FudCB0byB0cmlnZ2VyIGEgd29ya2Zsb3cgZm9yIGFjdGl2aXR5IHRoYXRcbiAgICogaGFwcGVucyBvdXRzaWRlIG9mIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlEaXNwYXRjaD86IFJlcG9zaXRvcnlEaXNwYXRjaE9wdGlvbnM7XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBXb3JrZmxvdyByZXVzZSBldmVudHNcbiAgLyoqXG4gICAqIENhbiBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHdvcmtmbG93XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9sZWFybi1naXRodWItYWN0aW9ucy9yZXVzaW5nLXdvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dDYWxsPzogV29ya2Zsb3dDYWxsT3B0aW9ucztcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFdlYmhvb2sgZXZlbnRzXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgYnJhbmNoX3Byb3RlY3Rpb25fcnVsZSBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBicmFuY2hQcm90ZWN0aW9uUnVsZT86IEJyYW5jaFByb3RlY3Rpb25SdWxlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGNoZWNrX3J1biBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBjaGVja1J1bj86IENoZWNrUnVuT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGNoZWNrX3N1aXRlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrU3VpdGU/OiBDaGVja1N1aXRlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBjcmVhdGVzIGEgYnJhbmNoIG9yIHRhZywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIGNyZWF0ZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IENyZWF0ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHNvbWVvbmUgZGVsZXRlcyBhIGJyYW5jaCBvciB0YWcsIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBkZWxldGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBkZWxldGU/OiBEZWxldGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIGNyZWF0ZXMgYSBkZXBsb3ltZW50LCB3aGljaCB0cmlnZ2Vyc1xuICAgKiB0aGUgZGVwbG95bWVudCBldmVudC4gRGVwbG95bWVudHMgY3JlYXRlZCB3aXRoIGEgY29tbWl0IFNIQSBtYXkgbm90IGhhdmVcbiAgICogYSBHaXQgcmVmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudD86IERlcGxveW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBhIHRoaXJkIHBhcnR5IHByb3ZpZGVzIGEgZGVwbG95bWVudCBzdGF0dXMsXG4gICAqIHdoaWNoIHRyaWdnZXJzIHRoZSBkZXBsb3ltZW50X3N0YXR1cyBldmVudC4gRGVwbG95bWVudHMgY3JlYXRlZCB3aXRoIGFcbiAgICogY29tbWl0IFNIQSBtYXkgbm90IGhhdmUgYSBHaXQgcmVmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudFN0YXR1cz86IERlcGxveW1lbnRTdGF0dXNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgZGlzY3Vzc2lvbiBldmVudCBvY2N1cnMuIE1vcmUgdGhhbiBvbmUgYWN0aXZpdHkgdHlwZSB0cmlnZ2VycyB0aGlzIGV2ZW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2dyYXBocWwvZ3VpZGVzL3VzaW5nLXRoZS1ncmFwaHFsLWFwaS1mb3ItZGlzY3Vzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2N1c3Npb24/OiBEaXNjdXNzaW9uT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGRpc2N1c3Npb25fY29tbWVudCBldmVudCBvY2N1cnMuIE1vcmUgdGhhbiBvbmUgYWN0aXZpdHkgdHlwZSB0cmlnZ2VycyB0aGlzIGV2ZW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2dyYXBocWwvZ3VpZGVzL3VzaW5nLXRoZS1ncmFwaHFsLWFwaS1mb3ItZGlzY3Vzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2N1c3Npb25Db21tZW50PzogRGlzY3Vzc2lvbkNvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB3aGVuIHNvbWVvbmUgZm9ya3MgYSByZXBvc2l0b3J5LCB3aGljaFxuICAgKiB0cmlnZ2VycyB0aGUgZm9yayBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcms/OiBGb3JrT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gc29tZW9uZSBjcmVhdGVzIG9yIHVwZGF0ZXMgYSBXaWtpIHBhZ2UsIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBnb2xsdW0gZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBnb2xsdW0/OiBHb2xsdW1PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgaXNzdWVfY29tbWVudCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBpc3N1ZUNvbW1lbnQ/OiBJc3N1ZUNvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgaXNzdWVzIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGlzc3Vlcz86IElzc3Vlc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBsYWJlbCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbD86IExhYmVsT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gYSBwdWxsIHJlcXVlc3QgaXMgYWRkZWQgdG8gYSBtZXJnZSBxdWV1ZSwgd2hpY2hcbiAgICogYWRkcyB0aGUgcHVsbCByZXF1ZXN0IHRvIGEgbWVyZ2UgZ3JvdXAuXG4gICAqXG4gICAqIEBzdGFiaWxpdHkgZXhwZXJpbWVudGFsXG4gICAqL1xuICByZWFkb25seSBtZXJnZUdyb3VwPzogTWVyZ2VHcm91cE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBtaWxlc3RvbmUgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWlsZXN0b25lPzogTWlsZXN0b25lT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBwdXNoZXMgdG8gYSBHaXRIdWIgUGFnZXMtZW5hYmxlZFxuICAgKiBicmFuY2gsIHdoaWNoIHRyaWdnZXJzIHRoZSBwYWdlX2J1aWxkIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFnZUJ1aWxkPzogUGFnZUJ1aWxkT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHByb2plY3QgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IFByb2plY3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdF9jYXJkIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RDYXJkPzogUHJvamVjdENhcmRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdF9jb2x1bW4gZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdENvbHVtbj86IFByb2plY3RDb2x1bW5PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIG1ha2VzIGEgcHJpdmF0ZSByZXBvc2l0b3J5IHB1YmxpYyxcbiAgICogd2hpY2ggdHJpZ2dlcnMgdGhlIHB1YmxpYyBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpYz86IFB1YmxpY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwdWxsX3JlcXVlc3QgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3Q/OiBQdWxsUmVxdWVzdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwdWxsX3JlcXVlc3RfcmV2aWV3IGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0UmV2aWV3PzogUHVsbFJlcXVlc3RSZXZpZXdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBhIGNvbW1lbnQgb24gYSBwdWxsIHJlcXVlc3QncyB1bmlmaWVkIGRpZmYgaXNcbiAgICogbW9kaWZpZWQsIHdoaWNoIHRyaWdnZXJzIHRoZSBwdWxsX3JlcXVlc3RfcmV2aWV3X2NvbW1lbnQgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ/OiBQdWxsUmVxdWVzdFJldmlld0NvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2Ugb2YgdGhlIHB1bGwgcmVxdWVzdCwgcmF0aGVyXG4gICAqIHRoYW4gaW4gdGhlIG1lcmdlIGNvbW1pdCBhcyB0aGUgcHVsbF9yZXF1ZXN0IGV2ZW50IGRvZXMuIFRoaXMgcHJldmVudHNcbiAgICogZXhlY3V0aW5nIHVuc2FmZSB3b3JrZmxvdyBjb2RlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHB1bGwgcmVxdWVzdCB0aGF0XG4gICAqIGNvdWxkIGFsdGVyIHlvdXIgcmVwb3NpdG9yeSBvciBzdGVhbCBhbnkgc2VjcmV0cyB5b3UgdXNlIGluIHlvdXIgd29ya2Zsb3cuXG4gICAqIFRoaXMgZXZlbnQgYWxsb3dzIHlvdSB0byBkbyB0aGluZ3MgbGlrZSBjcmVhdGUgd29ya2Zsb3dzIHRoYXQgbGFiZWwgYW5kXG4gICAqIGNvbW1lbnQgb24gcHVsbCByZXF1ZXN0cyBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIGV2ZW50IHBheWxvYWQuXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoZSBgcHVsbF9yZXF1ZXN0X3RhcmdldGAgZXZlbnQgaXMgZ3JhbnRlZCByZWFkL3dyaXRlIHJlcG9zaXRvcnlcbiAgICogdG9rZW4gYW5kIGNhbiBhY2Nlc3Mgc2VjcmV0cywgZXZlbiB3aGVuIGl0IGlzIHRyaWdnZXJlZCBmcm9tIGEgZm9yay5cbiAgICogQWx0aG91Z2ggdGhlIHdvcmtmbG93IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2Ugb2YgdGhlIHB1bGwgcmVxdWVzdCxcbiAgICogeW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gbm90IGNoZWNrIG91dCwgYnVpbGQsIG9yIHJ1biB1bnRydXN0ZWRcbiAgICogY29kZSBmcm9tIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGlzIGV2ZW50LiBBZGRpdGlvbmFsbHksIGFueSBjYWNoZXNcbiAgICogc2hhcmUgdGhlIHNhbWUgc2NvcGUgYXMgdGhlIGJhc2UgYnJhbmNoLCBhbmQgdG8gaGVscCBwcmV2ZW50IGNhY2hlXG4gICAqIHBvaXNvbmluZywgeW91IHNob3VsZCBub3Qgc2F2ZSB0aGUgY2FjaGUgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0XG4gICAqIHRoZSBjYWNoZSBjb250ZW50cyB3ZXJlIGFsdGVyZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9zZWN1cml0eWxhYi5naXRodWIuY29tL3Jlc2VhcmNoL2dpdGh1Yi1hY3Rpb25zLXByZXZlbnRpbmctcHduLXJlcXVlc3RzXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRhcmdldD86IFB1bGxSZXF1ZXN0VGFyZ2V0T3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gc29tZW9uZSBwdXNoZXMgdG8gYSByZXBvc2l0b3J5IGJyYW5jaCwgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIHB1c2ggZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwdXNoPzogUHVzaE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIGEgcGFja2FnZSBpcyBwdWJsaXNoZWQgb3IgdXBkYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5UGFja2FnZT86IFJlZ2lzdHJ5UGFja2FnZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSByZWxlYXNlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2U/OiBSZWxlYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHN0YXR1cyBvZiBhIEdpdCBjb21taXQgY2hhbmdlcywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIHN0YXR1cyBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IFN0YXR1c09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSB3YXRjaCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IFdhdGNoT3B0aW9ucztcblxuICAvKipcbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiBhIHdvcmtmbG93IHJ1biBpcyByZXF1ZXN0ZWQgb3IgY29tcGxldGVkLCBhbmRcbiAgICogYWxsb3dzIHlvdSB0byBleGVjdXRlIGEgd29ya2Zsb3cgYmFzZWQgb24gdGhlIGZpbmlzaGVkIHJlc3VsdCBvZiBhbm90aGVyXG4gICAqIHdvcmtmbG93LiBBIHdvcmtmbG93IHJ1biBpcyB0cmlnZ2VyZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVzdWx0IG9mIHRoZVxuICAgKiBwcmV2aW91cyB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuPzogV29ya2Zsb3dSdW5PcHRpb25zO1xuICAvLyNlbmRyZWdpb25cbn1cblxuLyoqXG4gKiBDUk9OIHNjaGVkdWxlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JvblNjaGVkdWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS91dGlsaXRpZXMvY3JvbnRhYi5odG1sI3RhZ18yMF8yNV8wN1xuICAgKi9cbiAgcmVhZG9ubHkgY3Jvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcG9zaXRvcnkgZGlzcGF0Y2ggb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvc2l0b3J5RGlzcGF0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCcmFuY2ggUHJvdGVjdGlvbiBSdWxlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hQcm90ZWN0aW9uUnVsZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBDaGVjayBydW4gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja1J1bk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlXCIgfCBcInJlcmVxdWVzdGVkXCIgfCBcImNvbXBsZXRlZFwiIHwgXCJyZXF1ZXN0ZWRfYWN0aW9uXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBDaGVjayBzdWl0ZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tTdWl0ZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY29tcGxldGVkXCIgfCBcInJlcXVlc3RlZFwiIHwgXCJyZXJlcXVlc3RlZFwiPjtcbn1cblxuLyoqXG4gKiBEaXNjdXNzaW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImNyZWF0ZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJ0cmFuc2ZlcnJlZFwiXG4gICAgfCBcInBpbm5lZFwiXG4gICAgfCBcInVucGlubmVkXCJcbiAgICB8IFwibGFiZWxlZFwiXG4gICAgfCBcInVubGFiZWxlZFwiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwiY2F0ZWdvcnlfY2hhbmdlZFwiXG4gICAgfCBcImFuc3dlcmVkXCJcbiAgICB8IFwidW5hbnN3ZXJlZFwiXG4gID47XG59XG5cbi8qKlxuICogRGlzY3Vzc2lvbiBjb21tZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uQ29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBJc3N1ZSBjb21tZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZUNvbW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcImNyZWF0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRlbGV0ZWRcIj47XG59XG5cbi8qKlxuICogSXNzdWVzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICB8IFwib3BlbmVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiZGVsZXRlZFwiXG4gICAgfCBcInRyYW5zZmVycmVkXCJcbiAgICB8IFwicGlubmVkXCJcbiAgICB8IFwidW5waW5uZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJsb2NrZWRcIlxuICAgIHwgXCJ1bmxvY2tlZFwiXG4gICAgfCBcIm1pbGVzdG9uZWRcIlxuICAgIHwgXCJkZW1pbGVzdG9uZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIExhYmVsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBNZXJnZSBncm91cCBvcHRpb25zLlxuICpcbiAqIEBzdGFiaWxpdHkgZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VHcm91cE9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB1c2luZyB0aGUgbWVyZ2VfZ3JvdXAgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biBvbiBzcGVjaWZpYyBiYXNlIGJyYW5jaGVzLiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYnJhbmNoZXMgd2lsbFxuICAgKiB0cmlnZ2VyIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTWlsZXN0b25lIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWxlc3RvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICBcImNyZWF0ZWRcIiB8IFwiY2xvc2VkXCIgfCBcIm9wZW5lZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvamVjdCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJ1cGRhdGVkXCIgfCBcImNsb3NlZFwiIHwgXCJyZW9wZW5lZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvamVjdCBjYXJkIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0Q2FyZE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJtb3ZlZFwiIHwgXCJjb252ZXJ0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRlbGV0ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFByb2JqZWN0IGNvbHVtbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdENvbHVtbk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJ1cGRhdGVkXCIgfCBcIm1vdmVkXCIgfCBcImRlbGV0ZWRcIj47XG59XG5cbi8qKlxuICogUHVsbCByZXF1ZXN0IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsUmVxdWVzdE9wdGlvbnMgZXh0ZW5kcyBQdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJvcGVuZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcInN5bmNocm9uaXplXCJcbiAgICB8IFwicmVhZHlfZm9yX3Jldmlld1wiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwicmV2aWV3X3JlcXVlc3RlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0X3JlbW92ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFB1bGwgcmVxdWVzdCByZXZpZXcgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0UmV2aWV3T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJzdWJtaXR0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRpc21pc3NlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3QgcmV2aWV3IGNvbW1lbnQgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3QgdGFyZ2V0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVsbFJlcXVlc3RUYXJnZXRPcHRpb25zIGV4dGVuZHMgUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIHwgXCJhc3NpZ25lZFwiXG4gICAgfCBcInVuYXNzaWduZWRcIlxuICAgIHwgXCJsYWJlbGVkXCJcbiAgICB8IFwidW5sYWJlbGVkXCJcbiAgICB8IFwib3BlbmVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiY2xvc2VkXCJcbiAgICB8IFwicmVvcGVuZWRcIlxuICAgIHwgXCJzeW5jaHJvbml6ZVwiXG4gICAgfCBcInJlYWR5X2Zvcl9yZXZpZXdcIlxuICAgIHwgXCJsb2NrZWRcIlxuICAgIHwgXCJ1bmxvY2tlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0ZWRcIlxuICAgIHwgXCJyZXZpZXdfcmVxdWVzdF9yZW1vdmVkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwdXNoLWxpa2UgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1c2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgdGhlIHB1c2gsIHB1bGxfcmVxdWVzdCBhbmQgcHVsbF9yZXF1ZXN0X3RhcmdldCBldmVudHMsIHlvdSBjYW4gY29uZmlndXJlIGEgd29ya2Zsb3dcbiAgICogdG8gcnVuIG9uIHNwZWNpZmljIGJyYW5jaGVzIG9yIHRhZ3MuIEZvciBhIHB1bGxfcmVxdWVzdCBldmVudCwgb25seVxuICAgKiBicmFuY2hlcyBhbmQgdGFncyBvbiB0aGUgYmFzZSBhcmUgZXZhbHVhdGVkLiBJZiB5b3UgZGVmaW5lIG9ubHkgdGFncyBvclxuICAgKiBvbmx5IGJyYW5jaGVzLCB0aGUgd29ya2Zsb3cgd29uJ3QgcnVuIGZvciBldmVudHMgYWZmZWN0aW5nIHRoZSB1bmRlZmluZWRcbiAgICogR2l0IHJlZi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2ZpbHRlci1wYXR0ZXJuLWNoZWF0LXNoZWV0XG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBwdXNoLCBwdWxsX3JlcXVlc3QgYW5kIHB1bGxfcmVxdWVzdF90YXJnZXQgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biBvbiBzcGVjaWZpYyBicmFuY2hlcyBvciB0YWdzLiBGb3IgYSBwdWxsX3JlcXVlc3QgZXZlbnQsIG9ubHlcbiAgICogYnJhbmNoZXMgYW5kIHRhZ3Mgb24gdGhlIGJhc2UgYXJlIGV2YWx1YXRlZC4gSWYgeW91IGRlZmluZSBvbmx5IHRhZ3Mgb3JcbiAgICogb25seSBicmFuY2hlcywgdGhlIHdvcmtmbG93IHdvbid0IHJ1biBmb3IgZXZlbnRzIGFmZmVjdGluZyB0aGUgdW5kZWZpbmVkXG4gICAqIEdpdCByZWYuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2Uvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNmaWx0ZXItcGF0dGVybi1jaGVhdC1zaGVldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBwdXNoLCBwdWxsX3JlcXVlc3QgYW5kIHB1bGxfcmVxdWVzdF90YXJnZXQgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biB3aGVuIGF0IGxlYXN0IG9uZSBmaWxlIGRvZXMgbm90IG1hdGNoIHBhdGhzLWlnbm9yZSBvciBhdCBsZWFzdCBvbmVcbiAgICogbW9kaWZpZWQgZmlsZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIHBhdGhzLiBQYXRoIGZpbHRlcnMgYXJlIG5vdFxuICAgKiBldmFsdWF0ZWQgZm9yIHB1c2hlcyB0byB0YWdzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjZmlsdGVyLXBhdHRlcm4tY2hlYXQtc2hlZXRcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVnaXN0cnkgcGFja2FnZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlQYWNrYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJwdWJsaXNoZWRcIiB8IFwidXBkYXRlZFwiPjtcbn1cblxuLyoqXG4gKiBSZWxlYXNlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcInB1Ymxpc2hlZFwiXG4gICAgfCBcInVucHVibGlzaGVkXCJcbiAgICB8IFwiY3JlYXRlZFwiXG4gICAgfCBcImVkaXRlZFwiXG4gICAgfCBcImRlbGV0ZWRcIlxuICAgIHwgXCJwcmVyZWxlYXNlZFwiXG4gICAgfCBcInJlbGVhc2VkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBXYXRjaCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcInN0YXJ0ZWRcIj47XG59XG5cbi8qKlxuICogV29ya2Zsb3cgcnVuIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1J1bk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggd29ya2Zsb3cgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYW55IHdvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dzPzogQXJyYXk8c3RyaW5nPjtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcImNvbXBsZXRlZFwiIHwgXCJyZXF1ZXN0ZWRcIj47XG4gIC8qKlxuICAgKiBXaGljaCBicmFuY2hlcyBvciBicmFuY2gtaWdub3JlIHRvIGxpbWl0IHRoZSB0cmlnZ2VyIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBubyBicmFuY2ggbGltaXRzXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogVGhlIFdvcmtmbG93IGRpc3BhdGNoIGV2ZW50IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dEaXNwYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogSW5wdXRzIGZvciB0aGUgd29ya2Zsb3dfZGlzcGF0Y2ggZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBXb3JrZmxvd0Rpc3BhdGNoSW5wdXQgfTtcbn1cblxuLyoqXG4gKiBBbiBpbnB1dCBmb3IgYSB3b3JrZmxvd19kaXNwYXRjaCBldmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0Rpc3BhdGNoSW5wdXQge1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBpbnB1dC5cbiAgICogQGRlZmF1bHQgXCJzdHJpbmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIiB8IFwiY2hvaWNlXCIgfCBcIm51bWJlclwiIHwgXCJlbnZpcm9ubWVudFwiO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgaW5wdXQgaWYgdHlwZSBpcyAnY2hvaWNlJy5cbiAgICogQGRlZmF1bHQgLSBubyBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFdvcmtmbG93IENhbGwgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q2FsbE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgQ3JlYXRlIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIERlbGV0ZSBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBEZXBsb3ltZW50IGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50T3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBEZXBsb3ltZW50IHN0YXR1cyBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YXR1c09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgRm9yayBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ya09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgR29sbHVtIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb2xsdW1PcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIFBhZ2UgYnVpbGQgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VCdWlsZE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgUHVibGljIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIFN0YXR1cyBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzT3B0aW9ucyB7fVxuLy8jZW5kcmVnaW9uXG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVGQUF1Rjs7O0FBb1Z2Rjs7R0FFRztBQUNILElBQVksYUFTWDtBQVRELFdBQVksYUFBYTtJQUN2Qix1QkFBdUI7SUFDdkIsOEJBQWEsQ0FBQTtJQUViLHdCQUF3QjtJQUN4QixnQ0FBZSxDQUFBO0lBRWYsdUJBQXVCO0lBQ3ZCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsYUFBYSw2QkFBYixhQUFhLFFBU3hCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBV1g7QUFYRCxXQUFZLGFBQWE7SUFDdkIsd0JBQXdCO0lBQ3hCLDhCQUFhLENBQUE7SUFDYix3QkFBd0I7SUFDeEIsZ0NBQWUsQ0FBQTtJQUNmOzs7O09BSUc7SUFDSCxnQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFYVyxhQUFhLDZCQUFiLGFBQWEsUUFXeEI7QUF3K0JELFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnNcblxuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBqb2IgZGlzcGxheWVkIG9uIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgYW55IGpvYnMgdGhhdCBtdXN0IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBiZWZvcmUgdGhpcyBqb2Igd2lsbFxuICAgKiBydW4uIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBJZiBhIGpvYiBmYWlscywgYWxsIGpvYnNcbiAgICogdGhhdCBuZWVkIGl0IGFyZSBza2lwcGVkIHVubGVzcyB0aGUgam9icyB1c2UgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAqIHRoYXQgY2F1c2VzIHRoZSBqb2IgdG8gY29udGludWUuXG4gICAqL1xuICByZWFkb25seSBuZWVkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIG1vZGlmeSB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBncmFudGVkIHRvIHRoZSBHSVRIVUJfVE9LRU4sIGFkZGluZ1xuICAgKiBvciByZW1vdmluZyBhY2Nlc3MgYXMgcmVxdWlyZWQsIHNvIHRoYXQgeW91IG9ubHkgYWxsb3cgdGhlIG1pbmltdW0gcmVxdWlyZWRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBVc2UgYHsgY29udGVudHM6IFJFQUQgfWAgaWYgeW91ciBqb2Igb25seSBuZWVkcyB0byBjbG9uZSBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGludGVudGlvbmFsbHkgYSByZXF1aXJlZCBmaWVsZCBzaW5jZSBpdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0b1xuICAgKiBhbGxvdyB3b3JrZmxvd3MgdG8gcnVuIGluIEdpdEh1YiByZXBvc2l0b3JpZXMgd2l0aCByZXN0cmljdGVkIGRlZmF1bHRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uLWluLWEtd29ya2Zsb3cjcGVybWlzc2lvbnMtZm9yLXRoZS1naXRodWJfdG9rZW5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBKb2JQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogQ29uY3VycmVuY3kgZW5zdXJlcyB0aGF0IG9ubHkgYSBzaW5nbGUgam9iIG9yIHdvcmtmbG93IHVzaW5nIHRoZSBzYW1lXG4gICAqIGNvbmN1cnJlbmN5IGdyb3VwIHdpbGwgcnVuIGF0IGEgdGltZS4gQSBjb25jdXJyZW5jeSBncm91cCBjYW4gYmUgYW55XG4gICAqIHN0cmluZyBvciBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBjYW4gdXNlIGFueSBjb250ZXh0IGV4Y2VwdCBmb3IgdGhlXG4gICAqIHNlY3JldHMgY29udGV4dC5cbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgaWYgY29uZGl0aW9uYWwgdG8gcHJldmVudCBhIGpvYiBmcm9tIHJ1bm5pbmcgdW5sZXNzIGFcbiAgICogY29uZGl0aW9uIGlzIG1ldC4gWW91IGNhbiB1c2UgYW55IHN1cHBvcnRlZCBjb250ZXh0IGFuZCBleHByZXNzaW9uIHRvXG4gICAqIGNyZWF0ZSBhIGNvbmRpdGlvbmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAgICogdmFyaWF0aW9ucyB0byBydW4gZWFjaCBqb2IgaW4uXG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneT86IEpvYlN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IEpvYiBjYWxsaW5nIGEgcmV1c2FibGUgd29ya2Zsb3dcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cgZXh0ZW5kcyBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBvZiBhIHJldXNhYmxlIHdvcmtmbG93IGZpbGUgdG8gcnVuIGFzIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgam9iIGlzIHVzZWQgdG8gY2FsbCBhIHJldXNhYmxlIHdvcmtmbG93LCB5b3UgY2FuIHVzZSB3aXRoIHRvXG4gICAqIHByb3ZpZGUgYSBtYXAgb2YgaW5wdXRzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGVkIHdvcmtmbG93LlxuICAgKlxuICAgKiBBbGxvd2VkIGV4cHJlc3Npb24gY29udGV4dHM6IGBnaXRodWJgLCBhbmQgYG5lZWRzYC5cbiAgICovXG4gIHJlYWRvbmx5IHdpdGg/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcblxuICAvKipcbiAgICogV2hlbiBhIGpvYiBpcyB1c2VkIHRvIGNhbGwgYSByZXVzYWJsZSB3b3JrZmxvdywgeW91IGNhbiB1c2Ugc2VjcmV0cyB0b1xuICAgKiBwcm92aWRlIGEgbWFwIG9mIHNlY3JldHMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3cuXG4gICAqXG4gICAqIFVzZSB0aGUgJ2luaGVyaXQnIGtleXdvcmQgdG8gcGFzcyBhbGwgdGhlIGNhbGxpbmcgd29ya2Zsb3cncyBzZWNyZXRzIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3dcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IGpvYiBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYiBleHRlbmRzIENvbW1vbkpvYkRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbWFjaGluZSB0byBydW4gdGhlIGpvYiBvbi4gVGhlIG1hY2hpbmUgY2FuIGJlIGVpdGhlciBhXG4gICAqIEdpdEh1Yi1ob3N0ZWQgcnVubmVyIG9yIGEgc2VsZi1ob3N0ZWQgcnVubmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqL1xuICByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2l0aHViIFJ1bm5lciBHcm91cCBzZWxlY3Rpb24gb3B0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgR3JvdXAgYnkgbmFtZSBhbmQvb3IgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGpvYiBjb250YWlucyBhIHNlcXVlbmNlIG9mIHRhc2tzIGNhbGxlZCBzdGVwcy4gU3RlcHMgY2FuIHJ1biBjb21tYW5kcyxcbiAgICogcnVuIHNldHVwIHRhc2tzLCBvciBydW4gYW4gYWN0aW9uIGluIHlvdXIgcmVwb3NpdG9yeSwgYSBwdWJsaWMgcmVwb3NpdG9yeSxcbiAgICogb3IgYW4gYWN0aW9uIHB1Ymxpc2hlZCBpbiBhIERvY2tlciByZWdpc3RyeS4gTm90IGFsbCBzdGVwcyBydW4gYWN0aW9ucyxcbiAgICogYnV0IGFsbCBhY3Rpb25zIHJ1biBhcyBhIHN0ZXAuIEVhY2ggc3RlcCBydW5zIGluIGl0cyBvd24gcHJvY2VzcyBpbiB0aGVcbiAgICogcnVubmVyIGVudmlyb25tZW50IGFuZCBoYXMgYWNjZXNzIHRvIHRoZSB3b3Jrc3BhY2UgYW5kIGZpbGVzeXN0ZW0uXG4gICAqIEJlY2F1c2Ugc3RlcHMgcnVuIGluIHRoZWlyIG93biBwcm9jZXNzLCBjaGFuZ2VzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiBhcmUgbm90IHByZXNlcnZlZCBiZXR3ZWVuIHN0ZXBzLiBHaXRIdWIgcHJvdmlkZXMgYnVpbHQtaW4gc3RlcHMgdG8gc2V0IHVwXG4gICAqIGFuZCBjb21wbGV0ZSBhIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHRoZSBqb2IgcmVmZXJlbmNlcy4gQWxsIGVudmlyb25tZW50IHByb3RlY3Rpb24gcnVsZXNcbiAgICogbXVzdCBwYXNzIGJlZm9yZSBhIGpvYiByZWZlcmVuY2luZyB0aGUgZW52aXJvbm1lbnQgaXMgc2VudCB0byBhIHJ1bm5lci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS9lbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogdW5rbm93bjtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb3V0cHV0cyBmb3IgYSBqb2IuIEpvYiBvdXRwdXRzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGRvd25zdHJlYW1cbiAgICogam9icyB0aGF0IGRlcGVuZCBvbiB0aGlzIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCBKb2JTdGVwT3V0cHV0PjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBhbGwgc3RlcHMgaW4gdGhlXG4gICAqIGpvYi4gWW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBlbnRpcmUgd29ya2Zsb3cgb3IgYW5cbiAgICogaW5kaXZpZHVhbCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IHdpbGwgYXBwbHkgdG8gYWxsIHN0ZXBzIGluIHRoZSBqb2IuIFlvdVxuICAgKiBjYW4gYWxzbyBzZXQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGVudGlyZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogSm9iRGVmYXVsdHM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaW51dGVzIHRvIGxldCBhIGpvYiBydW4gYmVmb3JlIEdpdEh1YlxuICAgKiBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDM2MFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dE1pbnV0ZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFByZXZlbnRzIGEgd29ya2Zsb3cgcnVuIGZyb20gZmFpbGluZyB3aGVuIGEgam9iIGZhaWxzLiBTZXQgdG8gdHJ1ZSB0b1xuICAgKiBhbGxvdyBhIHdvcmtmbG93IHJ1biB0byBwYXNzIHdoZW4gdGhpcyBqb2IgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciB0byBydW4gYW55IHN0ZXBzIGluIGEgam9iIHRoYXQgZG9uJ3QgYWxyZWFkeSBzcGVjaWZ5IGFcbiAgICogY29udGFpbmVyLiBJZiB5b3UgaGF2ZSBzdGVwcyB0aGF0IHVzZSBib3RoIHNjcmlwdCBhbmQgY29udGFpbmVyIGFjdGlvbnMsXG4gICAqIHRoZSBjb250YWluZXIgYWN0aW9ucyB3aWxsIHJ1biBhcyBzaWJsaW5nIGNvbnRhaW5lcnMgb24gdGhlIHNhbWUgbmV0d29ya1xuICAgKiB3aXRoIHRoZSBzYW1lIHZvbHVtZSBtb3VudHMuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXI/OiBDb250YWluZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGhvc3Qgc2VydmljZSBjb250YWluZXJzIGZvciBhIGpvYiBpbiBhIHdvcmtmbG93LiBTZXJ2aWNlXG4gICAqIGNvbnRhaW5lcnMgYXJlIHVzZWZ1bCBmb3IgY3JlYXRpbmcgZGF0YWJhc2VzIG9yIGNhY2hlIHNlcnZpY2VzIGxpa2UgUmVkaXMuXG4gICAqIFRoZSBydW5uZXIgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgRG9ja2VyIG5ldHdvcmsgYW5kIG1hbmFnZXMgdGhlIGxpZmVcbiAgICogY3ljbGUgb2YgdGhlIHNlcnZpY2UgY29udGFpbmVycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGFpbmVyT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIFRvb2xzIHJlcXVpcmVkIGZvciB0aGlzIGpvYi4gVHJhbnNsYXRlcyBpbnRvIGBhY3Rpb25zL3NldHVwLXh4eGAgc3RlcHMgYXRcbiAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbHM/OiBUb29scztcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgdG9vbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHMge1xuICAvKipcbiAgICogU2V0dXAgamF2YS5cbiAgICogQGRlZmF1bHQgLSBub3QgaW5zdGFsbGVkXG4gICAqL1xuICByZWFkb25seSBqYXZhPzogSmF2YVRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgcHl0aG9uLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbj86IFB5dGhvblRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgZ29sYW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IGdvPzogVG9vbFJlcXVpcmVtZW50O1xuXG4gIC8qKlxuICAgKiBTZXR1cCBub2RlLmpzXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZT86IFRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgLk5FVCBDb3JlXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZG90bmV0PzogVG9vbFJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIFZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xSZXF1aXJlbWVudCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IGNhY2hpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVmVyc2lvbiByZXF1aXJlbWVudCBmb3IgUHl0aG9uIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblRvb2xSZXF1aXJlbWVudCBleHRlbmRzIFRvb2xSZXF1aXJlbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSBmb3IgY2FjaGluZyAoZS5nLiBcInBpcFwiLCBcInBpcGVudlwiLCBcInBvZXRyeVwiKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgY2FjaGVgIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJzaW9uIHJlcXVpcmVtZW50IGZvciBKYXZhIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEphdmFUb29sUmVxdWlyZW1lbnQgZXh0ZW5kcyBUb29sUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIEpESyBkaXN0cmlidXRpb24gdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcImNvcnJldHRvXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIGZvciBjYWNoaW5nIChlLmcuIFwibWF2ZW5cIiwgXCJncmFkbGVcIiwgXCJzYnRcIikuXG4gICAqIFJlcXVpcmVkIHdoZW4gYGNhY2hlYCBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGF2YWlsYWJsZSBzY29wZXMgYW5kIGFjY2VzcyB2YWx1ZXMgZm9yIHdvcmtmbG93IHBlcm1pc3Npb25zLiBJZiB5b3VcbiAqIHNwZWNpZnkgdGhlIGFjY2VzcyBmb3IgYW55IG9mIHRoZXNlIHNjb3BlcywgYWxsIHRob3NlIHRoYXQgYXJlIG5vdFxuICogc3BlY2lmaWVkIGFyZSBzZXQgdG8gYEpvYlBlcm1pc3Npb24uTk9ORWAsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAqIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL2NvbnRyb2xsaW5nLXBlcm1pc3Npb25zLWZvci1naXRodWJfdG9rZW4jZGVmaW5pbmctYWNjZXNzLWZvci10aGUtZ2l0aHViX3Rva2VuLXBlcm1pc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUGVybWlzc2lvbnMge1xuICByZWFkb25seSBhY3Rpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgYXR0ZXN0YXRpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY2hlY2tzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY29udGVudHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkZXBsb3ltZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGlkVG9rZW4/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBtb2RlbHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkaXNjdXNzaW9ucz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBwdWxsUmVxdWVzdHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogSm9iUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBUaGUgcGVybWlzc2lvbnMgYXZhaWxhYmxlIHRvIGEgR2l0SHViIEFwcC5cbiAqXG4gKiBUeXBpY2FsbHkgYSB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwIGhhcyBhbGwgdGhlIGF2YWlsYWJsZSBzY29wZXMvcGVybWlzc2lvbnMgYXZhaWxhYmxlIHRvIHRoZSBhcHBcbiAqIGl0c2VsZjsgaG93ZXZlciwgYSBtb3JlIGxpbWl0ZWQgc2V0IG9mIHBlcm1pc3Npb25zIGNhbiBiZSBzcGVjaWZpZWQuIFdoZW4gcGVybWlzc2lvbnMgYXJlIHByb3ZpZGVkLFxuICogKipvbmx5KiogdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZCB0byB0aGUgdG9rZW4uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9yZXN0L2FwcHMvYXBwcz9hcGlWZXJzaW9uPTIwMjItMTEtMjgjY3JlYXRlLWFuLWluc3RhbGxhdGlvbi1hY2Nlc3MtdG9rZW4tZm9yLWFuLWFwcFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9jcmVhdGUtZ2l0aHViLWFwcC10b2tlbi9ibG9iL21haW4vYWN0aW9uLnltbCNMMjhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBQZXJtaXNzaW9ucyB7XG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBhdHRlc3RhdGlvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBhZG1pbmlzdHJhdGlvbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNoZWNrcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNvZGVzcGFjZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBjb250ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGRlcGVuZGFib3RTZWNyZXRzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZGVwbG95bWVudHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBlbWFpbEFkZHJlc3Nlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGZvbGxvd2Vycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGdpdFNzaEtleXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBncGdLZXlzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgaW50ZXJhY3Rpb25MaW1pdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBtZW1iZXJzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25BZG1pbmlzdHJhdGlvbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkFubm91bmNlbWVudEJhbm5lcnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25Db3BpbG90U2VhdE1hbmFnZW1lbnQ/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25DdXN0b21PcmdSb2xlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25DdXN0b21Sb2xlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkhvb2tzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUGFja2FnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QZXJzb25hbEFjY2Vzc1Rva2VuUmVxdWVzdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QZXJzb25hbEFjY2Vzc1Rva2Vucz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblBsYW4/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25Qcm9qZWN0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25TZWxmSG9zdGVkUnVubmVycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ25haXphdGlvblVzZXJCbG9ja2luZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBwcm9maWxlPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeUN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5SG9va3M/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5UHJvamVjdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWNyZXRTY2FubmluZ0FsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNpbmdsZUZpbGU/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzdGFycmluZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdGVhbURpc2N1c3Npb25zPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eUFsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IEFwcFBlcm1pc3Npb247XG59XG5cbi8qKlxuICogQWNjZXNzIGxldmVsIGZvciB3b3JrZmxvdyBwZXJtaXNzaW9uIHNjb3Blcy5cbiAqL1xuZXhwb3J0IGVudW0gSm9iUGVybWlzc2lvbiB7XG4gIC8qKiBSZWFkLW9ubHkgYWNjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcblxuICAvKiogUmVhZC13cml0ZSBhY2Nlc3MgKi9cbiAgV1JJVEUgPSBcIndyaXRlXCIsXG5cbiAgLyoqIE5vIGFjY2VzcyBhdCBhbGwgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIFRoZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUgZm9yIGFuIGFjY2VzcyB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwLlxuICovXG5leHBvcnQgZW51bSBBcHBQZXJtaXNzaW9uIHtcbiAgLyoqIFJlYWQtb25seSBhY2NjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcbiAgLyoqIFJlYWQtd3JpdGUgYWNjZXNzICovXG4gIFdSSVRFID0gXCJ3cml0ZVwiLFxuICAvKipcbiAgICogUmVhZC13cml0ZSBhbmQgYWRtaW4gYWNjZXNzLlxuICAgKlxuICAgKiBOb3QgYWxsIHBlcm1pc3Npb25zIHN1cHBvcnQgYGFkbWluYC5cbiAgICovXG4gIEFETUlOID0gXCJhZG1pblwiLFxufVxuXG4vKipcbiAqIEFuIG91dHB1dCBiaW5kaW5nIGZvciBhIGpvYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JTdGVwT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc3RlcCB0aGF0IGV4cG9zZXMgdGhlIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iIG91dHB1dCB0aGF0IGlzIGJlaW5nIGJvdW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBzdGVwcyBpbiB0aGUgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkRlZmF1bHRzIHtcbiAgLyoqIERlZmF1bHQgcnVuIHNldHRpbmdzLiAqL1xuICByZWFkb25seSBydW4/OiBSdW5TZXR0aW5ncztcbn1cblxuLyoqXG4gKiBSdW4gc2V0dGluZ3MgZm9yIGEgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoaWNoIHNoZWxsIHRvIHVzZSBmb3IgcnVubmluZyB0aGUgc3RlcC5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJiYXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JraW5nIGRpcmVjdG9yeSB0byB1c2Ugd2hlbiBydW5uaW5nIHRoZSBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWVsZHMgdGhhdCBkZXNjcmliZSB0aGUgSG93LCBXaHksIFdoZW4sIGFuZCBXaG8gb2YgYSBTdGVwLlxuICogVGhlc2UgZmllbGRzIGNhbiBoYXZlIG5vbmUgcHJlc2VudCwgYnV0IGNhbiBiZSBwcmVzZW50IG9uIGV2ZXJ5IFN0ZXAsIGFuZCBoYXZlIG5vIGVmZmVjdCBvbiBvbmUgYW5vdGhlci5cbiAqXG4gKiBUaGlzIHN0YW5kcyBpbiBjb250cmFzdCB0byB0aGUgQ29tbWFuZCAobm9uLUNvbmZpZ3VyYXRpb24pIGZpZWxkcywgd2hpY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIGRlc2NyaWJlIHRoZSBXaGF0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLiBZb3UgY2FuIHVzZSB0aGUgaWQgdG8gcmVmZXJlbmNlIHRoZVxuICAgKiBzdGVwIGluIGNvbnRleHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBpZiBjb25kaXRpb25hbCB0byBwcmV2ZW50IGEgam9iIGZyb20gcnVubmluZyB1bmxlc3MgYVxuICAgKiBjb25kaXRpb24gaXMgbWV0LiBZb3UgY2FuIHVzZSBhbnkgc3VwcG9ydGVkIGNvbnRleHQgYW5kIGV4cHJlc3Npb24gdG9cbiAgICogY3JlYXRlIGEgY29uZGl0aW9uYWwuXG4gICAqL1xuICByZWFkb25seSBpZj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB5b3VyIHN0ZXAgdG8gZGlzcGxheSBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igc3RlcHMgdG8gdXNlIGluIHRoZSBydW5uZXIgZW52aXJvbm1lbnQuXG4gICAqIFlvdSBjYW4gYWxzbyBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZW50aXJlIHdvcmtmbG93IG9yIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgd29ya2luZyBkaXJlY3RvcnkgZm9yIGEgc3RlcC5cbiAgICogT3ZlcnJpZGVzIGEgam9iJ3Mgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgc2hlbGwgc2V0dGluZ3MgaW4gdGhlIHJ1bm5lcidzIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSBqb2IncyBkZWZhdWx0LlxuICAgKlxuICAgKiBSZWZlciB0byBHaXRIdWIgZG9jdW1lbnRhdGlvbiBmb3IgYWxsb3dlZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc3NoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIGNvbnRhaW5zIHRoZSBmaWVsZHMgdGhhdCBhcmUgY29tbW9uIGFtb25nc3QgYm90aDpcbiAqIC0gSm9iU3RlcCwgd2hpY2ggaXMgYSBzdGVwIHRoYXQgaXMgcGFydCBvZiBhIEpvYiBpbiBHaXRodWIgQWN0aW9ucy4gVGhpcyBpcyBieSBmYXIgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlLlxuICogLSBUaGUgbWV0YWRhdGEgZmlsZSBgYWN0aW9uLnlhbWxgIHRoYXQgaXMgdXNlZCB0byBkZWZpbmUgYW4gQWN0aW9uIHdoZW4geW91IGFyZSBjcmVhdGluZyBvbmUuIEFzIGluLCBpZiB5b3Ugd2VyZSBjcmVhdGluZyBhbiBBY3Rpb24gdG8gYmUgdXNlZCBpbiBhIEpvYlN0ZXAuXG4gKiBUaGVyZSBpcyBzb21lIG92ZXJsYXAgYmV0d2VlbiB0aGUgdHdvLCBhbmQgdGhpcyBjYXB0dXJlcyB0aGF0IG92ZXJsYXAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2NyZWF0aW5nLWFjdGlvbnMvbWV0YWRhdGEtc3ludGF4LWZvci1naXRodWItYWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXAgZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBTZWxlY3RzIGFuIGFjdGlvbiB0byBydW4gYXMgcGFydCBvZiBhIHN0ZXAgaW4geW91ciBqb2IuIEFuIGFjdGlvbiBpcyBhXG4gICAqIHJldXNhYmxlIHVuaXQgb2YgY29kZS4gWW91IGNhbiB1c2UgYW4gYWN0aW9uIGRlZmluZWQgaW4gdGhlIHNhbWVcbiAgICogcmVwb3NpdG9yeSBhcyB0aGUgd29ya2Zsb3csIGEgcHVibGljIHJlcG9zaXRvcnksIG9yIGluIGEgcHVibGlzaGVkIERvY2tlclxuICAgKiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSB1c2VzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW5zIGNvbW1hbmQtbGluZSBwcm9ncmFtcyB1c2luZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHNoZWxsLiBJZiB5b3UgZG9cbiAgICogbm90IHByb3ZpZGUgYSBuYW1lLCB0aGUgc3RlcCBuYW1lIHdpbGwgZGVmYXVsdCB0byB0aGUgdGV4dCBzcGVjaWZpZWQgaW5cbiAgICogdGhlIHJ1biBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBhY3Rpb24uIEVhY2ggaW5wdXQgcGFyYW1ldGVyXG4gICAqIGlzIGEga2V5L3ZhbHVlIHBhaXIuIElucHV0IHBhcmFtZXRlcnMgYXJlIHNldCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIFRoZSB2YXJpYWJsZSBpcyBwcmVmaXhlZCB3aXRoIElOUFVUXyBhbmQgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuXG4gICAqL1xuICByZWFkb25seSB3aXRoPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBUaGVzZSBzZXR0aW5ncyBhcmUgdW5pcXVlIHRvIGEgSm9iU3RlcCBmcm9tIHRoZSBmaWVsZHMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWV0YWRhdGEgYWN0aW9uLnlhbWwgZmlsZSBwcmVzZW50IGluIHdoZW4gY3JlYXRpbmcgYSBuZXcgR2l0SHViIEFjdGlvbi5cbiAqIFRoZXNlIGZpZWxkcyBhcmUgbm90IHByZXNlbnQgaW4gYWN0aW9uLnltbCwgYnV0IGFyZSBpbiBKb2JTdGVwLCB3aGljaCBhcmUgdXNpbmcgd2hlbiBjcmVhdGluZyB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iU3RlcENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBQcmV2ZW50cyBhIGpvYiBmcm9tIGZhaWxpbmcgd2hlbiBhIHN0ZXAgZmFpbHMuIFNldCB0byB0cnVlIHRvIGFsbG93IGEgam9iXG4gICAqIHRvIHBhc3Mgd2hlbiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWludXRlcyB0byBydW4gdGhlIHN0ZXAgYmVmb3JlIGtpbGxpbmcgdGhlIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0TWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBKb2JTdGVwcyBydW4gYXMgcGFydCBvZiBhIEdpdEh1YiBXb3JrZmxvdyBKb2IuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlN0ZXAgZXh0ZW5kcyBTdGVwLCBKb2JTdGVwQ29uZmlndXJhdGlvbiB7fVxuXG4vKipcbiAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAqIHZhcmlhdGlvbnMgdG8gcnVuIGVhY2ggam9iIGluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFlvdSBjYW4gZGVmaW5lIGEgbWF0cml4IG9mIGRpZmZlcmVudCBqb2IgY29uZmlndXJhdGlvbnMuIEEgbWF0cml4IGFsbG93c1xuICAgKiB5b3UgdG8gY3JlYXRlIG11bHRpcGxlIGpvYnMgYnkgcGVyZm9ybWluZyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gaW4gYVxuICAgKiBzaW5nbGUgam9iIGRlZmluaXRpb24uIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBhIG1hdHJpeCB0byBjcmVhdGUgam9ic1xuICAgKiBmb3IgbW9yZSB0aGFuIG9uZSBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBhIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvcGVyYXRpbmdcbiAgICogc3lzdGVtLCBvciB0b29sLiBBIG1hdHJpeCByZXVzZXMgdGhlIGpvYidzIGNvbmZpZ3VyYXRpb24gYW5kIGNyZWF0ZXMgYVxuICAgKiBqb2IgZm9yIGVhY2ggbWF0cml4IHlvdSBjb25maWd1cmUuXG4gICAqXG4gICAqIEEgam9iIG1hdHJpeCBjYW4gZ2VuZXJhdGUgYSBtYXhpbXVtIG9mIDI1NiBqb2JzIHBlciB3b3JrZmxvdyBydW4uIFRoaXNcbiAgICogbGltaXQgYWxzbyBhcHBsaWVzIHRvIHNlbGYtaG9zdGVkIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBtYXRyaXg/OiBKb2JNYXRyaXg7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIEdpdEh1YiBjYW5jZWxzIGFsbCBpbi1wcm9ncmVzcyBqb2JzIGlmIGFueSBtYXRyaXggam9iXG4gICAqIGZhaWxzLiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICByZWFkb25seSBmYWlsRmFzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBqb2JzIHRoYXQgY2FuIHJ1biBzaW11bHRhbmVvdXNseSB3aGVuIHVzaW5nIGFcbiAgICogbWF0cml4IGpvYiBzdHJhdGVneS4gQnkgZGVmYXVsdCwgR2l0SHViIHdpbGwgbWF4aW1pemUgdGhlIG51bWJlciBvZiBqb2JzXG4gICAqIHJ1biBpbiBwYXJhbGxlbCBkZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBydW5uZXJzIG9uIEdpdEh1Yi1ob3N0ZWRcbiAgICogdmlydHVhbCBtYWNoaW5lcy5cbiAgICovXG4gIHJlYWRvbmx5IG1heFBhcmFsbGVsPzogbnVtYmVyO1xufVxuXG50eXBlIEpvYk1hdHJpeFZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblxuLyoqXG4gKiBBIGpvYiBtYXRyaXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iTWF0cml4IHtcbiAgLyoqXG4gICAqIEVhY2ggb3B0aW9uIHlvdSBkZWZpbmUgaW4gdGhlIG1hdHJpeCBoYXMgYSBrZXkgYW5kIHZhbHVlLiBUaGUga2V5cyB5b3VcbiAgICogZGVmaW5lIGJlY29tZSBwcm9wZXJ0aWVzIGluIHRoZSBtYXRyaXggY29udGV4dCBhbmQgeW91IGNhbiByZWZlcmVuY2UgdGhlXG4gICAqIHByb3BlcnR5IGluIG90aGVyIGFyZWFzIG9mIHlvdXIgd29ya2Zsb3cgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZpbmVcbiAgICogdGhlIGtleSBvcyB0aGF0IGNvbnRhaW5zIGFuIGFycmF5IG9mIG9wZXJhdGluZyBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGVcbiAgICogbWF0cml4Lm9zIHByb3BlcnR5IGFzIHRoZSB2YWx1ZSBvZiB0aGUgcnVucy1vbiBrZXl3b3JkIHRvIGNyZWF0ZSBhIGpvYlxuICAgKiBmb3IgZWFjaCBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgSm9iTWF0cml4VmFsdWVbXT47XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGEgYnVpbGQgbWF0cml4IGpvYiB0aGF0XG4gICAqIGFscmVhZHkgZXhpc3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBucG1cbiAgICogd2hlbiB0aGUgam9iIHRoYXQgdXNlcyB3aW5kb3dzLWxhdGVzdCBhbmQgdmVyc2lvbiA4IG9mIG5vZGUgcnVucywgeW91IGNhblxuICAgKiB1c2UgaW5jbHVkZSB0byBzcGVjaWZ5IHRoYXQgYWRkaXRpb25hbCBvcHRpb24uXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlPzogQXJyYXk8UmVjb3JkPHN0cmluZywgSm9iTWF0cml4VmFsdWU+PjtcblxuICAvKipcbiAgICogWW91IGNhbiByZW1vdmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkZWZpbmVkIGluIHRoZSBidWlsZCBtYXRyaXhcbiAgICogdXNpbmcgdGhlIGV4Y2x1ZGUgb3B0aW9uLiBVc2luZyBleGNsdWRlIHJlbW92ZXMgYSBqb2IgZGVmaW5lZCBieSB0aGVcbiAgICogYnVpbGQgbWF0cml4LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IEFycmF5PFJlY29yZDxzdHJpbmcsIEpvYk1hdHJpeFZhbHVlPj47XG59XG5cbi8qKlxuICogT3B0aW9ucyBwZXJ0YWluaW5nIHRvIGNvbnRhaW5lciBlbnZpcm9ubWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgRG9ja2VyIGltYWdlIHRvIHVzZSBhcyB0aGUgY29udGFpbmVyIHRvIHJ1biB0aGUgYWN0aW9uLiBUaGUgdmFsdWUgY2FuXG4gICAqIGJlIHRoZSBEb2NrZXIgSHViIGltYWdlIG5hbWUgb3IgYSByZWdpc3RyeSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogZiB0aGUgaW1hZ2UncyBjb250YWluZXIgcmVnaXN0cnkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gdG8gcHVsbCB0aGVcbiAgICogaW1hZ2UsIHlvdSBjYW4gdXNlIGNyZWRlbnRpYWxzIHRvIHNldCBhIG1hcCBvZiB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAgKiBUaGUgY3JlZGVudGlhbHMgYXJlIHRoZSBzYW1lIHZhbHVlcyB0aGF0IHlvdSB3b3VsZCBwcm92aWRlIHRvIHRoZSBkb2NrZXJcbiAgICogbG9naW4gY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzPzogQ29udGFpbmVyQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFNldHMgYSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSBjb250YWluZXIuXG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGFycmF5IG9mIHBvcnRzIHRvIGV4cG9zZSBvbiB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogU2V0cyBhbiBhcnJheSBvZiB2b2x1bWVzIGZvciB0aGUgY29udGFpbmVyIHRvIHVzZS4gWW91IGNhbiB1c2Ugdm9sdW1lcyB0b1xuICAgKiBzaGFyZSBkYXRhIGJldHdlZW4gc2VydmljZXMgb3Igb3RoZXIgc3RlcHMgaW4gYSBqb2IuIFlvdSBjYW4gc3BlY2lmeVxuICAgKiBuYW1lZCBEb2NrZXIgdm9sdW1lcywgYW5vbnltb3VzIERvY2tlciB2b2x1bWVzLCBvciBiaW5kIG1vdW50cyBvbiB0aGVcbiAgICogaG9zdC5cbiAgICpcbiAgICogVG8gc3BlY2lmeSBhIHZvbHVtZSwgeW91IHNwZWNpZnkgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcGF0aDpcbiAgICogYDxzb3VyY2U+OjxkZXN0aW5hdGlvblBhdGg+YC5cbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBEb2NrZXIgY29udGFpbmVyIHJlc291cmNlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9jcmVhdGUvI29wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDcmVkZW50aWFscyB0byB1c2UgdG8gYXV0aGVudGljYXRlIHRvIERvY2tlciByZWdpc3RyaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckNyZWRlbnRpYWxzIHtcbiAgLyoqIFRoZSB1c2VybmFtZS4gKi9cbiAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcblxuICAvKiogVGhlIHBhc3N3b3JkLiAqL1xuICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIHRyaWdnZXJzIGZvciBHaXRIdWIgV29ya2Zsb3dzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2UvZXZlbnRzLXRoYXQtdHJpZ2dlci13b3JrZmxvd3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VycyB7XG4gIC8vI3JlZ2lvbiBTY2hlZHVsZWQgZXZlbnRzXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNjaGVkdWxlIGEgd29ya2Zsb3cgdG8gcnVuIGF0IHNwZWNpZmljIFVUQyB0aW1lcyB1c2luZyBQT1NJWCBjcm9uXG4gICAqIHN5bnRheC4gU2NoZWR1bGVkIHdvcmtmbG93cyBydW4gb24gdGhlIGxhdGVzdCBjb21taXQgb24gdGhlIGRlZmF1bHQgb3JcbiAgICogYmFzZSBicmFuY2guIFRoZSBzaG9ydGVzdCBpbnRlcnZhbCB5b3UgY2FuIHJ1biBzY2hlZHVsZWQgd29ya2Zsb3dzIGlzXG4gICAqIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS91dGlsaXRpZXMvY3JvbnRhYi5odG1sI3RhZ18yMF8yNV8wN1xuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBDcm9uU2NoZWR1bGVPcHRpb25zW107XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNYW51YWwgZXZlbnRzXG4gIC8qKlxuICAgKiBZb3UgY2FuIGNvbmZpZ3VyZSBjdXN0b20tZGVmaW5lZCBpbnB1dCBwcm9wZXJ0aWVzLCBkZWZhdWx0IGlucHV0IHZhbHVlcyxcbiAgICogYW5kIHJlcXVpcmVkIGlucHV0cyBmb3IgdGhlIGV2ZW50IGRpcmVjdGx5IGluIHlvdXIgd29ya2Zsb3cuIFdoZW4gdGhlXG4gICAqIHdvcmtmbG93IHJ1bnMsIHlvdSBjYW4gYWNjZXNzIHRoZSBpbnB1dCB2YWx1ZXMgaW4gdGhlIGdpdGh1Yi5ldmVudC5pbnB1dHNcbiAgICogY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93RGlzcGF0Y2g/OiBXb3JrZmxvd0Rpc3BhdGNoT3B0aW9ucztcblxuICAvKipcbiAgICogWW91IGNhbiB1c2UgdGhlIEdpdEh1YiBBUEkgdG8gdHJpZ2dlciBhIHdlYmhvb2sgZXZlbnQgY2FsbGVkXG4gICAqIHJlcG9zaXRvcnlfZGlzcGF0Y2ggd2hlbiB5b3Ugd2FudCB0byB0cmlnZ2VyIGEgd29ya2Zsb3cgZm9yIGFjdGl2aXR5IHRoYXRcbiAgICogaGFwcGVucyBvdXRzaWRlIG9mIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlEaXNwYXRjaD86IFJlcG9zaXRvcnlEaXNwYXRjaE9wdGlvbnM7XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBXb3JrZmxvdyByZXVzZSBldmVudHNcbiAgLyoqXG4gICAqIENhbiBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHdvcmtmbG93XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9sZWFybi1naXRodWItYWN0aW9ucy9yZXVzaW5nLXdvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dDYWxsPzogV29ya2Zsb3dDYWxsT3B0aW9ucztcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFdlYmhvb2sgZXZlbnRzXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgYnJhbmNoX3Byb3RlY3Rpb25fcnVsZSBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBicmFuY2hQcm90ZWN0aW9uUnVsZT86IEJyYW5jaFByb3RlY3Rpb25SdWxlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGNoZWNrX3J1biBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBjaGVja1J1bj86IENoZWNrUnVuT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGNoZWNrX3N1aXRlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrU3VpdGU/OiBDaGVja1N1aXRlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBjcmVhdGVzIGEgYnJhbmNoIG9yIHRhZywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIGNyZWF0ZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IENyZWF0ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHNvbWVvbmUgZGVsZXRlcyBhIGJyYW5jaCBvciB0YWcsIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBkZWxldGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBkZWxldGU/OiBEZWxldGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIGNyZWF0ZXMgYSBkZXBsb3ltZW50LCB3aGljaCB0cmlnZ2Vyc1xuICAgKiB0aGUgZGVwbG95bWVudCBldmVudC4gRGVwbG95bWVudHMgY3JlYXRlZCB3aXRoIGEgY29tbWl0IFNIQSBtYXkgbm90IGhhdmVcbiAgICogYSBHaXQgcmVmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudD86IERlcGxveW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBhIHRoaXJkIHBhcnR5IHByb3ZpZGVzIGEgZGVwbG95bWVudCBzdGF0dXMsXG4gICAqIHdoaWNoIHRyaWdnZXJzIHRoZSBkZXBsb3ltZW50X3N0YXR1cyBldmVudC4gRGVwbG95bWVudHMgY3JlYXRlZCB3aXRoIGFcbiAgICogY29tbWl0IFNIQSBtYXkgbm90IGhhdmUgYSBHaXQgcmVmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudFN0YXR1cz86IERlcGxveW1lbnRTdGF0dXNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgZGlzY3Vzc2lvbiBldmVudCBvY2N1cnMuIE1vcmUgdGhhbiBvbmUgYWN0aXZpdHkgdHlwZSB0cmlnZ2VycyB0aGlzIGV2ZW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2dyYXBocWwvZ3VpZGVzL3VzaW5nLXRoZS1ncmFwaHFsLWFwaS1mb3ItZGlzY3Vzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2N1c3Npb24/OiBEaXNjdXNzaW9uT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGRpc2N1c3Npb25fY29tbWVudCBldmVudCBvY2N1cnMuIE1vcmUgdGhhbiBvbmUgYWN0aXZpdHkgdHlwZSB0cmlnZ2VycyB0aGlzIGV2ZW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2dyYXBocWwvZ3VpZGVzL3VzaW5nLXRoZS1ncmFwaHFsLWFwaS1mb3ItZGlzY3Vzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2N1c3Npb25Db21tZW50PzogRGlzY3Vzc2lvbkNvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB3aGVuIHNvbWVvbmUgZm9ya3MgYSByZXBvc2l0b3J5LCB3aGljaFxuICAgKiB0cmlnZ2VycyB0aGUgZm9yayBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcms/OiBGb3JrT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gc29tZW9uZSBjcmVhdGVzIG9yIHVwZGF0ZXMgYSBXaWtpIHBhZ2UsIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBnb2xsdW0gZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBnb2xsdW0/OiBHb2xsdW1PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgaXNzdWVfY29tbWVudCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBpc3N1ZUNvbW1lbnQ/OiBJc3N1ZUNvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgaXNzdWVzIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGlzc3Vlcz86IElzc3Vlc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBsYWJlbCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbD86IExhYmVsT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gYSBwdWxsIHJlcXVlc3QgaXMgYWRkZWQgdG8gYSBtZXJnZSBxdWV1ZSwgd2hpY2hcbiAgICogYWRkcyB0aGUgcHVsbCByZXF1ZXN0IHRvIGEgbWVyZ2UgZ3JvdXAuXG4gICAqXG4gICAqIEBzdGFiaWxpdHkgZXhwZXJpbWVudGFsXG4gICAqL1xuICByZWFkb25seSBtZXJnZUdyb3VwPzogTWVyZ2VHcm91cE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBtaWxlc3RvbmUgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWlsZXN0b25lPzogTWlsZXN0b25lT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBwdXNoZXMgdG8gYSBHaXRIdWIgUGFnZXMtZW5hYmxlZFxuICAgKiBicmFuY2gsIHdoaWNoIHRyaWdnZXJzIHRoZSBwYWdlX2J1aWxkIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFnZUJ1aWxkPzogUGFnZUJ1aWxkT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHByb2plY3QgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IFByb2plY3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdF9jYXJkIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RDYXJkPzogUHJvamVjdENhcmRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdF9jb2x1bW4gZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdENvbHVtbj86IFByb2plY3RDb2x1bW5PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIG1ha2VzIGEgcHJpdmF0ZSByZXBvc2l0b3J5IHB1YmxpYyxcbiAgICogd2hpY2ggdHJpZ2dlcnMgdGhlIHB1YmxpYyBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpYz86IFB1YmxpY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwdWxsX3JlcXVlc3QgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3Q/OiBQdWxsUmVxdWVzdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwdWxsX3JlcXVlc3RfcmV2aWV3IGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0UmV2aWV3PzogUHVsbFJlcXVlc3RSZXZpZXdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBhIGNvbW1lbnQgb24gYSBwdWxsIHJlcXVlc3QncyB1bmlmaWVkIGRpZmYgaXNcbiAgICogbW9kaWZpZWQsIHdoaWNoIHRyaWdnZXJzIHRoZSBwdWxsX3JlcXVlc3RfcmV2aWV3X2NvbW1lbnQgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ/OiBQdWxsUmVxdWVzdFJldmlld0NvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2Ugb2YgdGhlIHB1bGwgcmVxdWVzdCwgcmF0aGVyXG4gICAqIHRoYW4gaW4gdGhlIG1lcmdlIGNvbW1pdCBhcyB0aGUgcHVsbF9yZXF1ZXN0IGV2ZW50IGRvZXMuIFRoaXMgcHJldmVudHNcbiAgICogZXhlY3V0aW5nIHVuc2FmZSB3b3JrZmxvdyBjb2RlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHB1bGwgcmVxdWVzdCB0aGF0XG4gICAqIGNvdWxkIGFsdGVyIHlvdXIgcmVwb3NpdG9yeSBvciBzdGVhbCBhbnkgc2VjcmV0cyB5b3UgdXNlIGluIHlvdXIgd29ya2Zsb3cuXG4gICAqIFRoaXMgZXZlbnQgYWxsb3dzIHlvdSB0byBkbyB0aGluZ3MgbGlrZSBjcmVhdGUgd29ya2Zsb3dzIHRoYXQgbGFiZWwgYW5kXG4gICAqIGNvbW1lbnQgb24gcHVsbCByZXF1ZXN0cyBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIGV2ZW50IHBheWxvYWQuXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoZSBgcHVsbF9yZXF1ZXN0X3RhcmdldGAgZXZlbnQgaXMgZ3JhbnRlZCByZWFkL3dyaXRlIHJlcG9zaXRvcnlcbiAgICogdG9rZW4gYW5kIGNhbiBhY2Nlc3Mgc2VjcmV0cywgZXZlbiB3aGVuIGl0IGlzIHRyaWdnZXJlZCBmcm9tIGEgZm9yay5cbiAgICogQWx0aG91Z2ggdGhlIHdvcmtmbG93IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2Ugb2YgdGhlIHB1bGwgcmVxdWVzdCxcbiAgICogeW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gbm90IGNoZWNrIG91dCwgYnVpbGQsIG9yIHJ1biB1bnRydXN0ZWRcbiAgICogY29kZSBmcm9tIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGlzIGV2ZW50LiBBZGRpdGlvbmFsbHksIGFueSBjYWNoZXNcbiAgICogc2hhcmUgdGhlIHNhbWUgc2NvcGUgYXMgdGhlIGJhc2UgYnJhbmNoLCBhbmQgdG8gaGVscCBwcmV2ZW50IGNhY2hlXG4gICAqIHBvaXNvbmluZywgeW91IHNob3VsZCBub3Qgc2F2ZSB0aGUgY2FjaGUgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0XG4gICAqIHRoZSBjYWNoZSBjb250ZW50cyB3ZXJlIGFsdGVyZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9zZWN1cml0eWxhYi5naXRodWIuY29tL3Jlc2VhcmNoL2dpdGh1Yi1hY3Rpb25zLXByZXZlbnRpbmctcHduLXJlcXVlc3RzXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRhcmdldD86IFB1bGxSZXF1ZXN0VGFyZ2V0T3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gc29tZW9uZSBwdXNoZXMgdG8gYSByZXBvc2l0b3J5IGJyYW5jaCwgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIHB1c2ggZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwdXNoPzogUHVzaE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIGEgcGFja2FnZSBpcyBwdWJsaXNoZWQgb3IgdXBkYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5UGFja2FnZT86IFJlZ2lzdHJ5UGFja2FnZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSByZWxlYXNlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2U/OiBSZWxlYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHN0YXR1cyBvZiBhIEdpdCBjb21taXQgY2hhbmdlcywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIHN0YXR1cyBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IFN0YXR1c09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSB3YXRjaCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IFdhdGNoT3B0aW9ucztcblxuICAvKipcbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiBhIHdvcmtmbG93IHJ1biBpcyByZXF1ZXN0ZWQgb3IgY29tcGxldGVkLCBhbmRcbiAgICogYWxsb3dzIHlvdSB0byBleGVjdXRlIGEgd29ya2Zsb3cgYmFzZWQgb24gdGhlIGZpbmlzaGVkIHJlc3VsdCBvZiBhbm90aGVyXG4gICAqIHdvcmtmbG93LiBBIHdvcmtmbG93IHJ1biBpcyB0cmlnZ2VyZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVzdWx0IG9mIHRoZVxuICAgKiBwcmV2aW91cyB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuPzogV29ya2Zsb3dSdW5PcHRpb25zO1xuICAvLyNlbmRyZWdpb25cbn1cblxuLyoqXG4gKiBDUk9OIHNjaGVkdWxlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JvblNjaGVkdWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS91dGlsaXRpZXMvY3JvbnRhYi5odG1sI3RhZ18yMF8yNV8wN1xuICAgKi9cbiAgcmVhZG9ubHkgY3Jvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcG9zaXRvcnkgZGlzcGF0Y2ggb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvc2l0b3J5RGlzcGF0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCcmFuY2ggUHJvdGVjdGlvbiBSdWxlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hQcm90ZWN0aW9uUnVsZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBDaGVjayBydW4gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja1J1bk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlXCIgfCBcInJlcmVxdWVzdGVkXCIgfCBcImNvbXBsZXRlZFwiIHwgXCJyZXF1ZXN0ZWRfYWN0aW9uXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBDaGVjayBzdWl0ZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tTdWl0ZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY29tcGxldGVkXCIgfCBcInJlcXVlc3RlZFwiIHwgXCJyZXJlcXVlc3RlZFwiPjtcbn1cblxuLyoqXG4gKiBEaXNjdXNzaW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImNyZWF0ZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJ0cmFuc2ZlcnJlZFwiXG4gICAgfCBcInBpbm5lZFwiXG4gICAgfCBcInVucGlubmVkXCJcbiAgICB8IFwibGFiZWxlZFwiXG4gICAgfCBcInVubGFiZWxlZFwiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwiY2F0ZWdvcnlfY2hhbmdlZFwiXG4gICAgfCBcImFuc3dlcmVkXCJcbiAgICB8IFwidW5hbnN3ZXJlZFwiXG4gID47XG59XG5cbi8qKlxuICogRGlzY3Vzc2lvbiBjb21tZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uQ29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBJc3N1ZSBjb21tZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZUNvbW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcImNyZWF0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRlbGV0ZWRcIj47XG59XG5cbi8qKlxuICogSXNzdWVzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICB8IFwib3BlbmVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiZGVsZXRlZFwiXG4gICAgfCBcInRyYW5zZmVycmVkXCJcbiAgICB8IFwicGlubmVkXCJcbiAgICB8IFwidW5waW5uZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJsb2NrZWRcIlxuICAgIHwgXCJ1bmxvY2tlZFwiXG4gICAgfCBcIm1pbGVzdG9uZWRcIlxuICAgIHwgXCJkZW1pbGVzdG9uZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIExhYmVsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBNZXJnZSBncm91cCBvcHRpb25zLlxuICpcbiAqIEBzdGFiaWxpdHkgZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VHcm91cE9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB1c2luZyB0aGUgbWVyZ2VfZ3JvdXAgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biBvbiBzcGVjaWZpYyBiYXNlIGJyYW5jaGVzLiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYnJhbmNoZXMgd2lsbFxuICAgKiB0cmlnZ2VyIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTWlsZXN0b25lIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWxlc3RvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICBcImNyZWF0ZWRcIiB8IFwiY2xvc2VkXCIgfCBcIm9wZW5lZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvamVjdCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJ1cGRhdGVkXCIgfCBcImNsb3NlZFwiIHwgXCJyZW9wZW5lZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvamVjdCBjYXJkIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0Q2FyZE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJtb3ZlZFwiIHwgXCJjb252ZXJ0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRlbGV0ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFByb2JqZWN0IGNvbHVtbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdENvbHVtbk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJ1cGRhdGVkXCIgfCBcIm1vdmVkXCIgfCBcImRlbGV0ZWRcIj47XG59XG5cbi8qKlxuICogUHVsbCByZXF1ZXN0IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsUmVxdWVzdE9wdGlvbnMgZXh0ZW5kcyBQdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJvcGVuZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcInN5bmNocm9uaXplXCJcbiAgICB8IFwicmVhZHlfZm9yX3Jldmlld1wiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwicmV2aWV3X3JlcXVlc3RlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0X3JlbW92ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFB1bGwgcmVxdWVzdCByZXZpZXcgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0UmV2aWV3T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJzdWJtaXR0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRpc21pc3NlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3QgcmV2aWV3IGNvbW1lbnQgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3QgdGFyZ2V0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVsbFJlcXVlc3RUYXJnZXRPcHRpb25zIGV4dGVuZHMgUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIHwgXCJhc3NpZ25lZFwiXG4gICAgfCBcInVuYXNzaWduZWRcIlxuICAgIHwgXCJsYWJlbGVkXCJcbiAgICB8IFwidW5sYWJlbGVkXCJcbiAgICB8IFwib3BlbmVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiY2xvc2VkXCJcbiAgICB8IFwicmVvcGVuZWRcIlxuICAgIHwgXCJzeW5jaHJvbml6ZVwiXG4gICAgfCBcInJlYWR5X2Zvcl9yZXZpZXdcIlxuICAgIHwgXCJsb2NrZWRcIlxuICAgIHwgXCJ1bmxvY2tlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0ZWRcIlxuICAgIHwgXCJyZXZpZXdfcmVxdWVzdF9yZW1vdmVkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwdXNoLWxpa2UgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1c2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgdGhlIHB1c2gsIHB1bGxfcmVxdWVzdCBhbmQgcHVsbF9yZXF1ZXN0X3RhcmdldCBldmVudHMsIHlvdSBjYW4gY29uZmlndXJlIGEgd29ya2Zsb3dcbiAgICogdG8gcnVuIG9uIHNwZWNpZmljIGJyYW5jaGVzIG9yIHRhZ3MuIEZvciBhIHB1bGxfcmVxdWVzdCBldmVudCwgb25seVxuICAgKiBicmFuY2hlcyBhbmQgdGFncyBvbiB0aGUgYmFzZSBhcmUgZXZhbHVhdGVkLiBJZiB5b3UgZGVmaW5lIG9ubHkgdGFncyBvclxuICAgKiBvbmx5IGJyYW5jaGVzLCB0aGUgd29ya2Zsb3cgd29uJ3QgcnVuIGZvciBldmVudHMgYWZmZWN0aW5nIHRoZSB1bmRlZmluZWRcbiAgICogR2l0IHJlZi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2ZpbHRlci1wYXR0ZXJuLWNoZWF0LXNoZWV0XG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBwdXNoLCBwdWxsX3JlcXVlc3QgYW5kIHB1bGxfcmVxdWVzdF90YXJnZXQgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biBvbiBzcGVjaWZpYyBicmFuY2hlcyBvciB0YWdzLiBGb3IgYSBwdWxsX3JlcXVlc3QgZXZlbnQsIG9ubHlcbiAgICogYnJhbmNoZXMgYW5kIHRhZ3Mgb24gdGhlIGJhc2UgYXJlIGV2YWx1YXRlZC4gSWYgeW91IGRlZmluZSBvbmx5IHRhZ3Mgb3JcbiAgICogb25seSBicmFuY2hlcywgdGhlIHdvcmtmbG93IHdvbid0IHJ1biBmb3IgZXZlbnRzIGFmZmVjdGluZyB0aGUgdW5kZWZpbmVkXG4gICAqIEdpdCByZWYuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2Uvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNmaWx0ZXItcGF0dGVybi1jaGVhdC1zaGVldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBwdXNoLCBwdWxsX3JlcXVlc3QgYW5kIHB1bGxfcmVxdWVzdF90YXJnZXQgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biB3aGVuIGF0IGxlYXN0IG9uZSBmaWxlIGRvZXMgbm90IG1hdGNoIHBhdGhzLWlnbm9yZSBvciBhdCBsZWFzdCBvbmVcbiAgICogbW9kaWZpZWQgZmlsZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIHBhdGhzLiBQYXRoIGZpbHRlcnMgYXJlIG5vdFxuICAgKiBldmFsdWF0ZWQgZm9yIHB1c2hlcyB0byB0YWdzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjZmlsdGVyLXBhdHRlcm4tY2hlYXQtc2hlZXRcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVnaXN0cnkgcGFja2FnZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlQYWNrYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJwdWJsaXNoZWRcIiB8IFwidXBkYXRlZFwiPjtcbn1cblxuLyoqXG4gKiBSZWxlYXNlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcInB1Ymxpc2hlZFwiXG4gICAgfCBcInVucHVibGlzaGVkXCJcbiAgICB8IFwiY3JlYXRlZFwiXG4gICAgfCBcImVkaXRlZFwiXG4gICAgfCBcImRlbGV0ZWRcIlxuICAgIHwgXCJwcmVyZWxlYXNlZFwiXG4gICAgfCBcInJlbGVhc2VkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBXYXRjaCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcInN0YXJ0ZWRcIj47XG59XG5cbi8qKlxuICogV29ya2Zsb3cgcnVuIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1J1bk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggd29ya2Zsb3cgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYW55IHdvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dzPzogQXJyYXk8c3RyaW5nPjtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcImNvbXBsZXRlZFwiIHwgXCJyZXF1ZXN0ZWRcIj47XG4gIC8qKlxuICAgKiBXaGljaCBicmFuY2hlcyBvciBicmFuY2gtaWdub3JlIHRvIGxpbWl0IHRoZSB0cmlnZ2VyIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBubyBicmFuY2ggbGltaXRzXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogVGhlIFdvcmtmbG93IGRpc3BhdGNoIGV2ZW50IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dEaXNwYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogSW5wdXRzIGZvciB0aGUgd29ya2Zsb3dfZGlzcGF0Y2ggZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBXb3JrZmxvd0Rpc3BhdGNoSW5wdXQgfTtcbn1cblxuLyoqXG4gKiBBbiBpbnB1dCBmb3IgYSB3b3JrZmxvd19kaXNwYXRjaCBldmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0Rpc3BhdGNoSW5wdXQge1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBpbnB1dC5cbiAgICogQGRlZmF1bHQgXCJzdHJpbmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIiB8IFwiY2hvaWNlXCIgfCBcIm51bWJlclwiIHwgXCJlbnZpcm9ubWVudFwiO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgaW5wdXQgaWYgdHlwZSBpcyAnY2hvaWNlJy5cbiAgICogQGRlZmF1bHQgLSBubyBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFdvcmtmbG93IENhbGwgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q2FsbE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgQ3JlYXRlIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIERlbGV0ZSBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBEZXBsb3ltZW50IGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50T3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBEZXBsb3ltZW50IHN0YXR1cyBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YXR1c09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgRm9yayBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ya09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgR29sbHVtIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb2xsdW1PcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIFBhZ2UgYnVpbGQgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VCdWlsZE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgUHVibGljIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIFN0YXR1cyBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzT3B0aW9ucyB7fVxuLy8jZW5kcmVnaW9uXG4iXX0=
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.GithubWorkflow = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -17,6 +16,13 @@ const yaml_1 = require("../yaml");
17
16
  * @see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
18
17
  */
19
18
  class GithubWorkflow extends component_1.Component {
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.100.0" };
20
+ /**
21
+ * The name of the workflow. GitHub displays the names of your workflows under your repository's
22
+ * "Actions" tab.
23
+ * @see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#name
24
+ */
25
+ name;
20
26
  /**
21
27
  * All current jobs of the workflow.
22
28
  *
@@ -25,6 +31,37 @@ class GithubWorkflow extends component_1.Component {
25
31
  get jobs() {
26
32
  return { ...this._jobs };
27
33
  }
34
+ /**
35
+ * The concurrency configuration of the workflow. undefined means no concurrency limitations.
36
+ */
37
+ concurrency;
38
+ /**
39
+ * Additional environment variables to set for the workflow.
40
+ */
41
+ env;
42
+ /**
43
+ * The workflow YAML file. May not exist if `workflowsEnabled` is false on `GitHub`.
44
+ */
45
+ file;
46
+ /**
47
+ * GitHub API authentication method used by projen workflows.
48
+ */
49
+ projenCredentials;
50
+ /**
51
+ * The name for workflow runs generated from the workflow. GitHub displays the
52
+ * workflow run name in the list of workflow runs on your repository's
53
+ * "Actions" tab. If `run-name` is omitted or is only whitespace, then the run
54
+ * name is set to event-specific information for the workflow run. For
55
+ * example, for a workflow triggered by a `push` or `pull_request` event, it
56
+ * is set as the commit message.
57
+ *
58
+ * This value can include expressions and can reference `github` and `inputs`
59
+ * contexts.
60
+ */
61
+ runName;
62
+ _jobs = {};
63
+ actions;
64
+ events = {};
28
65
  /**
29
66
  * @param github The GitHub component of the project this workflow belongs to.
30
67
  * @param name The name of the workflow, displayed under the repository's "Actions" tab.
@@ -32,8 +69,6 @@ class GithubWorkflow extends component_1.Component {
32
69
  */
33
70
  constructor(github, name, options = {}) {
34
71
  super(github.project, `${new.target.name}#${name}`);
35
- this._jobs = {};
36
- this.events = {};
37
72
  const defaultConcurrency = {
38
73
  cancelInProgress: false,
39
74
  group: "${{ github.workflow }}",
@@ -316,8 +351,6 @@ class GithubWorkflow extends component_1.Component {
316
351
  }
317
352
  }
318
353
  exports.GithubWorkflow = GithubWorkflow;
319
- _a = JSII_RTTI_SYMBOL_1;
320
- GithubWorkflow[_a] = { fqn: "projen.github.GithubWorkflow", version: "0.99.80" };
321
354
  function snakeCaseKeys(obj) {
322
355
  if (typeof obj !== "object" || obj == null) {
323
356
  return obj;
@@ -508,4 +541,4 @@ function verifyJobConstraints(jobs) {
508
541
  }
509
542
  }
510
543
  }
511
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5Q0FBb0M7QUFDcEMsK0JBQTZCO0FBSzdCLDBDQUFzQztBQUN0Qyw0Q0FBeUM7QUFDekMsa0NBQW1EO0FBQ25ELGtDQUFtQztBQXlFbkM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxjQUFlLFNBQVEscUJBQVM7SUFRM0M7Ozs7T0FJRztJQUNILElBQVcsSUFBSTtRQUliLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBMENEOzs7O09BSUc7SUFDSCxZQUNFLE1BQWMsRUFDZCxJQUFZLEVBQ1osVUFBaUMsRUFBRTtRQUVuQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFqQnJDLFVBQUssR0FHbEIsRUFBRSxDQUFDO1FBRUMsV0FBTSxHQUF1QixFQUFFLENBQUM7UUFjdEMsTUFBTSxrQkFBa0IsR0FBdUI7WUFDN0MsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixLQUFLLEVBQUUsd0JBQXdCO1NBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDekMsQ0FBQyxDQUFFLElBQUEsZ0JBQVMsRUFBQztnQkFDVCxrQkFBa0I7Z0JBQ2xCLE9BQU8sQ0FBQyxrQkFBa0I7YUFDM0IsQ0FBd0I7WUFDM0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBRTlCLElBQUks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LElBQUksRUFBRSx5QkFBeUI7WUFDL0IsSUFBSSxFQUFFO2dCQUNKLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDdEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUs7YUFDbkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBMEU7SUFFMUUsdUVBQXVFO0lBQ3ZFLHVEQUF1RDtJQUN2RCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLEVBQUUsZ0hBQWdILENBQ3RILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgc25ha2UgfSBmcm9tIFwiY2FzZVwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWJBY3Rpb25zUHJvdmlkZXIgfSBmcm9tIFwiLi9hY3Rpb25zLXByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEdpdEh1YiB9IGZyb20gXCIuL2dpdGh1YlwiO1xuaW1wb3J0IHR5cGUgeyBHaXRodWJDcmVkZW50aWFscyB9IGZyb20gXCIuL2dpdGh1Yi1jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHR5cGUgKiBhcyB3b3JrZmxvd3MgZnJvbSBcIi4vd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4uL19yZXNvbHZlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UsIGtlYmFiQ2FzZUtleXMgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgWWFtbEZpbGUgfSBmcm9tIFwiLi4veWFtbFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBjb25jdXJyZW5jeWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uY3VycmVuY3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbmN1cnJlbmN5IGdyb3VwIGNvbnRyb2xzIHdoaWNoIHdvcmtmbG93IHJ1bnMgd2lsbCBzaGFyZSB0aGUgc2FtZSBjb25jdXJyZW5jeSBsaW1pdC5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5IGAke3sgZ2l0aHViLndvcmtmbG93IH19LSR7eyBnaXRodWIucmVmIH19YCwgd29ya2Zsb3cgcnVucyB0cmlnZ2VyZWRcbiAgICogb24gdGhlIHNhbWUgYnJhbmNoIGNhbm5vdCBydW4gY29uY3VycmVudGx5LCBidXQgd29ya2Zsb3dzIHJ1bnMgdHJpZ2dlcmVkIG9uIGRpZmZlcmVudCBicmFuY2hlcyBjYW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJHt7IGdpdGh1Yi53b3JrZmxvdyB9fVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvd3JpdGluZy13b3JrZmxvd3MvY2hvb3Npbmctd2hhdC15b3VyLXdvcmtmbG93LWRvZXMvdXNpbmctY29uY3VycmVuY3kjZXhhbXBsZS1jb25jdXJyZW5jeS1ncm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgd29ya2Zsb3cgaXMgdHJpZ2dlcmVkIHdoaWxlIGFub3RoZXIgb25lIChpbiB0aGUgc2FtZSBncm91cCkgaXMgcnVubmluZywgc2hvdWxkIEdpdEh1YiBjYW5jZWxcbiAgICogdGhlIHJ1bm5pbmcgd29ya2Zsb3c/XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYW5jZWxJblByb2dyZXNzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgR2l0aHViV29ya2Zsb3dgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGh1YldvcmtmbG93T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgY3JlYXRpb24gb2YgdGhlIHdvcmtmbG93IGV2ZW4gaWYgYHdvcmtmbG93c2AgaXMgZGlzYWJsZWQgaW4gYEdpdEh1YmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBjb25jdXJyZW5jeSBsaW1pdGF0aW9ucy4gVXNlIGBjb25jdXJyZW5jeU9wdGlvbnNgIHRvIGNvbmZpZ3VyZSBzcGVjaWZpYyBub24gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsaW1pdENvbmN1cnJlbmN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uY3VycmVuY3kgZW5zdXJlcyB0aGF0IG9ubHkgYSBzaW5nbGUgam9iIG9yIHdvcmtmbG93IHVzaW5nIHRoZSBzYW1lIGNvbmN1cnJlbmN5IGdyb3VwIHdpbGwgcnVuIGF0IGEgdGltZS4gQ3VycmVudGx5IGluIGJldGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0geyBncm91cDogJHt7IGdpdGh1Yi53b3JrZmxvdyB9fSwgY2FuY2VsSW5Qcm9ncmVzczogZmFsc2UgfVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvbGVhcm4tZ2l0aHViLWFjdGlvbnMvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNjb25jdXJyZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3lPcHRpb25zPzogQ29uY3VycmVuY3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgZm9yIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogU2V0IGEgY3VzdG9tIGZpbGUgbmFtZSBmb3IgdGhlIHdvcmtmbG93IGRlZmluaXRpb24gZmlsZS4gTXVzdCBpbmNsdWRlIGVpdGhlciBhIC55bWwgb3IgLnlhbWwgZmlsZSBleHRlbnNpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIG9wdGlvbiB0byBzZXQgYSBmaWxlIG5hbWUgZm9yIHRoZSB3b3JrZmxvdyBmaWxlLCB0aGF0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBkaXNwbGF5IG5hbWUuXG4gICAqXG4gICAqIEBleGFtcGxlIFwiYnVpbGQtbmV3LnltbFwiXG4gICAqIEBleGFtcGxlIFwibXktd29ya2Zsb3cueWFtbFwiXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBwYXRoLXNhZmUgdmVyc2lvbiBvZiB0aGUgd29ya2Zsb3cgbmFtZSBwbHVzIHRoZSAueW1sIGZpbGUgZW5kaW5nLCBlLmcuIGJ1aWxkLnltbFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZm9yIEdpdEh1Yi5cbiAqXG4gKiBBIHdvcmtmbG93IGlzIGEgY29uZmlndXJhYmxlIGF1dG9tYXRlZCBwcm9jZXNzIG1hZGUgdXAgb2Ygb25lIG9yIG1vcmUgam9icy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGh1YldvcmtmbG93IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy4gR2l0SHViIGRpc3BsYXlzIHRoZSBuYW1lcyBvZiB5b3VyIHdvcmtmbG93cyB1bmRlciB5b3VyIHJlcG9zaXRvcnknc1xuICAgKiBcIkFjdGlvbnNcIiB0YWIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI25hbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbCBjdXJyZW50IGpvYnMgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvcHksIHVzZSB0aGUgcmVzcGVjdGl2ZSBoZWxwZXIgbWV0aG9kcyB0byBhZGQsIHVwZGF0ZSBvciByZW1vdmUgam9icy5cbiAgICovXG4gIHB1YmxpYyBnZXQgam9icygpOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3dcbiAgPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fam9icyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25jdXJyZW5jeSBjb25maWd1cmF0aW9uIG9mIHRoZSB3b3JrZmxvdy4gdW5kZWZpbmVkIG1lYW5zIG5vIGNvbmN1cnJlbmN5IGxpbWl0YXRpb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogQ29uY3VycmVuY3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgZm9yIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2Zsb3cgWUFNTCBmaWxlLiBNYXkgbm90IGV4aXN0IGlmIGB3b3JrZmxvd3NFbmFibGVkYCBpcyBmYWxzZSBvbiBgR2l0SHViYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBZYW1sRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogR2l0SHViIEFQSSBhdXRoZW50aWNhdGlvbiBtZXRob2QgdXNlZCBieSBwcm9qZW4gd29ya2Zsb3dzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscztcblxuICAvKipcbiAgICogVGhlIG5hbWUgZm9yIHdvcmtmbG93IHJ1bnMgZ2VuZXJhdGVkIGZyb20gdGhlIHdvcmtmbG93LiBHaXRIdWIgZGlzcGxheXMgdGhlXG4gICAqIHdvcmtmbG93IHJ1biBuYW1lIGluIHRoZSBsaXN0IG9mIHdvcmtmbG93IHJ1bnMgb24geW91ciByZXBvc2l0b3J5J3NcbiAgICogXCJBY3Rpb25zXCIgdGFiLiBJZiBgcnVuLW5hbWVgIGlzIG9taXR0ZWQgb3IgaXMgb25seSB3aGl0ZXNwYWNlLCB0aGVuIHRoZSBydW5cbiAgICogbmFtZSBpcyBzZXQgdG8gZXZlbnQtc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRoZSB3b3JrZmxvdyBydW4uIEZvclxuICAgKiBleGFtcGxlLCBmb3IgYSB3b3JrZmxvdyB0cmlnZ2VyZWQgYnkgYSBgcHVzaGAgb3IgYHB1bGxfcmVxdWVzdGAgZXZlbnQsIGl0XG4gICAqIGlzIHNldCBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgY2FuIGluY2x1ZGUgZXhwcmVzc2lvbnMgYW5kIGNhbiByZWZlcmVuY2UgYGdpdGh1YmAgYW5kIGBpbnB1dHNgXG4gICAqIGNvbnRleHRzLlxuICAgKi9cbiAgcHVibGljIHJ1bk5hbWU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfam9iczogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93XG4gID4gPSB7fTtcbiAgcHJpdmF0ZSBhY3Rpb25zOiBHaXRIdWJBY3Rpb25zUHJvdmlkZXI7XG4gIHByaXZhdGUgZXZlbnRzOiB3b3JrZmxvd3MuVHJpZ2dlcnMgPSB7fTtcblxuICAvKipcbiAgICogQHBhcmFtIGdpdGh1YiBUaGUgR2l0SHViIGNvbXBvbmVudCBvZiB0aGUgcHJvamVjdCB0aGlzIHdvcmtmbG93IGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdywgZGlzcGxheWVkIHVuZGVyIHRoZSByZXBvc2l0b3J5J3MgXCJBY3Rpb25zXCIgdGFiLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGdpdGh1YjogR2l0SHViLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBHaXRodWJXb3JrZmxvd09wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoZ2l0aHViLnByb2plY3QsIGAke25ldy50YXJnZXQubmFtZX0jJHtuYW1lfWApO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbmN1cnJlbmN5OiBDb25jdXJyZW5jeU9wdGlvbnMgPSB7XG4gICAgICBjYW5jZWxJblByb2dyZXNzOiBmYWxzZSxcbiAgICAgIGdyb3VwOiBcIiR7eyBnaXRodWIud29ya2Zsb3cgfX1cIixcbiAgICB9O1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gb3B0aW9ucy5saW1pdENvbmN1cnJlbmN5XG4gICAgICA/IChkZWVwTWVyZ2UoW1xuICAgICAgICAgIGRlZmF1bHRDb25jdXJyZW5jeSxcbiAgICAgICAgICBvcHRpb25zLmNvbmN1cnJlbmN5T3B0aW9ucyxcbiAgICAgICAgXSkgYXMgQ29uY3VycmVuY3lPcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm9qZW5DcmVkZW50aWFscyA9IGdpdGh1Yi5wcm9qZW5DcmVkZW50aWFscztcbiAgICB0aGlzLmFjdGlvbnMgPSBnaXRodWIuYWN0aW9ucztcblxuICAgIHRoaXMuZW52ID0gb3B0aW9ucy5lbnY7XG5cbiAgICBjb25zdCB3b3JrZmxvd3NFbmFibGVkID0gZ2l0aHViLndvcmtmbG93c0VuYWJsZWQgfHwgb3B0aW9ucy5mb3JjZTtcblxuICAgIGlmICh3b3JrZmxvd3NFbmFibGVkKSB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IG9wdGlvbnMuZmlsZU5hbWUgPz8gYCR7bmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpfS55bWxgO1xuICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKCFbXCIueW1sXCIsIFwiLnlhbWxcIl0uaW5jbHVkZXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEdpdEh1YiBXb3JrZmxvdyBmaWxlcyBtdXN0IGhhdmUgZWl0aGVyIGEgLnltbCBvciAueWFtbCBmaWxlIGV4dGVuc2lvbiwgZ290OiAke2ZpbGVOYW1lfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLnByb2plY3QsIGAuZ2l0aHViL3dvcmtmbG93cy8ke2ZpbGVOYW1lfWAsIHtcbiAgICAgICAgb2JqOiAoKSA9PiB0aGlzLnJlbmRlcldvcmtmbG93KCksXG4gICAgICAgIC8vIEdpdEh1YiBuZWVkcyB0byByZWFkIHRoZSBmaWxlIGZyb20gdGhlIHJlcG9zaXRvcnkgaW4gb3JkZXIgdG8gd29yay5cbiAgICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBldmVudHMgdG8gdHJpZ2dlcnMgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRzIFRoZSBldmVudChzKSB0byB0cmlnZ2VyIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyBvbihldmVudHM6IHdvcmtmbG93cy5UcmlnZ2Vycykge1xuICAgIHRoaXMuZXZlbnRzID0ge1xuICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAuLi5ldmVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2luZ2xlIGpvYiB0byB0aGUgd29ya2Zsb3cuXG4gICAqIEBwYXJhbSBpZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gam9iIFRoZSBqb2Igc3BlY2lmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGFkZEpvYihcbiAgICBpZDogc3RyaW5nLFxuICAgIGpvYjogd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5hZGRKb2JzKHsgW2lkXTogam9iIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBqb2JzIHRvIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIGpvYnMgSm9icyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkSm9icyhcbiAgICBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93PixcbiAgKSB7XG4gICAgdmVyaWZ5Sm9iQ29uc3RyYWludHMoam9icyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9qb2JzLCB7IC4uLmpvYnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGpvYiBmcm9tIHRoZSB3b3JrZmxvdy5cbiAgICogQHBhcmFtIGlkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqL1xuICBwdWJsaWMgZ2V0Sm9iKFxuICAgIGlkOiBzdHJpbmcsXG4gICk6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cge1xuICAgIHJldHVybiB0aGlzLl9qb2JzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgc2luZ2xlIGpvYiB0byB0aGUgd29ya2Zsb3cuXG4gICAqIEBwYXJhbSBpZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUpvYihcbiAgICBpZDogc3RyaW5nLFxuICAgIGpvYjogd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdyxcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVKb2JzKHsgW2lkXTogam9iIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgam9icyBmb3IgdGhpcyB3b3JrZmxvd1xuICAgKiBEb2VzIGEgY29tcGxldGUgcmVwbGFjZSwgaXQgZG9lcyBub3QgdHJ5IHRvIG1lcmdlIHRoZSBqb2JzXG4gICAqXG4gICAqIEBwYXJhbSBqb2JzIEpvYnMgdG8gdXBkYXRlLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUpvYnMoXG4gICAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gICkge1xuICAgIHZlcmlmeUpvYkNvbnN0cmFpbnRzKGpvYnMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fam9icywgeyAuLi5qb2JzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzaW5nbGUgam9iIHRvIHRoZSB3b3JrZmxvdy5cbiAgICogQHBhcmFtIGlkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlSm9iKGlkOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5fam9ic1tpZF07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNpbmdsZSBzdGVwIGZyb20gYSBqb2IgYnkgc3RlcCBJRC5cbiAgICpcbiAgICogVGhlIHJldHVybmVkIG9iamVjdCBpcyBmcm96ZW4gYW5kIHJlYWQtb25seS4gVXNlIGByZXBsYWNlU3RlcGAgb3JcbiAgICogYHBhdGNoU3RlcGAgdG8gbW9kaWZ5IGEgc3RlcC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwSWQgVGhlIHN0ZXAgSUQgdG8gbG9vayB1cFxuICAgKiBAcmV0dXJucyBBIHJlYWQtb25seSBjb3B5IG9mIHRoZSBzdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RlcChqb2JJZDogc3RyaW5nLCBzdGVwSWQ6IHN0cmluZyk6IHdvcmtmbG93cy5Kb2JTdGVwIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgc3RlcElkLCBqb2JJZCk7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5zdGVwc1tpbmRleF0gfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHN0ZXAgdG8gdGhlIGVuZCBvZiBhIGpvYidzIHN0ZXAgbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIHRvIGFkZC4gTXVzdCBoYXZlIGFuIGBpZGAgc2V0LlxuICAgKi9cbiAgcHVibGljIGFwcGVuZFN0ZXAoam9iSWQ6IHN0cmluZywgc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICB0aGlzLnJlcXVpcmVTdGVwSWQoc3RlcCk7XG4gICAgdGhpcy5yZXF1aXJlVW5pcXVlU3RlcElkKHN0ZXBzLCBzdGVwLmlkISwgam9iSWQpO1xuICAgIHN0ZXBzLnB1c2goc3RlcCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgYW4gZXhpc3Rpbmcgc3RlcCBpbiBhIGpvYiwgcHJlc2VydmluZyBpdHMgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gc3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byByZXBsYWNlXG4gICAqIEBwYXJhbSByZXBsYWNlbWVudFN0ZXAgVGhlIHJlcGxhY2VtZW50IHN0ZXAuIElmIGBpZGAgaXMgb21pdHRlZCwgaXQgaW5oZXJpdHMgdGhlIG9yaWdpbmFsIHN0ZXAncyBJRC5cbiAgICovXG4gIHB1YmxpYyByZXBsYWNlU3RlcChcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIHJlcGxhY2VtZW50U3RlcDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICBjb25zdCBuZXdTdGVwID0geyAuLi5yZXBsYWNlbWVudFN0ZXAsIGlkOiByZXBsYWNlbWVudFN0ZXAuaWQgPz8gc3RlcElkIH07XG5cbiAgICAvLyBJZiB0aGUgaWQgY2hhbmdlZCwgdmFsaWRhdGUgdW5pcXVlbmVzcyBvZiB0aGUgbmV3IGlkXG4gICAgaWYgKG5ld1N0ZXAuaWQgIT09IHN0ZXBJZCkge1xuICAgICAgdGhpcy5yZXF1aXJlVW5pcXVlU3RlcElkKHN0ZXBzLCBuZXdTdGVwLmlkISwgam9iSWQpO1xuICAgIH1cblxuICAgIHN0ZXBzW2luZGV4XSA9IG5ld1N0ZXA7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIHN1cmdpY2FsIG1vZGlmaWNhdGlvbiB0byBhbiBleGlzdGluZyBzdGVwLlxuICAgKlxuICAgKiBUaGUgcHJvdmlkZWQgcGF0Y2ggaXMgc2hhbGxvdy1tZXJnZWQgb250byB0aGUgZXhpc3Rpbmcgc3RlcC4gRmllbGRzIG5vdFxuICAgKiBwcmVzZW50IGluIHRoZSBwYXRjaCBhcmUgcHJlc2VydmVkIHVuY2hhbmdlZC4gVXNlIGBnZXRTdGVwYCB0byByZWFkIHRoZVxuICAgKiBjdXJyZW50IHN0ZXAgdmFsdWVzIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIHBhdGNoLlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXBJZCBUaGUgSUQgb2YgdGhlIHN0ZXAgdG8gcGF0Y2hcbiAgICogQHBhcmFtIHBhdGNoIEEgcGFydGlhbCBzdGVwIG9iamVjdCB3aG9zZSBmaWVsZHMgYXJlIHNoYWxsb3ctbWVyZ2VkIG9udG8gdGhlIGV4aXN0aW5nIHN0ZXBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQXBwZW5kIGEgZmxhZyB0byBhbiBleGlzdGluZyB0ZXN0IGNvbW1hbmQ6XG4gICAqIGNvbnN0IHN0ZXAgPSB3b3JrZmxvdy5nZXRTdGVwKFwiYnVpbGRcIiwgXCJ0ZXN0XCIpO1xuICAgKiB3b3JrZmxvdy5wYXRjaFN0ZXAoXCJidWlsZFwiLCBcInRlc3RcIiwge1xuICAgKiAgIHJ1bjogYCR7c3RlcC5ydW59IC0tdGVzdFBhdGhJZ25vcmVQYXR0ZXJucyBcImludGVncmF0aW9uLypcImAsXG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBBZGQgYW4gZW52IHZhciB3aXRob3V0IHJlcGxhY2luZyBleGlzdGluZyBvbmVzOlxuICAgKiBjb25zdCBzdGVwID0gd29ya2Zsb3cuZ2V0U3RlcChcImJ1aWxkXCIsIFwiaW5zdGFsbFwiKTtcbiAgICogd29ya2Zsb3cucGF0Y2hTdGVwKFwiYnVpbGRcIiwgXCJpbnN0YWxsXCIsIHtcbiAgICogICBlbnY6IHsgLi4uc3RlcC5lbnYsIE5PREVfQVVUSF9UT0tFTjogXCIke3sgc3RlcHMuamZyb2cub3V0cHV0cy5vaWRjLXRva2VuIH19XCIgfSxcbiAgICogfSk7XG4gICAqL1xuICBwdWJsaWMgcGF0Y2hTdGVwKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgc3RlcElkOiBzdHJpbmcsXG4gICAgcGF0Y2g6IHdvcmtmbG93cy5Kb2JTdGVwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgc3RlcElkLCBqb2JJZCk7XG4gICAgY29uc3QgY3VycmVudFN0ZXAgPSBzdGVwc1tpbmRleF07XG4gICAgc3RlcHNbaW5kZXhdID0geyAuLi5jdXJyZW50U3RlcCwgLi4ucGF0Y2gsIGlkOiBzdGVwSWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc3RlcCBmcm9tIGEgam9iIGJ5IHN0ZXAgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gc3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byByZW1vdmVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVTdGVwKGpvYklkOiBzdHJpbmcsIHN0ZXBJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnJlc29sdmVKb2JTdGVwcyhqb2JJZCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTdGVwSW5kZXgoc3RlcHMsIHN0ZXBJZCwgam9iSWQpO1xuICAgIHN0ZXBzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0cyBhIHN0ZXAgYmVmb3JlIGFuIGV4aXN0aW5nIHN0ZXAsIGlkZW50aWZpZWQgYnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gcmVmZXJlbmNlU3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byBpbnNlcnQgYmVmb3JlXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIHRvIGluc2VydC4gTXVzdCBoYXZlIGFuIGBpZGAgc2V0LlxuICAgKi9cbiAgcHVibGljIGluc2VydFN0ZXBCZWZvcmUoXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICByZWZlcmVuY2VTdGVwSWQ6IHN0cmluZyxcbiAgICBzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnJlc29sdmVKb2JTdGVwcyhqb2JJZCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTdGVwSW5kZXgoc3RlcHMsIHJlZmVyZW5jZVN0ZXBJZCwgam9iSWQpO1xuICAgIHRoaXMucmVxdWlyZVN0ZXBJZChzdGVwKTtcbiAgICB0aGlzLnJlcXVpcmVVbmlxdWVTdGVwSWQoc3RlcHMsIHN0ZXAuaWQhLCBqb2JJZCk7XG4gICAgc3RlcHMuc3BsaWNlKGluZGV4LCAwLCBzdGVwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgc3RlcCBhZnRlciBhbiBleGlzdGluZyBzdGVwLCBpZGVudGlmaWVkIGJ5IElELlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHJlZmVyZW5jZVN0ZXBJZCBUaGUgSUQgb2YgdGhlIHN0ZXAgdG8gaW5zZXJ0IGFmdGVyXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIHRvIGluc2VydC4gTXVzdCBoYXZlIGFuIGBpZGAgc2V0LlxuICAgKi9cbiAgcHVibGljIGluc2VydFN0ZXBBZnRlcihcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHJlZmVyZW5jZVN0ZXBJZDogc3RyaW5nLFxuICAgIHN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgcmVmZXJlbmNlU3RlcElkLCBqb2JJZCk7XG4gICAgdGhpcy5yZXF1aXJlU3RlcElkKHN0ZXApO1xuICAgIHRoaXMucmVxdWlyZVVuaXF1ZVN0ZXBJZChzdGVwcywgc3RlcC5pZCEsIGpvYklkKTtcbiAgICBzdGVwcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBzdGVwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgbXV0YWJsZSBzdGVwcyBhcnJheSBmb3IgYSBqb2IuXG4gICAqIFRocm93cyBpZiB0aGUgam9iIGlzIG5vdCBmb3VuZCBvciBpcyBhIHJldXNhYmxlIHdvcmtmbG93IGNhbGwuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVKb2JTdGVwcyhqb2JJZDogc3RyaW5nKTogd29ya2Zsb3dzLkpvYlN0ZXBbXSB7XG4gICAgY29uc3Qgam9iID0gdGhpcy5fam9ic1tqb2JJZF07XG4gICAgaWYgKCFqb2IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpvYiBcIiR7am9iSWR9XCIgbm90IGZvdW5kIGluIHdvcmtmbG93IFwiJHt0aGlzLm5hbWV9XCIuIEF2YWlsYWJsZSBqb2JzOiAke09iamVjdC5rZXlzKHRoaXMuX2pvYnMpLmpvaW4oXCIsIFwiKSB8fCBcIihub25lKVwifWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJ1c2VzXCIgaW4gam9iKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBKb2IgXCIke2pvYklkfVwiIGlzIGEgcmV1c2FibGUgd29ya2Zsb3cgY2FsbCBhbmQgZG9lcyBub3QgaGF2ZSBzdGVwc2AsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gam9iLnN0ZXBzIGFzIHdvcmtmbG93cy5Kb2JTdGVwW107XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGluZGV4IG9mIGEgc3RlcCBieSBJRCBvciBuYW1lIHdpdGhpbiBhIHN0ZXBzIGFycmF5LlxuICAgKiBNYXRjaGVzIGFnYWluc3QgYGlkYCBmaXJzdCwgdGhlbiBmYWxscyBiYWNrIHRvIGBuYW1lYC5cbiAgICogVGhyb3dzIGlmIHRoZSBzdGVwIGlzIG5vdCBmb3VuZCwgb3IgaWYgbXVsdGlwbGUgc3RlcHMgbWF0Y2ggYnkgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgZmluZFN0ZXBJbmRleChcbiAgICBzdGVwczogd29ya2Zsb3dzLkpvYlN0ZXBbXSxcbiAgICBzdGVwSWRPck5hbWU6IHN0cmluZyxcbiAgICBqb2JJZDogc3RyaW5nLFxuICApOiBudW1iZXIge1xuICAgIC8vIFRyeSBleGFjdCBpZCBtYXRjaCBmaXJzdFxuICAgIGNvbnN0IGJ5SWQgPSBzdGVwcy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IHN0ZXBJZE9yTmFtZSk7XG4gICAgaWYgKGJ5SWQgIT09IC0xKSB7XG4gICAgICByZXR1cm4gYnlJZDtcbiAgICB9XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gbmFtZSBtYXRjaFxuICAgIGNvbnN0IGJ5TmFtZTogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3RlcHNbaV0ubmFtZSA9PT0gc3RlcElkT3JOYW1lKSB7XG4gICAgICAgIGJ5TmFtZS5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChieU5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gYnlOYW1lWzBdO1xuICAgIH1cblxuICAgIGlmIChieU5hbWUubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTXVsdGlwbGUgc3RlcHMgbWF0Y2ggbmFtZSBcIiR7c3RlcElkT3JOYW1lfVwiIGluIGpvYiBcIiR7am9iSWR9XCIgKGF0IGluZGljZXMgJHtieU5hbWUuam9pbihcIiwgXCIpfSkuIFVzZSBhIHVuaXF1ZSBzdGVwIFwiaWRcIiBpbnN0ZWFkLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGF2YWlsYWJsZUlkcyA9IHN0ZXBzXG4gICAgICAubWFwKChzKSA9PiBzLmlkKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICBjb25zdCBhdmFpbGFibGVOYW1lcyA9IHN0ZXBzXG4gICAgICAubWFwKChzKSA9PiBzLm5hbWUpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIiwgXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBTdGVwIFwiJHtzdGVwSWRPck5hbWV9XCIgbm90IGZvdW5kIGluIGpvYiBcIiR7am9iSWR9XCIuIEF2YWlsYWJsZSBzdGVwIElEczogJHthdmFpbGFibGVJZHMgfHwgXCIobm9uZSlcIn0uIEF2YWlsYWJsZSBzdGVwIG5hbWVzOiAke2F2YWlsYWJsZU5hbWVzIHx8IFwiKG5vbmUpXCJ9YCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgc3RlcCBoYXMgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwcml2YXRlIHJlcXVpcmVTdGVwSWQoc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXApOiB2b2lkIHtcbiAgICBpZiAoIXN0ZXAuaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1N0ZXAgbXVzdCBoYXZlIGFuIFwiaWRcIiB0byBiZSBhZGRlZCB2aWEgdGhlIHN0ZXAgbXV0YXRpb24gQVBJJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgc3RlcCBJRCBpcyB1bmlxdWUgd2l0aGluIGEgam9iJ3Mgc3RlcHMuXG4gICAqL1xuICBwcml2YXRlIHJlcXVpcmVVbmlxdWVTdGVwSWQoXG4gICAgc3RlcHM6IHdvcmtmbG93cy5Kb2JTdGVwW10sXG4gICAgc3RlcElkOiBzdHJpbmcsXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHN0ZXBzLnNvbWUoKHMpID0+IHMuaWQgPT09IHN0ZXBJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgSUQgXCIke3N0ZXBJZH1cIiBhbHJlYWR5IGV4aXN0cyBpbiBqb2IgXCIke2pvYklkfVwiLiBTdGVwIElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBqb2IuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJXb3JrZmxvdygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgXCJydW4tbmFtZVwiOiB0aGlzLnJ1bk5hbWUsXG4gICAgICBvbjogc25ha2VDYXNlS2V5cyh0aGlzLmV2ZW50cyksXG4gICAgICBjb25jdXJyZW5jeTogdGhpcy5jb25jdXJyZW5jeVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGdyb3VwOiB0aGlzLmNvbmN1cnJlbmN5Py5ncm91cCxcbiAgICAgICAgICAgIFwiY2FuY2VsLWluLXByb2dyZXNzXCI6IHRoaXMuY29uY3VycmVuY3kuY2FuY2VsSW5Qcm9ncmVzcyxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgIGpvYnM6IHJlbmRlckpvYnModGhpcy5fam9icywgdGhpcy5hY3Rpb25zKSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNuYWtlQ2FzZUtleXM8VCA9IHVua25vd24+KG9iajogVCk6IFQge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT0gbnVsbCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoc25ha2VDYXNlS2V5cykgYXMgYW55O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwpIHtcbiAgICAgIHYgPSBzbmFrZUNhc2VLZXlzKHYpO1xuICAgIH1cbiAgICByZXN1bHRbc25ha2UoayldID0gdjtcbiAgfVxuICByZXR1cm4gcmVzdWx0IGFzIGFueTtcbn1cblxuZnVuY3Rpb24gcmVuZGVySm9icyhcbiAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gIGFjdGlvbnM6IEdpdEh1YkFjdGlvbnNQcm92aWRlcixcbikge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW25hbWUsIGpvYl0gb2YgT2JqZWN0LmVudHJpZXMoam9icykpIHtcbiAgICByZXN1bHRbbmFtZV0gPSByZW5kZXJKb2Ioam9iKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIC8qKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMgKi9cbiAgZnVuY3Rpb24gcmVuZGVySm9iKFxuICAgIGpvYjogd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdyxcbiAgKSB7XG4gICAgY29uc3Qgc3RlcHMgPSBuZXcgQXJyYXk8d29ya2Zsb3dzLkpvYlN0ZXA+KCk7XG5cbiAgICAvLyBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy9yZXVzaW5nLXdvcmtmbG93cyNzdXBwb3J0ZWQta2V5d29yZHMtZm9yLWpvYnMtdGhhdC1jYWxsLWEtcmV1c2FibGUtd29ya2Zsb3dcbiAgICBpZiAoXCJ1c2VzXCIgaW4gam9iKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBqb2IubmFtZSxcbiAgICAgICAgbmVlZHM6IGFycmF5T3JTY2FsYXIoam9iLm5lZWRzKSxcbiAgICAgICAgaWY6IGpvYi5pZixcbiAgICAgICAgcGVybWlzc2lvbnM6IGtlYmFiQ2FzZUtleXMoam9iLnBlcm1pc3Npb25zKSxcbiAgICAgICAgY29uY3VycmVuY3k6IGpvYi5jb25jdXJyZW5jeSxcbiAgICAgICAgdXNlczogam9iLnVzZXMsXG4gICAgICAgIHdpdGg6IGpvYi53aXRoLFxuICAgICAgICBzZWNyZXRzOiBqb2Iuc2VjcmV0cyxcbiAgICAgICAgc3RyYXRlZ3k6IHJlbmRlckpvYlN0cmF0ZWd5KGpvYi5zdHJhdGVneSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChqb2IudG9vbHMpIHtcbiAgICAgIHN0ZXBzLnB1c2goLi4uc2V0dXBUb29scyhqb2IudG9vbHMpKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyRGVmaW5lZFN0ZXBzID0ga2ViYWJDYXNlS2V5cyhyZXNvbHZlKGpvYi5zdGVwcyksIGZhbHNlKTtcbiAgICBzdGVwcy5wdXNoKC4uLnVzZXJEZWZpbmVkU3RlcHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGpvYi5uYW1lLFxuICAgICAgbmVlZHM6IGFycmF5T3JTY2FsYXIoam9iLm5lZWRzKSxcbiAgICAgIFwicnVucy1vblwiOiBhcnJheU9yU2NhbGFyKGpvYi5ydW5zT25Hcm91cCkgPz8gYXJyYXlPclNjYWxhcihqb2IucnVuc09uKSxcbiAgICAgIHBlcm1pc3Npb25zOiBrZWJhYkNhc2VLZXlzKGpvYi5wZXJtaXNzaW9ucyksXG4gICAgICBlbnZpcm9ubWVudDogam9iLmVudmlyb25tZW50LFxuICAgICAgY29uY3VycmVuY3k6IGpvYi5jb25jdXJyZW5jeSxcbiAgICAgIG91dHB1dHM6IHJlbmRlckpvYk91dHB1dHMoam9iLm91dHB1dHMpLFxuICAgICAgZW52OiBqb2IuZW52LFxuICAgICAgZGVmYXVsdHM6IGtlYmFiQ2FzZUtleXMoam9iLmRlZmF1bHRzKSxcbiAgICAgIGlmOiBqb2IuaWYsXG4gICAgICBzdGVwczogc3RlcHMubWFwKHJlbmRlclN0ZXApLFxuICAgICAgXCJ0aW1lb3V0LW1pbnV0ZXNcIjogam9iLnRpbWVvdXRNaW51dGVzLFxuICAgICAgc3RyYXRlZ3k6IHJlbmRlckpvYlN0cmF0ZWd5KGpvYi5zdHJhdGVneSksXG4gICAgICBcImNvbnRpbnVlLW9uLWVycm9yXCI6IGpvYi5jb250aW51ZU9uRXJyb3IsXG4gICAgICBjb250YWluZXI6IGpvYi5jb250YWluZXIsXG4gICAgICBzZXJ2aWNlczogam9iLnNlcnZpY2VzLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJKb2JPdXRwdXRzKG91dHB1dDogd29ya2Zsb3dzLkpvYltcIm91dHB1dHNcIl0pIHtcbiAgICBpZiAob3V0cHV0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB7IHN0ZXBJZCwgb3V0cHV0TmFtZSB9XSBvZiBPYmplY3QuZW50cmllcyhvdXRwdXQpKSB7XG4gICAgICByZW5kZXJlZFtuYW1lXSA9IGBcXCR7eyBzdGVwcy4ke3N0ZXBJZH0ub3V0cHV0cy4ke291dHB1dE5hbWV9IH19YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlcmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVySm9iU3RyYXRlZ3koc3RyYXRlZ3k6IHdvcmtmbG93cy5Kb2JbXCJzdHJhdGVneVwiXSkge1xuICAgIGlmIChzdHJhdGVneSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIFwibWF4LXBhcmFsbGVsXCI6IHN0cmF0ZWd5Lm1heFBhcmFsbGVsLFxuICAgICAgXCJmYWlsLWZhc3RcIjogc3RyYXRlZ3kuZmFpbEZhc3QsXG4gICAgfTtcblxuICAgIGlmIChzdHJhdGVneS5tYXRyaXgpIHtcbiAgICAgIGNvbnN0IG1hdHJpeDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIGluY2x1ZGU6IHN0cmF0ZWd5Lm1hdHJpeC5pbmNsdWRlLFxuICAgICAgICBleGNsdWRlOiBzdHJhdGVneS5tYXRyaXguZXhjbHVkZSxcbiAgICAgIH07XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIHN0cmF0ZWd5Lm1hdHJpeC5kb21haW4gPz8ge30sXG4gICAgICApKSB7XG4gICAgICAgIGlmIChrZXkgaW4gbWF0cml4KSB7XG4gICAgICAgICAgLy8gQSBkb21haW4ga2V5IHdhcyBzZXQgdG8gYGluY2x1ZGVgLCBvciBgZXhjbHVkZWA6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIGpvYiBzdHJhdGVneSBtYXRyaXgga2V5OiAke2tleX1gKTtcbiAgICAgICAgfVxuICAgICAgICBtYXRyaXhba2V5XSA9IHZhbHVlcztcbiAgICAgIH1cbiAgICAgIHJlbmRlcmVkLm1hdHJpeCA9IG1hdHJpeDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJTdGVwKHN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHN0ZXAubmFtZSxcbiAgICAgIGlkOiBzdGVwLmlkLFxuICAgICAgaWY6IHN0ZXAuaWYsXG4gICAgICB1c2VzOiBzdGVwLnVzZXMgJiYgYWN0aW9ucy5nZXQoc3RlcC51c2VzKSxcbiAgICAgIGVudjogc3RlcC5lbnYsXG4gICAgICBydW46IHN0ZXAucnVuLFxuICAgICAgc2hlbGw6IHN0ZXAuc2hlbGwsXG4gICAgICB3aXRoOiBzdGVwLndpdGgsXG4gICAgICBcImNvbnRpbnVlLW9uLWVycm9yXCI6IHN0ZXAuY29udGludWVPbkVycm9yLFxuICAgICAgXCJ0aW1lb3V0LW1pbnV0ZXNcIjogc3RlcC50aW1lb3V0TWludXRlcyxcbiAgICAgIFwid29ya2luZy1kaXJlY3RvcnlcIjogc3RlcC53b3JraW5nRGlyZWN0b3J5LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJyYXlPclNjYWxhcjxUPihhcnI6IFQgfCBUW10gfCB1bmRlZmluZWQpOiBUIHwgVFtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICByZXR1cm4gYXJyO1xuICB9XG4gIGlmIChhcnIgPT0gbnVsbCB8fCBhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBpZiAoYXJyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gc2V0dXBUb29scyh0b29sczogd29ya2Zsb3dzLlRvb2xzKSB7XG4gIGNvbnN0IHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdID0gW107XG5cbiAgaWYgKHRvb2xzLmphdmEpIHtcbiAgICBpZiAodG9vbHMuamF2YS5jYWNoZSAmJiAhdG9vbHMuamF2YS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImphdmEucGFja2FnZU1hbmFnZXIgaXMgcmVxdWlyZWQgd2hlbiBqYXZhLmNhY2hlIGlzIHRydWVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLWphdmFAdjVcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZGlzdHJpYnV0aW9uOiB0b29scy5qYXZhLmRpc3RyaWJ1dGlvbiA/PyBcImNvcnJldHRvXCIsXG4gICAgICAgIFwiamF2YS12ZXJzaW9uXCI6IHRvb2xzLmphdmEudmVyc2lvbixcbiAgICAgICAgLi4uKHRvb2xzLmphdmEuY2FjaGUgJiYgeyBjYWNoZTogdG9vbHMuamF2YS5wYWNrYWdlTWFuYWdlciB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBpZiAodG9vbHMubm9kZSkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLW5vZGVAdjZcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgXCJub2RlLXZlcnNpb25cIjogdG9vbHMubm9kZS52ZXJzaW9uLFxuICAgICAgICBcInBhY2thZ2UtbWFuYWdlci1jYWNoZVwiOiB0b29scy5ub2RlLmNhY2hlID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5weXRob24pIHtcbiAgICBpZiAodG9vbHMucHl0aG9uLmNhY2hlICYmICF0b29scy5weXRob24ucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJweXRob24ucGFja2FnZU1hbmFnZXIgaXMgcmVxdWlyZWQgd2hlbiBweXRob24uY2FjaGUgaXMgdHJ1ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgc3RlcHMucHVzaCh7XG4gICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtcHl0aG9uQHY2XCIsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwicHl0aG9uLXZlcnNpb25cIjogdG9vbHMucHl0aG9uLnZlcnNpb24sXG4gICAgICAgIC4uLih0b29scy5weXRob24uY2FjaGUgJiYgeyBjYWNoZTogdG9vbHMucHl0aG9uLnBhY2thZ2VNYW5hZ2VyIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5nbykge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLWdvQHY2XCIsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwiZ28tdmVyc2lvblwiOiB0b29scy5nby52ZXJzaW9uLFxuICAgICAgICBjYWNoZTogdG9vbHMuZ28uY2FjaGUgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRvb2xzLmRvdG5ldCkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLWRvdG5ldEB2NVwiLFxuICAgICAgd2l0aDoge1xuICAgICAgICBcImRvdG5ldC12ZXJzaW9uXCI6IHRvb2xzLmRvdG5ldC52ZXJzaW9uLFxuICAgICAgICBjYWNoZTogdG9vbHMuZG90bmV0LmNhY2hlID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwcztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Sm9iQ29uc3RyYWludHMoXG4gIGpvYnM6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3c+LFxuKSB7XG4gIC8vIHZlcmlmeSB0aGF0IGpvYiBoYXMgYSBcInBlcm1pc3Npb25zXCIgc3RhdGVtZW50IHRvIGVuc3VyZSB3b3JrZmxvdyBjYW5cbiAgLy8gb3BlcmF0ZSBpbiByZXBvcyB3aXRoIGRlZmF1bHQgdG9rZW5zIHNldCB0byByZWFkb25seVxuICBmb3IgKGNvbnN0IFtpZCwgam9iXSBvZiBPYmplY3QuZW50cmllcyhqb2JzKSkge1xuICAgIGlmICgham9iLnBlcm1pc3Npb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2lkfTogYWxsIHdvcmtmbG93IGpvYnMgbXVzdCBoYXZlIGEgXCJwZXJtaXNzaW9uc1wiIGNsYXVzZSB0byBlbnN1cmUgd29ya2Zsb3cgY2FuIG9wZXJhdGUgaW4gcmVzdHJpY3RlZCByZXBvc2l0b3JpZXNgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
544
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHlDQUFvQztBQUNwQywrQkFBNkI7QUFLN0IsMENBQXNDO0FBQ3RDLDRDQUF5QztBQUN6QyxrQ0FBbUQ7QUFDbkQsa0NBQW1DO0FBeUVuQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxxQkFBUzs7SUFDM0M7Ozs7T0FJRztJQUNhLElBQUksQ0FBUztJQUU3Qjs7OztPQUlHO0lBQ0gsSUFBVyxJQUFJO1FBSWIsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNhLFdBQVcsQ0FBc0I7SUFFakQ7O09BRUc7SUFDYSxHQUFHLENBQTBCO0lBRTdDOztPQUVHO0lBQ2EsSUFBSSxDQUF1QjtJQUUzQzs7T0FFRztJQUNhLGlCQUFpQixDQUFvQjtJQUVyRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksT0FBTyxDQUFVO0lBRVAsS0FBSyxHQUdsQixFQUFFLENBQUM7SUFDQyxPQUFPLENBQXdCO0lBQy9CLE1BQU0sR0FBdUIsRUFBRSxDQUFDO0lBRXhDOzs7O09BSUc7SUFDSCxZQUNFLE1BQWMsRUFDZCxJQUFZLEVBQ1osVUFBaUMsRUFBRTtRQUVuQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxrQkFBa0IsR0FBdUI7WUFDN0MsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixLQUFLLEVBQUUsd0JBQXdCO1NBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDekMsQ0FBQyxDQUFFLElBQUEs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O2dCQUNKLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU87Z0JBQzlCLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLEVBQUUseUJBQXlCO1lBQy9CLElBQUksRUFBRTtnQkFDSixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ3RDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLO2FBQ25DO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLElBQTBFO0lBRTFFLHVFQUF1RTtJQUN2RSx1REFBdUQ7SUFDdkQsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxFQUFFLGdIQUFnSCxDQUN0SCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0bmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHNuYWtlIH0gZnJvbSBcImNhc2VcIjtcbmltcG9ydCB0eXBlIHsgR2l0SHViQWN0aW9uc1Byb3ZpZGVyIH0gZnJvbSBcIi4vYWN0aW9ucy1wcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWIgfSBmcm9tIFwiLi9naXRodWJcIjtcbmltcG9ydCB0eXBlIHsgR2l0aHViQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi9naXRodWItY3JlZGVudGlhbHNcIjtcbmltcG9ydCB0eXBlICogYXMgd29ya2Zsb3dzIGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi9fcmVzb2x2ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBrZWJhYkNhc2VLZXlzIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSBcIi4uL3lhbWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgY29uY3VycmVuY3lgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmN1cnJlbmN5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb25jdXJyZW5jeSBncm91cCBjb250cm9scyB3aGljaCB3b3JrZmxvdyBydW5zIHdpbGwgc2hhcmUgdGhlIHNhbWUgY29uY3VycmVuY3kgbGltaXQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgJHt7IGdpdGh1Yi53b3JrZmxvdyB9fS0ke3sgZ2l0aHViLnJlZiB9fWAsIHdvcmtmbG93IHJ1bnMgdHJpZ2dlcmVkXG4gICAqIG9uIHRoZSBzYW1lIGJyYW5jaCBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSwgYnV0IHdvcmtmbG93cyBydW5zIHRyaWdnZXJlZCBvbiBkaWZmZXJlbnQgYnJhbmNoZXMgY2FuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtICR7eyBnaXRodWIud29ya2Zsb3cgfX1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL3VzaW5nLWNvbmN1cnJlbmN5I2V4YW1wbGUtY29uY3VycmVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBncm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBhIHdvcmtmbG93IGlzIHRyaWdnZXJlZCB3aGlsZSBhbm90aGVyIG9uZSAoaW4gdGhlIHNhbWUgZ3JvdXApIGlzIHJ1bm5pbmcsIHNob3VsZCBHaXRIdWIgY2FuY2VsXG4gICAqIHRoZSBydW5uaW5nIHdvcmtmbG93P1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsSW5Qcm9ncmVzcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEdpdGh1YldvcmtmbG93YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogRm9yY2UgdGhlIGNyZWF0aW9uIG9mIHRoZSB3b3JrZmxvdyBldmVuIGlmIGB3b3JrZmxvd3NgIGlzIGRpc2FibGVkIGluIGBHaXRIdWJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgY29uY3VycmVuY3kgbGltaXRhdGlvbnMuIFVzZSBgY29uY3VycmVuY3lPcHRpb25zYCB0byBjb25maWd1cmUgc3BlY2lmaWMgbm9uIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXRDb25jdXJyZW5jeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmN1cnJlbmN5IGVuc3VyZXMgdGhhdCBvbmx5IGEgc2luZ2xlIGpvYiBvciB3b3JrZmxvdyB1c2luZyB0aGUgc2FtZSBjb25jdXJyZW5jeSBncm91cCB3aWxsIHJ1biBhdCBhIHRpbWUuIEN1cnJlbnRseSBpbiBiZXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHsgZ3JvdXA6ICR7eyBnaXRodWIud29ya2Zsb3cgfX0sIGNhbmNlbEluUHJvZ3Jlc3M6IGZhbHNlIH1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2xlYXJuLWdpdGh1Yi1hY3Rpb25zL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjY29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5T3B0aW9ucz86IENvbmN1cnJlbmN5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZvciB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldCBhIGN1c3RvbSBmaWxlIG5hbWUgZm9yIHRoZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZpbGUuIE11c3QgaW5jbHVkZSBlaXRoZXIgYSAueW1sIG9yIC55YW1sIGZpbGUgZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gc2V0IGEgZmlsZSBuYW1lIGZvciB0aGUgd29ya2Zsb3cgZmlsZSwgdGhhdCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGlzcGxheSBuYW1lLlxuICAgKlxuICAgKiBAZXhhbXBsZSBcImJ1aWxkLW5ldy55bWxcIlxuICAgKiBAZXhhbXBsZSBcIm15LXdvcmtmbG93LnlhbWxcIlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgcGF0aC1zYWZlIHZlcnNpb24gb2YgdGhlIHdvcmtmbG93IG5hbWUgcGx1cyB0aGUgLnltbCBmaWxlIGVuZGluZywgZS5nLiBidWlsZC55bWxcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGZvciBHaXRIdWIuXG4gKlxuICogQSB3b3JrZmxvdyBpcyBhIGNvbmZpZ3VyYWJsZSBhdXRvbWF0ZWQgcHJvY2VzcyBtYWRlIHVwIG9mIG9uZSBvciBtb3JlIGpvYnMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cuIEdpdEh1YiBkaXNwbGF5cyB0aGUgbmFtZXMgb2YgeW91ciB3b3JrZmxvd3MgdW5kZXIgeW91ciByZXBvc2l0b3J5J3NcbiAgICogXCJBY3Rpb25zXCIgdGFiLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvd3JpdGluZy13b3JrZmxvd3Mvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGwgY3VycmVudCBqb2JzIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogVGhpcyBpcyBhIHJlYWQtb25seSBjb3B5LCB1c2UgdGhlIHJlc3BlY3RpdmUgaGVscGVyIG1ldGhvZHMgdG8gYWRkLCB1cGRhdGUgb3IgcmVtb3ZlIGpvYnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGpvYnMoKTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93XG4gID4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2pvYnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29uY3VycmVuY3kgY29uZmlndXJhdGlvbiBvZiB0aGUgd29ya2Zsb3cuIHVuZGVmaW5lZCBtZWFucyBubyBjb25jdXJyZW5jeSBsaW1pdGF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25jdXJyZW5jeT86IENvbmN1cnJlbmN5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZvciB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIHdvcmtmbG93IFlBTUwgZmlsZS4gTWF5IG5vdCBleGlzdCBpZiBgd29ya2Zsb3dzRW5hYmxlZGAgaXMgZmFsc2Ugb24gYEdpdEh1YmAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogWWFtbEZpbGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBUEkgYXV0aGVudGljYXRpb24gbWV0aG9kIHVzZWQgYnkgcHJvamVuIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZW5DcmVkZW50aWFsczogR2l0aHViQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB3b3JrZmxvdyBydW5zIGdlbmVyYXRlZCBmcm9tIHRoZSB3b3JrZmxvdy4gR2l0SHViIGRpc3BsYXlzIHRoZVxuICAgKiB3b3JrZmxvdyBydW4gbmFtZSBpbiB0aGUgbGlzdCBvZiB3b3JrZmxvdyBydW5zIG9uIHlvdXIgcmVwb3NpdG9yeSdzXG4gICAqIFwiQWN0aW9uc1wiIHRhYi4gSWYgYHJ1bi1uYW1lYCBpcyBvbWl0dGVkIG9yIGlzIG9ubHkgd2hpdGVzcGFjZSwgdGhlbiB0aGUgcnVuXG4gICAqIG5hbWUgaXMgc2V0IHRvIGV2ZW50LXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgd29ya2Zsb3cgcnVuLiBGb3JcbiAgICogZXhhbXBsZSwgZm9yIGEgd29ya2Zsb3cgdHJpZ2dlcmVkIGJ5IGEgYHB1c2hgIG9yIGBwdWxsX3JlcXVlc3RgIGV2ZW50LCBpdFxuICAgKiBpcyBzZXQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlLlxuICAgKlxuICAgKiBUaGlzIHZhbHVlIGNhbiBpbmNsdWRlIGV4cHJlc3Npb25zIGFuZCBjYW4gcmVmZXJlbmNlIGBnaXRodWJgIGFuZCBgaW5wdXRzYFxuICAgKiBjb250ZXh0cy5cbiAgICovXG4gIHB1YmxpYyBydW5OYW1lPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2pvYnM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvd1xuICA+ID0ge307XG4gIHByaXZhdGUgYWN0aW9uczogR2l0SHViQWN0aW9uc1Byb3ZpZGVyO1xuICBwcml2YXRlIGV2ZW50czogd29ya2Zsb3dzLlRyaWdnZXJzID0ge307XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBnaXRodWIgVGhlIEdpdEh1YiBjb21wb25lbnQgb2YgdGhlIHByb2plY3QgdGhpcyB3b3JrZmxvdyBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3csIGRpc3BsYXllZCB1bmRlciB0aGUgcmVwb3NpdG9yeSdzIFwiQWN0aW9uc1wiIHRhYi5cbiAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBnaXRodWI6IEdpdEh1YixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2l0aHViV29ya2Zsb3dPcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKGdpdGh1Yi5wcm9qZWN0LCBgJHtuZXcudGFyZ2V0Lm5hbWV9IyR7bmFtZX1gKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb25jdXJyZW5jeTogQ29uY3VycmVuY3lPcHRpb25zID0ge1xuICAgICAgY2FuY2VsSW5Qcm9ncmVzczogZmFsc2UsXG4gICAgICBncm91cDogXCIke3sgZ2l0aHViLndvcmtmbG93IH19XCIsXG4gICAgfTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb25jdXJyZW5jeSA9IG9wdGlvbnMubGltaXRDb25jdXJyZW5jeVxuICAgICAgPyAoZGVlcE1lcmdlKFtcbiAgICAgICAgICBkZWZhdWx0Q29uY3VycmVuY3ksXG4gICAgICAgICAgb3B0aW9ucy5jb25jdXJyZW5jeU9wdGlvbnMsXG4gICAgICAgIF0pIGFzIENvbmN1cnJlbmN5T3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBnaXRodWIucHJvamVuQ3JlZGVudGlhbHM7XG4gICAgdGhpcy5hY3Rpb25zID0gZ2l0aHViLmFjdGlvbnM7XG5cbiAgICB0aGlzLmVudiA9IG9wdGlvbnMuZW52O1xuXG4gICAgY29uc3Qgd29ya2Zsb3dzRW5hYmxlZCA9IGdpdGh1Yi53b3JrZmxvd3NFbmFibGVkIHx8IG9wdGlvbnMuZm9yY2U7XG5cbiAgICBpZiAod29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lID8/IGAke25hbWUudG9Mb2NhbGVMb3dlckNhc2UoKX0ueW1sYDtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICghW1wiLnltbFwiLCBcIi55YW1sXCJdLmluY2x1ZGVzKGV4dGVuc2lvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHaXRIdWIgV29ya2Zsb3cgZmlsZXMgbXVzdCBoYXZlIGVpdGhlciBhIC55bWwgb3IgLnlhbWwgZmlsZSBleHRlbnNpb24sIGdvdDogJHtmaWxlTmFtZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbGUgPSBuZXcgWWFtbEZpbGUodGhpcy5wcm9qZWN0LCBgLmdpdGh1Yi93b3JrZmxvd3MvJHtmaWxlTmFtZX1gLCB7XG4gICAgICAgIG9iajogKCkgPT4gdGhpcy5yZW5kZXJXb3JrZmxvdygpLFxuICAgICAgICAvLyBHaXRIdWIgbmVlZHMgdG8gcmVhZCB0aGUgZmlsZSBmcm9tIHRoZSByZXBvc2l0b3J5IGluIG9yZGVyIHRvIHdvcmsuXG4gICAgICAgIGNvbW1pdHRlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZXZlbnRzIHRvIHRyaWdnZXJzIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50cyBUaGUgZXZlbnQocykgdG8gdHJpZ2dlciB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgb24oZXZlbnRzOiB3b3JrZmxvd3MuVHJpZ2dlcnMpIHtcbiAgICB0aGlzLmV2ZW50cyA9IHtcbiAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgLi4uZXZlbnRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpbmdsZSBqb2IgdG8gdGhlIHdvcmtmbG93LlxuICAgKiBAcGFyYW0gaWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIGpvYiBUaGUgam9iIHNwZWNpZmljYXRpb25cbiAgICovXG4gIHB1YmxpYyBhZGRKb2IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBqb2I6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3csXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYWRkSm9icyh7IFtpZF06IGpvYiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgam9icyB0byB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JzIEpvYnMgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZEpvYnMoXG4gICAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gICkge1xuICAgIHZlcmlmeUpvYkNvbnN0cmFpbnRzKGpvYnMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fam9icywgeyAuLi5qb2JzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBqb2IgZnJvbSB0aGUgd29ya2Zsb3cuXG4gICAqIEBwYXJhbSBpZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKi9cbiAgcHVibGljIGdldEpvYihcbiAgICBpZDogc3RyaW5nLFxuICApOiB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93IHtcbiAgICByZXR1cm4gdGhpcy5fam9ic1tpZF07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHNpbmdsZSBqb2IgdG8gdGhlIHdvcmtmbG93LlxuICAgKiBAcGFyYW0gaWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVKb2IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBqb2I6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3csXG4gICkge1xuICAgIHRoaXMudXBkYXRlSm9icyh7IFtpZF06IGpvYiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGpvYnMgZm9yIHRoaXMgd29ya2Zsb3dcbiAgICogRG9lcyBhIGNvbXBsZXRlIHJlcGxhY2UsIGl0IGRvZXMgbm90IHRyeSB0byBtZXJnZSB0aGUgam9ic1xuICAgKlxuICAgKiBAcGFyYW0gam9icyBKb2JzIHRvIHVwZGF0ZS5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVKb2JzKFxuICAgIGpvYnM6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3c+LFxuICApIHtcbiAgICB2ZXJpZnlKb2JDb25zdHJhaW50cyhqb2JzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX2pvYnMsIHsgLi4uam9icyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc2luZ2xlIGpvYiB0byB0aGUgd29ya2Zsb3cuXG4gICAqIEBwYXJhbSBpZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUpvYihpZDogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzaW5nbGUgc3RlcCBmcm9tIGEgam9iIGJ5IHN0ZXAgSUQuXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBvYmplY3QgaXMgZnJvemVuIGFuZCByZWFkLW9ubHkuIFVzZSBgcmVwbGFjZVN0ZXBgIG9yXG4gICAqIGBwYXRjaFN0ZXBgIHRvIG1vZGlmeSBhIHN0ZXAuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gc3RlcElkIFRoZSBzdGVwIElEIHRvIGxvb2sgdXBcbiAgICogQHJldHVybnMgQSByZWFkLW9ubHkgY29weSBvZiB0aGUgc3RlcFxuICAgKi9cbiAgcHVibGljIGdldFN0ZXAoam9iSWQ6IHN0cmluZywgc3RlcElkOiBzdHJpbmcpOiB3b3JrZmxvd3MuSm9iU3RlcCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnJlc29sdmVKb2JTdGVwcyhqb2JJZCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTdGVwSW5kZXgoc3RlcHMsIHN0ZXBJZCwgam9iSWQpO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4uc3RlcHNbaW5kZXhdIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYSBzdGVwIHRvIHRoZSBlbmQgb2YgYSBqb2IncyBzdGVwIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0byBhZGQuIE11c3QgaGF2ZSBhbiBgaWRgIHNldC5cbiAgICovXG4gIHB1YmxpYyBhcHBlbmRTdGVwKGpvYklkOiBzdHJpbmcsIHN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnJlc29sdmVKb2JTdGVwcyhqb2JJZCk7XG4gICAgdGhpcy5yZXF1aXJlU3RlcElkKHN0ZXApO1xuICAgIHRoaXMucmVxdWlyZVVuaXF1ZVN0ZXBJZChzdGVwcywgc3RlcC5pZCEsIGpvYklkKTtcbiAgICBzdGVwcy5wdXNoKHN0ZXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFuIGV4aXN0aW5nIHN0ZXAgaW4gYSBqb2IsIHByZXNlcnZpbmcgaXRzIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXBJZCBUaGUgSUQgb2YgdGhlIHN0ZXAgdG8gcmVwbGFjZVxuICAgKiBAcGFyYW0gcmVwbGFjZW1lbnRTdGVwIFRoZSByZXBsYWNlbWVudCBzdGVwLiBJZiBgaWRgIGlzIG9taXR0ZWQsIGl0IGluaGVyaXRzIHRoZSBvcmlnaW5hbCBzdGVwJ3MgSUQuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZVN0ZXAoXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICByZXBsYWNlbWVudFN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgc3RlcElkLCBqb2JJZCk7XG4gICAgY29uc3QgbmV3U3RlcCA9IHsgLi4ucmVwbGFjZW1lbnRTdGVwLCBpZDogcmVwbGFjZW1lbnRTdGVwLmlkID8/IHN0ZXBJZCB9O1xuXG4gICAgLy8gSWYgdGhlIGlkIGNoYW5nZWQsIHZhbGlkYXRlIHVuaXF1ZW5lc3Mgb2YgdGhlIG5ldyBpZFxuICAgIGlmIChuZXdTdGVwLmlkICE9PSBzdGVwSWQpIHtcbiAgICAgIHRoaXMucmVxdWlyZVVuaXF1ZVN0ZXBJZChzdGVwcywgbmV3U3RlcC5pZCEsIGpvYklkKTtcbiAgICB9XG5cbiAgICBzdGVwc1tpbmRleF0gPSBuZXdTdGVwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBzdXJnaWNhbCBtb2RpZmljYXRpb24gdG8gYW4gZXhpc3Rpbmcgc3RlcC5cbiAgICpcbiAgICogVGhlIHByb3ZpZGVkIHBhdGNoIGlzIHNoYWxsb3ctbWVyZ2VkIG9udG8gdGhlIGV4aXN0aW5nIHN0ZXAuIEZpZWxkcyBub3RcbiAgICogcHJlc2VudCBpbiB0aGUgcGF0Y2ggYXJlIHByZXNlcnZlZCB1bmNoYW5nZWQuIFVzZSBgZ2V0U3RlcGAgdG8gcmVhZCB0aGVcbiAgICogY3VycmVudCBzdGVwIHZhbHVlcyBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBwYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIHBhdGNoXG4gICAqIEBwYXJhbSBwYXRjaCBBIHBhcnRpYWwgc3RlcCBvYmplY3Qgd2hvc2UgZmllbGRzIGFyZSBzaGFsbG93LW1lcmdlZCBvbnRvIHRoZSBleGlzdGluZyBzdGVwXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEFwcGVuZCBhIGZsYWcgdG8gYW4gZXhpc3RpbmcgdGVzdCBjb21tYW5kOlxuICAgKiBjb25zdCBzdGVwID0gd29ya2Zsb3cuZ2V0U3RlcChcImJ1aWxkXCIsIFwidGVzdFwiKTtcbiAgICogd29ya2Zsb3cucGF0Y2hTdGVwKFwiYnVpbGRcIiwgXCJ0ZXN0XCIsIHtcbiAgICogICBydW46IGAke3N0ZXAucnVufSAtLXRlc3RQYXRoSWdub3JlUGF0dGVybnMgXCJpbnRlZ3JhdGlvbi8qXCJgLFxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQWRkIGFuIGVudiB2YXIgd2l0aG91dCByZXBsYWNpbmcgZXhpc3Rpbmcgb25lczpcbiAgICogY29uc3Qgc3RlcCA9IHdvcmtmbG93LmdldFN0ZXAoXCJidWlsZFwiLCBcImluc3RhbGxcIik7XG4gICAqIHdvcmtmbG93LnBhdGNoU3RlcChcImJ1aWxkXCIsIFwiaW5zdGFsbFwiLCB7XG4gICAqICAgZW52OiB7IC4uLnN0ZXAuZW52LCBOT0RFX0FVVEhfVE9LRU46IFwiJHt7IHN0ZXBzLmpmcm9nLm91dHB1dHMub2lkYy10b2tlbiB9fVwiIH0sXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIHBhdGNoU3RlcChcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIHBhdGNoOiB3b3JrZmxvd3MuSm9iU3RlcCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnJlc29sdmVKb2JTdGVwcyhqb2JJZCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTdGVwSW5kZXgoc3RlcHMsIHN0ZXBJZCwgam9iSWQpO1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gc3RlcHNbaW5kZXhdO1xuICAgIHN0ZXBzW2luZGV4XSA9IHsgLi4uY3VycmVudFN0ZXAsIC4uLnBhdGNoLCBpZDogc3RlcElkIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHN0ZXAgZnJvbSBhIGpvYiBieSBzdGVwIElELlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXBJZCBUaGUgSUQgb2YgdGhlIHN0ZXAgdG8gcmVtb3ZlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlU3RlcChqb2JJZDogc3RyaW5nLCBzdGVwSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICBzdGVwcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzdGVwIGJlZm9yZSBhbiBleGlzdGluZyBzdGVwLCBpZGVudGlmaWVkIGJ5IElELlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHJlZmVyZW5jZVN0ZXBJZCBUaGUgSUQgb2YgdGhlIHN0ZXAgdG8gaW5zZXJ0IGJlZm9yZVxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0byBpbnNlcnQuIE11c3QgaGF2ZSBhbiBgaWRgIHNldC5cbiAgICovXG4gIHB1YmxpYyBpbnNlcnRTdGVwQmVmb3JlKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgcmVmZXJlbmNlU3RlcElkOiBzdHJpbmcsXG4gICAgc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCByZWZlcmVuY2VTdGVwSWQsIGpvYklkKTtcbiAgICB0aGlzLnJlcXVpcmVTdGVwSWQoc3RlcCk7XG4gICAgdGhpcy5yZXF1aXJlVW5pcXVlU3RlcElkKHN0ZXBzLCBzdGVwLmlkISwgam9iSWQpO1xuICAgIHN0ZXBzLnNwbGljZShpbmRleCwgMCwgc3RlcCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0cyBhIHN0ZXAgYWZ0ZXIgYW4gZXhpc3Rpbmcgc3RlcCwgaWRlbnRpZmllZCBieSBJRC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSByZWZlcmVuY2VTdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIGluc2VydCBhZnRlclxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0byBpbnNlcnQuIE11c3QgaGF2ZSBhbiBgaWRgIHNldC5cbiAgICovXG4gIHB1YmxpYyBpbnNlcnRTdGVwQWZ0ZXIoXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICByZWZlcmVuY2VTdGVwSWQ6IHN0cmluZyxcbiAgICBzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnJlc29sdmVKb2JTdGVwcyhqb2JJZCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTdGVwSW5kZXgoc3RlcHMsIHJlZmVyZW5jZVN0ZXBJZCwgam9iSWQpO1xuICAgIHRoaXMucmVxdWlyZVN0ZXBJZChzdGVwKTtcbiAgICB0aGlzLnJlcXVpcmVVbmlxdWVTdGVwSWQoc3RlcHMsIHN0ZXAuaWQhLCBqb2JJZCk7XG4gICAgc3RlcHMuc3BsaWNlKGluZGV4ICsgMSwgMCwgc3RlcCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIG11dGFibGUgc3RlcHMgYXJyYXkgZm9yIGEgam9iLlxuICAgKiBUaHJvd3MgaWYgdGhlIGpvYiBpcyBub3QgZm91bmQgb3IgaXMgYSByZXVzYWJsZSB3b3JrZmxvdyBjYWxsLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlSm9iU3RlcHMoam9iSWQ6IHN0cmluZyk6IHdvcmtmbG93cy5Kb2JTdGVwW10ge1xuICAgIGNvbnN0IGpvYiA9IHRoaXMuX2pvYnNbam9iSWRdO1xuICAgIGlmICgham9iKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBKb2IgXCIke2pvYklkfVwiIG5vdCBmb3VuZCBpbiB3b3JrZmxvdyBcIiR7dGhpcy5uYW1lfVwiLiBBdmFpbGFibGUgam9iczogJHtPYmplY3Qua2V5cyh0aGlzLl9qb2JzKS5qb2luKFwiLCBcIikgfHwgXCIobm9uZSlcIn1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwidXNlc1wiIGluIGpvYikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSm9iIFwiJHtqb2JJZH1cIiBpcyBhIHJldXNhYmxlIHdvcmtmbG93IGNhbGwgYW5kIGRvZXMgbm90IGhhdmUgc3RlcHNgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvYi5zdGVwcyBhcyB3b3JrZmxvd3MuSm9iU3RlcFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBpbmRleCBvZiBhIHN0ZXAgYnkgSUQgb3IgbmFtZSB3aXRoaW4gYSBzdGVwcyBhcnJheS5cbiAgICogTWF0Y2hlcyBhZ2FpbnN0IGBpZGAgZmlyc3QsIHRoZW4gZmFsbHMgYmFjayB0byBgbmFtZWAuXG4gICAqIFRocm93cyBpZiB0aGUgc3RlcCBpcyBub3QgZm91bmQsIG9yIGlmIG11bHRpcGxlIHN0ZXBzIG1hdGNoIGJ5IG5hbWUuXG4gICAqL1xuICBwcml2YXRlIGZpbmRTdGVwSW5kZXgoXG4gICAgc3RlcHM6IHdvcmtmbG93cy5Kb2JTdGVwW10sXG4gICAgc3RlcElkT3JOYW1lOiBzdHJpbmcsXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgKTogbnVtYmVyIHtcbiAgICAvLyBUcnkgZXhhY3QgaWQgbWF0Y2ggZmlyc3RcbiAgICBjb25zdCBieUlkID0gc3RlcHMuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSBzdGVwSWRPck5hbWUpO1xuICAgIGlmIChieUlkICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGJ5SWQ7XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIG5hbWUgbWF0Y2hcbiAgICBjb25zdCBieU5hbWU6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0ZXBzW2ldLm5hbWUgPT09IHN0ZXBJZE9yTmFtZSkge1xuICAgICAgICBieU5hbWUucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnlOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ5TmFtZVswXTtcbiAgICB9XG5cbiAgICBpZiAoYnlOYW1lLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE11bHRpcGxlIHN0ZXBzIG1hdGNoIG5hbWUgXCIke3N0ZXBJZE9yTmFtZX1cIiBpbiBqb2IgXCIke2pvYklkfVwiIChhdCBpbmRpY2VzICR7YnlOYW1lLmpvaW4oXCIsIFwiKX0pLiBVc2UgYSB1bmlxdWUgc3RlcCBcImlkXCIgaW5zdGVhZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdmFpbGFibGVJZHMgPSBzdGVwc1xuICAgICAgLm1hcCgocykgPT4gcy5pZClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgY29uc3QgYXZhaWxhYmxlTmFtZXMgPSBzdGVwc1xuICAgICAgLm1hcCgocykgPT4gcy5uYW1lKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgU3RlcCBcIiR7c3RlcElkT3JOYW1lfVwiIG5vdCBmb3VuZCBpbiBqb2IgXCIke2pvYklkfVwiLiBBdmFpbGFibGUgc3RlcCBJRHM6ICR7YXZhaWxhYmxlSWRzIHx8IFwiKG5vbmUpXCJ9LiBBdmFpbGFibGUgc3RlcCBuYW1lczogJHthdmFpbGFibGVOYW1lcyB8fCBcIihub25lKVwifWAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCBhIHN0ZXAgaGFzIGFuIGBpZGAgc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSByZXF1aXJlU3RlcElkKHN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwKTogdm9pZCB7XG4gICAgaWYgKCFzdGVwLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTdGVwIG11c3QgaGF2ZSBhbiBcImlkXCIgdG8gYmUgYWRkZWQgdmlhIHRoZSBzdGVwIG11dGF0aW9uIEFQSScsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCBhIHN0ZXAgSUQgaXMgdW5pcXVlIHdpdGhpbiBhIGpvYidzIHN0ZXBzLlxuICAgKi9cbiAgcHJpdmF0ZSByZXF1aXJlVW5pcXVlU3RlcElkKFxuICAgIHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGlmIChzdGVwcy5zb21lKChzKSA9PiBzLmlkID09PSBzdGVwSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdGVwIElEIFwiJHtzdGVwSWR9XCIgYWxyZWFkeSBleGlzdHMgaW4gam9iIFwiJHtqb2JJZH1cIi4gU3RlcCBJRHMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgam9iLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyV29ya2Zsb3coKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIFwicnVuLW5hbWVcIjogdGhpcy5ydW5OYW1lLFxuICAgICAgb246IHNuYWtlQ2FzZUtleXModGhpcy5ldmVudHMpLFxuICAgICAgY29uY3VycmVuY3k6IHRoaXMuY29uY3VycmVuY3lcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBncm91cDogdGhpcy5jb25jdXJyZW5jeT8uZ3JvdXAsXG4gICAgICAgICAgICBcImNhbmNlbC1pbi1wcm9ncmVzc1wiOiB0aGlzLmNvbmN1cnJlbmN5LmNhbmNlbEluUHJvZ3Jlc3MsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBqb2JzOiByZW5kZXJKb2JzKHRoaXMuX2pvYnMsIHRoaXMuYWN0aW9ucyksXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbmFrZUNhc2VLZXlzPFQgPSB1bmtub3duPihvYmo6IFQpOiBUIHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgb2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHNuYWtlQ2FzZUtleXMpIGFzIGFueTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChsZXQgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsKSB7XG4gICAgICB2ID0gc25ha2VDYXNlS2V5cyh2KTtcbiAgICB9XG4gICAgcmVzdWx0W3NuYWtlKGspXSA9IHY7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBhbnk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckpvYnMoXG4gIGpvYnM6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3c+LFxuICBhY3Rpb25zOiBHaXRIdWJBY3Rpb25zUHJvdmlkZXIsXG4pIHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCBqb2JdIG9mIE9iamVjdC5lbnRyaWVzKGpvYnMpKSB7XG4gICAgcmVzdWx0W25hbWVdID0gcmVuZGVySm9iKGpvYik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICAvKiogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zICovXG4gIGZ1bmN0aW9uIHJlbmRlckpvYihcbiAgICBqb2I6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3csXG4gICkge1xuICAgIGNvbnN0IHN0ZXBzID0gbmV3IEFycmF5PHdvcmtmbG93cy5Kb2JTdGVwPigpO1xuXG4gICAgLy8gaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy91c2luZy13b3JrZmxvd3MvcmV1c2luZy13b3JrZmxvd3Mjc3VwcG9ydGVkLWtleXdvcmRzLWZvci1qb2JzLXRoYXQtY2FsbC1hLXJldXNhYmxlLXdvcmtmbG93XG4gICAgaWYgKFwidXNlc1wiIGluIGpvYikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogam9iLm5hbWUsXG4gICAgICAgIG5lZWRzOiBhcnJheU9yU2NhbGFyKGpvYi5uZWVkcyksXG4gICAgICAgIGlmOiBqb2IuaWYsXG4gICAgICAgIHBlcm1pc3Npb25zOiBrZWJhYkNhc2VLZXlzKGpvYi5wZXJtaXNzaW9ucyksXG4gICAgICAgIGNvbmN1cnJlbmN5OiBqb2IuY29uY3VycmVuY3ksXG4gICAgICAgIHVzZXM6IGpvYi51c2VzLFxuICAgICAgICB3aXRoOiBqb2Iud2l0aCxcbiAgICAgICAgc2VjcmV0czogam9iLnNlY3JldHMsXG4gICAgICAgIHN0cmF0ZWd5OiByZW5kZXJKb2JTdHJhdGVneShqb2Iuc3RyYXRlZ3kpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoam9iLnRvb2xzKSB7XG4gICAgICBzdGVwcy5wdXNoKC4uLnNldHVwVG9vbHMoam9iLnRvb2xzKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckRlZmluZWRTdGVwcyA9IGtlYmFiQ2FzZUtleXMocmVzb2x2ZShqb2Iuc3RlcHMpLCBmYWxzZSk7XG4gICAgc3RlcHMucHVzaCguLi51c2VyRGVmaW5lZFN0ZXBzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBqb2IubmFtZSxcbiAgICAgIG5lZWRzOiBhcnJheU9yU2NhbGFyKGpvYi5uZWVkcyksXG4gICAgICBcInJ1bnMtb25cIjogYXJyYXlPclNjYWxhcihqb2IucnVuc09uR3JvdXApID8/IGFycmF5T3JTY2FsYXIoam9iLnJ1bnNPbiksXG4gICAgICBwZXJtaXNzaW9uczoga2ViYWJDYXNlS2V5cyhqb2IucGVybWlzc2lvbnMpLFxuICAgICAgZW52aXJvbm1lbnQ6IGpvYi5lbnZpcm9ubWVudCxcbiAgICAgIGNvbmN1cnJlbmN5OiBqb2IuY29uY3VycmVuY3ksXG4gICAgICBvdXRwdXRzOiByZW5kZXJKb2JPdXRwdXRzKGpvYi5vdXRwdXRzKSxcbiAgICAgIGVudjogam9iLmVudixcbiAgICAgIGRlZmF1bHRzOiBrZWJhYkNhc2VLZXlzKGpvYi5kZWZhdWx0cyksXG4gICAgICBpZjogam9iLmlmLFxuICAgICAgc3RlcHM6IHN0ZXBzLm1hcChyZW5kZXJTdGVwKSxcbiAgICAgIFwidGltZW91dC1taW51dGVzXCI6IGpvYi50aW1lb3V0TWludXRlcyxcbiAgICAgIHN0cmF0ZWd5OiByZW5kZXJKb2JTdHJhdGVneShqb2Iuc3RyYXRlZ3kpLFxuICAgICAgXCJjb250aW51ZS1vbi1lcnJvclwiOiBqb2IuY29udGludWVPbkVycm9yLFxuICAgICAgY29udGFpbmVyOiBqb2IuY29udGFpbmVyLFxuICAgICAgc2VydmljZXM6IGpvYi5zZXJ2aWNlcyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVySm9iT3V0cHV0cyhvdXRwdXQ6IHdvcmtmbG93cy5Kb2JbXCJvdXRwdXRzXCJdKSB7XG4gICAgaWYgKG91dHB1dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyBzdGVwSWQsIG91dHB1dE5hbWUgfV0gb2YgT2JqZWN0LmVudHJpZXMob3V0cHV0KSkge1xuICAgICAgcmVuZGVyZWRbbmFtZV0gPSBgXFwke3sgc3RlcHMuJHtzdGVwSWR9Lm91dHB1dHMuJHtvdXRwdXROYW1lfSB9fWA7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckpvYlN0cmF0ZWd5KHN0cmF0ZWd5OiB3b3JrZmxvd3MuSm9iW1wic3RyYXRlZ3lcIl0pIHtcbiAgICBpZiAoc3RyYXRlZ3kgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBcIm1heC1wYXJhbGxlbFwiOiBzdHJhdGVneS5tYXhQYXJhbGxlbCxcbiAgICAgIFwiZmFpbC1mYXN0XCI6IHN0cmF0ZWd5LmZhaWxGYXN0LFxuICAgIH07XG5cbiAgICBpZiAoc3RyYXRlZ3kubWF0cml4KSB7XG4gICAgICBjb25zdCBtYXRyaXg6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBpbmNsdWRlOiBzdHJhdGVneS5tYXRyaXguaW5jbHVkZSxcbiAgICAgICAgZXhjbHVkZTogc3RyYXRlZ3kubWF0cml4LmV4Y2x1ZGUsXG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICBzdHJhdGVneS5tYXRyaXguZG9tYWluID8/IHt9LFxuICAgICAgKSkge1xuICAgICAgICBpZiAoa2V5IGluIG1hdHJpeCkge1xuICAgICAgICAgIC8vIEEgZG9tYWluIGtleSB3YXMgc2V0IHRvIGBpbmNsdWRlYCwgb3IgYGV4Y2x1ZGVgOlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSWxsZWdhbCBqb2Igc3RyYXRlZ3kgbWF0cml4IGtleTogJHtrZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbWF0cml4W2tleV0gPSB2YWx1ZXM7XG4gICAgICB9XG4gICAgICByZW5kZXJlZC5tYXRyaXggPSBtYXRyaXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyU3RlcChzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBzdGVwLm5hbWUsXG4gICAgICBpZDogc3RlcC5pZCxcbiAgICAgIGlmOiBzdGVwLmlmLFxuICAgICAgdXNlczogc3RlcC51c2VzICYmIGFjdGlvbnMuZ2V0KHN0ZXAudXNlcyksXG4gICAgICBlbnY6IHN0ZXAuZW52LFxuICAgICAgcnVuOiBzdGVwLnJ1bixcbiAgICAgIHNoZWxsOiBzdGVwLnNoZWxsLFxuICAgICAgd2l0aDogc3RlcC53aXRoLFxuICAgICAgXCJjb250aW51ZS1vbi1lcnJvclwiOiBzdGVwLmNvbnRpbnVlT25FcnJvcixcbiAgICAgIFwidGltZW91dC1taW51dGVzXCI6IHN0ZXAudGltZW91dE1pbnV0ZXMsXG4gICAgICBcIndvcmtpbmctZGlyZWN0b3J5XCI6IHN0ZXAud29ya2luZ0RpcmVjdG9yeSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFycmF5T3JTY2FsYXI8VD4oYXJyOiBUIHwgVFtdIHwgdW5kZWZpbmVkKTogVCB8IFRbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBpZiAoYXJyID09IG51bGwgfHwgYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBhcnI7XG4gIH1cbiAgaWYgKGFyci5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYXJyWzBdO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIHNldHVwVG9vbHModG9vbHM6IHdvcmtmbG93cy5Ub29scykge1xuICBjb25zdCBzdGVwczogd29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtdO1xuXG4gIGlmICh0b29scy5qYXZhKSB7XG4gICAgaWYgKHRvb2xzLmphdmEuY2FjaGUgJiYgIXRvb2xzLmphdmEucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJqYXZhLnBhY2thZ2VNYW5hZ2VyIGlzIHJlcXVpcmVkIHdoZW4gamF2YS5jYWNoZSBpcyB0cnVlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IFwiYWN0aW9ucy9zZXR1cC1qYXZhQHY1XCIsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIGRpc3RyaWJ1dGlvbjogdG9vbHMuamF2YS5kaXN0cmlidXRpb24gPz8gXCJjb3JyZXR0b1wiLFxuICAgICAgICBcImphdmEtdmVyc2lvblwiOiB0b29scy5qYXZhLnZlcnNpb24sXG4gICAgICAgIC4uLih0b29scy5qYXZhLmNhY2hlICYmIHsgY2FjaGU6IHRvb2xzLmphdmEucGFja2FnZU1hbmFnZXIgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRvb2xzLm5vZGUpIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IFwiYWN0aW9ucy9zZXR1cC1ub2RlQHY2XCIsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwibm9kZS12ZXJzaW9uXCI6IHRvb2xzLm5vZGUudmVyc2lvbixcbiAgICAgICAgXCJwYWNrYWdlLW1hbmFnZXItY2FjaGVcIjogdG9vbHMubm9kZS5jYWNoZSA/PyBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBpZiAodG9vbHMucHl0aG9uKSB7XG4gICAgaWYgKHRvb2xzLnB5dGhvbi5jYWNoZSAmJiAhdG9vbHMucHl0aG9uLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwicHl0aG9uLnBhY2thZ2VNYW5hZ2VyIGlzIHJlcXVpcmVkIHdoZW4gcHl0aG9uLmNhY2hlIGlzIHRydWVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLXB5dGhvbkB2NlwiLFxuICAgICAgd2l0aDoge1xuICAgICAgICBcInB5dGhvbi12ZXJzaW9uXCI6IHRvb2xzLnB5dGhvbi52ZXJzaW9uLFxuICAgICAgICAuLi4odG9vbHMucHl0aG9uLmNhY2hlICYmIHsgY2FjaGU6IHRvb2xzLnB5dGhvbi5wYWNrYWdlTWFuYWdlciB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBpZiAodG9vbHMuZ28pIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IFwiYWN0aW9ucy9zZXR1cC1nb0B2NlwiLFxuICAgICAgd2l0aDoge1xuICAgICAgICBcImdvLXZlcnNpb25cIjogdG9vbHMuZ28udmVyc2lvbixcbiAgICAgICAgY2FjaGU6IHRvb2xzLmdvLmNhY2hlID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5kb3RuZXQpIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IFwiYWN0aW9ucy9zZXR1cC1kb3RuZXRAdjVcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgXCJkb3RuZXQtdmVyc2lvblwiOiB0b29scy5kb3RuZXQudmVyc2lvbixcbiAgICAgICAgY2FjaGU6IHRvb2xzLmRvdG5ldC5jYWNoZSA/PyBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3RlcHM7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUpvYkNvbnN0cmFpbnRzKFxuICBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93Pixcbikge1xuICAvLyB2ZXJpZnkgdGhhdCBqb2IgaGFzIGEgXCJwZXJtaXNzaW9uc1wiIHN0YXRlbWVudCB0byBlbnN1cmUgd29ya2Zsb3cgY2FuXG4gIC8vIG9wZXJhdGUgaW4gcmVwb3Mgd2l0aCBkZWZhdWx0IHRva2VucyBzZXQgdG8gcmVhZG9ubHlcbiAgZm9yIChjb25zdCBbaWQsIGpvYl0gb2YgT2JqZWN0LmVudHJpZXMoam9icykpIHtcbiAgICBpZiAoIWpvYi5wZXJtaXNzaW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtpZH06IGFsbCB3b3JrZmxvdyBqb2JzIG11c3QgaGF2ZSBhIFwicGVybWlzc2lvbnNcIiBjbGF1c2UgdG8gZW5zdXJlIHdvcmtmbG93IGNhbiBvcGVyYXRlIGluIHJlc3RyaWN0ZWQgcmVwb3NpdG9yaWVzYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -111,10 +111,6 @@ export interface CoverageReport {
111
111
  * @see https://docs.gitlab.com/ee/ci/yaml/#artifactsreports
112
112
  */
113
113
  export interface Reports {
114
- /** Path for file(s) that should be parsed as Cobertura XML coverage report
115
- * @deprecated per {@link https://docs.gitlab.com/ee/update/deprecations.html#artifactsreportscobertura-keyword} use {@link coverageReport} instead
116
- */
117
- readonly cobertura?: string[];
118
114
  /** Path to file or list of files with code quality report(s) (such as Code Climate).*/
119
115
  readonly codequality?: string[];
120
116
  /** Path to file or list of files with Container scanning vulnerabilities report(s).*/