@cdktn/provider-generator 0.23.0-pre.7 → 0.23.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 (195) hide show
  1. package/ambient.d.ts +0 -1
  2. package/{lib → build}/__tests__/edge-provider-schema/builder.d.ts +1 -0
  3. package/build/__tests__/edge-provider-schema/builder.js +106 -0
  4. package/build/__tests__/edge-provider-schema/cli.d.ts +2 -0
  5. package/build/__tests__/edge-provider-schema/cli.js +67 -0
  6. package/{lib → build}/__tests__/edge-provider-schema/index.d.ts +1 -0
  7. package/build/__tests__/edge-provider-schema/index.js +154 -0
  8. package/build/__tests__/edge-provider-schema.test.d.ts +2 -0
  9. package/build/__tests__/edge-provider-schema.test.js +46 -0
  10. package/build/__tests__/provider.test.d.ts +2 -0
  11. package/build/__tests__/provider.test.js +158 -0
  12. package/build/get/__tests__/constructs-maker.test.d.ts +2 -0
  13. package/build/get/__tests__/constructs-maker.test.js +113 -0
  14. package/build/get/__tests__/generator/complex-computed-types.test.d.ts +2 -0
  15. package/build/get/__tests__/generator/complex-computed-types.test.js +42 -0
  16. package/build/get/__tests__/generator/deep-nested-attributes.test.d.ts +2 -0
  17. package/build/get/__tests__/generator/deep-nested-attributes.test.js +50 -0
  18. package/build/get/__tests__/generator/description-escaping.test.d.ts +2 -0
  19. package/build/get/__tests__/generator/description-escaping.test.js +65 -0
  20. package/build/get/__tests__/generator/empty-provider-resources.test.d.ts +2 -0
  21. package/build/get/__tests__/generator/empty-provider-resources.test.js +40 -0
  22. package/build/get/__tests__/generator/export-sharding.test.d.ts +2 -0
  23. package/build/get/__tests__/generator/export-sharding.test.js +82 -0
  24. package/build/get/__tests__/generator/module-generator.test.d.ts +2 -0
  25. package/build/get/__tests__/generator/module-generator.test.js +476 -0
  26. package/build/get/__tests__/generator/nested-types.test.d.ts +2 -0
  27. package/build/get/__tests__/generator/nested-types.test.js +51 -0
  28. package/build/get/__tests__/generator/provider.test.d.ts +2 -0
  29. package/build/get/__tests__/generator/provider.test.js +51 -0
  30. package/build/get/__tests__/generator/resource-types.test.d.ts +2 -0
  31. package/build/get/__tests__/generator/resource-types.test.js +78 -0
  32. package/build/get/__tests__/generator/skipped-attributes.test.d.ts +2 -0
  33. package/build/get/__tests__/generator/skipped-attributes.test.js +55 -0
  34. package/build/get/__tests__/generator/types.test.d.ts +2 -0
  35. package/build/get/__tests__/generator/types.test.js +289 -0
  36. package/build/get/__tests__/generator/versions-file.test.d.ts +2 -0
  37. package/build/get/__tests__/generator/versions-file.test.js +74 -0
  38. package/{lib → build}/get/__tests__/util.d.ts +1 -0
  39. package/build/get/__tests__/util.js +59 -0
  40. package/{lib → build}/get/constructs-maker.d.ts +2 -1
  41. package/{lib → build}/get/constructs-maker.js +5 -2
  42. package/{lib → build}/get/generator/custom-defaults.d.ts +1 -0
  43. package/build/get/generator/custom-defaults.js +403 -0
  44. package/{lib → build}/get/generator/emitter/attributes-emitter.d.ts +1 -0
  45. package/build/get/generator/emitter/attributes-emitter.js +161 -0
  46. package/{lib → build}/get/generator/emitter/index.d.ts +1 -0
  47. package/{lib → build}/get/generator/emitter/index.js +1 -1
  48. package/{lib → build}/get/generator/emitter/resource-emitter.d.ts +1 -0
  49. package/build/get/generator/emitter/resource-emitter.js +147 -0
  50. package/{lib → build}/get/generator/emitter/struct-emitter.d.ts +1 -0
  51. package/build/get/generator/emitter/struct-emitter.js +500 -0
  52. package/{lib → build}/get/generator/loop-detection.d.ts +1 -0
  53. package/build/get/generator/loop-detection.js +56 -0
  54. package/{lib → build}/get/generator/models/attribute-model.d.ts +1 -0
  55. package/build/get/generator/models/attribute-model.js +160 -0
  56. package/{lib → build}/get/generator/models/attribute-type-model.d.ts +1 -0
  57. package/build/get/generator/models/attribute-type-model.js +376 -0
  58. package/{lib → build}/get/generator/models/index.d.ts +1 -0
  59. package/{lib → build}/get/generator/models/index.js +1 -1
  60. package/{lib → build}/get/generator/models/resource-model.d.ts +1 -0
  61. package/build/get/generator/models/resource-model.js +106 -0
  62. package/{lib → build}/get/generator/models/scope.d.ts +1 -0
  63. package/build/get/generator/models/scope.js +36 -0
  64. package/{lib → build}/get/generator/models/struct.d.ts +1 -0
  65. package/build/get/generator/models/struct.js +90 -0
  66. package/{lib → build}/get/generator/module-generator.d.ts +1 -0
  67. package/build/get/generator/module-generator.js +184 -0
  68. package/{lib → build}/get/generator/provider-generator.d.ts +1 -0
  69. package/build/get/generator/provider-generator.js +225 -0
  70. package/{lib → build}/get/generator/resource-parser.d.ts +1 -0
  71. package/build/get/generator/resource-parser.js +497 -0
  72. package/{lib → build}/get/generator/sanitized-comments.d.ts +1 -0
  73. package/build/get/generator/sanitized-comments.js +44 -0
  74. package/{lib → build}/get/generator/skipped-attributes.d.ts +1 -0
  75. package/build/get/generator/skipped-attributes.js +29 -0
  76. package/{lib → build}/index.d.ts +1 -0
  77. package/{lib → build}/index.js +1 -1
  78. package/{lib → build}/util.d.ts +1 -0
  79. package/build/util.js +30 -0
  80. package/package.json +13 -15
  81. package/{lib → src}/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +1 -1
  82. package/{lib → src}/__tests__/__snapshots__/provider.test.ts.snap +14953 -890
  83. package/{lib → src}/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +1 -1
  84. package/{lib → src}/get/__tests__/generator/__snapshots__/description-escaping.test.ts.snap +1 -1
  85. package/{lib → src}/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +1 -1
  86. package/{lib → src}/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +10 -10
  87. package/{lib → src}/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +1 -1
  88. package/{lib → src}/get/__tests__/generator/__snapshots__/provider.test.ts.snap +1 -1
  89. package/{lib → src}/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +1 -1
  90. package/{lib → src}/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +1 -1
  91. package/{lib → src}/get/__tests__/generator/__snapshots__/types.test.ts.snap +92 -1
  92. package/src/get/__tests__/generator/fixtures/map-of-map-of-string.test.fixture.json +27 -0
  93. package/tsconfig.json +6 -3
  94. package/lib/__tests__/edge-provider-schema/builder.js +0 -106
  95. package/lib/__tests__/edge-provider-schema/cli.d.ts +0 -1
  96. package/lib/__tests__/edge-provider-schema/cli.js +0 -67
  97. package/lib/__tests__/edge-provider-schema/index.js +0 -154
  98. package/lib/__tests__/edge-provider-schema.test.d.ts +0 -1
  99. package/lib/__tests__/edge-provider-schema.test.js +0 -46
  100. package/lib/__tests__/provider.test.d.ts +0 -1
  101. package/lib/__tests__/provider.test.js +0 -158
  102. package/lib/get/__tests__/constructs-maker.test.d.ts +0 -1
  103. package/lib/get/__tests__/constructs-maker.test.js +0 -113
  104. package/lib/get/__tests__/generator/complex-computed-types.test.d.ts +0 -1
  105. package/lib/get/__tests__/generator/complex-computed-types.test.js +0 -42
  106. package/lib/get/__tests__/generator/deep-nested-attributes.test.d.ts +0 -1
  107. package/lib/get/__tests__/generator/deep-nested-attributes.test.js +0 -50
  108. package/lib/get/__tests__/generator/description-escaping.test.d.ts +0 -1
  109. package/lib/get/__tests__/generator/description-escaping.test.js +0 -65
  110. package/lib/get/__tests__/generator/empty-provider-resources.test.d.ts +0 -1
  111. package/lib/get/__tests__/generator/empty-provider-resources.test.js +0 -40
  112. package/lib/get/__tests__/generator/export-sharding.test.d.ts +0 -1
  113. package/lib/get/__tests__/generator/export-sharding.test.js +0 -82
  114. package/lib/get/__tests__/generator/module-generator.test.d.ts +0 -1
  115. package/lib/get/__tests__/generator/module-generator.test.js +0 -476
  116. package/lib/get/__tests__/generator/nested-types.test.d.ts +0 -1
  117. package/lib/get/__tests__/generator/nested-types.test.js +0 -51
  118. package/lib/get/__tests__/generator/provider.test.d.ts +0 -1
  119. package/lib/get/__tests__/generator/provider.test.js +0 -51
  120. package/lib/get/__tests__/generator/resource-types.test.d.ts +0 -1
  121. package/lib/get/__tests__/generator/resource-types.test.js +0 -78
  122. package/lib/get/__tests__/generator/skipped-attributes.test.d.ts +0 -1
  123. package/lib/get/__tests__/generator/skipped-attributes.test.js +0 -55
  124. package/lib/get/__tests__/generator/types.test.d.ts +0 -1
  125. package/lib/get/__tests__/generator/types.test.js +0 -280
  126. package/lib/get/__tests__/generator/versions-file.test.d.ts +0 -1
  127. package/lib/get/__tests__/generator/versions-file.test.js +0 -74
  128. package/lib/get/__tests__/util.js +0 -59
  129. package/lib/get/generator/custom-defaults.js +0 -403
  130. package/lib/get/generator/emitter/attributes-emitter.js +0 -161
  131. package/lib/get/generator/emitter/resource-emitter.js +0 -144
  132. package/lib/get/generator/emitter/struct-emitter.js +0 -500
  133. package/lib/get/generator/loop-detection.js +0 -56
  134. package/lib/get/generator/models/attribute-model.js +0 -160
  135. package/lib/get/generator/models/attribute-type-model.js +0 -376
  136. package/lib/get/generator/models/resource-model.js +0 -106
  137. package/lib/get/generator/models/scope.js +0 -36
  138. package/lib/get/generator/models/struct.js +0 -90
  139. package/lib/get/generator/module-generator.js +0 -184
  140. package/lib/get/generator/provider-generator.js +0 -225
  141. package/lib/get/generator/resource-parser.js +0 -497
  142. package/lib/get/generator/sanitized-comments.js +0 -44
  143. package/lib/get/generator/skipped-attributes.js +0 -29
  144. package/lib/util.js +0 -30
  145. /package/{lib → src}/get/__tests__/generator/fixtures/aws-provider.test.fixture.json +0 -0
  146. /package/{lib → src}/get/__tests__/generator/fixtures/aws_acm_certificate.test.fixture.json +0 -0
  147. /package/{lib → src}/get/__tests__/generator/fixtures/aws_cloudfront_distribution.test.fixture.json +0 -0
  148. /package/{lib → src}/get/__tests__/generator/fixtures/aws_fms_admin_account.test.fixture.json +0 -0
  149. /package/{lib → src}/get/__tests__/generator/fixtures/aws_quicksight_template.test.fixture.json +0 -0
  150. /package/{lib → src}/get/__tests__/generator/fixtures/aws_s3_bucket.test.fixture.json +0 -0
  151. /package/{lib → src}/get/__tests__/generator/fixtures/aws_security_group.test.fixture.json +0 -0
  152. /package/{lib → src}/get/__tests__/generator/fixtures/aws_wafv2_web_acl.test.fixture.json +0 -0
  153. /package/{lib → src}/get/__tests__/generator/fixtures/block-type-nested-computed-list.test.fixture.json +0 -0
  154. /package/{lib → src}/get/__tests__/generator/fixtures/block-type-set-list.test.fixture.json +0 -0
  155. /package/{lib → src}/get/__tests__/generator/fixtures/boolean-list.test.fixture.json +0 -0
  156. /package/{lib → src}/get/__tests__/generator/fixtures/boolean-map.test.fixture.json +0 -0
  157. /package/{lib → src}/get/__tests__/generator/fixtures/comment-ending-sequence.test.fixture.json +0 -0
  158. /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex-nested.test.fixture.json +0 -0
  159. /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex.test.fixture.json +0 -0
  160. /package/{lib → src}/get/__tests__/generator/fixtures/computed-optional-complex.test.fixture.json +0 -0
  161. /package/{lib → src}/get/__tests__/generator/fixtures/data_aws_quicksight_analysis.fixture.json +0 -0
  162. /package/{lib → src}/get/__tests__/generator/fixtures/datadog_dashboard.test.fixture.json +0 -0
  163. /package/{lib → src}/get/__tests__/generator/fixtures/datadog_spans_metric.test.fixture.json +0 -0
  164. /package/{lib → src}/get/__tests__/generator/fixtures/deep-attributes.test.fixture.json +0 -0
  165. /package/{lib → src}/get/__tests__/generator/fixtures/deeply-nested-block-types.test.fixture.json +0 -0
  166. /package/{lib → src}/get/__tests__/generator/fixtures/description-escaping.test.fixture.json +0 -0
  167. /package/{lib → src}/get/__tests__/generator/fixtures/elasticstack-provider.test.fixture.json +0 -0
  168. /package/{lib → src}/get/__tests__/generator/fixtures/empty-provider-resources.test.fixture.json +0 -0
  169. /package/{lib → src}/get/__tests__/generator/fixtures/ignored-attributes.test.fixture.json +0 -0
  170. /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-attribute-names.test.fixture.json +0 -0
  171. /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-resource-names.test.fixture.json +0 -0
  172. /package/{lib → src}/get/__tests__/generator/fixtures/list-list-object.test.fixture.json +0 -0
  173. /package/{lib → src}/get/__tests__/generator/fixtures/list-list-string.test.fixture.json +0 -0
  174. /package/{lib → src}/get/__tests__/generator/fixtures/list-of-string-map.test.fixture.json +0 -0
  175. /package/{lib → src}/get/__tests__/generator/fixtures/map-of-string-list.test.fixture.json +0 -0
  176. /package/{lib → src}/get/__tests__/generator/fixtures/markdown-description-with-code-blocks.test.fixture.json +0 -0
  177. /package/{lib → src}/get/__tests__/generator/fixtures/module-get-x.test.fixture.tf +0 -0
  178. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-1.test.fixture.tf +0 -0
  179. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-2.test.fixture.tf +0 -0
  180. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-outputs.test.fixture.tf +0 -0
  181. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-variable-type.test.fixture.tf +0 -0
  182. /package/{lib → src}/get/__tests__/generator/fixtures/module-with-star-default.test.fixture.tf +0 -0
  183. /package/{lib → src}/get/__tests__/generator/fixtures/name-conflict.test.fixture.json +0 -0
  184. /package/{lib → src}/get/__tests__/generator/fixtures/nested-type-without-attributes.test.fixture.json +0 -0
  185. /package/{lib → src}/get/__tests__/generator/fixtures/nested-types.test.fixture.json +0 -0
  186. /package/{lib → src}/get/__tests__/generator/fixtures/number-list.test.fixture.json +0 -0
  187. /package/{lib → src}/get/__tests__/generator/fixtures/number-map.test.fixture.json +0 -0
  188. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-boolean.test.fixture.json +0 -0
  189. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-dynamic.test.fixture.json +0 -0
  190. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-number.test.fixture.json +0 -0
  191. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-string.test.fixture.json +0 -0
  192. /package/{lib → src}/get/__tests__/generator/fixtures/single-block-type.test.fixture.json +0 -0
  193. /package/{lib → src}/get/__tests__/generator/fixtures/string-list.test.fixture.json +0 -0
  194. /package/{lib → src}/get/__tests__/generator/fixtures/string-map.test.fixture.json +0 -0
  195. /package/{lib → src}/get/__tests__/generator/fixtures/stripe-schema.test.fixture.json +0 -0
