@cdktn/provider-generator 0.24.0-pre.9 → 0.24.0-pre.91

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 (124) hide show
  1. package/.spec.swcrc +22 -0
  2. package/LICENSE +355 -0
  3. package/README.md +1 -1
  4. package/build/__tests__/edge-provider-schema/builder.d.ts +9 -3
  5. package/build/__tests__/edge-provider-schema/builder.js +6 -3
  6. package/build/__tests__/edge-provider-schema/cli.js +8 -3
  7. package/build/__tests__/edge-provider-schema/index.js +119 -1
  8. package/build/__tests__/provider.test.js +4 -1
  9. package/build/get/__tests__/generator/ephemeral-resources.test.d.ts +2 -0
  10. package/build/get/__tests__/generator/ephemeral-resources.test.js +49 -0
  11. package/build/get/__tests__/generator/module-generator.test.js +12 -12
  12. package/build/get/__tests__/generator/provider-functions.test.d.ts +2 -0
  13. package/build/get/__tests__/generator/provider-functions.test.js +176 -0
  14. package/build/get/__tests__/generator/provider-source-matching.test.d.ts +2 -0
  15. package/build/get/__tests__/generator/provider-source-matching.test.js +45 -0
  16. package/build/get/__tests__/generator/provider.test.js +9 -1
  17. package/build/get/__tests__/generator/supported-stored-classes.test.d.ts +2 -0
  18. package/build/get/__tests__/generator/supported-stored-classes.test.js +137 -0
  19. package/build/get/__tests__/generator/types.test.js +44 -1
  20. package/build/get/__tests__/generator/write-only.test.d.ts +2 -0
  21. package/build/get/__tests__/generator/write-only.test.js +65 -0
  22. package/build/get/__tests__/target-versions.test.d.ts +2 -0
  23. package/build/get/__tests__/target-versions.test.js +171 -0
  24. package/build/get/constructs-maker.d.ts +8 -1
  25. package/build/get/constructs-maker.js +46 -10
  26. package/build/get/generator/emitter/attributes-emitter.d.ts +13 -2
  27. package/build/get/generator/emitter/attributes-emitter.js +71 -5
  28. package/build/get/generator/emitter/index.d.ts +1 -0
  29. package/build/get/generator/emitter/index.js +2 -1
  30. package/build/get/generator/emitter/provider-functions-emitter.d.ts +11 -0
  31. package/build/get/generator/emitter/provider-functions-emitter.js +94 -0
  32. package/build/get/generator/emitter/resource-emitter.d.ts +5 -1
  33. package/build/get/generator/emitter/resource-emitter.js +83 -7
  34. package/build/get/generator/emitter/struct-emitter.js +10 -10
  35. package/build/get/generator/models/attribute-model.d.ts +4 -0
  36. package/build/get/generator/models/attribute-model.js +50 -4
  37. package/build/get/generator/models/attribute-type-model.d.ts +24 -0
  38. package/build/get/generator/models/attribute-type-model.js +91 -5
  39. package/build/get/generator/models/index.d.ts +1 -0
  40. package/build/get/generator/models/index.js +2 -1
  41. package/build/get/generator/models/provider-function-model.d.ts +102 -0
  42. package/build/get/generator/models/provider-function-model.js +667 -0
  43. package/build/get/generator/models/resource-model.d.ts +3 -0
  44. package/build/get/generator/models/resource-model.js +13 -4
  45. package/build/get/generator/models/struct.d.ts +2 -0
  46. package/build/get/generator/models/struct.js +6 -2
  47. package/build/get/generator/models/supported-stored-classes.d.ts +5 -0
  48. package/build/get/generator/models/supported-stored-classes.js +86 -0
  49. package/build/get/generator/module-generator.js +3 -3
  50. package/build/get/generator/provider-generator.d.ts +2 -0
  51. package/build/get/generator/provider-generator.js +41 -6
  52. package/build/get/generator/resource-parser.js +3 -1
  53. package/jest.config.js +16 -9
  54. package/package.json +28 -27
  55. package/package.sh +1 -1
  56. package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +4 -0
  57. package/src/__tests__/__snapshots__/provider.test.ts.snap +2828 -2828
  58. package/src/__tests__/edge-provider-schema/builder.ts +201 -0
  59. package/src/__tests__/edge-provider-schema/cli.ts +51 -0
  60. package/src/__tests__/edge-provider-schema/index.ts +284 -0
  61. package/src/__tests__/edge-provider-schema.test.ts +24 -0
  62. package/src/__tests__/provider.test.ts +183 -0
  63. package/src/get/__tests__/constructs-maker.test.ts +118 -0
  64. package/src/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +5 -5
  65. package/src/get/__tests__/generator/__snapshots__/ephemeral-resources.test.ts.snap +524 -0
  66. package/src/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +3310 -3310
  67. package/src/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +355 -355
  68. package/src/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +8 -8
  69. package/src/get/__tests__/generator/__snapshots__/provider-functions.test.ts.snap +444 -0
  70. package/src/get/__tests__/generator/__snapshots__/provider.test.ts.snap +8 -8
  71. package/src/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +126 -126
  72. package/src/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +17 -17
  73. package/src/get/__tests__/generator/__snapshots__/types.test.ts.snap +201 -52
  74. package/src/get/__tests__/generator/__snapshots__/write-only.test.ts.snap +262 -0
  75. package/src/get/__tests__/generator/complex-computed-types.test.ts +28 -0
  76. package/src/get/__tests__/generator/deep-nested-attributes.test.ts +56 -0
  77. package/src/get/__tests__/generator/description-escaping.test.ts +84 -0
  78. package/src/get/__tests__/generator/empty-provider-resources.test.ts +26 -0
  79. package/src/get/__tests__/generator/ephemeral-resources.test.ts +46 -0
  80. package/src/get/__tests__/generator/export-sharding.test.ts +169 -0
  81. package/src/get/__tests__/generator/fixtures/deeply-nested-collections.test.fixture.json +129 -0
  82. package/src/get/__tests__/generator/fixtures/ephemeral-resources.test.fixture.json +160 -0
  83. package/src/get/__tests__/generator/fixtures/provider-functions-collision.test.fixture.json +31 -0
  84. package/src/get/__tests__/generator/fixtures/provider-functions-synthetic.test.fixture.json +192 -0
  85. package/src/get/__tests__/generator/fixtures/provider-functions.test.fixture.json +170 -0
  86. package/src/get/__tests__/generator/fixtures/write-only.test.fixture.json +58 -0
  87. package/src/get/__tests__/generator/import-style.test.ts +129 -0
  88. package/src/get/__tests__/generator/module-generator.test.ts +528 -0
  89. package/src/get/__tests__/generator/nested-types.test.ts +54 -0
  90. package/src/get/__tests__/generator/provider-functions.test.ts +262 -0
  91. package/src/get/__tests__/generator/provider-source-matching.test.ts +84 -0
  92. package/src/get/__tests__/generator/provider.test.ts +59 -0
  93. package/src/get/__tests__/generator/resource-types.test.ts +118 -0
  94. package/src/get/__tests__/generator/skipped-attributes.test.ts +72 -0
  95. package/src/get/__tests__/generator/supported-stored-classes.test.ts +147 -0
  96. package/src/get/__tests__/generator/types.test.ts +686 -0
  97. package/src/get/__tests__/generator/versions-file.test.ts +72 -0
  98. package/src/get/__tests__/generator/write-only.test.ts +71 -0
  99. package/src/get/__tests__/target-versions.test.ts +206 -0
  100. package/src/get/__tests__/util.ts +75 -0
  101. package/src/get/constructs-maker.ts +885 -0
  102. package/src/get/generator/custom-defaults.ts +493 -0
  103. package/src/get/generator/emitter/attributes-emitter.ts +316 -0
  104. package/src/get/generator/emitter/index.ts +6 -0
  105. package/src/get/generator/emitter/provider-functions-emitter.ts +117 -0
  106. package/src/get/generator/emitter/resource-emitter.ts +330 -0
  107. package/src/get/generator/emitter/struct-emitter.ts +683 -0
  108. package/src/get/generator/loop-detection.ts +81 -0
  109. package/src/get/generator/models/attribute-model.ts +273 -0
  110. package/src/get/generator/models/attribute-type-model.ts +560 -0
  111. package/src/get/generator/models/index.ts +8 -0
  112. package/src/get/generator/models/provider-function-model.ts +872 -0
  113. package/src/get/generator/models/resource-model.ts +183 -0
  114. package/src/get/generator/models/scope.ts +54 -0
  115. package/src/get/generator/models/struct.ts +124 -0
  116. package/src/get/generator/models/supported-stored-classes.ts +88 -0
  117. package/src/get/generator/module-generator.ts +234 -0
  118. package/src/get/generator/provider-generator.ts +428 -0
  119. package/src/get/generator/resource-parser.ts +764 -0
  120. package/src/get/generator/sanitized-comments.ts +49 -0
  121. package/src/get/generator/skipped-attributes.ts +27 -0
  122. package/src/index.ts +40 -0
  123. package/src/util.ts +26 -0
  124. package/tsconfig.json +1 -2
@@ -6,6 +6,7 @@ exports.TerraformProviderGenerator = void 0;
6
6
  const codemaker_1 = require("codemaker");
7
7
  const commons_1 = require("@cdktn/commons");
8
8
  const provider_schema_1 = require("@cdktn/provider-schema");
9
+ const models_1 = require("./models");
9
10
  const resource_parser_1 = require("./resource-parser");
10
11
  const emitter_1 = require("./emitter");
11
12
  const isMatching = (target, terraformSchemaName) => {
@@ -29,6 +30,13 @@ const isMatching = (target, terraformSchemaName) => {
29
30
  name: "",
30
31
  };
31
32
  const targetElements = target.source.split("/");
33
+ // Only a 3-part source explicitly pins a registry hostname. Shorthand
34
+ // sources (e.g. "hashicorp/awscc") omit it, so we must not assume a
35
+ // default: Terraform resolves them under registry.terraform.io while
36
+ // OpenTofu resolves them under registry.opentofu.org. Comparing against a
37
+ // hard-coded default would make schema lookup fail under OpenTofu even
38
+ // though the provider was installed correctly.
39
+ const explicitHostname = targetElements.length === 3;
32
40
  switch (targetElements.length) {
33
41
  case 1: // only name set
34
42
  targetSource.name = targetElements[0].toLowerCase();
@@ -45,7 +53,7 @@ const isMatching = (target, terraformSchemaName) => {
45
53
  default:
46
54
  throw new Error(`can't handle ${target.source}. Expected string with 1, 2 or 3 elements separated by '/'`);
47
55
  }
48
- return (targetSource.hostname === hostname &&
56
+ return ((!explicitHostname || targetSource.hostname === hostname) &&
49
57
  targetSource.namespace === namespace &&
50
58
  targetSource.name === provider);
51
59
  }
@@ -62,8 +70,9 @@ class TerraformProviderGenerator {
62
70
  this.versions = {};
63
71
  this.code.indentation = 2;
64
72
  this.importExtension = (_a = options.importExtension) !== null && _a !== void 0 ? _a : "";
65
- this.resourceEmitter = new emitter_1.ResourceEmitter(this.code);
73
+ this.resourceEmitter = new emitter_1.ResourceEmitter(this.code, this.importExtension);
66
74
  this.structEmitter = new emitter_1.StructEmitter(this.code, this.importExtension);
75
+ this.providerFunctionsEmitter = new emitter_1.ProviderFunctionsEmitter(this.code);
67
76
  }
68
77
  getProviderByConstraint(providerConstraint) {
69
78
  return Object.keys(this.schema.provider_schemas || {}).find((fqpn) => isMatching(providerConstraint, fqpn));
@@ -95,7 +104,11 @@ class TerraformProviderGenerator {
95
104
  }
96
105
  const resources = Object.entries(provider.resource_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, type, resource, "resource", constraint));
97
106
  const dataSources = Object.entries(provider.data_source_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, `data_${type}`, resource, "data_source", constraint));
98
- return [].concat(...resources, ...dataSources);
107
+ const ephemeralResources = Object.entries(provider.ephemeral_resource_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, `ephemeral_${type}`, resource, "ephemeral_resource", constraint));
108
+ // CRITICAL: ephemeral resources must be appended AFTER resources and data
109
+ // sources - uniqueClassName dedup is order-dependent and existing
110
+ // prebuilt snapshots must not churn.
111
+ return [].concat(...resources, ...dataSources, ...ephemeralResources);
99
112
  }
100
113
  getClassNameForResource(terraformType) {
101
114
  return this.resourceParser.getClassNameForResource(terraformType);
@@ -127,6 +140,12 @@ class TerraformProviderGenerator {
127
140
  }
128
141
  this.emitResourceReadme(resourceModel);
129
142
  });
143
+ // Built before the provider class is emitted (rather than after, as
144
+ // resources/data sources/ephemeral resources above already are) so that
145
+ // the model can be attached to providerResource and picked up by
146
+ // ResourceEmitter while it still emits the provider class file below -
147
+ // see the engineering brief for why this ordering matters.
148
+ const providerFunctionsModel = (0, models_1.buildProviderFunctionsModel)(name, provider.functions);
130
149
  if (provider.provider) {
131
150
  const providerResource = this.resourceParser.parse(fqpn, `provider`, provider.provider, "provider", constraint);
132
151
  if (constraint) {
@@ -135,12 +154,28 @@ class TerraformProviderGenerator {
135
154
  providerResource.terraformProviderName = constraint.name;
136
155
  }
137
156
  providerResource.providerVersion = providerVersion;
157
+ if (providerFunctionsModel) {
158
+ (0, models_1.assertNoFunctionsGetterCollision)(name, providerResource.attributes.map((att) => att.name));
159
+ providerResource.providerFunctionsModel = providerFunctionsModel;
160
+ }
138
161
  files.push(this.emitResource(providerResource));
139
162
  this.emitResourceReadme(providerResource);
140
163
  }
164
+ if (providerFunctionsModel) {
165
+ files.push(this.emitProviderFunctions(name, providerFunctionsModel));
166
+ }
141
167
  this.emitIndexFile(name, files);
142
168
  this.emitLazyIndexFile(name, files);
143
169
  }