@@ -1,476 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- // Copyright (c) HashiCorp, Inc
27
- // SPDX-License-Identifier: MPL-2.0
28
- const fs = __importStar(require("fs"));
29
- const os = __importStar(require("os"));
30
- const path = __importStar(require("path"));
31
- const commons_1 = require("@cdktn/commons");
32
- const constructs_maker_1 = require("../../constructs-maker");
33
- const util_1 = require("../util");
34
- const child_process_1 = require("child_process");
35
- const onTf1_6AndNewer = (name, fn, timeout) => {
36
- const terraformBinaryName = process.env.TERRAFORM_BINARY_NAME || "terraform";
37
- const output = (0, child_process_1.execSync)(`${terraformBinaryName} version -json`);
38
- if (!output) {
39
- throw new Error("Could not determine Terraform version");
40
- }
41
- const tfVersion = JSON.parse(output.toString()).terraform_version;
42
- const [major, minor] = tfVersion.toString().split(".");
43
- if (Number(major) < 1 || (Number(major) === 1 && Number(minor) < 6)) {
44
- test.skip(`${name} (requires Terraform >= 1.6.0; but is ${tfVersion})`, fn, timeout);
45
- }
46
- else {
47
- test(name, fn, timeout);
48
- }
49
- };
50
- test("generate some modules", async () => {
51
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "module-generator.test"));
52
- const constraint = new commons_1.TerraformModuleConstraint("terraform-aws-modules/eks/aws@7.0.1");
53
- const maker = new constructs_maker_1.ConstructsMaker({
54
- codeMakerOutput: workdir,
55
- targetLanguage: commons_1.Language.TYPESCRIPT,
56
- }, process.env.CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH);
57
- await maker.generate([constraint]);
58
- const output = fs.readFileSync(path.join(workdir, "modules/terraform-aws-modules/aws/eks.ts"), "utf-8");
59
- expect(output).toMatchSnapshot();
60
- }, 120000);
61
- (0, util_1.expectModuleToMatchSnapshot)("no module outputs", "generator", [
62
- "module-no-outputs.test.fixture.tf",
63
- ]);
64
- (0, util_1.expectModuleToMatchSnapshot)("typeless variables", "generator", [
65
- "module-no-variable-type.test.fixture.tf",
66
- ]);
67
- (0, util_1.expectModuleToMatchSnapshot)("no newline", "generator", [
68
- "module-no-newline-1.test.fixture.tf",
69
- "module-no-newline-2.test.fixture.tf",
70
- ]);
71
- test("generate multiple aws modules", async () => {
72
- jest.setTimeout(120000);
73
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "module-generator-aws.test"));
74
- const constraints = [
75
- new commons_1.TerraformModuleConstraint("terraform-aws-modules/vpc/aws@2.78.0"),
76
- new commons_1.TerraformModuleConstraint("terraform-aws-modules/rds-aurora/aws@4.1.0"),
77
- ];
78
- const maker = new constructs_maker_1.ConstructsMaker({
79
- codeMakerOutput: workdir,
80
- targetLanguage: commons_1.Language.TYPESCRIPT,
81
- }, process.env.CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH);
82
- await maker.generate(constraints);
83
- const vpcOutput = fs.readFileSync(path.join(workdir, "modules/terraform-aws-modules/aws/vpc.ts"), "utf-8");
84
- expect(vpcOutput).toMatchSnapshot();
85
- const rdsOutput = fs.readFileSync(path.join(workdir, "modules/terraform-aws-modules/aws/rds-aurora.ts"), "utf-8");
86
- expect(rdsOutput).toMatchSnapshot();
87
- }, 120000);
88
- test("generate nested module", async () => {
89
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "module-generator-nested.test"));
90
- const constraint = new commons_1.TerraformModuleConstraint("terraform-aws-modules/vpc/aws//modules/vpc-endpoints@3.19.0");
91
- const maker = new constructs_maker_1.ConstructsMaker({
92
- codeMakerOutput: workdir,
93
- targetLanguage: commons_1.Language.TYPESCRIPT,
94
- }, process.env.CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH);
95
- await maker.generate([constraint]);
96
- const output = fs.readFileSync(path.join(workdir, "modules/terraform-aws-modules/aws/vpc/modules/vpc-endpoints.ts"), "utf-8");
97
- expect(output).toMatchSnapshot();
98
- }, 120000);
99
- (0, util_1.expectModuleToMatchSnapshot)("getX variables", "generator", [
100
- "module-get-x.test.fixture.tf",
101
- ]);
102
- (0, util_1.expectModuleToMatchSnapshot)("handle */* in module variable default string", "generator", ["module-with-star-default.test.fixture.tf"]);
103
- onTf1_6AndNewer("generate module that can't be initialized", async () => {
104
- jest.setTimeout(120000);
105
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "module-generator.test-no-init"));
106
- const constraint = new commons_1.TerraformModuleConstraint("milliHQ/next-js/aws@1.0.0-canary.5");
107
- const maker = new constructs_maker_1.ConstructsMaker({
108
- codeMakerOutput: workdir,
109
- targetLanguage: commons_1.Language.TYPESCRIPT,
110
- }, process.env.CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH);
111
- await maker.generate([constraint]);
112
- const output = fs.readFileSync(path.join(workdir, "modules/milliHQ/aws/next-js.ts"), "utf-8");
113
- // yes, this is a lot of code, but this test is skipped for some Terraform versions
114
- // which then shows snapshots as obsolete which fails the test
115
- // this way, there's no such problem if the test is skipped
116
- expect(output).toMatchInlineSnapshot(`
117
- "// generated by cdktn get
118
- // milliHQ/next-js/aws
119
- import { TerraformModule, TerraformModuleUserConfig } from 'cdktn';
120
- import { Construct } from 'constructs';
121
- export interface NextJsConfig extends TerraformModuleUserConfig {
122
- /**
123
- * ACM certificate arn for custom_domain
124
- */
125
- readonly cloudfrontAcmCertificateArn?: string;
126
- /**
127
- * Aliases for custom_domain
128
- *
129
- */
130
- readonly cloudfrontAliases?: string[];
131
- /**
132
- * Header keys that should be used to calculate the cache key in CloudFront.
133
- * Authorization
134
- */
135
- readonly cloudfrontCacheKeyHeaders?: string[];
136
- /**
137
- * Controls whether the main CloudFront distribution should be created.
138
- * true
139
- */
140
- readonly cloudfrontCreateDistribution?: boolean;
141
- /**
142
- * When using an external CloudFront distribution provide its arn.
143
- */
144
- readonly cloudfrontExternalArn?: string;
145
- /**
146
- * When using an external CloudFront distribution provide its id.
147
- */
148
- readonly cloudfrontExternalId?: string;
149
- /**
150
- * The minimum version of the SSL protocol that you want CloudFront to use for HTTPS connections. One of SSLv3, TLSv1, TLSv1_2016, TLSv1.1_2016, TLSv1.2_2018 or TLSv1.2_2019.
151
- * TLSv1
152
- */
153
- readonly cloudfrontMinimumProtocolVersion?: string;
154
- /**
155
- * Id of a custom request policy that overrides the default policy (AllViewer). Can be custom or managed.
156
- */
157
- readonly cloudfrontOriginRequestPolicy?: string;
158
- /**
159
- * Price class for the CloudFront distributions (main & proxy config). One of PriceClass_All, PriceClass_200, PriceClass_100.
160
- * PriceClass_100
161
- */
162
- readonly cloudfrontPriceClass?: string;
163
- /**
164
- * Id of a response headers policy. Can be custom or managed. Default is empty.
165
- */
166
- readonly cloudfrontResponseHeadersPolicy?: string;
167
- /**
168
- * An optional webacl2 arn or webacl id to associate with the cloudfront distribution
169
- */
170
- readonly cloudfrontWebaclId?: string;
171
- /**
172
- * Controls whether resources for image optimization support should be created or not.
173
- * true
174
- */
175
- readonly createImageOptimization?: boolean;
176
- /**
177
- * Use locally built packages rather than download them from npm.
178
- */
179
- readonly debugUseLocalPackages?: boolean;
180
- /**
181
- * Identifier for the deployment group (only lowercase alphanumeric characters and hyphens are allowed).
182
- * tf-next
183
- */
184
- readonly deploymentName?: string;
185
- /**
186
- * Controls whether it should be possible to run multiple deployments in parallel (requires multiple_deployments_base_domain).
187
- */
188
- readonly enableMultipleDeployments?: boolean;
189
- /**
190
- * Amount of memory in MB the worker Lambda Function for image optimization can use. Valid value between 128 MB to 10,240 MB, in 1 MB increments.
191
- * 2,048
192
- */
193
- readonly imageOptimizationLambdaMemorySize?: number;
194
- /**
195
- * Whether to deploy additional lambda JSON policies. If false, lambda_policy_json will not be attached to the lambda function. (Necessary since policy strings are only known after apply when using Terraforms data.aws_iam_policy_document)
196
- */
197
- readonly lambdaAttachPolicyJson?: boolean;
198
- /**
199
- * Set to true if the Lambda functions should be attached to a VPC. Use this setting if VPC resources should be accessed by the Lambda functions. When setting this to true, use vpc_security_group_ids and vpc_subnet_ids to specify the VPC networking. Note that attaching to a VPC would introduce a delay on to cold starts
200
- */
201
- readonly lambdaAttachToVpc?: boolean;
202
- /**
203
- * Additional policy document as JSON to attach to the Lambda Function role
204
- */
205
- readonly lambdaPolicyJson?: string;
206
- /**
207
- * ARN of IAM policy that scopes aws_iam_role access for the lambda
208
- */
209
- readonly lambdaRolePermissionsBoundary?: string;
210
- /**
211
- * Default wildcard domain where new deployments should be available. Should be in the form of *.example.com.
212
- */
213
- readonly multipleDeploymentsBaseDomain?: string;
214
- /**
215
- * Tag metadata to label AWS resources that support tags.
216
- * The property type contains a map, they have special handling, please see {@link cdk.tf/module-map-inputs the docs}
217
- */
218
- readonly tags?: { [key: string]: string };
219
- /**
220
- * Tag metadata to label AWS S3 buckets. Overrides tags with the same name in input variable tags.
221
- * The property type contains a map, they have special handling, please see {@link cdk.tf/module-map-inputs the docs}
222
- */
223
- readonly tagsS3Bucket?: { [key: string]: string };
224
- /**
225
- * The list of Security Group IDs to be used by the Lambda functions. lambda_attach_to_vpc should be set to true for these to be applied.
226
- *
227
- */
228
- readonly vpcSecurityGroupIds?: string[];
229
- /**
230
- * The list of VPC subnet IDs to attach the Lambda functions. lambda_attach_to_vpc should be set to true for these to be applied.
231
- *
232
- */
233
- readonly vpcSubnetIds?: string[];
234
- }
235
- /**
236
- * Defines an NextJs based on a Terraform module
237
- *
238
- * Docs at Terraform Registry: {@link https://registry.terraform.io/modules/milliHQ/next-js/aws/1.0.0-canary.5 milliHQ/next-js/aws}
239
- */
240
- export class NextJs extends TerraformModule {
241
- private readonly inputs: { [name: string]: any } = { }
242
- public constructor(scope: Construct, id: string, config: NextJsConfig = {}) {
243
- super(scope, id, {
244
- ...config,
245
- source: 'milliHQ/next-js/aws',
246
- version: '1.0.0-canary.5',
247
- });
248
- this.cloudfrontAcmCertificateArn = config.cloudfrontAcmCertificateArn;
249
- this.cloudfrontAliases = config.cloudfrontAliases;
250
- this.cloudfrontCacheKeyHeaders = config.cloudfrontCacheKeyHeaders;
251
- this.cloudfrontCreateDistribution = config.cloudfrontCreateDistribution;
252
- this.cloudfrontExternalArn = config.cloudfrontExternalArn;
253
- this.cloudfrontExternalId = config.cloudfrontExternalId;
254
- this.cloudfrontMinimumProtocolVersion = config.cloudfrontMinimumProtocolVersion;
255
- this.cloudfrontOriginRequestPolicy = config.cloudfrontOriginRequestPolicy;
256
- this.cloudfrontPriceClass = config.cloudfrontPriceClass;
257
- this.cloudfrontResponseHeadersPolicy = config.cloudfrontResponseHeadersPolicy;
258
- this.cloudfrontWebaclId = config.cloudfrontWebaclId;
259
- this.createImageOptimization = config.createImageOptimization;
260
- this.debugUseLocalPackages = config.debugUseLocalPackages;
261
- this.deploymentName = config.deploymentName;
262
- this.enableMultipleDeployments = config.enableMultipleDeployments;
263
- this.imageOptimizationLambdaMemorySize = config.imageOptimizationLambdaMemorySize;
264
- this.lambdaAttachPolicyJson = config.lambdaAttachPolicyJson;
265
- this.lambdaAttachToVpc = config.lambdaAttachToVpc;
266
- this.lambdaPolicyJson = config.lambdaPolicyJson;
267
- this.lambdaRolePermissionsBoundary = config.lambdaRolePermissionsBoundary;
268
- this.multipleDeploymentsBaseDomain = config.multipleDeploymentsBaseDomain;
269
- this.tags = config.tags;
270
- this.tagsS3Bucket = config.tagsS3Bucket;
271
- this.vpcSecurityGroupIds = config.vpcSecurityGroupIds;
272
- this.vpcSubnetIds = config.vpcSubnetIds;
273
- }
274
- public get cloudfrontAcmCertificateArn(): string | undefined {
275
- return this.inputs['cloudfront_acm_certificate_arn'] as string | undefined;
276
- }
277
- public set cloudfrontAcmCertificateArn(value: string | undefined) {
278
- this.inputs['cloudfront_acm_certificate_arn'] = value;
279
- }
280
- public get cloudfrontAliases(): string[] | undefined {
281
- return this.inputs['cloudfront_aliases'] as string[] | undefined;
282
- }
283
- public set cloudfrontAliases(value: string[] | undefined) {
284
- this.inputs['cloudfront_aliases'] = value;
285
- }
286
- public get cloudfrontCacheKeyHeaders(): string[] | undefined {
287
- return this.inputs['cloudfront_cache_key_headers'] as string[] | undefined;
288
- }
289
- public set cloudfrontCacheKeyHeaders(value: string[] | undefined) {
290
- this.inputs['cloudfront_cache_key_headers'] = value;
291
- }
292
- public get cloudfrontCreateDistribution(): boolean | undefined {
293
- return this.inputs['cloudfront_create_distribution'] as boolean | undefined;
294
- }
295
- public set cloudfrontCreateDistribution(value: boolean | undefined) {
296
- this.inputs['cloudfront_create_distribution'] = value;
297
- }
298
- public get cloudfrontExternalArn(): string | undefined {
299
- return this.inputs['cloudfront_external_arn'] as string | undefined;
300
- }
301
- public set cloudfrontExternalArn(value: string | undefined) {
302
- this.inputs['cloudfront_external_arn'] = value;
303
- }
304
- public get cloudfrontExternalId(): string | undefined {
305
- return this.inputs['cloudfront_external_id'] as string | undefined;
306
- }
307
- public set cloudfrontExternalId(value: string | undefined) {
308
- this.inputs['cloudfront_external_id'] = value;
309
- }
310
- public get cloudfrontMinimumProtocolVersion(): string | undefined {
311
- return this.inputs['cloudfront_minimum_protocol_version'] as string | undefined;
312
- }
313
- public set cloudfrontMinimumProtocolVersion(value: string | undefined) {
314
- this.inputs['cloudfront_minimum_protocol_version'] = value;
315
- }
316
- public get cloudfrontOriginRequestPolicy(): string | undefined {
317
- return this.inputs['cloudfront_origin_request_policy'] as string | undefined;
318
- }
319
- public set cloudfrontOriginRequestPolicy(value: string | undefined) {
320
- this.inputs['cloudfront_origin_request_policy'] = value;
321
- }
322
- public get cloudfrontPriceClass(): string | undefined {
323
- return this.inputs['cloudfront_price_class'] as string | undefined;
324
- }
325
- public set cloudfrontPriceClass(value: string | undefined) {
326
- this.inputs['cloudfront_price_class'] = value;
327
- }
328
- public get cloudfrontResponseHeadersPolicy(): string | undefined {
329
- return this.inputs['cloudfront_response_headers_policy'] as string | undefined;
330
- }
331
- public set cloudfrontResponseHeadersPolicy(value: string | undefined) {
332
- this.inputs['cloudfront_response_headers_policy'] = value;
333
- }
334
- public get cloudfrontWebaclId(): string | undefined {
335
- return this.inputs['cloudfront_webacl_id'] as string | undefined;
336
- }
337
- public set cloudfrontWebaclId(value: string | undefined) {
338
- this.inputs['cloudfront_webacl_id'] = value;
339
- }
340
- public get createImageOptimization(): boolean | undefined {
341
- return this.inputs['create_image_optimization'] as boolean | undefined;
342
- }
343
- public set createImageOptimization(value: boolean | undefined) {
344
- this.inputs['create_image_optimization'] = value;
345
- }
346
- public get debugUseLocalPackages(): boolean | undefined {
347
- return this.inputs['debug_use_local_packages'] as boolean | undefined;
348
- }
349
- public set debugUseLocalPackages(value: boolean | undefined) {
350
- this.inputs['debug_use_local_packages'] = value;
351
- }
352
- public get deploymentName(): string | undefined {
353
- return this.inputs['deployment_name'] as string | undefined;
354
- }
355
- public set deploymentName(value: string | undefined) {
356
- this.inputs['deployment_name'] = value;
357
- }
358
- public get enableMultipleDeployments(): boolean | undefined {
359
- return this.inputs['enable_multiple_deployments'] as boolean | undefined;
360
- }
361
- public set enableMultipleDeployments(value: boolean | undefined) {
362
- this.inputs['enable_multiple_deployments'] = value;
363
- }
364
- public get imageOptimizationLambdaMemorySize(): number | undefined {
365
- return this.inputs['image_optimization_lambda_memory_size'] as number | undefined;
366
- }
367
- public set imageOptimizationLambdaMemorySize(value: number | undefined) {
368
- this.inputs['image_optimization_lambda_memory_size'] = value;
369
- }
370
- public get lambdaAttachPolicyJson(): boolean | undefined {
371
- return this.inputs['lambda_attach_policy_json'] as boolean | undefined;
372
- }
373
- public set lambdaAttachPolicyJson(value: boolean | undefined) {
374
- this.inputs['lambda_attach_policy_json'] = value;
375
- }
376
- public get lambdaAttachToVpc(): boolean | undefined {
377
- return this.inputs['lambda_attach_to_vpc'] as boolean | undefined;
378
- }
379
- public set lambdaAttachToVpc(value: boolean | undefined) {
380
- this.inputs['lambda_attach_to_vpc'] = value;
381
- }
382
- public get lambdaPolicyJson(): string | undefined {
383
- return this.inputs['lambda_policy_json'] as string | undefined;
384
- }
385
- public set lambdaPolicyJson(value: string | undefined) {
386
- this.inputs['lambda_policy_json'] = value;
387
- }
388
- public get lambdaRolePermissionsBoundary(): string | undefined {
389
- return this.inputs['lambda_role_permissions_boundary'] as string | undefined;
390
- }
391
- public set lambdaRolePermissionsBoundary(value: string | undefined) {
392
- this.inputs['lambda_role_permissions_boundary'] = value;
393
- }
394
- public get multipleDeploymentsBaseDomain(): string | undefined {
395
- return this.inputs['multiple_deployments_base_domain'] as string | undefined;
396
- }
397
- public set multipleDeploymentsBaseDomain(value: string | undefined) {
398
- this.inputs['multiple_deployments_base_domain'] = value;
399
- }
400
- public get tags(): { [key: string]: string } | undefined {
401
- return this.inputs['tags'] as { [key: string]: string } | undefined;
402
- }
403
- public set tags(value: { [key: string]: string } | undefined) {
404
- this.inputs['tags'] = value;
405
- }
406
- public get tagsS3Bucket(): { [key: string]: string } | undefined {
407
- return this.inputs['tags_s3_bucket'] as { [key: string]: string } | undefined;
408
- }
409
- public set tagsS3Bucket(value: { [key: string]: string } | undefined) {
410
- this.inputs['tags_s3_bucket'] = value;
411
- }
412
- public get vpcSecurityGroupIds(): string[] | undefined {
413
- return this.inputs['vpc_security_group_ids'] as string[] | undefined;
414
- }
415
- public set vpcSecurityGroupIds(value: string[] | undefined) {
416
- this.inputs['vpc_security_group_ids'] = value;
417
- }
418
- public get vpcSubnetIds(): string[] | undefined {
419
- return this.inputs['vpc_subnet_ids'] as string[] | undefined;
420
- }
421
- public set vpcSubnetIds(value: string[] | undefined) {
422
- this.inputs['vpc_subnet_ids'] = value;
423
- }
424
- public get apiEndpointOutput() {
425
- return this.getString('api_endpoint')
426
- }
427
- public get apiEndpointAccessPolicyArnOutput() {
428
- return this.getString('api_endpoint_access_policy_arn')
429
- }
430
- public get cloudfrontCustomErrorResponseOutput() {
431
- return this.getString('cloudfront_custom_error_response')
432
- }
433
- public get cloudfrontDefaultCacheBehaviorOutput() {
434
- return this.getString('cloudfront_default_cache_behavior')
435
- }
436
- public get cloudfrontDefaultRootObjectOutput() {
437
- return this.getString('cloudfront_default_root_object')
438
- }
439
- public get cloudfrontDomainNameOutput() {
440
- return this.getString('cloudfront_domain_name')
441
- }
442
- public get cloudfrontHostedZoneIdOutput() {
443
- return this.getString('cloudfront_hosted_zone_id')
444
- }
445
- public get cloudfrontOrderedCacheBehaviorsOutput() {
446
- return this.getString('cloudfront_ordered_cache_behaviors')
447
- }
448
- public get cloudfrontOriginsOutput() {
449
- return this.getString('cloudfront_origins')
450
- }
451
- public get uploadBucketIdOutput() {
452
- return this.getString('upload_bucket_id')
453
- }
454
- protected synthesizeAttributes() {
455
- return this.inputs;
456
- }
457
- protected synthesizeHclAttributes(): { [name: string]: any } {
458
- return Object.fromEntries(
459
- Object.entries(this.inputs)
460
- .filter(([, val]) => val !== undefined)
461
- .map(([key, val]) => {
462
- return [
463
- key,
464
- {
465
- value: val,
466
- type: "any",
467
- },
468
- ];
469
- })
470
- );
471
- }
472
- }
473
- "
474
- `);
475
- }, 120000);
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibW9kdWxlLWdlbmVyYXRvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDRDQUFxRTtBQUNyRSw2REFBeUQ7QUFDekQsa0NBQXNEO0FBQ3RELGlEQUF5QztBQUV6QyxNQUFNLGVBQWUsR0FBRyxDQUN0QixJQUFZLEVBQ1osRUFBdUIsRUFDdkIsT0FBZ0IsRUFDaEIsRUFBRTtJQUNGLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7SUFDN0UsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLEdBQUcsbUJBQW1CLGdCQUFnQixDQUFDLENBQUM7SUFFaEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBRWxFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQ1AsR0FBRyxJQUFJLHlDQUF5QyxTQUFTLEdBQUcsRUFDNUQsRUFBRSxFQUNGLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQ2hELENBQUM7SUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLG1DQUF5QixDQUM5QyxxQ0FBcUMsQ0FDdEMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLElBQUksa0NBQWUsQ0FDL0I7UUFDRSxlQUFlLEVBQUUsT0FBTztRQUN4QixjQUFjLEVBQUUsa0JBQVEsQ0FBQyxVQUFVO0tBQ3BDLEVBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FDMUQsQ0FBQztJQUNGLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsMENBQTBDLENBQUMsRUFDOUQsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDbkMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRVgsSUFBQSxrQ0FBMkIsRUFBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUU7SUFDNUQsbUNBQW1DO0NBQ3BDLENBQUMsQ0FBQztBQUVILElBQUEsa0NBQTJCLEVBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFO0lBQzdELHlDQUF5QztDQUMxQyxDQUFDLENBQUM7QUFFSCxJQUFBLGtDQUEyQixFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUU7SUFDckQscUNBQXFDO0lBQ3JDLHFDQUFxQztDQUN0QyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsK0JBQStCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV4QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSwyQkFBMkIsQ0FBQyxDQUNwRCxDQUFDO0lBQ0YsTUFBTSxXQUFXLEdBQUc7UUFDbEIsSUFBSSxtQ0FBeUIsQ0FBQyxzQ0FBc0MsQ0FBQztRQUNyRSxJQUFJLG1DQUF5QixDQUFDLDRDQUE0QyxDQUFDO0tBQzVFLENBQUM7SUFFRixNQUFNLEtBQUssR0FBRyxJQUFJLGtDQUFlLENBQy9CO1FBQ0UsZUFBZSxFQUFFLE9BQU87UUFDeEIsY0FBYyxFQUFFLGtCQUFRLENBQUMsVUFBVTtLQUNwQyxFQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkNBQTZDLENBQzFELENBQUM7SUFDRixNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsMENBQTBDLENBQUMsRUFDOUQsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFFcEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsaURBQWlELENBQUMsRUFDckUsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRVgsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLDhCQUE4QixDQUFDLENBQ3ZELENBQUM7SUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLG1DQUF5QixDQUM5Qyw2REFBNkQsQ0FDOUQsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLElBQUksa0NBQWUsQ0FDL0I7UUFDRSxlQUFlLEVBQUUsT0FBTztRQUN4QixjQUFjLEVBQUUsa0JBQVEsQ0FBQyxVQUFVO0tBQ3BDLEVBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FDMUQsQ0FBQztJQUNGLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FDUCxPQUFPLEVBQ1AsZ0VBQWdFLENBQ2pFLEVBQ0QsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDbkMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRVgsSUFBQSxrQ0FBMkIsRUFBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUU7SUFDekQsOEJBQThCO0NBQy9CLENBQUMsQ0FBQztBQUVILElBQUEsa0NBQTJCLEVBQ3pCLDhDQUE4QyxFQUM5QyxXQUFXLEVBQ1gsQ0FBQywwQ0FBMEMsQ0FBQyxDQUM3QyxDQUFDO0FBRUYsZUFBZSxDQUNiLDJDQUEyQyxFQUMzQyxLQUFLLElBQUksRUFBRTtJQUNULElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsK0JBQStCLENBQUMsQ0FDeEQsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksbUNBQXlCLENBQzlDLG9DQUFvQyxDQUNyQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxrQ0FBZSxDQUMvQjtRQUNFLGVBQWUsRUFBRSxPQUFPO1FBQ3hCLGNBQWMsRUFBRSxrQkFBUSxDQUFDLFVBQVU7S0FDcEMsRUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUMxRCxDQUFDO0lBQ0YsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUNwRCxPQUFPLENBQ1IsQ0FBQztJQUVGLG1GQUFtRjtJQUNuRiw4REFBOEQ7SUFDOUQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNXcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxFQUNELE1BQU0sQ0FDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBMYW5ndWFnZSwgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0c01ha2VyIH0gZnJvbSBcIi4uLy4uL2NvbnN0cnVjdHMtbWFrZXJcIjtcbmltcG9ydCB7IGV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdCB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5cbmNvbnN0IG9uVGYxXzZBbmROZXdlciA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBmbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgdGltZW91dD86IG51bWJlcixcbikgPT4ge1xuICBjb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID0gcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG4gIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKGAke3RlcnJhZm9ybUJpbmFyeU5hbWV9IHZlcnNpb24gLWpzb25gKTtcblxuICBpZiAoIW91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgVGVycmFmb3JtIHZlcnNpb25cIik7XG4gIH1cblxuICBjb25zdCB0ZlZlcnNpb24gPSBKU09OLnBhcnNlKG91dHB1dC50b1N0cmluZygpKS50ZXJyYWZvcm1fdmVyc2lvbjtcblxuICBjb25zdCBbbWFqb3IsIG1pbm9yXSA9IHRmVmVyc2lvbi50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcbiAgaWYgKE51bWJlcihtYWpvcikgPCAxIHx8IChOdW1iZXIobWFqb3IpID09PSAxICYmIE51bWJlcihtaW5vcikgPCA2KSkge1xuICAgIHRlc3Quc2tpcChcbiAgICAgIGAke25hbWV9IChyZXF1aXJlcyBUZXJyYWZvcm0gPj0gMS42LjA7IGJ1dCBpcyAke3RmVmVyc2lvbn0pYCxcbiAgICAgIGZuLFxuICAgICAgdGltZW91dCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRlc3QobmFtZSwgZm4sIHRpbWVvdXQpO1xuICB9XG59O1xuXG50ZXN0KFwiZ2VuZXJhdGUgc29tZSBtb2R1bGVzXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKFxuICAgIHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJtb2R1bGUtZ2VuZXJhdG9yLnRlc3RcIiksXG4gICk7XG4gIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcbiAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9la3MvYXdzQDcuMC4xXCIsXG4gICk7XG5cbiAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgIHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgIH0sXG4gICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICApO1xuICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4od29ya2RpciwgXCJtb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy9hd3MvZWtzLnRzXCIpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaFNuYXBzaG90KCk7XG59LCAxMjAwMDApO1xuXG5leHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QoXCJubyBtb2R1bGUgb3V0cHV0c1wiLCBcImdlbmVyYXRvclwiLCBbXG4gIFwibW9kdWxlLW5vLW91dHB1dHMudGVzdC5maXh0dXJlLnRmXCIsXG5dKTtcblxuZXhwZWN0TW9kdWxlVG9NYXRjaFNuYXBzaG90KFwidHlwZWxlc3MgdmFyaWFibGVzXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtbm8tdmFyaWFibGUtdHlwZS50ZXN0LmZpeHR1cmUudGZcIixcbl0pO1xuXG5leHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QoXCJubyBuZXdsaW5lXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtbm8tbmV3bGluZS0xLnRlc3QuZml4dHVyZS50ZlwiLFxuICBcIm1vZHVsZS1uby1uZXdsaW5lLTIudGVzdC5maXh0dXJlLnRmXCIsXG5dKTtcblxudGVzdChcImdlbmVyYXRlIG11bHRpcGxlIGF3cyBtb2R1bGVzXCIsIGFzeW5jICgpID0+IHtcbiAgamVzdC5zZXRUaW1lb3V0KDEyMDAwMCk7XG5cbiAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKFxuICAgIHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJtb2R1bGUtZ2VuZXJhdG9yLWF3cy50ZXN0XCIpLFxuICApO1xuICBjb25zdCBjb25zdHJhaW50cyA9IFtcbiAgICBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzQDIuNzguMFwiKSxcbiAgICBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9yZHMtYXVyb3JhL2F3c0A0LjEuMFwiKSxcbiAgXTtcblxuICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIoXG4gICAge1xuICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgfSxcbiAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICk7XG4gIGF3YWl0IG1ha2VyLmdlbmVyYXRlKGNvbnN0cmFpbnRzKTtcblxuICBjb25zdCB2cGNPdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwibW9kdWxlcy90ZXJyYWZvcm0tYXdzLW1vZHVsZXMvYXdzL3ZwYy50c1wiKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdCh2cGNPdXRwdXQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuXG4gIGNvbnN0IHJkc091dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4od29ya2RpciwgXCJtb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy9hd3MvcmRzLWF1cm9yYS50c1wiKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChyZHNPdXRwdXQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xufSwgMTIwMDAwKTtcblxudGVzdChcImdlbmVyYXRlIG5lc3RlZCBtb2R1bGVcIiwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCB3b3JrZGlyID0gZnMubWtkdGVtcFN5bmMoXG4gICAgcGF0aC5qb2luKG9zLnRtcGRpcigpLCBcIm1vZHVsZS1nZW5lcmF0b3ItbmVzdGVkLnRlc3RcIiksXG4gICk7XG4gIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcbiAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzLy9tb2R1bGVzL3ZwYy1lbmRwb2ludHNAMy4xOS4wXCIsXG4gICk7XG5cbiAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgIHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgIH0sXG4gICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICApO1xuICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4oXG4gICAgICB3b3JrZGlyLFxuICAgICAgXCJtb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy9hd3MvdnBjL21vZHVsZXMvdnBjLWVuZHBvaW50cy50c1wiLFxuICAgICksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcImdldFggdmFyaWFibGVzXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtZ2V0LXgudGVzdC5maXh0dXJlLnRmXCIsXG5dKTtcblxuZXhwZWN0TW9kdWxlVG9NYXRjaFNuYXBzaG90KFxuICBcImhhbmRsZSAqLyogaW4gbW9kdWxlIHZhcmlhYmxlIGRlZmF1bHQgc3RyaW5nXCIsXG4gIFwiZ2VuZXJhdG9yXCIsXG4gIFtcIm1vZHVsZS13aXRoLXN0YXItZGVmYXVsdC50ZXN0LmZpeHR1cmUudGZcIl0sXG4pO1xuXG5vblRmMV82QW5kTmV3ZXIoXG4gIFwiZ2VuZXJhdGUgbW9kdWxlIHRoYXQgY2FuJ3QgYmUgaW5pdGlhbGl6ZWRcIixcbiAgYXN5bmMgKCkgPT4ge1xuICAgIGplc3Quc2V0VGltZW91dCgxMjAwMDApO1xuXG4gICAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKFxuICAgICAgcGF0aC5qb2luKG9zLnRtcGRpcigpLCBcIm1vZHVsZS1nZW5lcmF0b3IudGVzdC1uby1pbml0XCIpLFxuICAgICk7XG4gICAgY29uc3QgY29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KFxuICAgICAgXCJtaWxsaUhRL25leHQtanMvYXdzQDEuMC4wLWNhbmFyeS41XCIsXG4gICAgKTtcblxuICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihcbiAgICAgIHtcbiAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgIH0sXG4gICAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICAgKTtcbiAgICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKHdvcmtkaXIsIFwibW9kdWxlcy9taWxsaUhRL2F3cy9uZXh0LWpzLnRzXCIpLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICk7XG5cbiAgICAvLyB5ZXMsIHRoaXMgaXMgYSBsb3Qgb2YgY29kZSwgYnV0IHRoaXMgdGVzdCBpcyBza2lwcGVkIGZvciBzb21lIFRlcnJhZm9ybSB2ZXJzaW9uc1xuICAgIC8vIHdoaWNoIHRoZW4gc2hvd3Mgc25hcHNob3RzIGFzIG9ic29sZXRlIHdoaWNoIGZhaWxzIHRoZSB0ZXN0XG4gICAgLy8gdGhpcyB3YXksIHRoZXJlJ3Mgbm8gc3VjaCBwcm9ibGVtIGlmIHRoZSB0ZXN0IGlzIHNraXBwZWRcbiAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoSW5saW5lU25hcHNob3QoYFxuICAgICAgXCIvLyBnZW5lcmF0ZWQgYnkgY2RrdG4gZ2V0XG4gICAgICAvLyBtaWxsaUhRL25leHQtanMvYXdzXG4gICAgICBpbXBvcnQgeyBUZXJyYWZvcm1Nb2R1bGUsIFRlcnJhZm9ybU1vZHVsZVVzZXJDb25maWcgfSBmcm9tICdjZGt0bic7XG4gICAgICBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgTmV4dEpzQ29uZmlnIGV4dGVuZHMgVGVycmFmb3JtTW9kdWxlVXNlckNvbmZpZyB7XG4gICAgICAgIC8qKlxuICAgICAgICAqIEFDTSBjZXJ0aWZpY2F0ZSBhcm4gZm9yIGN1c3RvbV9kb21haW5cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBbGlhc2VzIGZvciBjdXN0b21fZG9tYWluXG4gICAgICAgICpcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udEFsaWFzZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICogSGVhZGVyIGtleXMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGNhY2hlIGtleSBpbiBDbG91ZEZyb250LlxuICAgICAgICAqIEF1dGhvcml6YXRpb25cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycz86IHN0cmluZ1tdO1xuICAgICAgICAvKipcbiAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBtYWluIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICAqIHRydWVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbj86IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAqIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvdmlkZSBpdHMgYXJuLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBjbG91ZGZyb250RXh0ZXJuYWxBcm4/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvdmlkZSBpdHMgaWQuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRFeHRlcm5hbElkPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuIE9uZSBvZiBTU0x2MywgVExTdjEsIFRMU3YxXzIwMTYsIFRMU3YxLjFfMjAxNiwgVExTdjEuMl8yMDE4IG9yIFRMU3YxLjJfMjAxOS5cbiAgICAgICAgKiBUTFN2MVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogSWQgb2YgYSBjdXN0b20gcmVxdWVzdCBwb2xpY3kgdGhhdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcG9saWN5IChBbGxWaWV3ZXIpLiBDYW4gYmUgY3VzdG9tIG9yIG1hbmFnZWQuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5Pzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBQcmljZSBjbGFzcyBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucyAobWFpbiAmIHByb3h5IGNvbmZpZykuIE9uZSBvZiBQcmljZUNsYXNzX0FsbCwgUHJpY2VDbGFzc18yMDAsIFByaWNlQ2xhc3NfMTAwLlxuICAgICAgICAqIFByaWNlQ2xhc3NfMTAwXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRQcmljZUNsYXNzPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBJZCBvZiBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LiBDYW4gYmUgY3VzdG9tIG9yIG1hbmFnZWQuIERlZmF1bHQgaXMgZW1wdHkuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3k/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIEFuIG9wdGlvbmFsIHdlYmFjbDIgYXJuIG9yIHdlYmFjbCBpZCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY2xvdWRmcm9udCBkaXN0cmlidXRpb25cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udFdlYmFjbElkPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHJlc291cmNlcyBmb3IgaW1hZ2Ugb3B0aW1pemF0aW9uIHN1cHBvcnQgc2hvdWxkIGJlIGNyZWF0ZWQgb3Igbm90LlxuICAgICAgICAqIHRydWVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY3JlYXRlSW1hZ2VPcHRpbWl6YXRpb24/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBVc2UgbG9jYWxseSBidWlsdCBwYWNrYWdlcyByYXRoZXIgdGhhbiBkb3dubG9hZCB0aGVtIGZyb20gbnBtLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBkZWJ1Z1VzZUxvY2FsUGFja2FnZXM/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBJZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBncm91cCAob25seSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGh5cGhlbnMgYXJlIGFsbG93ZWQpLlxuICAgICAgICAqIHRmLW5leHRcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgZGVwbG95bWVudE5hbWU/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIENvbnRyb2xzIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJ1biBtdWx0aXBsZSBkZXBsb3ltZW50cyBpbiBwYXJhbGxlbCAocmVxdWlyZXMgbXVsdGlwbGVfZGVwbG95bWVudHNfYmFzZV9kb21haW4pLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBlbmFibGVNdWx0aXBsZURlcGxveW1lbnRzPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICogQW1vdW50IG9mIG1lbW9yeSBpbiBNQiB0aGUgd29ya2VyIExhbWJkYSBGdW5jdGlvbiBmb3IgaW1hZ2Ugb3B0aW1pemF0aW9uIGNhbiB1c2UuIFZhbGlkIHZhbHVlIGJldHdlZW4gMTI4IE1CIHRvIDEwLDI0MCBNQiwgaW4gMSBNQiBpbmNyZW1lbnRzLlxuICAgICAgICAqIDIsMDQ4XG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGltYWdlT3B0aW1pemF0aW9uTGFtYmRhTWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICogV2hldGhlciB0byBkZXBsb3kgYWRkaXRpb25hbCBsYW1iZGEgSlNPTiBwb2xpY2llcy4gSWYgZmFsc2UsIGxhbWJkYV9wb2xpY3lfanNvbiB3aWxsIG5vdCBiZSBhdHRhY2hlZCB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uLiAoTmVjZXNzYXJ5IHNpbmNlIHBvbGljeSBzdHJpbmdzIGFyZSBvbmx5IGtub3duIGFmdGVyIGFwcGx5IHdoZW4gdXNpbmcgVGVycmFmb3JtcyBkYXRhLmF3c19pYW1fcG9saWN5X2RvY3VtZW50KVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBsYW1iZGFBdHRhY2hQb2xpY3lKc29uPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICogU2V0IHRvIHRydWUgaWYgdGhlIExhbWJkYSBmdW5jdGlvbnMgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGEgVlBDLiBVc2UgdGhpcyBzZXR0aW5nIGlmIFZQQyByZXNvdXJjZXMgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IHRoZSBMYW1iZGEgZnVuY3Rpb25zLiBXaGVuIHNldHRpbmcgdGhpcyB0byB0cnVlLCB1c2UgdnBjX3NlY3VyaXR5X2dyb3VwX2lkcyBhbmQgdnBjX3N1Ym5ldF9pZHMgdG8gc3BlY2lmeSB0aGUgVlBDIG5ldHdvcmtpbmcuIE5vdGUgdGhhdCBhdHRhY2hpbmcgdG8gYSBWUEMgd291bGQgaW50cm9kdWNlIGEgZGVsYXkgb24gdG8gY29sZCBzdGFydHNcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgbGFtYmRhQXR0YWNoVG9WcGM/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBZGRpdGlvbmFsIHBvbGljeSBkb2N1bWVudCBhcyBKU09OIHRvIGF0dGFjaCB0byB0aGUgTGFtYmRhIEZ1bmN0aW9uIHJvbGVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgbGFtYmRhUG9saWN5SnNvbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogQVJOIG9mIElBTSBwb2xpY3kgdGhhdCBzY29wZXMgYXdzX2lhbV9yb2xlIGFjY2VzcyBmb3IgdGhlIGxhbWJkYVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBsYW1iZGFSb2xlUGVybWlzc2lvbnNCb3VuZGFyeT86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogRGVmYXVsdCB3aWxkY2FyZCBkb21haW4gd2hlcmUgbmV3IGRlcGxveW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUuIFNob3VsZCBiZSBpbiB0aGUgZm9ybSBvZiAqLmV4YW1wbGUuY29tLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogVGFnIG1ldGFkYXRhIHRvIGxhYmVsIEFXUyByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IHRhZ3MuXG4gICAgICAgICogVGhlIHByb3BlcnR5IHR5cGUgY29udGFpbnMgYSBtYXAsIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nLCBwbGVhc2Ugc2VlIHtAbGluayBjZGsudGYvbW9kdWxlLW1hcC1pbnB1dHMgdGhlIGRvY3N9XG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBUYWcgbWV0YWRhdGEgdG8gbGFiZWwgQVdTIFMzIGJ1Y2tldHMuIE92ZXJyaWRlcyB0YWdzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBpbnB1dCB2YXJpYWJsZSB0YWdzLlxuICAgICAgICAqIFRoZSBwcm9wZXJ0eSB0eXBlIGNvbnRhaW5zIGEgbWFwLCB0aGV5IGhhdmUgc3BlY2lhbCBoYW5kbGluZywgcGxlYXNlIHNlZSB7QGxpbmsgY2RrLnRmL21vZHVsZS1tYXAtaW5wdXRzIHRoZSBkb2NzfVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSB0YWdzUzNCdWNrZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBUaGUgbGlzdCBvZiBTZWN1cml0eSBHcm91cCBJRHMgdG8gYmUgdXNlZCBieSB0aGUgTGFtYmRhIGZ1bmN0aW9ucy4gbGFtYmRhX2F0dGFjaF90b192cGMgc2hvdWxkIGJlIHNldCB0byB0cnVlIGZvciB0aGVzZSB0byBiZSBhcHBsaWVkLlxuICAgICAgICAqXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IHZwY1NlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICogVGhlIGxpc3Qgb2YgVlBDIHN1Ym5ldCBJRHMgdG8gYXR0YWNoIHRoZSBMYW1iZGEgZnVuY3Rpb25zLiBsYW1iZGFfYXR0YWNoX3RvX3ZwYyBzaG91bGQgYmUgc2V0IHRvIHRydWUgZm9yIHRoZXNlIHRvIGJlIGFwcGxpZWQuXG4gICAgICAgICpcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgdnBjU3VibmV0SWRzPzogc3RyaW5nW107XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICogRGVmaW5lcyBhbiBOZXh0SnMgYmFzZWQgb24gYSBUZXJyYWZvcm0gbW9kdWxlXG4gICAgICAqXG4gICAgICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vbW9kdWxlcy9taWxsaUhRL25leHQtanMvYXdzLzEuMC4wLWNhbmFyeS41IG1pbGxpSFEvbmV4dC1qcy9hd3N9XG4gICAgICAqL1xuICAgICAgZXhwb3J0IGNsYXNzIE5leHRKcyBleHRlbmRzIFRlcnJhZm9ybU1vZHVsZSB7XG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHsgfVxuICAgICAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiBOZXh0SnNDb25maWcgPSB7fSkge1xuICAgICAgICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgc291cmNlOiAnbWlsbGlIUS9uZXh0LWpzL2F3cycsXG4gICAgICAgICAgICB2ZXJzaW9uOiAnMS4wLjAtY2FuYXJ5LjUnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuID0gY29uZmlnLmNsb3VkZnJvbnRBY21DZXJ0aWZpY2F0ZUFybjtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRBbGlhc2VzID0gY29uZmlnLmNsb3VkZnJvbnRBbGlhc2VzO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycyA9IGNvbmZpZy5jbG91ZGZyb250Q2FjaGVLZXlIZWFkZXJzO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbiA9IGNvbmZpZy5jbG91ZGZyb250Q3JlYXRlRGlzdHJpYnV0aW9uO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udEV4dGVybmFsQXJuID0gY29uZmlnLmNsb3VkZnJvbnRFeHRlcm5hbEFybjtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRFeHRlcm5hbElkID0gY29uZmlnLmNsb3VkZnJvbnRFeHRlcm5hbElkO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udE1pbmltdW1Qcm90b2NvbFZlcnNpb24gPSBjb25maWcuY2xvdWRmcm9udE1pbmltdW1Qcm90b2NvbFZlcnNpb247XG4gICAgICAgICAgdGhpcy5jbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSA9IGNvbmZpZy5jbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeTtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRQcmljZUNsYXNzID0gY29uZmlnLmNsb3VkZnJvbnRQcmljZUNsYXNzO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IGNvbmZpZy5jbG91ZGZyb250UmVzcG9uc2VIZWFkZXJzUG9saWN5O1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udFdlYmFjbElkID0gY29uZmlnLmNsb3VkZnJvbnRXZWJhY2xJZDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlT3B0aW1pemF0aW9uID0gY29uZmlnLmNyZWF0ZUltYWdlT3B0aW1pemF0aW9uO1xuICAgICAgICAgIHRoaXMuZGVidWdVc2VMb2NhbFBhY2thZ2VzID0gY29uZmlnLmRlYnVnVXNlTG9jYWxQYWNrYWdlcztcbiAgICAgICAgICB0aGlzLmRlcGxveW1lbnROYW1lID0gY29uZmlnLmRlcGxveW1lbnROYW1lO1xuICAgICAgICAgIHRoaXMuZW5hYmxlTXVsdGlwbGVEZXBsb3ltZW50cyA9IGNvbmZpZy5lbmFibGVNdWx0aXBsZURlcGxveW1lbnRzO1xuICAgICAgICAgIHRoaXMuaW1hZ2VPcHRpbWl6YXRpb25MYW1iZGFNZW1vcnlTaXplID0gY29uZmlnLmltYWdlT3B0aW1pemF0aW9uTGFtYmRhTWVtb3J5U2l6ZTtcbiAgICAgICAgICB0aGlzLmxhbWJkYUF0dGFjaFBvbGljeUpzb24gPSBjb25maWcubGFtYmRhQXR0YWNoUG9saWN5SnNvbjtcbiAgICAgICAgICB0aGlzLmxhbWJkYUF0dGFjaFRvVnBjID0gY29uZmlnLmxhbWJkYUF0dGFjaFRvVnBjO1xuICAgICAgICAgIHRoaXMubGFtYmRhUG9saWN5SnNvbiA9IGNvbmZpZy5sYW1iZGFQb2xpY3lKc29uO1xuICAgICAgICAgIHRoaXMubGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnkgPSBjb25maWcubGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnk7XG4gICAgICAgICAgdGhpcy5tdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbiA9IGNvbmZpZy5tdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbjtcbiAgICAgICAgICB0aGlzLnRhZ3MgPSBjb25maWcudGFncztcbiAgICAgICAgICB0aGlzLnRhZ3NTM0J1Y2tldCA9IGNvbmZpZy50YWdzUzNCdWNrZXQ7XG4gICAgICAgICAgdGhpcy52cGNTZWN1cml0eUdyb3VwSWRzID0gY29uZmlnLnZwY1NlY3VyaXR5R3JvdXBJZHM7XG4gICAgICAgICAgdGhpcy52cGNTdWJuZXRJZHMgPSBjb25maWcudnBjU3VibmV0SWRzO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X2FjbV9jZXJ0aWZpY2F0ZV9hcm4nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250QWNtQ2VydGlmaWNhdGVBcm4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X2FjbV9jZXJ0aWZpY2F0ZV9hcm4nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udEFsaWFzZXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9hbGlhc2VzJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250QWxpYXNlcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9hbGlhc2VzJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRDYWNoZUtleUhlYWRlcnMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jYWNoZV9rZXlfaGVhZGVycyddIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jYWNoZV9rZXlfaGVhZGVycyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250Q3JlYXRlRGlzdHJpYnV0aW9uKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jcmVhdGVfZGlzdHJpYnV0aW9uJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRDcmVhdGVEaXN0cmlidXRpb24odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jcmVhdGVfZGlzdHJpYnV0aW9uJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRFeHRlcm5hbEFybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9hcm4nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250RXh0ZXJuYWxBcm4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X2V4dGVybmFsX2FybiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250RXh0ZXJuYWxJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9pZCddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRFeHRlcm5hbElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9pZCddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9taW5pbXVtX3Byb3RvY29sX3ZlcnNpb24nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X29yaWdpbl9yZXF1ZXN0X3BvbGljeSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9vcmlnaW5fcmVxdWVzdF9wb2xpY3knXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udFByaWNlQ2xhc3MoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfcHJpY2VfY2xhc3MnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250UHJpY2VDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfcHJpY2VfY2xhc3MnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9yZXNwb25zZV9oZWFkZXJzX3BvbGljeSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3kodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X3Jlc3BvbnNlX2hlYWRlcnNfcG9saWN5J10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRXZWJhY2xJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF93ZWJhY2xfaWQnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250V2ViYWNsSWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X3dlYmFjbF9pZCddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjcmVhdGVJbWFnZU9wdGltaXphdGlvbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2NyZWF0ZV9pbWFnZV9vcHRpbWl6YXRpb24nXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY3JlYXRlSW1hZ2VPcHRpbWl6YXRpb24odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY3JlYXRlX2ltYWdlX29wdGltaXphdGlvbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBkZWJ1Z1VzZUxvY2FsUGFja2FnZXMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydkZWJ1Z191c2VfbG9jYWxfcGFja2FnZXMnXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgZGVidWdVc2VMb2NhbFBhY2thZ2VzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2RlYnVnX3VzZV9sb2NhbF9wYWNrYWdlcyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBkZXBsb3ltZW50TmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snZGVwbG95bWVudF9uYW1lJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgZGVwbG95bWVudE5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydkZXBsb3ltZW50X25hbWUnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgZW5hYmxlTXVsdGlwbGVEZXBsb3ltZW50cygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2VuYWJsZV9tdWx0aXBsZV9kZXBsb3ltZW50cyddIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBlbmFibGVNdWx0aXBsZURlcGxveW1lbnRzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2VuYWJsZV9tdWx0aXBsZV9kZXBsb3ltZW50cyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBpbWFnZU9wdGltaXphdGlvbkxhbWJkYU1lbW9yeVNpemUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2ltYWdlX29wdGltaXphdGlvbl9sYW1iZGFfbWVtb3J5X3NpemUnXSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBpbWFnZU9wdGltaXphdGlvbkxhbWJkYU1lbW9yeVNpemUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydpbWFnZV9vcHRpbWl6YXRpb25fbGFtYmRhX21lbW9yeV9zaXplJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGxhbWJkYUF0dGFjaFBvbGljeUpzb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydsYW1iZGFfYXR0YWNoX3BvbGljeV9qc29uJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYUF0dGFjaFBvbGljeUpzb24odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snbGFtYmRhX2F0dGFjaF9wb2xpY3lfanNvbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBsYW1iZGFBdHRhY2hUb1ZwYygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2xhbWJkYV9hdHRhY2hfdG9fdnBjJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYUF0dGFjaFRvVnBjKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2xhbWJkYV9hdHRhY2hfdG9fdnBjJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGxhbWJkYVBvbGljeUpzb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2xhbWJkYV9wb2xpY3lfanNvbiddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYVBvbGljeUpzb24odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydsYW1iZGFfcG9saWN5X2pzb24nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgbGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2xhbWJkYV9yb2xlX3Blcm1pc3Npb25zX2JvdW5kYXJ5J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgbGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydsYW1iZGFfcm9sZV9wZXJtaXNzaW9uc19ib3VuZGFyeSddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snbXVsdGlwbGVfZGVwbG95bWVudHNfYmFzZV9kb21haW4nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ211bHRpcGxlX2RlcGxveW1lbnRzX2Jhc2VfZG9tYWluJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHRhZ3MoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd0YWdzJ10gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IHRhZ3ModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1sndGFncyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCB0YWdzUzNCdWNrZXQoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd0YWdzX3MzX2J1Y2tldCddIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCB0YWdzUzNCdWNrZXQodmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1sndGFnc19zM19idWNrZXQnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgdnBjU2VjdXJpdHlHcm91cElkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd2cGNfc2VjdXJpdHlfZ3JvdXBfaWRzJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCB2cGNTZWN1cml0eUdyb3VwSWRzKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWyd2cGNfc2VjdXJpdHlfZ3JvdXBfaWRzJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHZwY1N1Ym5ldElkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd2cGNfc3VibmV0X2lkcyddIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgdnBjU3VibmV0SWRzKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWyd2cGNfc3VibmV0X2lkcyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBhcGlFbmRwb2ludE91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2FwaV9lbmRwb2ludCcpXG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBhcGlFbmRwb2ludEFjY2Vzc1BvbGljeUFybk91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2FwaV9lbmRwb2ludF9hY2Nlc3NfcG9saWN5X2FybicpXG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250Q3VzdG9tRXJyb3JSZXNwb25zZU91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfY3VzdG9tX2Vycm9yX3Jlc3BvbnNlJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnREZWZhdWx0Q2FjaGVCZWhhdmlvck91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfZGVmYXVsdF9jYWNoZV9iZWhhdmlvcicpXG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250RGVmYXVsdFJvb3RPYmplY3RPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2RlZmF1bHRfcm9vdF9vYmplY3QnKVxuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udERvbWFpbk5hbWVPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2RvbWFpbl9uYW1lJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRIb3N0ZWRab25lSWRPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2hvc3RlZF96b25lX2lkJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmRlcmVkQ2FjaGVCZWhhdmlvcnNPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X29yZGVyZWRfY2FjaGVfYmVoYXZpb3JzJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmlnaW5zT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygnY2xvdWRmcm9udF9vcmlnaW5zJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHVwbG9hZEJ1Y2tldElkT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygndXBsb2FkX2J1Y2tldF9pZCcpXG4gICAgICAgIH1cbiAgICAgICAgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0cztcbiAgICAgICAgfVxuICAgICAgICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLmlucHV0cylcbiAgICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsXSkgPT4gdmFsICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIC5tYXAoKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFwiXG4gICAgYCk7XG4gIH0sXG4gIDEyMDAwMCxcbik7XG4iXX0=
@@ -1 +0,0 @@
1
- export {};
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- // Copyright (c) HashiCorp, Inc
27
- // SPDX-License-Identifier: MPL-2.0
28
- const fs = __importStar(require("fs"));
29
- const os = __importStar(require("os"));
30
- const path = __importStar(require("path"));
31
- const codemaker_1 = require("codemaker");
32
- const provider_generator_1 = require("../../generator/provider-generator");
33
- test("generate a resource with nested types", async () => {
34
- const code = new codemaker_1.CodeMaker();
35
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "nested-types.test"));
36
- const spec = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "nested-types.test.fixture.json"), "utf-8"));
37
- new provider_generator_1.TerraformProviderGenerator(code, spec).generateAll();
38
- await code.save(workdir);
39
- const output = fs.readFileSync(path.join(workdir, "providers/test/nested-types-resource/index.ts"), "utf-8");
40
- expect(output).toMatchSnapshot();
41
- });
42
- test("generate a resource with nested type and no attributes", async () => {
43
- const code = new codemaker_1.CodeMaker();
44
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "nested-type-without-attributes.test"));
45
- const spec = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "nested-type-without-attributes.test.fixture.json"), "utf-8"));
46
- new provider_generator_1.TerraformProviderGenerator(code, spec).generateAll();
47
- await code.save(workdir);
48
- const output = fs.readFileSync(path.join(workdir, "providers/test/nested-type-without-attributes-resource/index.ts"), "utf-8");
49
- expect(output).toMatchSnapshot();
50
- });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLXR5cGVzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJuZXN0ZWQtdHlwZXMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsMkVBQWdGO0FBRWhGLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLHFCQUFTLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNyQixFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUNsRSxPQUFPLENBQ1IsQ0FDRixDQUFDO0lBQ0YsSUFBSSwrQ0FBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLCtDQUErQyxDQUFDLEVBQ25FLE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLHFDQUFxQyxDQUFDLENBQzlELENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNyQixFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQ1AsU0FBUyxFQUNULFVBQVUsRUFDVixrREFBa0QsQ0FDbkQsRUFDRCxPQUFPLENBQ1IsQ0FDRixDQUFDO0lBQ0YsSUFBSSwrQ0FBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQ1AsT0FBTyxFQUNQLGlFQUFpRSxDQUNsRSxFQUNELE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvciB9IGZyb20gXCIuLi8uLi9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5cbnRlc3QoXCJnZW5lcmF0ZSBhIHJlc291cmNlIHdpdGggbmVzdGVkIHR5cGVzXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgY29kZSA9IG5ldyBDb2RlTWFrZXIoKTtcbiAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJuZXN0ZWQtdHlwZXMudGVzdFwiKSk7XG4gIGNvbnN0IHNwZWMgPSBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiZml4dHVyZXNcIiwgXCJuZXN0ZWQtdHlwZXMudGVzdC5maXh0dXJlLmpzb25cIiksXG4gICAgICBcInV0Zi04XCIsXG4gICAgKSxcbiAgKTtcbiAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKGNvZGUsIHNwZWMpLmdlbmVyYXRlQWxsKCk7XG4gIGF3YWl0IGNvZGUuc2F2ZSh3b3JrZGlyKTtcblxuICBjb25zdCBvdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwicHJvdmlkZXJzL3Rlc3QvbmVzdGVkLXR5cGVzLXJlc291cmNlL2luZGV4LnRzXCIpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaFNuYXBzaG90KCk7XG59KTtcblxudGVzdChcImdlbmVyYXRlIGEgcmVzb3VyY2Ugd2l0aCBuZXN0ZWQgdHlwZSBhbmQgbm8gYXR0cmlidXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG4gIGNvbnN0IHdvcmtkaXIgPSBmcy5ta2R0ZW1wU3luYyhcbiAgICBwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwibmVzdGVkLXR5cGUtd2l0aG91dC1hdHRyaWJ1dGVzLnRlc3RcIiksXG4gICk7XG4gIGNvbnN0IHNwZWMgPSBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBcImZpeHR1cmVzXCIsXG4gICAgICAgIFwibmVzdGVkLXR5cGUtd2l0aG91dC1hdHRyaWJ1dGVzLnRlc3QuZml4dHVyZS5qc29uXCIsXG4gICAgICApLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICksXG4gICk7XG4gIG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcihjb2RlLCBzcGVjKS5nZW5lcmF0ZUFsbCgpO1xuICBhd2FpdCBjb2RlLnNhdmUod29ya2Rpcik7XG5cbiAgY29uc3Qgb3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbihcbiAgICAgIHdvcmtkaXIsXG4gICAgICBcInByb3ZpZGVycy90ZXN0L25lc3RlZC10eXBlLXdpdGhvdXQtYXR0cmlidXRlcy1yZXNvdXJjZS9pbmRleC50c1wiLFxuICAgICksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0pO1xuIl19
@@ -1 +0,0 @@
1
- export {};