170
+ emitProviderFunctions(provider, model) {
171
+ const filePath = `providers/${provider}/provider-functions/index.ts`;
172
+ this.code.openFile(filePath);
173
+ this.code.line(`// generated from provider function schema`);
174
+ this.code.line();
175
+ this.providerFunctionsEmitter.emit(model);
176
+ this.code.closeFile(filePath);
177
+ return filePath;
178
+ }
144
179
  emitResourceReadme(resource) {
145
180
  const filePath = `${resource.namespaceFolderPath}/README.md`;
146
181
  this.code.openFile(filePath);
@@ -194,9 +229,9 @@ class TerraformProviderGenerator {
194
229
  if (resource.structsRequireSharding) {
195
230
  const structsSpecifier = `./${resource.structsFolderName}/index${this.importExtension}`;
196
231
  if (resource.referencedTypes.length > 0) {
197
- this.code.line(`import { ${resource.referencedTypes.join(", \n")}} from '${structsSpecifier}'`);
232
+ this.code.line(`import { ${resource.referencedTypes.join(", \n")}} from '${structsSpecifier}';`);
198
233
  }
199
- this.code.line(`export * from '${structsSpecifier}'`);
234
+ this.code.line(`export * from '${structsSpecifier}';`);
200
235
  resource.importStatements.forEach((statement) => this.code.line(statement));
201
236
  this.structEmitter.emitInterface(resource, resource.configStruct);
202
237
  this.resourceEmitter.emit(resource);
@@ -225,4 +260,4 @@ class TerraformProviderGenerator {
225
260
  }
226
261
  }
227
262
  exports.TerraformProviderGenerator = TerraformProviderGenerator;
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQWdCM0QsTUFBTSxVQUFVLEdBQUcsQ0FDakIsTUFBNkIsRUFDN0IsbUJBQTJCLEVBQ2xCLEVBQUU7SUFDWCxJQUFJLE1BQU0sQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFakQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixXQUFXO2dCQUNYLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUss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QyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQXVCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBdFFELGdFQXNRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIsIHRvQ2FtZWxDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgTEFOR1VBR0VTLFxuICBsb2dnZXIsXG4gIFByb3ZpZGVyU2NoZW1hLFxuICBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgRlFQTiwgcGFyc2VGUVBOLCBQcm92aWRlck5hbWUgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgUmVzb3VyY2VNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VQYXJzZXIgfSBmcm9tIFwiLi9yZXNvdXJjZS1wYXJzZXJcIjtcbmltcG9ydCB7IFJlc291cmNlRW1pdHRlciwgU3RydWN0RW1pdHRlciB9IGZyb20gXCIuL2VtaXR0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMge1xuICAvKipcbiAgICogRmlsZSBleHRlbnNpb24gdG8gd3JpdGUgb24gZW1pdHRlZCByZWxhdGl2ZSBpbXBvcnRzLlxuICAgKiBEZWZhdWx0cyB0byBcIlwiIChDb21tb25KUykuXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRFeHRlbnNpb24/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQcm92aWRlckRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmNvbnN0IGlzTWF0Y2hpbmcgPSAoXG4gIHRhcmdldDogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICB0ZXJyYWZvcm1TY2hlbWFOYW1lOiBzdHJpbmcsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKHRhcmdldC5pc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGVsZW1lbnRzID0gdGVycmFmb3JtU2NoZW1hTmFtZS5zcGxpdChcIi9cIik7XG5cbiAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0YXJnZXQuc291cmNlID09PSB0ZXJyYWZvcm1TY2hlbWFOYW1lO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFtob3N0bmFtZSwgbmFtZXNwYWNlLCBwcm92aWRlcl0gPSBlbGVtZW50cztcblxuICAgIGlmICghaG9zdG5hbWUgfHwgIW5hbWVzcGFjZSB8fCAhcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgaGFuZGxlICR7dGVycmFmb3JtU2NoZW1hTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0YXJnZXQuc291cmNlIGlzIHNldCwgdHJ5IHRvIG1hdGNoIGl0XG4gICAgaWYgKHRhcmdldC5zb3VyY2UpIHtcbiAgICAgIGNvbnN0IHRhcmdldFNvdXJjZSA9IHtcbiAgICAgICAgLy8gZGVmYXVsdHNcbiAgICAgICAgaG9zdG5hbWU6IFwicmVnaXN0cnkudGVycmFmb3JtLmlvXCIsXG4gICAgICAgIG5hbWVzcGFjZTogXCJoYXNoaWNvcnBcIixcbiAgICAgICAgbmFtZTogXCJcIixcbiAgICAgIH07XG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IHRhcmdldC5zb3VyY2Uuc3BsaXQoXCIvXCIpO1xuICAgICAgc3dpdGNoICh0YXJnZXRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOiAvLyBvbmx5IG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6IC8vIG5hbWVzcGFjZSBhbmQgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogLy8gaG9zdG5hbWUsIG5hbWVzcGFjZSBhbmQgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgY2FuJ3QgaGFuZGxlICR7dGFyZ2V0LnNvdXJjZX0uIEV4cGVjdGVkIHN0cmluZyB3aXRoIDEsIDIgb3IgMyBlbGVtZW50cyBzZXBhcmF0ZWQgYnkgJy8nYCxcbiAgICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lICYmXG4gICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPT09IG5hbWVzcGFjZSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9PT0gcHJvdmlkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdHJ5IHRvIG1hdGNoIHRhcmdldC5uYW1lIHRvIHRoZSBwcm92aWRlciBuYW1lXG5cbiAgICByZXR1cm4gdGFyZ2V0Lm5hbWUgPT09IHByb3ZpZGVyO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyQ29uc3RyYWludHMge1xuICBbZnFuOiBzdHJpbmddOiBQcm92aWRlckRhdGE7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvciB7XG4gIHByaXZhdGUgcmVzb3VyY2VQYXJzZXIgPSBuZXcgUmVzb3VyY2VQYXJzZXIoKTtcbiAgcHJpdmF0ZSByZXNvdXJjZUVtaXR0ZXI6IFJlc291cmNlRW1pdHRlcjtcbiAgcHJpdmF0ZSBzdHJ1Y3RFbWl0dGVyOiBTdHJ1Y3RFbWl0dGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgdmVyc2lvbnM6IHsgW2ZxcG46IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICAgIG9wdGlvbnM6IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICB0aGlzLmNvZGUuaW5kZW50YXRpb24gPSAyO1xuICAgIHRoaXMuaW1wb3J0RXh0ZW5zaW9uID0gb3B0aW9ucy5pbXBvcnRFeHRlbnNpb24gPz8gXCJcIjtcbiAgICB0aGlzLnJlc291cmNlRW1pdHRlciA9IG5ldyBSZXNvdXJjZUVtaXR0ZXIodGhpcy5jb2RlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIgPSBuZXcgU3RydWN0RW1pdHRlcih0aGlzLmNvZGUsIHRoaXMuaW1wb3J0RXh0ZW5zaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQoXG4gICAgcHJvdmlkZXJDb25zdHJhaW50OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IEZRUE4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KS5maW5kKChmcXBuKSA9PlxuICAgICAgaXNNYXRjaGluZyhwcm92aWRlckNvbnN0cmFpbnQsIGZxcG4pLFxuICAgICkgYXMgRlFQTiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZShwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCkge1xuICAgIGNvbnN0IGZxcG4gPSB0aGlzLmdldFByb3ZpZGVyQnlDb25zdHJhaW50KHByb3ZpZGVyQ29uc3RyYWludCk7XG4gICAgaWYgKCFmcXBuKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlciBjb25zdHJhaW50IGZvciAke3Byb3ZpZGVyQ29uc3RyYWludH0gaW4gc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIHdpdGggY29uc3RyYWludCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RyYWludCxcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlclZlcnNpb24gPSB0aGlzLnNjaGVtYS5wcm92aWRlcl92ZXJzaW9ucz8uW2ZxcG5dO1xuICAgIHRoaXMuZW1pdFByb3ZpZGVyKGZxcG4sIHByb3ZpZGVyVmVyc2lvbiwgcHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICB0aGlzLnZlcnNpb25zW2ZxcG5dID0gcHJvdmlkZXJWZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlQWxsKCkge1xuICAgIGZvciAoY29uc3QgZnFwbiBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KSkge1xuICAgICAgdGhpcy5nZW5lcmF0ZShcbiAgICAgICAgbmV3IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0KFxuICAgICAgICAgIG5ldyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQoZnFwbiksXG4gICAgICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZShvdXRkaXI6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRSZXNvdXJjZU1vZGVscyhcbiAgICBmcXBuOiBGUVBOLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWxbXSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzPy5bZnFwbl07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmQgcHJvdmlkZXIgJyR7ZnFwbn0nIGluIHNjaGVtYWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLnJlc291cmNlX3NjaGVtYXMgfHwge30pLm1hcChcbiAgICAgIChbdHlwZSwgcmVzb3VyY2VdKSA9PlxuICAgICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKGZxcG4sIHR5cGUsIHJlc291cmNlLCBcInJlc291cmNlXCIsIGNvbnN0cmFpbnQpLFxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlcyA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLmRhdGFfc291cmNlX3NjaGVtYXMgfHwge30pLm1hcChcbiAgICAgIChbdHlwZSwgcmVzb3VyY2VdKSA9PlxuICAgICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICAgIGZxcG4sXG4gICAgICAgICAgYGRhdGFfJHt0eXBlfWAsXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgXCJkYXRhX3NvdXJjZVwiLFxuICAgICAgICAgIGNvbnN0cmFpbnQsXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHJldHVybiAoW10gYXMgUmVzb3VyY2VNb2RlbFtdKS5jb25jYXQoLi4ucmVzb3VyY2VzLCAuLi5kYXRhU291cmNlcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFByb3ZpZGVyKFxuICAgIGZxcG46IEZRUE4sXG4gICAgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICkge1xuICAgIGNvbnN0IG5hbWUgPSBjb25zdHJhaW50Py5uYW1lXG4gICAgICA/IChjb25zdHJhaW50Lm5hbWUgYXMgUHJvdmlkZXJOYW1lKVxuICAgICAgOiBwYXJzZUZRUE4oZnFwbikubmFtZTtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5idWlsZFJlc291cmNlTW9kZWxzKGZxcG4sIGNvbnN0cmFpbnQpLmZvckVhY2goKHJlc291cmNlTW9kZWwpID0+IHtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG5cbiAgICAgIGlmIChyZXNvdXJjZU1vZGVsLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2VNb2RlbCk7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvdmlkZXIucHJvdmlkZXIpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICBmcXBuLFxuICAgICAgICBgcHJvdmlkZXJgLFxuICAgICAgICBwcm92aWRlci5wcm92aWRlcixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKTtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyTmFtZSA9IGNvbnN0cmFpbnQubmFtZTtcbiAgICAgIH1cbiAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZShwcm92aWRlclJlc291cmNlKSk7XG4gICAgICB0aGlzLmVtaXRSZXNvdXJjZVJlYWRtZShwcm92aWRlclJlc291cmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICAgIHRoaXMuZW1pdExhenlJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke3Jlc291cmNlLm5hbWVzcGFjZUZvbGRlclBhdGh9L1JFQURNRS5tZGA7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShgIyBcXGAke3Jlc291cmNlLnRlcnJhZm9ybVR5cGV9XFxgYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCB0eXBlID0gcmVzb3VyY2UuaXNQcm92aWRlclxuICAgICAgPyByZXNvdXJjZS5wcm92aWRlclxuICAgICAgOiByZXNvdXJjZS50ZXJyYWZvcm1UeXBlO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYFJlZmVyIHRvIHRoZSBUZXJyYWZvcm0gUmVnaXN0cnkgZm9yIGRvY3M6IFtcXGAke3R5cGV9XFxgXSgke3Jlc291cmNlLmxpbmtUb0RvY3N9KS5gLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRJbmRleEZpbGUocHJvdmlkZXI6IFByb3ZpZGVyTmFtZSwgZmlsZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgZm9sZGVyID0gYHByb3ZpZGVycy8ke3Byb3ZpZGVyfWA7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtmb2xkZXJ9L2luZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBleHBvcnQgKiBhcyAke3RvQ2FtZWxDYXNlKGRpck5hbWUpfSBmcm9tICcuLyR7ZGlyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufSc7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMYXp5SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9sYXp5LWluZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJyR7dG9DYW1lbENhc2UoXG4gICAgICAgICAgZGlyTmFtZSxcbiAgICAgICAgKX0nLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWlyZSgnLi8ke2Rpck5hbWV9Jyk7IH0gfSk7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHN0cmluZyB7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKHJlc291cmNlLmZpbGVQYXRoKTtcbiAgICB0aGlzLmVtaXRGaWxlSGVhZGVyKHJlc291cmNlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG5cbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkRmlsZXMgPSBbXTtcblxuICAgIC8vIGRyb3AgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgZmlsZXBhdGhcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc291cmNlLmZpbGVQYXRoO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgaWYgKHJlc291cmNlLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgIGNvbnN0IHN0cnVjdHNTcGVjaWZpZXIgPSBgLi8ke3Jlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lfS9pbmRleCR7dGhpcy5pbXBvcnRFeHRlbnNpb259YDtcbiAgICAgIGlmIChyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgaW1wb3J0IHsgJHtyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMuam9pbihcbiAgICAgICAgICAgIFwiLCBcXG5cIixcbiAgICAgICAgICApfX0gZnJvbSAnJHtzdHJ1Y3RzU3BlY2lmaWVyfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvZGUubGluZShgZXhwb3J0ICogZnJvbSAnJHtzdHJ1Y3RzU3BlY2lmaWVyfSdgKTtcblxuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgcmVzb3VyY2UuY29uZmlnU3RydWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsZUhlYWRlcihyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3Jlc291cmNlLmxpbmtUb0RvY3N9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gQ29uZmlndXJhdGlvblwiKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFDdkUscUNBS2tCO0FBQ2xCLHVEQUFtRDtBQUNuRCx1Q0FJbUI7QUFnQm5CLE1BQU0sVUFBVSxHQUFHLENBQ2pCLE1BQTZCLEVBQzdCLG1CQUEyQixFQUNsQixFQUFFO0lBQ1gsSUFBSSxNQUFNLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWxDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0lBQy9DLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRWpELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLFlBQVksR0FBRztnQkFDbkIsV0FBVztnQkFDWCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsSUFBSSxFQUFFLEVBQUU7YUFDVCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1B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QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUEvVEQsZ0VBK1RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxuICBSZXNvdXJjZU1vZGVsLFxuICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbixcbiAgYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxufSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IFJlc291cmNlUGFyc2VyIH0gZnJvbSBcIi4vcmVzb3VyY2UtcGFyc2VyXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXIsXG4gIFJlc291cmNlRW1pdHRlcixcbiAgU3RydWN0RW1pdHRlcixcbn0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiB0byB3cml0ZSBvbiBlbWl0dGVkIHJlbGF0aXZlIGltcG9ydHMuXG4gICAqIERlZmF1bHRzIHRvIFwiXCIgKENvbW1vbkpTKS5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuY29uc3QgaXNNYXRjaGluZyA9IChcbiAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIHRlcnJhZm9ybVNjaGVtYU5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodGFyZ2V0LmlzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1TY2hlbWFOYW1lLnNwbGl0KFwiL1wiKTtcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zb3VyY2UgPT09IHRlcnJhZm9ybVNjaGVtYU5hbWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIHByb3ZpZGVyXSA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKCFob3N0bmFtZSB8fCAhbmFtZXNwYWNlIHx8ICFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHt0ZXJyYWZvcm1TY2hlbWFOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIElmIHRhcmdldC5zb3VyY2UgaXMgc2V0LCB0cnkgdG8gbWF0Y2ggaXRcbiAgICBpZiAodGFyZ2V0LnNvdXJjZSkge1xuICAgICAgY29uc3QgdGFyZ2V0U291cmNlID0ge1xuICAgICAgICAvLyBkZWZhdWx0c1xuICAgICAgICBob3N0bmFtZTogXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIixcbiAgICAgICAgbmFtZXNwYWNlOiBcImhhc2hpY29ycFwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gdGFyZ2V0LnNvdXJjZS5zcGxpdChcIi9cIik7XG4gICAgICAvLyBPbmx5IGEgMy1wYXJ0IHNvdXJjZSBleHBsaWNpdGx5IHBpbnMgYSByZWdpc3RyeSBob3N0bmFtZS4gU2hvcnRoYW5kXG4gICAgICAvLyBzb3VyY2VzIChlLmcuIFwiaGFzaGljb3JwL2F3c2NjXCIpIG9taXQgaXQsIHNvIHdlIG11c3Qgbm90IGFzc3VtZSBhXG4gICAgICAvLyBkZWZhdWx0OiBUZXJyYWZvcm0gcmVzb2x2ZXMgdGhlbSB1bmRlciByZWdpc3RyeS50ZXJyYWZvcm0uaW8gd2hpbGVcbiAgICAgIC8vIE9wZW5Ub2Z1IHJlc29sdmVzIHRoZW0gdW5kZXIgcmVnaXN0cnkub3BlbnRvZnUub3JnLiBDb21wYXJpbmcgYWdhaW5zdCBhXG4gICAgICAvLyBoYXJkLWNvZGVkIGRlZmF1bHQgd291bGQgbWFrZSBzY2hlbWEgbG9va3VwIGZhaWwgdW5kZXIgT3BlblRvZnUgZXZlblxuICAgICAgLy8gdGhvdWdoIHRoZSBwcm92aWRlciB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGV4cGxpY2l0SG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50cy5sZW5ndGggPT09IDM7XG4gICAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIG9ubHkgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogLy8gbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOiAvLyBob3N0bmFtZSwgbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5ob3N0bmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1syXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBjYW4ndCBoYW5kbGUgJHt0YXJnZXQuc291cmNlfS4gRXhwZWN0ZWQgc3RyaW5nIHdpdGggMSwgMiBvciAzIGVsZW1lbnRzIHNlcGFyYXRlZCBieSAnLydgLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICghZXhwbGljaXRIb3N0bmFtZSB8fCB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lKSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHJpdmF0ZSBwcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXI6IFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgICBvcHRpb25zOiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLmltcG9ydEV4dGVuc2lvbiA9IG9wdGlvbnMuaW1wb3J0RXh0ZW5zaW9uID8/IFwiXCI7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIgPSBuZXcgUmVzb3VyY2VFbWl0dGVyKHRoaXMuY29kZSwgdGhpcy5pbXBvcnRFeHRlbnNpb24pO1xuICAgIHRoaXMuc3RydWN0RW1pdHRlciA9IG5ldyBTdHJ1Y3RFbWl0dGVyKHRoaXMuY29kZSwgdGhpcy5pbXBvcnRFeHRlbnNpb24pO1xuICAgIHRoaXMucHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyID0gbmV3IFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcih0aGlzLmNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlckJ5Q29uc3RyYWludChcbiAgICBwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogRlFQTiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLmZpbmQoKGZxcG4pID0+XG4gICAgICBpc01hdGNoaW5nKHByb3ZpZGVyQ29uc3RyYWludCwgZnFwbiksXG4gICAgKSBhcyBGUVBOIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgY29uc3QgZnFwbiA9IHRoaXMuZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQocHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICBpZiAoIWZxcG4pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIGNvbnN0cmFpbnQgZm9yICR7cHJvdmlkZXJDb25zdHJhaW50fSBpbiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgd2l0aCBjb25zdHJhaW50ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50LFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyVmVyc2lvbiA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3ZlcnNpb25zPy5bZnFwbl07XG4gICAgdGhpcy5lbWl0UHJvdmlkZXIoZnFwbiwgcHJvdmlkZXJWZXJzaW9uLCBwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIHRoaXMudmVyc2lvbnNbZnFwbl0gPSBwcm92aWRlclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVBbGwoKSB7XG4gICAgZm9yIChjb25zdCBmcXBuIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlKFxuICAgICAgICBuZXcgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQoXG4gICAgICAgICAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChmcXBuKSxcbiAgICAgICAgICBMQU5HVUFHRVNbMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKG91dGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFJlc291cmNlTW9kZWxzKFxuICAgIGZxcG46IEZRUE4sXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbFtdIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIucmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoZnFwbiwgdHlwZSwgcmVzb3VyY2UsIFwicmVzb3VyY2VcIiwgY29uc3RyYWludCksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgICAgZnFwbixcbiAgICAgICAgICBgZGF0YV8ke3R5cGV9YCxcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICBcImRhdGFfc291cmNlXCIsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgZXBoZW1lcmFsUmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICBwcm92aWRlci5lcGhlbWVyYWxfcmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSxcbiAgICApLm1hcCgoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgIGZxcG4sXG4gICAgICAgIGBlcGhlbWVyYWxfJHt0eXBlfWAsXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICBcImVwaGVtZXJhbF9yZXNvdXJjZVwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gQ1JJVElDQUw6IGVwaGVtZXJhbCByZXNvdXJjZXMgbXVzdCBiZSBhcHBlbmRlZCBBRlRFUiByZXNvdXJjZXMgYW5kIGRhdGFcbiAgICAvLyBzb3VyY2VzIC0gdW5pcXVlQ2xhc3NOYW1lIGRlZHVwIGlzIG9yZGVyLWRlcGVuZGVudCBhbmQgZXhpc3RpbmdcbiAgICAvLyBwcmVidWlsdCBzbmFwc2hvdHMgbXVzdCBub3QgY2h1cm4uXG4gICAgcmV0dXJuIChbXSBhcyBSZXNvdXJjZU1vZGVsW10pLmNvbmNhdChcbiAgICAgIC4uLnJlc291cmNlcyxcbiAgICAgIC4uLmRhdGFTb3VyY2VzLFxuICAgICAgLi4uZXBoZW1lcmFsUmVzb3VyY2VzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFByb3ZpZGVyKFxuICAgIGZxcG46IEZRUE4sXG4gICAgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICkge1xuICAgIGNvbnN0IG5hbWUgPSBjb25zdHJhaW50Py5uYW1lXG4gICAgICA/IChjb25zdHJhaW50Lm5hbWUgYXMgUHJvdmlkZXJOYW1lKVxuICAgICAgOiBwYXJzZUZRUE4oZnFwbikubmFtZTtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5idWlsZFJlc291cmNlTW9kZWxzKGZxcG4sIGNvbnN0cmFpbnQpLmZvckVhY2goKHJlc291cmNlTW9kZWwpID0+IHtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG5cbiAgICAgIGlmIChyZXNvdXJjZU1vZGVsLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2VNb2RlbCk7XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsdCBiZWZvcmUgdGhlIHByb3ZpZGVyIGNsYXNzIGlzIGVtaXR0ZWQgKHJhdGhlciB0aGFuIGFmdGVyLCBhc1xuICAgIC8vIHJlc291cmNlcy9kYXRhIHNvdXJjZXMvZXBoZW1lcmFsIHJlc291cmNlcyBhYm92ZSBhbHJlYWR5IGFyZSkgc28gdGhhdFxuICAgIC8vIHRoZSBtb2RlbCBjYW4gYmUgYXR0YWNoZWQgdG8gcHJvdmlkZXJSZXNvdXJjZSBhbmQgcGlja2VkIHVwIGJ5XG4gICAgLy8gUmVzb3VyY2VFbWl0dGVyIHdoaWxlIGl0IHN0aWxsIGVtaXRzIHRoZSBwcm92aWRlciBjbGFzcyBmaWxlIGJlbG93IC1cbiAgICAvLyBzZWUgdGhlIGVuZ2luZWVyaW5nIGJyaWVmIGZvciB3aHkgdGhpcyBvcmRlcmluZyBtYXR0ZXJzLlxuICAgIGNvbnN0IHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgPSBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXG4gICAgICBuYW1lLFxuICAgICAgcHJvdmlkZXIuZnVuY3Rpb25zLFxuICAgICk7XG5cbiAgICBpZiAocHJvdmlkZXIucHJvdmlkZXIpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICBmcXBuLFxuICAgICAgICBgcHJvdmlkZXJgLFxuICAgICAgICBwcm92aWRlci5wcm92aWRlcixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKTtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyTmFtZSA9IGNvbnN0cmFpbnQubmFtZTtcbiAgICAgIH1cbiAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuXG4gICAgICBpZiAocHJvdmlkZXJGdW5jdGlvbnNNb2RlbCkge1xuICAgICAgICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbihcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHByb3ZpZGVyUmVzb3VyY2UuYXR0cmlidXRlcy5tYXAoKGF0dCkgPT4gYXR0Lm5hbWUpLFxuICAgICAgICApO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgPSBwcm92aWRlckZ1bmN0aW9uc01vZGVsO1xuICAgICAgfVxuXG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHByb3ZpZGVyUmVzb3VyY2UpKTtcbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHByb3ZpZGVyUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlckZ1bmN0aW9uc01vZGVsKSB7XG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFByb3ZpZGVyRnVuY3Rpb25zKG5hbWUsIHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwpKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICAgIHRoaXMuZW1pdExhenlJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UHJvdmlkZXJGdW5jdGlvbnMoXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZSxcbiAgICBtb2RlbDogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn0vcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSBwcm92aWRlciBmdW5jdGlvbiBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMucHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyLmVtaXQobW9kZWwpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtyZXNvdXJjZS5uYW1lc3BhY2VGb2xkZXJQYXRofS9SRUFETUUubWRgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCMgXFxgJHtyZXNvdXJjZS50ZXJyYWZvcm1UeXBlfVxcYGApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgdHlwZSA9IHJlc291cmNlLmlzUHJvdmlkZXJcbiAgICAgID8gcmVzb3VyY2UucHJvdmlkZXJcbiAgICAgIDogcmVzb3VyY2UudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBSZWZlciB0byB0aGUgVGVycmFmb3JtIFJlZ2lzdHJ5IGZvciBkb2NzOiBbXFxgJHt0eXBlfVxcYF0oJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSkuYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgZXhwb3J0ICogYXMgJHt0b0NhbWVsQ2FzZShkaXJOYW1lKX0gZnJvbSAnLi8ke2Rpck5hbWV9L2luZGV4JHt0aGlzLmltcG9ydEV4dGVuc2lvbn0nO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TGF6eUluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vbGF6eS1pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICcke3RvQ2FtZWxDYXNlKFxuICAgICAgICAgIGRpck5hbWUsXG4gICAgICAgICl9JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVpcmUoJy4vJHtkaXJOYW1lfScpOyB9IH0pO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiBzdHJpbmcge1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG4gICAgdGhpcy5lbWl0RmlsZUhlYWRlcihyZXNvdXJjZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUocmVzb3VyY2UuZmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHJlc291cmNlLmZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzID0gW107XG5cbiAgICAvLyBkcm9wIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGZpbGVwYXRoXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNvdXJjZS5maWxlUGF0aDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIGlmIChyZXNvdXJjZS5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICBjb25zdCBzdHJ1Y3RzU3BlY2lmaWVyID0gYC4vJHtyZXNvdXJjZS5zdHJ1Y3RzRm9sZGVyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufWA7XG4gICAgICBpZiAocmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7cmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmpvaW4oXG4gICAgICAgICAgICBcIiwgXFxuXCIsXG4gICAgICAgICAgKX19IGZyb20gJyR7c3RydWN0c1NwZWNpZmllcn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcke3N0cnVjdHNTcGVjaWZpZXJ9JztgKTtcblxuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgcmVzb3VyY2UuY29uZmlnU3RydWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsZUhlYWRlcihyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3Jlc291cmNlLmxpbmtUb0RvY3N9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gQ29uZmlndXJhdGlvblwiKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=
@@ -317,6 +317,7 @@ class Parser {
317
317
  provider: parentType.isProvider,
318
318
  required: !!att.required,
319
319
  forcePlainGetterType,
320
+ isWriteOnly: !!att.write_only,
320
321
  }));
321
322
  }
322
323
  for (const [blockTypeName, blockType] of Object.entries(block.block_types || {})) {
@@ -465,6 +466,7 @@ class Parser {
465
466
  type,
466
467
  provider: parent.isProvider,
467
468
  required: required,
469
+ isWriteOnly: !!att.write_only,
468
470
  }));
469
471
  }
470
472
  }
@@ -520,4 +522,4 @@ class ResourceParser {
520
522
  }
521
523
  }
522
524
  exports.ResourceParser = ResourceParser;
523
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcmVzb3VyY2UtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1FO0FBQ25FLDRDQVV3QjtBQUN4Qiw0REFBdUU7QUFDdkUscUNBWWtCO0FBQ2xCLHFEQUF3RDtBQUN4RCw2REFBMkQ7QUFFM0Qsc0VBQXNFO0FBQ3RFLHlKQUF5SjtBQUN6SixNQUFNLGdDQUFnQyxHQUFHO0lBQ3ZDLFlBQVk7SUFDWixXQUFXO0lBQ1gsS0FBSztJQUNMLFNBQVM7SUFDVCxTQUFTO0lBQ1QsV0FBVztJQUNYLFFBQVE7SUFDUixRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87Q0FDUixDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxtSEFBbUg7SUFDbkgsU0FBUztJQUNULDJCQUEyQjtJQUMzQixTQUFTO0NBQ1YsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxTQUFpQixFQUFXLEVBQUU7SUFDcEUsT0FBTztRQUNMLFFBQVE7UUFDUixRQUFRO1FBQ1IsVUFBVTtRQUNWLEdBQUcsZ0NBQWdDO1FBQ25DLEdBQUcseUJBQXlCO0tBQzdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxTQUFpQixFQUFXLEVBQUU7SUFDL0QsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBc0IsRUFBRSxRQUFnQixFQUFVLEVBQUU7SUFDdkUsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDekIsT0FBTyx5QkFBeUIsQ0FB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Q3ZELDJCQUEyQixDQUFDLGFBQXFCO1FBQ3RELGtGQUFrRjtRQUNsRixJQUFJLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsR0FBRyxlQUFlLENBQUM7UUFDbEMsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNGO0FBaERELHdDQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB0b0NhbWVsQ2FzZSwgdG9QYXNjYWxDYXNlLCB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlTmVzdGVkVHlwZSxcbiAgQXR0cmlidXRlVHlwZSxcbiAgQmxvY2ssXG4gIEJsb2NrVHlwZSxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBpc0F0dHJpYnV0ZU5lc3RlZFR5cGUsXG4gIGlzTmVzdGVkVHlwZUF0dHJpYnV0ZSxcbiAgU2NoZW1hLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyTmFtZSwgRlFQTiwgcGFyc2VGUVBOIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlTW9kZWwsXG4gIEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU3RydWN0LFxuICBTY29wZSxcbiAgQXR0cmlidXRlTW9kZWwsXG4gIFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2V0QXR0cmlidXRlVHlwZU1vZGVsLFxuICBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gIFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCxcbn0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBkZXRlY3RBdHRyaWJ1dGVMb29wcyB9IGZyb20gXCIuL2xvb3AtZGV0ZWN0aW9uXCI7XG5pbXBvcnQgeyBzaG91bGRTa2lwQXR0cmlidXRlIH0gZnJvbSBcIi4vc2tpcHBlZC1hdHRyaWJ1dGVzXCI7XG5cbi8vIENhbid0IGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgbGlrZSBcImV4cG9ydCAqIGFzIDxrZXl3b3JkPiBmcm9tIC4uLiBcIlxuLy8gZmlsdGVyZWQgZnJvbSBhbGwga2V5d29yZHMgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvNTAzNjA0Yzg4NGJkMDU1N2M4NTFiMTFiNjk5ZWY5OGNkYjY1YjkzYi9zcmMvY29tcGlsZXIvdHlwZXMudHMjTDExNC1MMTk3XG5jb25zdCBSRVNFUlZFRF9LRVlXT1JEU19GT1JfTkFNRVNQQUNFUyA9IFtcbiAgXCJpbXBsZW1lbnRzXCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwibGV0XCIsXG4gIFwicGFja2FnZVwiLFxuICBcInByaXZhdGVcIixcbiAgXCJwcm90ZWN0ZWRcIixcbiAgXCJwdWJsaWNcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJ5aWVsZFwiLFxuICBcImF3YWl0XCIsXG5dO1xuXG5jb25zdCBDT0xMSURJTkdfTkFNRVNQQUNFX05BTUVTID0gW1xuICAvLyBlLmcuIGhhc2hpY29ycC9jb25zdWwg4oCTIGNvbGxpZGVzIHdpdGggdGhlIExJQ0VOU0UgZmlsZSBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGluIHRoZSBHbyBwYWNrYWdlICgjMjYyNylcbiAgXCJsaWNlbnNlXCIsXG4gIC8vIGNvbGxpZGVzIGZvciBHbyBwYWNrYWdlc1xuICBcInZlcnNpb25cIixcbl07XG5cbmNvbnN0IGlzUmVzZXJ2ZWRDbGFzc09yTmFtZXNwYWNlTmFtZSA9IChjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gW1xuICAgIFwic3RyaW5nXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgLi4uUkVTRVJWRURfS0VZV09SRFNfRk9SX05BTUVTUEFDRVMsXG4gICAgLi4uQ09MTElESU5HX05BTUVTUEFDRV9OQU1FUyxcbiAgXS5pbmNsdWRlcyhjbGFzc05hbWUudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5jb25zdCBpc1Jlc2VydmVkU3RydWN0Q2xhc3NOYW1lID0gKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcImxpc3RcIik7XG59O1xuXG5jb25zdCBnZXRGaWxlTmFtZSA9IChwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKGJhc2VOYW1lID09PSBcImluZGV4XCIpIHtcbiAgICByZXR1cm4gXCJpbmRleC1yZXNvdXJjZS9pbmRleC50c1wiO1xuICB9XG5cbiAgaWYgKGJhc2VOYW1lID09PSBgJHtwcm92aWRlcn1fcHJvdmlkZXJgKSB7XG4gICAgcmV0dXJuIFwicHJvdmlkZXIvaW5kZXgudHNcIjtcbiAgfVxuXG4gIHJldHVybiBgJHt0b1NuYWtlQ2FzZShiYXNlTmFtZSkucmVwbGFjZSgvXy9nLCBcIi1cIil9L2luZGV4LnRzYDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKFxuICBiYXNlTmFtZTogc3RyaW5nLFxuICBpc1Byb3ZpZGVyID0gZmFsc2UsXG4pIHtcbiAgY29uc3QgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXIgPSAhaXNQcm92aWRlciAmJiBiYXNlTmFtZSA9PT0gXCJwcm92aWRlclwiO1xuXG4gIGlmIChpc1Jlc2VydmVkQ2xhc3NPck5hbWVzcGFjZU5hbWUoYmFzZU5hbWUpIHx8IHJlc291cmNlSXNOYW1lZFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIGAke2Jhc2VOYW1lfV9yZXNvdXJjZWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2VOYW1lO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBtYXkgY29uZmxpY3QgYWZ0ZXIgYmVpbmcgc25ha2UgY2FzZWRcbiAqIEV4YW1wbGU6IG9jaV9jb3JlX2lwc2VjX2Nvbm5lY3Rpb25fdHVubmVsX21hbmFnZW1lbnQgKGhhc2hpY29ycC9vY2lAPTUuMjEuMCkgaGFzIGJncF9pcHY2X3N0YXRlIGFuZCBiZ3BfaXB2NnN0YXRlXG4gKiAod2hpY2ggYm90aCByZXN1bHQgaW4gXCJiZ3BJcHY2U3RhdGVcIiB3aGVuIGNhbWVsLWNhc2VkLCB3aXRoIHRoZSBzZWNvbmQgb25lIGJlaW5nIGRlcHJlY2F0ZWQ6IHRydWUpXG4gKiBBcyB3ZSBjdXJyZW50bHkgZG9uJ3QgaGFuZGxlIGFueSBkZXByZWNhdGVkIG9uZXMgYXQgYWxsLCB3ZSdsbCBqdXN0IGRlbGV0ZSBvbmUgb2YgdGhlIHR3byBhdHRyaWJ1dGVzIGZvciBub3dcbiAqIEBwYXJhbSBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGRlZHVwbGljYXRlQXR0cmlidXRlc1dpdGhTYW1lTmFtZShcbiAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbik6IEF0dHJpYnV0ZU1vZGVsW10ge1xuICByZXR1cm4gYXR0cmlidXRlcy5maWx0ZXIoKGF0dHIsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGhhc090aGVyV2l0aFNhbWVOYW1lID0gYXR0cmlidXRlc1xuICAgICAgLnNsaWNlKGlkeCArIDEpIC8vIG9ubHkgc2VhcmNoIGFmdGVyIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBhdHRyaWJ1dGUgdG8gYXZvaWQgZGVsZXRpbmcgYm90aFxuICAgICAgLnNvbWUoKG90aGVyKSA9PiBvdGhlci5uYW1lID09PSBhdHRyLm5hbWUgJiYgb3RoZXIgIT09IGF0dHIpO1xuICAgIHJldHVybiAhaGFzT3RoZXJXaXRoU2FtZU5hbWU7XG4gIH0pO1xufVxuXG5jbGFzcyBQYXJzZXIge1xuICBwcml2YXRlIHN0cnVjdHMgPSBuZXcgQXJyYXk8U3RydWN0PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2xhc3NOYW1lczogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSB1c2VkQmFzZU5hbWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICApIHt9XG5cbiAgcHJpdmF0ZSB1bmlxdWVDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKSkge1xuICAgICAgY2xhc3NOYW1lID0gYCR7Y2xhc3NOYW1lfUFgO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGJhc2UgbmFtZXMgYXJlIHVuaXF1ZSBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAqXG4gICAqIEFmZmVjdGVkIGxhbmd1YWdlczpcbiAgICogLSBHbzogSlNJSS1nZW5lcmF0ZWQgR28gcGFja2FnZSBuYW1lcyBhcmUgZnVsbHkgbG93ZXJjYXNlZCwgc29cbiAgICogICBgbG9hZC1iYWxhbmNlci1iYWNrZW5kc2V0YCBhbmQgYGxvYWQtYmFsYW5jZXItYmFja2VuZC1zZXRgIGJvdGhcbiAgICogICBiZWNvbWUgcGFja2FnZSBgbG9hZGJhbGFuY2VyYmFja2VuZHNldGAsIGNhdXNpbmcgYSBoYXJkIGJ1aWxkIGZhaWx1cmU6XG4gICAqICAgXCJjYXNlLWluc2Vuc2l0aXZlIGZpbGUgbmFtZSBjb2xsaXNpb25cIi5cbiAgICogLSBDIzogSlNJSSBnZW5lcmF0ZXMgUGFzY2FsQ2FzZSBkaXJlY3RvcmllcyBsaWtlXG4gICAqICAgYExvYWRCYWxhbmNlckJhY2tlbmRzZXQvYCBhbmQgYExvYWRCYWxhbmNlckJhY2tlbmRTZXQvYCB3aGljaCB0aGUgQyNcbiAgICogICBjb21waWxlciB0cmVhdHMgY2FzZS1pbnNlbnNpdGl2ZWx5LCBjYXVzaW5nIENTMjAwMiBhbmQgQ1MwMjM0IGVycm9ycy5cbiAgICovXG4gIHByaXZhdGUgdW5pcXVlQmFzZU5hbWUoYmFzZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFzY2FsTmFtZSA9IHRvUGFzY2FsQ2FzZShiYXNlTmFtZSk7XG4gICAgY29uc3Qga2V5ID0gcGFzY2FsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy51c2VkQmFzZU5hbWVzLmdldChrZXkpO1xuXG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IHBhc2NhbE5hbWUpIHtcbiAgICAgIGJhc2VOYW1lID0gYCR7YmFzZU5hbWV9QWA7XG4gICAgICByZXR1cm4gdGhpcy51bmlxdWVCYXNlTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VkQmFzZU5hbWVzLnNldChrZXksIHBhc2NhbE5hbWUpO1xuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvdXJjZUZyb20oXG4gICAgZnFwbjogRlFQTixcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWwge1xuICAgIGxldCBiYXNlTmFtZSA9IHR5cGU7XG5cbiAgICBjb25zdCBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludCA9IGNvbnN0cmFpbnRcbiAgICAgID8gKGNvbnN0cmFpbnQubmFtZSBhcyBQcm92aWRlck5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm92aWRlck5hbWVGcm9tRlFQTiA9IHBhcnNlRlFQTihmcXBuKS5uYW1lO1xuXG4gICAgaWYgKGJhc2VOYW1lLnN0YXJ0c1dpdGgoYCR7cHJvdmlkZXJOYW1lRnJvbUZRUE59X2ApKSB7XG4gICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cihwcm92aWRlck5hbWVGcm9tRlFQTi5sZW5ndGggKyAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludFxuICAgICAgPyBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludFxuICAgICAgOiBwcm92aWRlck5hbWVGcm9tRlFQTjtcblxuICAgIGNvbnN0IGlzUHJvdmlkZXIgPSB0ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcInByb3ZpZGVyXCI7XG4gICAgaWYgKGlzUHJvdmlkZXIpIHtcbiAgICAgIGJhc2VOYW1lID0gYCR7cHJvdmlkZXJOYW1lfV8ke2Jhc2VOYW1lfWA7XG4gICAgICBpZiAoIShcImF0dHJpYnV0ZXNcIiBpbiBzY2hlbWEuYmxvY2spKSB7XG4gICAgICAgIHNjaGVtYS5ibG9jayA9IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgICBibG9ja190eXBlczogKHNjaGVtYS5ibG9jayBhcyBCbG9jaykuYmxvY2tfdHlwZXMgfHwge30sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21laG93IG1pc3NpbmcgZnJvbSBwcm92aWRlciBzY2hlbWFcbiAgICAgIHNjaGVtYS5ibG9jay5hdHRyaWJ1dGVzW1wiYWxpYXNcIl0gPSB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkFsaWFzIG5hbWVcIixcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYmFzZU5hbWUgPSBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKGJhc2VOYW1lLCBpc1Byb3ZpZGVyKTtcbiAgICBiYXNlTmFtZSA9IHRoaXMudW5pcXVlQmFzZU5hbWUoYmFzZU5hbWUpO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy51bmlxdWVDbGFzc05hbWUodG9QYXNjYWxDYXNlKGJhc2VOYW1lKSk7XG4gICAgLy8gYXZvaWQgbmFtaW5nIGNvbGxpc2lvbiAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzI5OVxuICAgIGNvbnN0IGNvbmZpZ1N0cnVjdE5hbWUgPSB0aGlzLnVuaXF1ZUNsYXNzTmFtZShgJHtjbGFzc05hbWV9Q29uZmlnYCk7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBnZXRGaWxlTmFtZShwcm92aWRlck5hbWUsIGJhc2VOYW1lKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gYHByb3ZpZGVycy8ke3RvU25ha2VDYXNlKHByb3ZpZGVyTmFtZSl9LyR7ZmlsZU5hbWV9YDtcbiAgICBsZXQgYXR0cmlidXRlcyA9IHRoaXMucmVuZGVyQXR0cmlidXRlc0ZvckJsb2NrKFxuICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgbmFtZTogYmFzZU5hbWUsXG4gICAgICAgIGlzUHJvdmlkZXIsXG4gICAgICAgIHBhcmVudDogaXNQcm92aWRlclxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBuZXcgU2NvcGUoeyBuYW1lOiBwcm92aWRlck5hbWUsIGlzUHJvdmlkZXI6IHRydWUgfSksXG4gICAgICB9KSxcbiAgICAgIHNjaGVtYS5ibG9jayxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0U3RydWN0QXR0cmlidXRlKFxuICAgICAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbiAgICAgIHBhdGg6IHN0cmluZyxcbiAgICApOiBBdHRyaWJ1dGVNb2RlbCB7XG4gICAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoKGF0dCkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0LnRlcnJhZm9ybU5hbWUgPT09IGZpcnN0O1xuICAgICAgfSk7XG4gICAgICBpZiAoIWF0dHJpYnV0ZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0byBmaW5kIHJlY3Vyc2l2ZSBhdHRyaWJ1dGUgYXQgcGF0aDogJHtwYXRofWAsXG4gICAgICAgICk7XG4gICAgICBpZiAoIWF0dHJpYnV0ZS50eXBlLnN0cnVjdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0byBmaW5kIHN0cnVjdCB0eXBlIGF0dHJpYnV0ZSBhdCBwYXRoOiAke3BhdGh9IGJ1dCBnb3QgJHthdHRyaWJ1dGUudHlwZS5zdG9yZWRDbGFzc1R5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgIHJldHVybiBnZXRTdHJ1Y3RBdHRyaWJ1dGUoXG4gICAgICAgIGF0dHJpYnV0ZS50eXBlLnN0cnVjdC5hdHRyaWJ1dGVzLFxuICAgICAgICByZXN0LmpvaW4oXCIuXCIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnRyb2R1Y2UgcmVjdXJzaW9uIGZvciBzb21lIGF0dHJpYnV0ZXNcbiAgICBjb25zdCByZWN1cnNpdmVBdHRyaWJ1dGVQYXRocyA9IGRldGVjdEF0dHJpYnV0ZUxvb3BzKGF0dHJpYnV0ZXMpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMocmVjdXJzaXZlQXR0cmlidXRlUGF0aHMpLmZvckVhY2goXG4gICAgICAoW2F0dHJpYnV0ZVBhdGgsIHN0cnVjdFBhdGhdKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGJ1aWxkIHRoaXMgdG8gYmUgYSBiaXQgbW9yZSBkZWZlbnNpdmUgKGUuZy4gcmVtb3ZlICEgb3BlcmF0b3IpXG4gICAgICAgIGNvbnN0IHJlY3Vyc2lvblRhcmdldFN0cnVjdEF0dHJpYnV0ZSA9IGdldFN0cnVjdEF0dHJpYnV0ZShcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgIHN0cnVjdFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYXR0cmlidXRlUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgY29uc3QgcGFyZW50QXR0cmlidXRlID0gZ2V0U3RydWN0QXR0cmlidXRlKGF0dHJpYnV0ZXMsIHBhcnRzLmpvaW4oXCIuXCIpKTtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlcGxhY2UgPVxuICAgICAgICAgIHBhcmVudEF0dHJpYnV0ZS50eXBlLnN0cnVjdCEuYXR0cmlidXRlcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYXR0KSA9PiBhdHQudGVycmFmb3JtTmFtZSA9PT0gYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXhUb1JlcGxhY2UgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYXR0cmlidXRlIGF0IHBhdGggXCIgKyBhdHRyaWJ1dGVQYXRoKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyaWJ1dGUgPVxuICAgICAgICAgIHBhcmVudEF0dHJpYnV0ZS50eXBlLnN0cnVjdCEuYXR0cmlidXRlc1tpbmRleFRvUmVwbGFjZV07XG5cbiAgICAgICAgcGFyZW50QXR0cmlidXRlLnR5cGUuc3RydWN0IS5hdHRyaWJ1dGVzW2luZGV4VG9SZXBsYWNlXSA9XG4gICAgICAgICAgcmVjdXJzaW9uVGFyZ2V0U3RydWN0QXR0cmlidXRlOyAvLyBpbnRyb2R1Y2UgcmVjdXJzaW9uXG5cbiAgICAgICAgLy8gdWdseSwgcGxzIGPMtmHMtmzMtmzMtiByZWZhY3RvciBtZSBtYXliZVxuICAgICAgICAvLyB3ZSBzdG9yZSBhbGwgc3RydWN0cyBpbiB0aGlzLnN0cnVjdHMg4oCTIG5vdyB3ZSBuZWVkIHRvIGRpc3Bvc2UgYWxsIHN0cnVjdHMgdGhhdCBhcmUgcGFydCBvZiBwcmV2aW91c0F0dHJpYnV0ZVxuICAgICAgICBjb25zdCBkaXNwb3NlU3RydWN0cyA9IChhdHRyOiBBdHRyaWJ1dGVNb2RlbCkgPT4ge1xuICAgICAgICAgIGlmIChhdHRyLnR5cGUuc3RydWN0KSB7XG4gICAgICAgICAgICBhdHRyLnR5cGUuc3RydWN0LmF0dHJpYnV0ZXMuZm9yRWFjaChkaXNwb3NlU3RydWN0cyk7XG4gICAgICAgICAgICB0aGlzLnN0cnVjdHMgPSB0aGlzLnN0cnVjdHMuZmlsdGVyKChzKSA9PiBzICE9PSBhdHRyLnR5cGUuc3RydWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZGlzcG9zZVN0cnVjdHMocHJldmlvdXNBdHRyaWJ1dGUpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXR0cmlidXRlcyA9IGRlZHVwbGljYXRlQXR0cmlidXRlc1dpdGhTYW1lTmFtZShhdHRyaWJ1dGVzKTtcblxuICAgIGNvbnN0IHJlc291cmNlTW9kZWwgPSBuZXcgUmVzb3VyY2VNb2RlbCh7XG4gICAgICB0ZXJyYWZvcm1UeXBlOiB0eXBlLFxuICAgICAgYmFzZU5hbWUsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc2NoZW1hLFxuICAgICAgZnFwbixcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICB0ZXJyYWZvcm1TY2hlbWFUeXBlLFxuICAgICAgc3RydWN0czogdGhpcy5zdHJ1Y3RzLFxuICAgICAgY29uZmlnU3RydWN0TmFtZSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXNvdXJjZU1vZGVsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJBdHRyaWJ1dGVUeXBlKFxuICAgIHNjb3BlOiBTY29wZVtdLFxuICAgIGF0dHJpYnV0ZVR5cGU6IEF0dHJpYnV0ZVR5cGUgfCBBdHRyaWJ1dGVOZXN0ZWRUeXBlLFxuICAgIHBhcmVudEtpbmQ/OiBzdHJpbmcsXG4gICk6IEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gICAgY29uc3QgcGFyZW50ID0gc2NvcGVbc2NvcGUubGVuZ3RoIC0gMV07XG4gICAgaWYgKHNob3VsZFNraXBBdHRyaWJ1dGUocGFyZW50LmJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuIG5ldyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwobmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcImFueVwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcImJvb2xlYW5cIik7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcInN0cmluZ1wiKTtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwibnVtYmVyXCIpO1xuICAgICAgICBjYXNlIFwiZHluYW1pY1wiOlxuICAgICAgICAgIHJldHVybiBuZXcgTWFwQXR0cmlidXRlVHlwZU1vZGVsKG5ldyBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwoXCJhbnlcIikpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwcmltaXRpdmUgdHlwZSAke2F0dHJpYnV0ZVR5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlVHlwZSkpIHtcbiAgICAgIGlmIChhdHRyaWJ1dGVUeXBlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgYXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2tpbmQsIHR5cGVdID0gYXR0cmlidXRlVHlwZTtcblxuICAgICAgaWYgKGtpbmQgPT09IFwic2V0XCIgfHwga2luZCA9PT0gXCJsaXN0XCIpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgdHlwZSBhcyBBdHRyaWJ1dGVUeXBlLFxuICAgICAgICAgIFtraW5kLCBwYXJlbnRLaW5kXS5qb2luKFwiXCIpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJsaXN0XCJcbiAgICAgICAgICA/IG5ldyBMaXN0QXR0cmlidXRlVHlwZU1vZGVsKGVsZW1lbnRUeXBlLCBmYWxzZSwgZmFsc2UpXG4gICAgICAgICAgOiBuZXcgU2V0QXR0cmlidXRlVHlwZU1vZGVsKGVsZW1lbnRUeXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCA9PT0gXCJtYXBcIikge1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgdHlwZSBhcyBBdHRyaWJ1dGVUeXBlLFxuICAgICAgICAgIFtraW5kLCBwYXJlbnRLaW5kXS5qb2luKFwiXCIpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbCh2YWx1ZVR5cGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBvYmpBdHRyaWJ1dGVzID0gdHlwZSBhcyB7IFtuYW1lOiBzdHJpbmddOiBBdHRyaWJ1dGVUeXBlIH07XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IHsgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZSB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKG9iakF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IHsgdHlwZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgcGFyZW50S2luZCA/PyBraW5kLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0F0dHJpYnV0ZU5lc3RlZFR5cGUoYXR0cmlidXRlVHlwZSkpIHtcbiAgICAgIGxldCBzdHJ1Y3QgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgdHlwZU1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSkge1xuICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgIHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVNb2RlbCA9IG5ldyBMaXN0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2V0XCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IFNldEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgIG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgIHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVNb2RlbCA9IG5ldyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwoXG4gICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgIHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVNb2RlbCA9IG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBuZXN0ZWRfdHlwZSB3aXRoIG5lc3RpbmdfbW9kZSBcIiR7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlXG4gICAgICAgICAgICB9XCIgbm90IHN1cHBvcnRlZCAoYXR0cmlidXRlIHNjb3BlOiAke3Njb3BlXG4gICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMuZnVsbE5hbWUpXG4gICAgICAgICAgICAgIC5qb2luKFwiLFwiKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlTW9kZWw7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGUgJHtKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGVUeXBlKX1gKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXJBdHRyaWJ1dGVzRm9yQmxvY2socGFyZW50VHlwZTogU2NvcGUsIGJsb2NrOiBCbG9jaykge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBuZXcgQXJyYXk8QXR0cmlidXRlTW9kZWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFt0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lLCBhdHRdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgYmxvY2suYXR0cmlidXRlcyB8fCB7fSxcbiAgICApKSB7XG4gICAgICBsZXQgdHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICAgICAgbGV0IGZvcmNlUGxhaW5HZXR0ZXJUeXBlID0gZmFsc2U7XG4gICAgICBpZiAoc2hvdWxkU2tpcEF0dHJpYnV0ZShwYXJlbnRUeXBlLmZ1bGxOYW1lKHRlcnJhZm9ybUF0dHJpYnV0ZU5hbWUpKSkge1xuICAgICAgICB0eXBlID0gbmV3IFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwoKTtcbiAgICAgICAgZm9yY2VQbGFpbkdldHRlclR5cGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgICAgICAgbmFtZTogdGVycmFmb3JtQXR0cmlidXRlTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRUeXBlLFxuICAgICAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6ICEhYXR0LmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc09wdGlvbmFsOiAhIWF0dC5vcHRpb25hbCxcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogISFhdHQucmVxdWlyZWQsXG4gICAgICAgICAgICAgIGlzTmVzdGVkVHlwZTogaXNOZXN0ZWRUeXBlQXR0cmlidXRlKGF0dCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dC50eXBlIHx8IGF0dC5uZXN0ZWRfdHlwZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZSA9IHRvQ2FtZWxDYXNlKHRlcnJhZm9ybUF0dHJpYnV0ZU5hbWUpO1xuXG4gICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudFR5cGUuZnVsbE5hbWUodGVycmFmb3JtQXR0cmlidXRlTmFtZSksXG4gICAgICAgICAgZGVzY3JpcHRpb246IGF0dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN0b3JhZ2VOYW1lOiBgXyR7bmFtZX1gLFxuICAgICAgICAgIGNvbXB1dGVkOiAhIWF0dC5jb21wdXRlZCxcbiAgICAgICAgICBvcHRpb25hbDogISFhdHQub3B0aW9uYWwsXG4gICAgICAgICAgdGVycmFmb3JtTmFtZTogdGVycmFmb3JtQXR0cmlidXRlTmFtZSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHByb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgcmVxdWlyZWQ6ICEhYXR0LnJlcXVpcmVkLFxuICAgICAgICAgIGZvcmNlUGxhaW5HZXR0ZXJUeXBlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbYmxvY2tUeXBlTmFtZSwgYmxvY2tUeXBlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIGJsb2NrLmJsb2NrX3R5cGVzIHx8IHt9LFxuICAgICkpIHtcbiAgICAgIGlmIChzaG91bGRTa2lwQXR0cmlidXRlKHBhcmVudFR5cGUuZnVsbE5hbWUoYmxvY2tUeXBlTmFtZSkpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b0NhbWVsQ2FzZShibG9ja1R5cGVOYW1lKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbmV3IFNjb3BlKHtcbiAgICAgICAgICBuYW1lOiBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50VHlwZSxcbiAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgIH0pO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lOiBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZShibG9ja1R5cGVOYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IG5ldyBTa2lwcGVkQXR0cmlidXRlVHlwZU1vZGVsKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7YmxvY2tUeXBlTmFtZX0gYmxvY2tgLFxuICAgICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gY3JlYXRlIGEgc3RydWN0IGZvciB0aGlzIGJsb2NrXG4gICAgICBsZXQgYmxvY2tBdHRyaWJ1dGVzID0gdGhpcy5yZW5kZXJBdHRyaWJ1dGVzRm9yQmxvY2soXG4gICAgICAgIG5ldyBTY29wZSh7XG4gICAgICAgICAgbmFtZTogYCR7cGFyZW50VHlwZS5uYW1lfV8ke2Jsb2NrVHlwZU5hbWV9YCxcbiAgICAgICAgICBwYXJlbnQ6IHBhcmVudFR5cGUsXG4gICAgICAgICAgaXNQcm92aWRlcjogcGFyZW50VHlwZS5pc1Byb3ZpZGVyLFxuICAgICAgICAgIGluQmxvY2tUeXBlOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgYmxvY2tUeXBlLmJsb2NrLFxuICAgICAgKTtcblxuICAgICAgYmxvY2tBdHRyaWJ1dGVzID0gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKGJsb2NrQXR0cmlidXRlcyk7XG5cbiAgICAgIGNvbnN0IGJsb2NrU3RydWN0ID0gdGhpcy5hZGRTdHJ1Y3QoXG4gICAgICAgIFtcbiAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICAgIG5ldyBTY29wZSh7XG4gICAgICAgICAgICBuYW1lOiBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRUeXBlLFxuICAgICAgICAgICAgaXNQcm92aWRlcjogcGFyZW50VHlwZS5pc1Byb3ZpZGVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICBibG9ja0F0dHJpYnV0ZXMsXG4gICAgICAgIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUsXG4gICAgICAgIChibG9ja1R5cGUubmVzdGluZ19tb2RlID09PSBcImxpc3RcIiB8fFxuICAgICAgICAgIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT09IFwic2V0XCIpICYmXG4gICAgICAgICAgYmxvY2tUeXBlLm1heF9pdGVtcyA9PT0gMSxcbiAgICAgICk7XG5cbiAgICAgIC8vIGRlZmluZSB0aGUgYXR0cmlidXRlXG4gICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgIGF0dHJpYnV0ZUZvckJsb2NrVHlwZShcbiAgICAgICAgICBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgIGJsb2NrVHlwZSxcbiAgICAgICAgICBibG9ja1N0cnVjdCxcbiAgICAgICAgICBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgcGFyZW50VHlwZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG5cbiAgICBmdW5jdGlvbiBhdHRyaWJ1dGVGb3JCbG9ja1R5cGUoXG4gICAgICB0ZXJyYWZvcm1OYW1lOiBzdHJpbmcsXG4gICAgICBibG9ja1R5cGU6IEJsb2NrVHlwZSxcbiAgICAgIHN0cnVjdDogU3RydWN0LFxuICAgICAgaXNQcm92aWRlcjogYm9vbGVhbixcbiAgICAgIHBhcmVudDogU2NvcGUsXG4gICAgKTogQXR0cmlidXRlTW9kZWwge1xuICAgICAgY29uc3QgbmFtZSA9IHRvQ2FtZWxDYXNlKHRlcnJhZm9ybU5hbWUpO1xuICAgICAgbGV0IG9wdGlvbmFsOiBib29sZWFuO1xuICAgICAgbGV0IHJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgICBzd2l0Y2ggKGJsb2NrVHlwZS5uZXN0aW5nX21vZGUpIHtcbiAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgIG9wdGlvbmFsID0gIXN0cnVjdC5hdHRyaWJ1dGVzLnNvbWUoKHgpID0+ICF4Lm9wdGlvbmFsKTtcbiAgICAgICAgICByZXF1aXJlZCA9ICFzdHJ1Y3QuYXR0cmlidXRlcy5zb21lKCh4KSA9PiAheC5yZXF1aXJlZCk7XG5cbiAgICAgICAgICAvLyBUaGlzIGlzIGZvciBidWcgIzM1NzAgYXMgYm90aCBvcHRpb25hbCBhbmQgcmVxdWlyZWQgZXZhbHVhdGUgdG8gZmFsc2UgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzXG4gICAgICAgICAgLy8gKHRoaXMgdGhlbiBjYXVzZXMgdGhlIGNvbXB1dGVkIGJsb2NrIHRvIG5vdCBiZSBwYXJ0IG9mIGFzc2lnbmFibGVBdHRyaWJ1dGVzIGFuZCB0aHVzIHNraXBwZWQgaW4gdGhlIGdlbmVyYXRlZCBjb2RlKVxuICAgICAgICAgIC8vIEhlbmNlOiBJZiBib3RoIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBhcmUgZmFsc2UsIHNldCBvcHRpb25hbCB0byB0cnVlIElGIGF0IGxlYXN0IG9uZVxuICAgICAgICAgIC8vIGF0dHJpYnV0ZSBpbiB0aGUgYmxvY2sgaGFzIG9wdGlvbmFsID0gdHJ1ZSBvciByZXF1aXJlZCA9IHRydWUsIGFzIHRoaXMgd291bGQgbWVhbiB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyBjYW4gYmUgc2V0XG4gICAgICAgICAgLy8gYW5kIHRoZSBibG9jayBpcyBub3QgYWxsIGNvbXB1dGVkLlxuICAgICAgICAgIGlmICghb3B0aW9uYWwgJiYgIXJlcXVpcmVkKSB7XG4gICAgICAgICAgICBvcHRpb25hbCA9IHN0cnVjdC5hdHRyaWJ1dGVzLnNvbWUoKHgpID0+IHgub3B0aW9uYWwgfHwgeC5yZXF1aXJlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtTmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybUZ1bGxOYW1lOiBwYXJlbnQuZnVsbE5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgICAgICAgICB0eXBlOiBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7dGVycmFmb3JtTmFtZX0gYmxvY2tgLFxuICAgICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiBpc1Byb3ZpZGVyLFxuICAgICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlTW9kZWwoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybU5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50LmZ1bGxOYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgICAgICAgICAgdHlwZTogbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0ZXJyYWZvcm1OYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiBpc1Byb3ZpZGVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgICAgICBvcHRpb25hbCA9XG4gICAgICAgICAgICBibG9ja1R5cGUubWluX2l0ZW1zID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmxvY2tUeXBlLm1pbl9pdGVtcyA8IDE7XG4gICAgICAgICAgcmVxdWlyZWQgPVxuICAgICAgICAgICAgYmxvY2tUeXBlLm1pbl9pdGVtcyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBibG9ja1R5cGUubWluX2l0ZW1zID4gMDtcbiAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lOiB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICAgICAgICAgIHR5cGU6XG4gICAgICAgICAgICAgIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgPyBuZXcgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbmV3IFNldEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0ZXJyYWZvcm1OYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IGlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgc2NvcGU6IFNjb3BlW10sXG4gICAgYXR0cnM6IHsgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZSB9IHwgdW5kZWZpbmVkLFxuICAgIG5lc3RpbmdfbW9kZTogc3RyaW5nLFxuICApIHtcbiAgICBsZXQgYXR0cmlidXRlcyA9IG5ldyBBcnJheTxBdHRyaWJ1dGVNb2RlbD4oKTtcbiAgICBjb25zdCBwYXJlbnQgPSBzY29wZVtzY29wZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIGZvciAoY29uc3QgW3RlcnJhZm9ybU5hbWUsIGF0dF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMgfHwge30pKSB7XG4gICAgICAgIC8vIG5lc3RlZCB0eXBlcyBzdXBwb3J0IGNvbXB1dGVkLCBvcHRpb25hbCBhbmQgcmVxdWlyZWQgb24gYXR0cmlidXRlIGxldmVsXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBjb21wdXRlZCwgY2hpbGQgYWx3YXlzIGlzIGNvbXB1dGVkIGFzIHdlbGxcbiAgICAgICAgY29uc3QgY29tcHV0ZWQgPVxuICAgICAgICAgICEhcGFyZW50LmlzQ29tcHV0ZWQgfHwgKHBhcmVudC5pc05lc3RlZFR5cGUgJiYgISFhdHQuY29tcHV0ZWQpO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IHBhcmVudC5pc05lc3RlZFR5cGVcbiAgICAgICAgICA/ICEhYXR0Lm9wdGlvbmFsXG4gICAgICAgICAgOiAhIXBhcmVudC5pc09wdGlvbmFsO1xuICAgICAgICBjb25zdCByZXF1aXJlZCA9IHBhcmVudC5pc05lc3RlZFR5cGVcbiAgICAgICAgICA/ICEhYXR0LnJlcXVpcmVkXG4gICAgICAgICAgOiAhIXBhcmVudC5pc1JlcXVpcmVkO1xuICAgICAgICBjb25zdCBuYW1lID0gdG9DYW1lbENhc2UodGVycmFmb3JtTmFtZSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4uc2NvcGUsXG4gICAgICAgICAgICBuZXcgU2NvcGUoe1xuICAgICAgICAgICAgICBuYW1lOiB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgIGlzUHJvdmlkZXI6IHBhcmVudC5pc1Byb3ZpZGVyLFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBjb21wdXRlZCxcbiAgICAgICAgICAgICAgaXNPcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgICAgICBpc05lc3RlZFR5cGU6IHBhcmVudC5pc05lc3RlZFR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dC50eXBlIHx8IGF0dC5uZXN0ZWRfdHlwZSxcbiAgICAgICAgKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgICBjb21wdXRlZDogY29tcHV0ZWQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgdGVycmFmb3JtTmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybUZ1bGxOYW1lOiBwYXJlbnQuZnVsbE5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmVudC5pc1Byb3ZpZGVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMgPSBkZWR1cGxpY2F0ZUF0dHJpYnV0ZXNXaXRoU2FtZU5hbWUoYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdGhpcy5hZGRTdHJ1Y3Qoc2NvcGUsIGF0dHJpYnV0ZXMsIG5lc3RpbmdfbW9kZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFN0cnVjdChcbiAgICBzY29wZTogU2NvcGVbXSxcbiAgICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuICAgIG5lc3RpbmdfbW9kZTogc3RyaW5nLFxuICAgIGlzU2luZ2xlSXRlbSA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBwb3NzaWJsZU5hbWUgPSB0b1Bhc2NhbENhc2UoXG4gICAgICBzY29wZS5tYXAoKHgpID0+IHRvU25ha2VDYXNlKHgubmFtZSkpLmpvaW4oXCJfXCIpLFxuICAgICk7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMudW5pcXVlQ2xhc3NOYW1lKFxuICAgICAgaXNSZXNlcnZlZFN0cnVjdENsYXNzTmFtZShwb3NzaWJsZU5hbWUpXG4gICAgICAgID8gYCR7cG9zc2libGVOYW1lfVN0cnVjdGBcbiAgICAgICAgOiBwb3NzaWJsZU5hbWUsXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmVudCA9IHNjb3BlW3Njb3BlLmxlbmd0aCAtIDFdO1xuICAgIC8vIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT4gbGlzdC9zZXQgJiBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgIGNvbnN0IGlzQ2xhc3MgPSAocGFyZW50LmlzQ29tcHV0ZWQgJiYgIXBhcmVudC5pc09wdGlvbmFsKSB8fCBpc1NpbmdsZUl0ZW07XG4gICAgY29uc3QgaXNBbm9ueW1vdXMgPSB0cnVlO1xuICAgIGNvbnN0IHMgPSBuZXcgU3RydWN0KFxuICAgICAgbmFtZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBpc0NsYXNzLFxuICAgICAgaXNBbm9ueW1vdXMsXG4gICAgICBpc1NpbmdsZUl0ZW0sXG4gICAgICBuZXN0aW5nX21vZGUsXG4gICAgKTtcbiAgICB0aGlzLnN0cnVjdHMucHVzaChzKTtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQYXJzZXIge1xuICBwcml2YXRlIHVuaXF1ZUNsYXNzbmFtZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgdW5pcXVlQmFzZU5hbWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlc291cmNlczogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb2RlbD4gPSB7fTtcblxuICBwdWJsaWMgcGFyc2UoXG4gICAgZnFwbjogRlFQTixcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgdGVycmFmb3JtVHlwZTogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWwge1xuICAgIGlmICh0aGlzLnJlc291cmNlc1t0eXBlXSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzW3R5cGVdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIodGhpcy51bmlxdWVDbGFzc25hbWVzLCB0aGlzLnVuaXF1ZUJhc2VOYW1lcyk7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBwYXJzZXIucmVzb3VyY2VGcm9tKFxuICAgICAgZnFwbixcbiAgICAgIHR5cGUsXG4gICAgICBzY2hlbWEsXG4gICAgICB0ZXJyYWZvcm1UeXBlLFxuICAgICAgY29uc3RyYWludCxcbiAgICApO1xuICAgIHRoaXMucmVzb3VyY2VzW3R5cGVdID0gcmVzb3VyY2U7XG4gICAgcmV0dXJuIHJlc291cmNlO1xuICB9XG5cbiAgLy8gVXNlZCBieSBjb252ZXJ0IHRvIGRldGVybWluZSB0aGUgcmlnaHQgbmFtZSBmb3IgYSBjbGFzc1xuICBwdWJsaWMgZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlc1t0ZXJyYWZvcm1UeXBlXTtcbiAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNvdXJjZS5jbGFzc05hbWUgOiBcIlwiO1xuICB9XG5cbiAgLy8gVXNlZCBieSBjb252ZXJ0IHRvIGRldGVybWluZSB0aGUgcmlnaHQgbmFtZSBmb3IgYSBuYW1lc3BhY2VcbiAgcHVibGljIGdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZXh0ZXJuYWwgcHJvdmlkZXIgc2luY2UgdGhlIG5hbWUgb2YgcmVzb3VyY2UgZG9lc24ndCBoYXZlIGEgcHJlZml4XG4gICAgaWYgKHRlcnJhZm9ybVR5cGUgPT09IFwiZGF0YV9leHRlcm5hbF9cIikge1xuICAgICAgdGVycmFmb3JtVHlwZSA9IFwiZGF0YV9leHRlcm5hbFwiO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbdGVycmFmb3JtVHlwZV07XG4gICAgaWYgKCFyZXNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtyZXNvdXJjZS5wcm92aWRlcn1gO1xuICAgIHJldHVybiByZXNvdXJjZS5maWxlUGF0aC5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgfVxufVxuIl19
525
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcmVzb3VyY2UtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1FO0FBQ25FLDRDQVV3QjtBQUN4Qiw0REFBdUU7QUFDdkUscUNBWWtCO0FBQ2xCLHFEQUF3RDtBQUN4RCw2REFBMkQ7QUFFM0Qsc0VBQXNFO0FBQ3RFLHlKQUF5SjtBQUN6SixNQUFNLGdDQUFnQyxHQUFHO0lBQ3ZDLFlBQVk7SUFDWixXQUFXO0lBQ1gsS0FBSztJQUNMLFNBQVM7SUFDVCxTQUFTO0lBQ1QsV0FBVztJQUNYLFFBQVE7SUFDUixRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87Q0FDUixDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxtSEFBbUg7SUFDbkgsU0FBUztJQUNULDJCQUEyQjtJQUMzQixTQUFTO0NBQ1YsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxTQUFpQixFQUFXLEVBQUU7SUFDcEUsT0FBTztRQUNMLFFBQVE7UUFDUixRQUFRO1FBQ1IsVUFBVTtRQUNWLEdBQUcsZ0NBQWdDO1FBQ25DLEdBQUcseUJBQXlCO0tBQzdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxTQUFpQixFQUFXLEVBQUU7SUFDL0QsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBc0IsRUFBRSxRQUFnQixFQUFVLEVBQUU7SUFDdkUsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDekIsT0FBTyx5QkFBeUIsQ0FB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QUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsOERBQThEO0lBQ3ZELDJCQUEyQixDQUFDLGFBQXFCO1FBQ3RELGtGQUFrRjtRQUNsRixJQUFJLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsR0FBRyxlQUFlLENBQUM7UUFDbEMsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNGO0FBaERELHdDQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB0b0NhbWVsQ2FzZSwgdG9QYXNjYWxDYXNlLCB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlTmVzdGVkVHlwZSxcbiAgQXR0cmlidXRlVHlwZSxcbiAgQmxvY2ssXG4gIEJsb2NrVHlwZSxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBpc0F0dHJpYnV0ZU5lc3RlZFR5cGUsXG4gIGlzTmVzdGVkVHlwZUF0dHJpYnV0ZSxcbiAgU2NoZW1hLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyTmFtZSwgRlFQTiwgcGFyc2VGUVBOIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlTW9kZWwsXG4gIEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU3RydWN0LFxuICBTY29wZSxcbiAgQXR0cmlidXRlTW9kZWwsXG4gIFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2V0QXR0cmlidXRlVHlwZU1vZGVsLFxuICBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gIFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCxcbn0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBkZXRlY3RBdHRyaWJ1dGVMb29wcyB9IGZyb20gXCIuL2xvb3AtZGV0ZWN0aW9uXCI7XG5pbXBvcnQgeyBzaG91bGRTa2lwQXR0cmlidXRlIH0gZnJvbSBcIi4vc2tpcHBlZC1hdHRyaWJ1dGVzXCI7XG5cbi8vIENhbid0IGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgbGlrZSBcImV4cG9ydCAqIGFzIDxrZXl3b3JkPiBmcm9tIC4uLiBcIlxuLy8gZmlsdGVyZWQgZnJvbSBhbGwga2V5d29yZHMgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvNTAzNjA0Yzg4NGJkMDU1N2M4NTFiMTFiNjk5ZWY5OGNkYjY1YjkzYi9zcmMvY29tcGlsZXIvdHlwZXMudHMjTDExNC1MMTk3XG5jb25zdCBSRVNFUlZFRF9LRVlXT1JEU19GT1JfTkFNRVNQQUNFUyA9IFtcbiAgXCJpbXBsZW1lbnRzXCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwibGV0XCIsXG4gIFwicGFja2FnZVwiLFxuICBcInByaXZhdGVcIixcbiAgXCJwcm90ZWN0ZWRcIixcbiAgXCJwdWJsaWNcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJ5aWVsZFwiLFxuICBcImF3YWl0XCIsXG5dO1xuXG5jb25zdCBDT0xMSURJTkdfTkFNRVNQQUNFX05BTUVTID0gW1xuICAvLyBlLmcuIGhhc2hpY29ycC9jb25zdWwg4oCTIGNvbGxpZGVzIHdpdGggdGhlIExJQ0VOU0UgZmlsZSBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGluIHRoZSBHbyBwYWNrYWdlICgjMjYyNylcbiAgXCJsaWNlbnNlXCIsXG4gIC8vIGNvbGxpZGVzIGZvciBHbyBwYWNrYWdlc1xuICBcInZlcnNpb25cIixcbl07XG5cbmNvbnN0IGlzUmVzZXJ2ZWRDbGFzc09yTmFtZXNwYWNlTmFtZSA9IChjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gW1xuICAgIFwic3RyaW5nXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgLi4uUkVTRVJWRURfS0VZV09SRFNfRk9SX05BTUVTUEFDRVMsXG4gICAgLi4uQ09MTElESU5HX05BTUVTUEFDRV9OQU1FUyxcbiAgXS5pbmNsdWRlcyhjbGFzc05hbWUudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5jb25zdCBpc1Jlc2VydmVkU3RydWN0Q2xhc3NOYW1lID0gKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcImxpc3RcIik7XG59O1xuXG5jb25zdCBnZXRGaWxlTmFtZSA9IChwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKGJhc2VOYW1lID09PSBcImluZGV4XCIpIHtcbiAgICByZXR1cm4gXCJpbmRleC1yZXNvdXJjZS9pbmRleC50c1wiO1xuICB9XG5cbiAgaWYgKGJhc2VOYW1lID09PSBgJHtwcm92aWRlcn1fcHJvdmlkZXJgKSB7XG4gICAgcmV0dXJuIFwicHJvdmlkZXIvaW5kZXgudHNcIjtcbiAgfVxuXG4gIHJldHVybiBgJHt0b1NuYWtlQ2FzZShiYXNlTmFtZSkucmVwbGFjZSgvXy9nLCBcIi1cIil9L2luZGV4LnRzYDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKFxuICBiYXNlTmFtZTogc3RyaW5nLFxuICBpc1Byb3ZpZGVyID0gZmFsc2UsXG4pIHtcbiAgY29uc3QgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXIgPSAhaXNQcm92aWRlciAmJiBiYXNlTmFtZSA9PT0gXCJwcm92aWRlclwiO1xuXG4gIGlmIChpc1Jlc2VydmVkQ2xhc3NPck5hbWVzcGFjZU5hbWUoYmFzZU5hbWUpIHx8IHJlc291cmNlSXNOYW1lZFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIGAke2Jhc2VOYW1lfV9yZXNvdXJjZWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2VOYW1lO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBtYXkgY29uZmxpY3QgYWZ0ZXIgYmVpbmcgc25ha2UgY2FzZWRcbiAqIEV4YW1wbGU6IG9jaV9jb3JlX2lwc2VjX2Nvbm5lY3Rpb25fdHVubmVsX21hbmFnZW1lbnQgKGhhc2hpY29ycC9vY2lAPTUuMjEuMCkgaGFzIGJncF9pcHY2X3N0YXRlIGFuZCBiZ3BfaXB2NnN0YXRlXG4gKiAod2hpY2ggYm90aCByZXN1bHQgaW4gXCJiZ3BJcHY2U3RhdGVcIiB3aGVuIGNhbWVsLWNhc2VkLCB3aXRoIHRoZSBzZWNvbmQgb25lIGJlaW5nIGRlcHJlY2F0ZWQ6IHRydWUpXG4gKiBBcyB3ZSBjdXJyZW50bHkgZG9uJ3QgaGFuZGxlIGFueSBkZXByZWNhdGVkIG9uZXMgYXQgYWxsLCB3ZSdsbCBqdXN0IGRlbGV0ZSBvbmUgb2YgdGhlIHR3byBhdHRyaWJ1dGVzIGZvciBub3dcbiAqIEBwYXJhbSBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGRlZHVwbGljYXRlQXR0cmlidXRlc1dpdGhTYW1lTmFtZShcbiAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbik6IEF0dHJpYnV0ZU1vZGVsW10ge1xuICByZXR1cm4gYXR0cmlidXRlcy5maWx0ZXIoKGF0dHIsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGhhc090aGVyV2l0aFNhbWVOYW1lID0gYXR0cmlidXRlc1xuICAgICAgLnNsaWNlKGlkeCArIDEpIC8vIG9ubHkgc2VhcmNoIGFmdGVyIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBhdHRyaWJ1dGUgdG8gYXZvaWQgZGVsZXRpbmcgYm90aFxuICAgICAgLnNvbWUoKG90aGVyKSA9PiBvdGhlci5uYW1lID09PSBhdHRyLm5hbWUgJiYgb3RoZXIgIT09IGF0dHIpO1xuICAgIHJldHVybiAhaGFzT3RoZXJXaXRoU2FtZU5hbWU7XG4gIH0pO1xufVxuXG5jbGFzcyBQYXJzZXIge1xuICBwcml2YXRlIHN0cnVjdHMgPSBuZXcgQXJyYXk8U3RydWN0PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2xhc3NOYW1lczogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSB1c2VkQmFzZU5hbWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICApIHt9XG5cbiAgcHJpdmF0ZSB1bmlxdWVDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKSkge1xuICAgICAgY2xhc3NOYW1lID0gYCR7Y2xhc3NOYW1lfUFgO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGJhc2UgbmFtZXMgYXJlIHVuaXF1ZSBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAqXG4gICAqIEFmZmVjdGVkIGxhbmd1YWdlczpcbiAgICogLSBHbzogSlNJSS1nZW5lcmF0ZWQgR28gcGFja2FnZSBuYW1lcyBhcmUgZnVsbHkgbG93ZXJjYXNlZCwgc29cbiAgICogICBgbG9hZC1iYWxhbmNlci1iYWNrZW5kc2V0YCBhbmQgYGxvYWQtYmFsYW5jZXItYmFja2VuZC1zZXRgIGJvdGhcbiAgICogICBiZWNvbWUgcGFja2FnZSBgbG9hZGJhbGFuY2VyYmFja2VuZHNldGAsIGNhdXNpbmcgYSBoYXJkIGJ1aWxkIGZhaWx1cmU6XG4gICAqICAgXCJjYXNlLWluc2Vuc2l0aXZlIGZpbGUgbmFtZSBjb2xsaXNpb25cIi5cbiAgICogLSBDIzogSlNJSSBnZW5lcmF0ZXMgUGFzY2FsQ2FzZSBkaXJlY3RvcmllcyBsaWtlXG4gICAqICAgYExvYWRCYWxhbmNlckJhY2tlbmRzZXQvYCBhbmQgYExvYWRCYWxhbmNlckJhY2tlbmRTZXQvYCB3aGljaCB0aGUgQyNcbiAgICogICBjb21waWxlciB0cmVhdHMgY2FzZS1pbnNlbnNpdGl2ZWx5LCBjYXVzaW5nIENTMjAwMiBhbmQgQ1MwMjM0IGVycm9ycy5cbiAgICovXG4gIHByaXZhdGUgdW5pcXVlQmFzZU5hbWUoYmFzZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFzY2FsTmFtZSA9IHRvUGFzY2FsQ2FzZShiYXNlTmFtZSk7XG4gICAgY29uc3Qga2V5ID0gcGFzY2FsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy51c2VkQmFzZU5hbWVzLmdldChrZXkpO1xuXG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IHBhc2NhbE5hbWUpIHtcbiAgICAgIGJhc2VOYW1lID0gYCR7YmFzZU5hbWV9QWA7XG4gICAgICByZXR1cm4gdGhpcy51bmlxdWVCYXNlTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VkQmFzZU5hbWVzLnNldChrZXksIHBhc2NhbE5hbWUpO1xuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvdXJjZUZyb20oXG4gICAgZnFwbjogRlFQTixcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWwge1xuICAgIGxldCBiYXNlTmFtZSA9IHR5cGU7XG5cbiAgICBjb25zdCBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludCA9IGNvbnN0cmFpbnRcbiAgICAgID8gKGNvbnN0cmFpbnQubmFtZSBhcyBQcm92aWRlck5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm92aWRlck5hbWVGcm9tRlFQTiA9IHBhcnNlRlFQTihmcXBuKS5uYW1lO1xuXG4gICAgaWYgKGJhc2VOYW1lLnN0YXJ0c1dpdGgoYCR7cHJvdmlkZXJOYW1lRnJvbUZRUE59X2ApKSB7XG4gICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cihwcm92aWRlck5hbWVGcm9tRlFQTi5sZW5ndGggKyAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludFxuICAgICAgPyBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludFxuICAgICAgOiBwcm92aWRlck5hbWVGcm9tRlFQTjtcblxuICAgIGNvbnN0IGlzUHJvdmlkZXIgPSB0ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcInByb3ZpZGVyXCI7XG4gICAgaWYgKGlzUHJvdmlkZXIpIHtcbiAgICAgIGJhc2VOYW1lID0gYCR7cHJvdmlkZXJOYW1lfV8ke2Jhc2VOYW1lfWA7XG4gICAgICBpZiAoIShcImF0dHJpYnV0ZXNcIiBpbiBzY2hlbWEuYmxvY2spKSB7XG4gICAgICAgIHNjaGVtYS5ibG9jayA9IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgICBibG9ja190eXBlczogKHNjaGVtYS5ibG9jayBhcyBCbG9jaykuYmxvY2tfdHlwZXMgfHwge30sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21laG93IG1pc3NpbmcgZnJvbSBwcm92aWRlciBzY2hlbWFcbiAgICAgIHNjaGVtYS5ibG9jay5hdHRyaWJ1dGVzW1wiYWxpYXNcIl0gPSB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkFsaWFzIG5hbWVcIixcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYmFzZU5hbWUgPSBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKGJhc2VOYW1lLCBpc1Byb3ZpZGVyKTtcbiAgICBiYXNlTmFtZSA9IHRoaXMudW5pcXVlQmFzZU5hbWUoYmFzZU5hbWUpO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy51bmlxdWVDbGFzc05hbWUodG9QYXNjYWxDYXNlKGJhc2VOYW1lKSk7XG4gICAgLy8gYXZvaWQgbmFtaW5nIGNvbGxpc2lvbiAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzI5OVxuICAgIGNvbnN0IGNvbmZpZ1N0cnVjdE5hbWUgPSB0aGlzLnVuaXF1ZUNsYXNzTmFtZShgJHtjbGFzc05hbWV9Q29uZmlnYCk7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBnZXRGaWxlTmFtZShwcm92aWRlck5hbWUsIGJhc2VOYW1lKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gYHByb3ZpZGVycy8ke3RvU25ha2VDYXNlKHByb3ZpZGVyTmFtZSl9LyR7ZmlsZU5hbWV9YDtcbiAgICBsZXQgYXR0cmlidXRlcyA9IHRoaXMucmVuZGVyQXR0cmlidXRlc0ZvckJsb2NrKFxuICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgbmFtZTogYmFzZU5hbWUsXG4gICAgICAgIGlzUHJvdmlkZXIsXG4gICAgICAgIHBhcmVudDogaXNQcm92aWRlclxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBuZXcgU2NvcGUoeyBuYW1lOiBwcm92aWRlck5hbWUsIGlzUHJvdmlkZXI6IHRydWUgfSksXG4gICAgICB9KSxcbiAgICAgIHNjaGVtYS5ibG9jayxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0U3RydWN0QXR0cmlidXRlKFxuICAgICAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbiAgICAgIHBhdGg6IHN0cmluZyxcbiAgICApOiBBdHRyaWJ1dGVNb2RlbCB7XG4gICAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoKGF0dCkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0LnRlcnJhZm9ybU5hbWUgPT09IGZpcnN0O1xuICAgICAgfSk7XG4gICAgICBpZiAoIWF0dHJpYnV0ZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0byBmaW5kIHJlY3Vyc2l2ZSBhdHRyaWJ1dGUgYXQgcGF0aDogJHtwYXRofWAsXG4gICAgICAgICk7XG4gICAgICBpZiAoIWF0dHJpYnV0ZS50eXBlLnN0cnVjdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0byBmaW5kIHN0cnVjdCB0eXBlIGF0dHJpYnV0ZSBhdCBwYXRoOiAke3BhdGh9IGJ1dCBnb3QgJHthdHRyaWJ1dGUudHlwZS5zdG9yZWRDbGFzc1R5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgIHJldHVybiBnZXRTdHJ1Y3RBdHRyaWJ1dGUoXG4gICAgICAgIGF0dHJpYnV0ZS50eXBlLnN0cnVjdC5hdHRyaWJ1dGVzLFxuICAgICAgICByZXN0LmpvaW4oXCIuXCIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnRyb2R1Y2UgcmVjdXJzaW9uIGZvciBzb21lIGF0dHJpYnV0ZXNcbiAgICBjb25zdCByZWN1cnNpdmVBdHRyaWJ1dGVQYXRocyA9IGRldGVjdEF0dHJpYnV0ZUxvb3BzKGF0dHJpYnV0ZXMpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMocmVjdXJzaXZlQXR0cmlidXRlUGF0aHMpLmZvckVhY2goXG4gICAgICAoW2F0dHJpYnV0ZVBhdGgsIHN0cnVjdFBhdGhdKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGJ1aWxkIHRoaXMgdG8gYmUgYSBiaXQgbW9yZSBkZWZlbnNpdmUgKGUuZy4gcmVtb3ZlICEgb3BlcmF0b3IpXG4gICAgICAgIGNvbnN0IHJlY3Vyc2lvblRhcmdldFN0cnVjdEF0dHJpYnV0ZSA9IGdldFN0cnVjdEF0dHJpYnV0ZShcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgIHN0cnVjdFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYXR0cmlidXRlUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgY29uc3QgcGFyZW50QXR0cmlidXRlID0gZ2V0U3RydWN0QXR0cmlidXRlKGF0dHJpYnV0ZXMsIHBhcnRzLmpvaW4oXCIuXCIpKTtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlcGxhY2UgPVxuICAgICAgICAgIHBhcmVudEF0dHJpYnV0ZS50eXBlLnN0cnVjdCEuYXR0cmlidXRlcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYXR0KSA9PiBhdHQudGVycmFmb3JtTmFtZSA9PT0gYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXhUb1JlcGxhY2UgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYXR0cmlidXRlIGF0IHBhdGggXCIgKyBhdHRyaWJ1dGVQYXRoKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyaWJ1dGUgPVxuICAgICAgICAgIHBhcmVudEF0dHJpYnV0ZS50eXBlLnN0cnVjdCEuYXR0cmlidXRlc1tpbmRleFRvUmVwbGFjZV07XG5cbiAgICAgICAgcGFyZW50QXR0cmlidXRlLnR5cGUuc3RydWN0IS5hdHRyaWJ1dGVzW2luZGV4VG9SZXBsYWNlXSA9XG4gICAgICAgICAgcmVjdXJzaW9uVGFyZ2V0U3RydWN0QXR0cmlidXRlOyAvLyBpbnRyb2R1Y2UgcmVjdXJzaW9uXG5cbiAgICAgICAgLy8gdWdseSwgcGxzIGPMtmHMtmzMtmzMtiByZWZhY3RvciBtZSBtYXliZVxuICAgICAgICAvLyB3ZSBzdG9yZSBhbGwgc3RydWN0cyBpbiB0aGlzLnN0cnVjdHMg4oCTIG5vdyB3ZSBuZWVkIHRvIGRpc3Bvc2UgYWxsIHN0cnVjdHMgdGhhdCBhcmUgcGFydCBvZiBwcmV2aW91c0F0dHJpYnV0ZVxuICAgICAgICBjb25zdCBkaXNwb3NlU3RydWN0cyA9IChhdHRyOiBBdHRyaWJ1dGVNb2RlbCkgPT4ge1xuICAgICAgICAgIGlmIChhdHRyLnR5cGUuc3RydWN0KSB7XG4gICAgICAgICAgICBhdHRyLnR5cGUuc3RydWN0LmF0dHJpYnV0ZXMuZm9yRWFjaChkaXNwb3NlU3RydWN0cyk7XG4gICAgICAgICAgICB0aGlzLnN0cnVjdHMgPSB0aGlzLnN0cnVjdHMuZmlsdGVyKChzKSA9PiBzICE9PSBhdHRyLnR5cGUuc3RydWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZGlzcG9zZVN0cnVjdHMocHJldmlvdXNBdHRyaWJ1dGUpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXR0cmlidXRlcyA9IGRlZHVwbGljYXRlQXR0cmlidXRlc1dpdGhTYW1lTmFtZShhdHRyaWJ1dGVzKTtcblxuICAgIGNvbnN0IHJlc291cmNlTW9kZWwgPSBuZXcgUmVzb3VyY2VNb2RlbCh7XG4gICAgICB0ZXJyYWZvcm1UeXBlOiB0eXBlLFxuICAgICAgYmFzZU5hbWUsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc2NoZW1hLFxuICAgICAgZnFwbixcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICB0ZXJyYWZvcm1TY2hlbWFUeXBlLFxuICAgICAgc3RydWN0czogdGhpcy5zdHJ1Y3RzLFxuICAgICAgY29uZmlnU3RydWN0TmFtZSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXNvdXJjZU1vZGVsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJBdHRyaWJ1dGVUeXBlKFxuICAgIHNjb3BlOiBTY29wZVtdLFxuICAgIGF0dHJpYnV0ZVR5cGU6IEF0dHJpYnV0ZVR5cGUgfCBBdHRyaWJ1dGVOZXN0ZWRUeXBlLFxuICAgIHBhcmVudEtpbmQ/OiBzdHJpbmcsXG4gICk6IEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gICAgY29uc3QgcGFyZW50ID0gc2NvcGVbc2NvcGUubGVuZ3RoIC0gMV07XG4gICAgaWYgKHNob3VsZFNraXBBdHRyaWJ1dGUocGFyZW50LmJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuIG5ldyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwobmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcImFueVwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcImJvb2xlYW5cIik7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcInN0cmluZ1wiKTtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwibnVtYmVyXCIpO1xuICAgICAgICBjYXNlIFwiZHluYW1pY1wiOlxuICAgICAgICAgIHJldHVybiBuZXcgTWFwQXR0cmlidXRlVHlwZU1vZGVsKG5ldyBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwoXCJhbnlcIikpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwcmltaXRpdmUgdHlwZSAke2F0dHJpYnV0ZVR5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlVHlwZSkpIHtcbiAgICAgIGlmIChhdHRyaWJ1dGVUeXBlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgYXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2tpbmQsIHR5cGVdID0gYXR0cmlidXRlVHlwZTtcblxuICAgICAgaWYgKGtpbmQgPT09IFwic2V0XCIgfHwga2luZCA9PT0gXCJsaXN0XCIpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgdHlwZSBhcyBBdHRyaWJ1dGVUeXBlLFxuICAgICAgICAgIFtraW5kLCBwYXJlbnRLaW5kXS5qb2luKFwiXCIpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJsaXN0XCJcbiAgICAgICAgICA/IG5ldyBMaXN0QXR0cmlidXRlVHlwZU1vZGVsKGVsZW1lbnRUeXBlLCBmYWxzZSwgZmFsc2UpXG4gICAgICAgICAgOiBuZXcgU2V0QXR0cmlidXRlVHlwZU1vZGVsKGVsZW1lbnRUeXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCA9PT0gXCJtYXBcIikge1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgdHlwZSBhcyBBdHRyaWJ1dGVUeXBlLFxuICAgICAgICAgIFtraW5kLCBwYXJlbnRLaW5kXS5qb2luKFwiXCIpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbCh2YWx1ZVR5cGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBvYmpBdHRyaWJ1dGVzID0gdHlwZSBhcyB7IFtuYW1lOiBzdHJpbmddOiBBdHRyaWJ1dGVUeXBlIH07XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IHsgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZSB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKG9iakF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IHsgdHlwZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgcGFyZW50S2luZCA/PyBraW5kLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0F0dHJpYnV0ZU5lc3RlZFR5cGUoYXR0cmlidXRlVHlwZSkpIHtcbiAgICAgIGxldCBzdHJ1Y3QgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgdHlwZU1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSkge1xuICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgIHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVNb2RlbCA9IG5ldyBMaXN0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2V0XCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IFNldEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgIG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgIHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVNb2RlbCA9IG5ldyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwoXG4gICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgIHN0cnVjdCA9IHRoaXMuYWRkQW5vbnltb3VzU3RydWN0KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVNb2RlbCA9IG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBuZXN0ZWRfdHlwZSB3aXRoIG5lc3RpbmdfbW9kZSBcIiR7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlXG4gICAgICAgICAgICB9XCIgbm90IHN1cHBvcnRlZCAoYXR0cmlidXRlIHNjb3BlOiAke3Njb3BlXG4gICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMuZnVsbE5hbWUpXG4gICAgICAgICAgICAgIC5qb2luKFwiLFwiKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlTW9kZWw7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGUgJHtKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGVUeXBlKX1gKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXJBdHRyaWJ1dGVzRm9yQmxvY2socGFyZW50VHlwZTogU2NvcGUsIGJsb2NrOiBCbG9jaykge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBuZXcgQXJyYXk8QXR0cmlidXRlTW9kZWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFt0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lLCBhdHRdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgYmxvY2suYXR0cmlidXRlcyB8fCB7fSxcbiAgICApKSB7XG4gICAgICBsZXQgdHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICAgICAgbGV0IGZvcmNlUGxhaW5HZXR0ZXJUeXBlID0gZmFsc2U7XG4gICAgICBpZiAoc2hvdWxkU2tpcEF0dHJpYnV0ZShwYXJlbnRUeXBlLmZ1bGxOYW1lKHRlcnJhZm9ybUF0dHJpYnV0ZU5hbWUpKSkge1xuICAgICAgICB0eXBlID0gbmV3IFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwoKTtcbiAgICAgICAgZm9yY2VQbGFpbkdldHRlclR5cGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgICAgICAgbmFtZTogdGVycmFmb3JtQXR0cmlidXRlTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRUeXBlLFxuICAgICAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6ICEhYXR0LmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc09wdGlvbmFsOiAhIWF0dC5vcHRpb25hbCxcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogISFhdHQucmVxdWlyZWQsXG4gICAgICAgICAgICAgIGlzTmVzdGVkVHlwZTogaXNOZXN0ZWRUeXBlQXR0cmlidXRlKGF0dCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dC50eXBlIHx8IGF0dC5uZXN0ZWRfdHlwZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZSA9IHRvQ2FtZWxDYXNlKHRlcnJhZm9ybUF0dHJpYnV0ZU5hbWUpO1xuXG4gICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudFR5cGUuZnVsbE5hbWUodGVycmFmb3JtQXR0cmlidXRlTmFtZSksXG4gICAgICAgICAgZGVzY3JpcHRpb246IGF0dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN0b3JhZ2VOYW1lOiBgXyR7bmFtZX1gLFxuICAgICAgICAgIGNvbXB1dGVkOiAhIWF0dC5jb21wdXRlZCxcbiAgICAgICAgICBvcHRpb25hbDogISFhdHQub3B0aW9uYWwsXG4gICAgICAgICAgdGVycmFmb3JtTmFtZTogdGVycmFmb3JtQXR0cmlidXRlTmFtZSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHByb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgcmVxdWlyZWQ6ICEhYXR0LnJlcXVpcmVkLFxuICAgICAgICAgIGZvcmNlUGxhaW5HZXR0ZXJUeXBlLFxuICAgICAgICAgIGlzV3JpdGVPbmx5OiAhIWF0dC53cml0ZV9vbmx5LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbYmxvY2tUeXBlTmFtZSwgYmxvY2tUeXBlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIGJsb2NrLmJsb2NrX3R5cGVzIHx8IHt9LFxuICAgICkpIHtcbiAgICAgIGlmIChzaG91bGRTa2lwQXR0cmlidXRlKHBhcmVudFR5cGUuZnVsbE5hbWUoYmxvY2tUeXBlTmFtZSkpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b0NhbWVsQ2FzZShibG9ja1R5cGVOYW1lKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbmV3IFNjb3BlKHtcbiAgICAgICAgICBuYW1lOiBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50VHlwZSxcbiAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgIH0pO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lOiBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZShibG9ja1R5cGVOYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IG5ldyBTa2lwcGVkQXR0cmlidXRlVHlwZU1vZGVsKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7YmxvY2tUeXBlTmFtZX0gYmxvY2tgLFxuICAgICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gY3JlYXRlIGEgc3RydWN0IGZvciB0aGlzIGJsb2NrXG4gICAgICBsZXQgYmxvY2tBdHRyaWJ1dGVzID0gdGhpcy5yZW5kZXJBdHRyaWJ1dGVzRm9yQmxvY2soXG4gICAgICAgIG5ldyBTY29wZSh7XG4gICAgICAgICAgbmFtZTogYCR7cGFyZW50VHlwZS5uYW1lfV8ke2Jsb2NrVHlwZU5hbWV9YCxcbiAgICAgICAgICBwYXJlbnQ6IHBhcmVudFR5cGUsXG4gICAgICAgICAgaXNQcm92aWRlcjogcGFyZW50VHlwZS5pc1Byb3ZpZGVyLFxuICAgICAgICAgIGluQmxvY2tUeXBlOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgYmxvY2tUeXBlLmJsb2NrLFxuICAgICAgKTtcblxuICAgICAgYmxvY2tBdHRyaWJ1dGVzID0gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKGJsb2NrQXR0cmlidXRlcyk7XG5cbiAgICAgIGNvbnN0IGJsb2NrU3RydWN0ID0gdGhpcy5hZGRTdHJ1Y3QoXG4gICAgICAgIFtcbiAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICAgIG5ldyBTY29wZSh7XG4gICAgICAgICAgICBuYW1lOiBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRUeXBlLFxuICAgICAgICAgICAgaXNQcm92aWRlcjogcGFyZW50VHlwZS5pc1Byb3ZpZGVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICBibG9ja0F0dHJpYnV0ZXMsXG4gICAgICAgIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUsXG4gICAgICAgIChibG9ja1R5cGUubmVzdGluZ19tb2RlID09PSBcImxpc3RcIiB8fFxuICAgICAgICAgIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT09IFwic2V0XCIpICYmXG4gICAgICAgICAgYmxvY2tUeXBlLm1heF9pdGVtcyA9PT0gMSxcbiAgICAgICk7XG5cbiAgICAgIC8vIGRlZmluZSB0aGUgYXR0cmlidXRlXG4gICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgIGF0dHJpYnV0ZUZvckJsb2NrVHlwZShcbiAgICAgICAgICBibG9ja1R5cGVOYW1lLFxuICAgICAgICAgIGJsb2NrVHlwZSxcbiAgICAgICAgICBibG9ja1N0cnVjdCxcbiAgICAgICAgICBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgcGFyZW50VHlwZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG5cbiAgICBmdW5jdGlvbiBhdHRyaWJ1dGVGb3JCbG9ja1R5cGUoXG4gICAgICB0ZXJyYWZvcm1OYW1lOiBzdHJpbmcsXG4gICAgICBibG9ja1R5cGU6IEJsb2NrVHlwZSxcbiAgICAgIHN0cnVjdDogU3RydWN0LFxuICAgICAgaXNQcm92aWRlcjogYm9vbGVhbixcbiAgICAgIHBhcmVudDogU2NvcGUsXG4gICAgKTogQXR0cmlidXRlTW9kZWwge1xuICAgICAgY29uc3QgbmFtZSA9IHRvQ2FtZWxDYXNlKHRlcnJhZm9ybU5hbWUpO1xuICAgICAgbGV0IG9wdGlvbmFsOiBib29sZWFuO1xuICAgICAgbGV0IHJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgICBzd2l0Y2ggKGJsb2NrVHlwZS5uZXN0aW5nX21vZGUpIHtcbiAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgIG9wdGlvbmFsID0gIXN0cnVjdC5hdHRyaWJ1dGVzLnNvbWUoKHgpID0+ICF4Lm9wdGlvbmFsKTtcbiAgICAgICAgICByZXF1aXJlZCA9ICFzdHJ1Y3QuYXR0cmlidXRlcy5zb21lKCh4KSA9PiAheC5yZXF1aXJlZCk7XG5cbiAgICAgICAgICAvLyBUaGlzIGlzIGZvciBidWcgIzM1NzAgYXMgYm90aCBvcHRpb25hbCBhbmQgcmVxdWlyZWQgZXZhbHVhdGUgdG8gZmFsc2UgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzXG4gICAgICAgICAgLy8gKHRoaXMgdGhlbiBjYXVzZXMgdGhlIGNvbXB1dGVkIGJsb2NrIHRvIG5vdCBiZSBwYXJ0IG9mIGFzc2lnbmFibGVBdHRyaWJ1dGVzIGFuZCB0aHVzIHNraXBwZWQgaW4gdGhlIGdlbmVyYXRlZCBjb2RlKVxuICAgICAgICAgIC8vIEhlbmNlOiBJZiBib3RoIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBhcmUgZmFsc2UsIHNldCBvcHRpb25hbCB0byB0cnVlIElGIGF0IGxlYXN0IG9uZVxuICAgICAgICAgIC8vIGF0dHJpYnV0ZSBpbiB0aGUgYmxvY2sgaGFzIG9wdGlvbmFsID0gdHJ1ZSBvciByZXF1aXJlZCA9IHRydWUsIGFzIHRoaXMgd291bGQgbWVhbiB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyBjYW4gYmUgc2V0XG4gICAgICAgICAgLy8gYW5kIHRoZSBibG9jayBpcyBub3QgYWxsIGNvbXB1dGVkLlxuICAgICAgICAgIGlmICghb3B0aW9uYWwgJiYgIXJlcXVpcmVkKSB7XG4gICAgICAgICAgICBvcHRpb25hbCA9IHN0cnVjdC5hdHRyaWJ1dGVzLnNvbWUoKHgpID0+IHgub3B0aW9uYWwgfHwgeC5yZXF1aXJlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtTmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybUZ1bGxOYW1lOiBwYXJlbnQuZnVsbE5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgICAgICAgICB0eXBlOiBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7dGVycmFmb3JtTmFtZX0gYmxvY2tgLFxuICAgICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiBpc1Byb3ZpZGVyLFxuICAgICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlTW9kZWwoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybU5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50LmZ1bGxOYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgICAgICAgICAgdHlwZTogbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0ZXJyYWZvcm1OYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiBpc1Byb3ZpZGVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgICAgICBvcHRpb25hbCA9XG4gICAgICAgICAgICBibG9ja1R5cGUubWluX2l0ZW1zID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmxvY2tUeXBlLm1pbl9pdGVtcyA8IDE7XG4gICAgICAgICAgcmVxdWlyZWQgPVxuICAgICAgICAgICAgYmxvY2tUeXBlLm1pbl9pdGVtcyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBibG9ja1R5cGUubWluX2l0ZW1zID4gMDtcbiAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lOiB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICAgICAgICAgIHR5cGU6XG4gICAgICAgICAgICAgIGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgPyBuZXcgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbmV3IFNldEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0ZXJyYWZvcm1OYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IGlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgc2NvcGU6IFNjb3BlW10sXG4gICAgYXR0cnM6IHsgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZSB9IHwgdW5kZWZpbmVkLFxuICAgIG5lc3RpbmdfbW9kZTogc3RyaW5nLFxuICApIHtcbiAgICBsZXQgYXR0cmlidXRlcyA9IG5ldyBBcnJheTxBdHRyaWJ1dGVNb2RlbD4oKTtcbiAgICBjb25zdCBwYXJlbnQgPSBzY29wZVtzY29wZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIGZvciAoY29uc3QgW3RlcnJhZm9ybU5hbWUsIGF0dF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMgfHwge30pKSB7XG4gICAgICAgIC8vIG5lc3RlZCB0eXBlcyBzdXBwb3J0IGNvbXB1dGVkLCBvcHRpb25hbCBhbmQgcmVxdWlyZWQgb24gYXR0cmlidXRlIGxldmVsXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBjb21wdXRlZCwgY2hpbGQgYWx3YXlzIGlzIGNvbXB1dGVkIGFzIHdlbGxcbiAgICAgICAgY29uc3QgY29tcHV0ZWQgPVxuICAgICAgICAgICEhcGFyZW50LmlzQ29tcHV0ZWQgfHwgKHBhcmVudC5pc05lc3RlZFR5cGUgJiYgISFhdHQuY29tcHV0ZWQpO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IHBhcmVudC5pc05lc3RlZFR5cGVcbiAgICAgICAgICA/ICEhYXR0Lm9wdGlvbmFsXG4gICAgICAgICAgOiAhIXBhcmVudC5pc09wdGlvbmFsO1xuICAgICAgICBjb25zdCByZXF1aXJlZCA9IHBhcmVudC5pc05lc3RlZFR5cGVcbiAgICAgICAgICA/ICEhYXR0LnJlcXVpcmVkXG4gICAgICAgICAgOiAhIXBhcmVudC5pc1JlcXVpcmVkO1xuICAgICAgICBjb25zdCBuYW1lID0gdG9DYW1lbENhc2UodGVycmFmb3JtTmFtZSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4uc2NvcGUsXG4gICAgICAgICAgICBuZXcgU2NvcGUoe1xuICAgICAgICAgICAgICBuYW1lOiB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgIGlzUHJvdmlkZXI6IHBhcmVudC5pc1Byb3ZpZGVyLFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBjb21wdXRlZCxcbiAgICAgICAgICAgICAgaXNPcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgICAgICBpc05lc3RlZFR5cGU6IHBhcmVudC5pc05lc3RlZFR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dC50eXBlIHx8IGF0dC5uZXN0ZWRfdHlwZSxcbiAgICAgICAgKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgICBjb21wdXRlZDogY29tcHV0ZWQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgdGVycmFmb3JtTmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybUZ1bGxOYW1lOiBwYXJlbnQuZnVsbE5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmVudC5pc1Byb3ZpZGVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgICAgaXNXcml0ZU9ubHk6ICEhYXR0LndyaXRlX29ubHksXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcyA9IGRlZHVwbGljYXRlQXR0cmlidXRlc1dpdGhTYW1lTmFtZShhdHRyaWJ1dGVzKTtcblxuICAgIHJldHVybiB0aGlzLmFkZFN0cnVjdChzY29wZSwgYXR0cmlidXRlcywgbmVzdGluZ19tb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3RydWN0KFxuICAgIHNjb3BlOiBTY29wZVtdLFxuICAgIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW10sXG4gICAgbmVzdGluZ19tb2RlOiBzdHJpbmcsXG4gICAgaXNTaW5nbGVJdGVtID0gZmFsc2UsXG4gICkge1xuICAgIGNvbnN0IHBvc3NpYmxlTmFtZSA9IHRvUGFzY2FsQ2FzZShcbiAgICAgIHNjb3BlLm1hcCgoeCkgPT4gdG9TbmFrZUNhc2UoeC5uYW1lKSkuam9pbihcIl9cIiksXG4gICAgKTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy51bmlxdWVDbGFzc05hbWUoXG4gICAgICBpc1Jlc2VydmVkU3RydWN0Q2xhc3NOYW1lKHBvc3NpYmxlTmFtZSlcbiAgICAgICAgPyBgJHtwb3NzaWJsZU5hbWV9U3RydWN0YFxuICAgICAgICA6IHBvc3NpYmxlTmFtZSxcbiAgICApO1xuXG4gICAgY29uc3QgcGFyZW50ID0gc2NvcGVbc2NvcGUubGVuZ3RoIC0gMV07XG4gICAgLy8gYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSA9PiBsaXN0L3NldCAmIGJsb2NrVHlwZS5tYXhfaXRlbXMgPT09IDEsXG4gICAgY29uc3QgaXNDbGFzcyA9IChwYXJlbnQuaXNDb21wdXRlZCAmJiAhcGFyZW50LmlzT3B0aW9uYWwpIHx8IGlzU2luZ2xlSXRlbTtcbiAgICBjb25zdCBpc0Fub255bW91cyA9IHRydWU7XG4gICAgY29uc3QgcyA9IG5ldyBTdHJ1Y3QoXG4gICAgICBuYW1lLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlzQ2xhc3MsXG4gICAgICBpc0Fub255bW91cyxcbiAgICAgIGlzU2luZ2xlSXRlbSxcbiAgICAgIG5lc3RpbmdfbW9kZSxcbiAgICApO1xuICAgIHRoaXMuc3RydWN0cy5wdXNoKHMpO1xuICAgIHJldHVybiBzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVBhcnNlciB7XG4gIHByaXZhdGUgdW5pcXVlQ2xhc3NuYW1lczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSB1bmlxdWVCYXNlTmFtZXM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vZGVsPiA9IHt9O1xuXG4gIHB1YmxpYyBwYXJzZShcbiAgICBmcXBuOiBGUVBOLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICB0ZXJyYWZvcm1UeXBlOiBzdHJpbmcsXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbCB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW3R5cGVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXNbdHlwZV07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcih0aGlzLnVuaXF1ZUNsYXNzbmFtZXMsIHRoaXMudW5pcXVlQmFzZU5hbWVzKTtcbiAgICBjb25zdCByZXNvdXJjZSA9IHBhcnNlci5yZXNvdXJjZUZyb20oXG4gICAgICBmcXBuLFxuICAgICAgdHlwZSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHRlcnJhZm9ybVR5cGUsXG4gICAgICBjb25zdHJhaW50LFxuICAgICk7XG4gICAgdGhpcy5yZXNvdXJjZXNbdHlwZV0gPSByZXNvdXJjZTtcbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICAvLyBVc2VkIGJ5IGNvbnZlcnQgdG8gZGV0ZXJtaW5lIHRoZSByaWdodCBuYW1lIGZvciBhIGNsYXNzXG4gIHB1YmxpYyBnZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW3RlcnJhZm9ybVR5cGVdO1xuICAgIHJldHVybiByZXNvdXJjZSA/IHJlc291cmNlLmNsYXNzTmFtZSA6IFwiXCI7XG4gIH1cblxuICAvLyBVc2VkIGJ5IGNvbnZlcnQgdG8gZGV0ZXJtaW5lIHRoZSByaWdodCBuYW1lIGZvciBhIG5hbWVzcGFjZVxuICBwdWJsaWMgZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIC8vIFNwZWNpYWwgY2FzZSBleHRlcm5hbCBwcm92aWRlciBzaW5jZSB0aGUgbmFtZSBvZiByZXNvdXJjZSBkb2Vzbid0IGhhdmUgYSBwcmVmaXhcbiAgICBpZiAodGVycmFmb3JtVHlwZSA9PT0gXCJkYXRhX2V4dGVybmFsX1wiKSB7XG4gICAgICB0ZXJyYWZvcm1UeXBlID0gXCJkYXRhX2V4dGVybmFsXCI7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlc1t0ZXJyYWZvcm1UeXBlXTtcbiAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgZm9sZGVyID0gYHByb3ZpZGVycy8ke3Jlc291cmNlLnByb3ZpZGVyfWA7XG4gICAgcmV0dXJuIHJlc291cmNlLmZpbGVQYXRoLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICB9XG59XG4iXX0=
package/jest.config.js CHANGED
@@ -2,15 +2,22 @@
2
2
  * Copyright (c) HashiCorp, Inc.
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
+ /* eslint-disable */
6
+ const { readFileSync } = require('fs');
7
+
8
+ const swcJestConfig = JSON.parse(
9
+ readFileSync(`${__dirname}/.spec.swcrc`, 'utf-8'),
10
+ );
11
+
12
+ swcJestConfig.swcrc = false;
5
13
 
6
14
  module.exports = {
7
- testMatch: ['**/*.test.ts', '**/*.test.tsx'],
8
- "transform": {
9
- "^.+\\.tsx?$": "ts-jest"
15
+ displayName: '@cdktn/provider-generator',
16
+ preset: '../../../jest.preset.js',
17
+ rootDir: '.',
18
+ roots: ['<rootDir>'],
19
+ transform: {
20
+ '^.+\\.[tj]sx?$': ['@swc/jest', swcJestConfig],
10
21
  },
11
- moduleFileExtensions: [
12
- "js",
13
- "ts",
14
- "tsx"
15
- ],
16
- }
22
+ coverageDirectory: 'test-output/jest/coverage',
23
+ };