@fjall/components-infrastructure 0.79.3 → 0.81.2

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 (63) hide show
  1. package/dist/lib/__tests__/setup.js +1 -78
  2. package/dist/lib/app.d.ts +39 -2
  3. package/dist/lib/app.js +85 -4
  4. package/dist/lib/aspects/resourceInventory.d.ts +41 -0
  5. package/dist/lib/aspects/resourceInventory.js +56 -0
  6. package/dist/lib/config/audit.d.ts +18 -0
  7. package/dist/lib/config/audit.js +22 -0
  8. package/dist/lib/config/aws/accountId.js +3 -3
  9. package/dist/lib/config/aws/ecrDefaultImage.js +7 -7
  10. package/dist/lib/config/aws/identityCenter.js +7 -8
  11. package/dist/lib/config/aws/identityCenterGroupMembership.js +6 -6
  12. package/dist/lib/config/aws/ipam.js +3 -3
  13. package/dist/lib/config/aws/ipamPoolId.js +4 -4
  14. package/dist/lib/config/aws/organisation.js +2 -3
  15. package/dist/lib/config/aws/organisationId.js +4 -4
  16. package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
  17. package/dist/lib/patterns/aws/auditRole.js +58 -0
  18. package/dist/lib/patterns/aws/buildkite.js +12 -12
  19. package/dist/lib/patterns/aws/compute.d.ts +32 -13
  20. package/dist/lib/patterns/aws/compute.js +24 -14
  21. package/dist/lib/patterns/aws/database.d.ts +2 -1
  22. package/dist/lib/patterns/aws/database.js +7 -2
  23. package/dist/lib/patterns/aws/hostedZone.js +1 -1
  24. package/dist/lib/patterns/aws/index.d.ts +1 -0
  25. package/dist/lib/patterns/aws/index.js +2 -1
  26. package/dist/lib/patterns/aws/managedAccount.js +3 -4
  27. package/dist/lib/patterns/aws/storage.js +3 -2
  28. package/dist/lib/patterns/aws/subdomainHostedZone.js +2 -2
  29. package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
  30. package/dist/lib/resources/aws/audit/auditRole.js +44 -0
  31. package/dist/lib/resources/aws/backup/backupPlan.js +3 -4
  32. package/dist/lib/resources/aws/backup/backupVault.js +3 -4
  33. package/dist/lib/resources/aws/base/awsStack.js +1 -2
  34. package/dist/lib/resources/aws/compute/ecs.d.ts +65 -11
  35. package/dist/lib/resources/aws/compute/ecs.js +293 -124
  36. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -355
  37. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -335
  38. package/dist/lib/resources/aws/compute/lambda.d.ts +10 -1
  39. package/dist/lib/resources/aws/compute/lambda.js +71 -4
  40. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +1 -180
  41. package/dist/lib/resources/aws/database/database.js +1 -1
  42. package/dist/lib/resources/aws/database/rdsAurora.js +5 -5
  43. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -7
  44. package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
  45. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +2 -2
  46. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -1
  47. package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -1
  48. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -1
  49. package/dist/lib/resources/aws/logging/cloudTrail.js +1 -1
  50. package/dist/lib/resources/aws/monitoring/monitoringRole.js +2 -3
  51. package/dist/lib/resources/aws/networking/ipamPool.js +1 -1
  52. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
  53. package/dist/lib/resources/aws/networking/vpc.js +7 -3
  54. package/dist/lib/resources/aws/secrets/secret.js +1 -1
  55. package/dist/lib/resources/aws/storage/ecr.d.ts +1 -2
  56. package/dist/lib/resources/aws/storage/ecr.js +2 -2
  57. package/dist/lib/resources/aws/utilities/cfnOutput.js +1 -13
  58. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +1 -2
  59. package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
  60. package/dist/lib/resources/aws/utilities/customResource.d.ts +2 -1
  61. package/dist/lib/resources/aws/utilities/customResource.js +1 -1
  62. package/dist/lib/utils/getStackOutput.js +2 -2
  63. package/package.json +6 -5
@@ -120,11 +120,6 @@ function validateComputeProps(props) {
120
120
  * Extracted for clarity and detail parity with database/network patterns.
121
121
  */
122
122
  function validateEcsProps(props) {
123
- // EC2 config validation
124
- if (props.ec2Config && props.capacityProvider !== "EC2") {
125
- console.warn("[Fjall] Warning: 'ec2Config' is ignored when capacityProvider is not 'EC2'. " +
126
- "Set capacityProvider to 'EC2' to use EC2 capacity configuration.");
127
- }
128
123
  // Validate services array exists and is not empty
129
124
  if (!props.services || props.services.length === 0) {
130
125
  throw new Error("At least one service must be specified in 'services' array.");
@@ -164,6 +159,15 @@ function validateEcsProps(props) {
164
159
  `${[...new Set(duplicateContainerNames)].join(", ")}`);
165
160
  }
166
161
  }
162
+ if (service.capacityProvider === "EC2" && !service.ec2Config) {
163
+ throw new Error(`Service '${service.name}' uses EC2 capacity provider but no ec2Config is defined. ` +
164
+ "Provide ec2Config on the service.");
165
+ }
166
+ // Warn if service ec2Config is defined but capacityProvider is not EC2
167
+ if (service.ec2Config && service.capacityProvider !== "EC2") {
168
+ console.warn(`[Fjall] Warning: Service '${service.name}' has ec2Config but capacityProvider is not 'EC2'. ` +
169
+ "The ec2Config will be ignored unless capacityProvider is set to 'EC2'.");
170
+ }
167
171
  }
168
172
  }
169
173
  /**
@@ -232,10 +236,11 @@ class Compute extends constructs_1.Construct {
232
236
  case "lambda":
233
237
  this.addLambdaCompute(props);
234
238
  break;
235
- default:
239
+ default: {
236
240
  // Exhaustiveness check - TypeScript will error if a case is missing
237
241
  const _exhaustive = props;
238
242
  throw new Error(`Unsupported compute type: ${_exhaustive.type}`);
243
+ }
239
244
  }
240
245
  }
241
246
  addEc2Compute(props) {
@@ -254,7 +259,6 @@ class Compute extends constructs_1.Construct {
254
259
  this.connections = this.compute.connections;
255
260
  }
256
261
  addEcsCompute(props) {
257
- const capacityProvider = props.capacityProvider || "FARGATE";
258
262
  // Transform EcsServiceConfig[] to EcsServiceProps[] for EcsCluster
259
263
  const services = props.services.map((service) => {
260
264
  // Build container configurations for this service
@@ -307,7 +311,9 @@ class Compute extends constructs_1.Construct {
307
311
  routing: service.routing,
308
312
  taskRoleInlinePolicies: service.taskRoleInlinePolicies,
309
313
  taskRoleManagedPolicies: service.taskRoleManagedPolicies,
310
- connections: service.connections
314
+ connections: service.connections,
315
+ capacityProvider: service.capacityProvider,
316
+ ec2Config: service.ec2Config
311
317
  };
312
318
  });
313
319
  // Build cluster config
@@ -323,8 +329,6 @@ class Compute extends constructs_1.Construct {
323
329
  clusterName: `${this.id}Cluster`,
324
330
  vpc: props.vpc,
325
331
  ecrRepository: props.ecrRepository || "amazon/amazon-ecs-sample",
326
- capacityProvider,
327
- ec2Config: capacityProvider === "EC2" ? props.ec2Config : undefined,
328
332
  cluster,
329
333
  services
330
334
  };
@@ -366,6 +370,7 @@ class Compute extends constructs_1.Construct {
366
370
  : undefined;
367
371
  const lambdaProps = {
368
372
  code: code,
373
+ vpc: props.vpc,
369
374
  handler,
370
375
  runtime,
371
376
  timeout: props.timeout,
@@ -376,13 +381,18 @@ class Compute extends constructs_1.Construct {
376
381
  enableFunctionUrl,
377
382
  functionUrlAuthType,
378
383
  functionUrlCors,
384
+ scheduleExpression: props.scheduleExpression,
385
+ ephemeralStorageSize: props.ephemeralStorageSize,
386
+ containerSecretsImport: props.containerSecretsImport, // Pass through
379
387
  environment: props.environment
380
388
  };
381
389
  this.compute = new lambda_1.LambdaFunction(this.scope, `${this.id}Lambda`, lambdaProps);
382
- // Lambda functions don't use security groups unless VPC-enabled
383
- // Create empty connections object for interface compatibility
384
- this.connections = new aws_ec2_1.Connections();
390
+ if (props.connections) {
391
+ for (const conn of props.connections) {
392
+ this.compute.connections.allowTo(conn, aws_ec2_1.Port.allTcp());
393
+ }
394
+ }
385
395
  }
386
396
  }
387
397
  exports.Compute = Compute;
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBRUM7QUFFRCxvRUFJQztBQWhIRCxpREFBaUQ7QUFDakQsaURBTTZCO0FBQzdCLHVEQU1nQztBQU9oQywyQ0FBdUM7QUFJdkMseURBS3lDO0FBQ3pDLHlEQUE4RDtBQUM5RCwrREFBb0U7QUF1QnZELFFBQUEsbUJBQW1CLEdBQTJDO0lBQ3pFLEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELG1CQUFtQixFQUFFLElBQUk7UUFDekIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLENBQUM7UUFDZCxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDcEQsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixXQUFXLEVBQUUsS0FBSztLQUNuQjtDQUNGLENBQUM7QUFZVyxRQUFBLDRCQUE0QixHQUdyQztJQUNGLE9BQU8sRUFBRTtRQUNQLFFBQVEsRUFBRSxLQUFLO1FBQ2YsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELEdBQUcsRUFBRTtRQUNILFFBQVEsRUFBRSxLQUFLO1FB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SUFBSSx1QkFBYyxDQUMvQixJQUFJLENBQUMsS0FBSyxFQUNWLEdBQUcsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUNsQixXQUFXLENBQ1osQ0FBQztRQUVGLGdFQUFnRTtRQUNoRSw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHFCQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFoTkQsMEJBZ05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBSZXBvc2l0b3J5SW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgdHlwZSBJQ29ubmVjdGFibGUsXG4gIHR5cGUgSVZwYyxcbiAgdHlwZSBVc2VyRGF0YSxcbiAgdHlwZSBJTWFjaGluZUltYWdlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBIYW5kbGVyLFxuICB0eXBlIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBQb2xpY3lTdGF0ZW1lbnQsXG4gIHR5cGUgUG9saWN5RG9jdW1lbnQsXG4gIHR5cGUgSU1hbmFnZWRQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuaW1wb3J0IEVjc0NsdXN0ZXIsIHtcbiAgdHlwZSBFY3NDbHVzdGVyUHJvcHMsXG4gIFNjYWxpbmdUeXBlLFxuICB0eXBlIEVjc0NhcGFjaXR5UHJvdmlkZXIgYXMgRWNzQ2FwYWNpdHlQcm92aWRlclR5cGUsXG4gIHR5cGUgRG9tYWluQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWNzXCI7XG5pbXBvcnQgeyBFYzJJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvbGFtYmRhXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcblxuZXhwb3J0IHR5cGUgQ29tcHV0ZVR5cGUgPSBcImVjc1wiIHwgXCJlYzJcIiB8IFwibGFtYmRhXCI7XG5leHBvcnQgdHlwZSBFY3NDYXBhY2l0eVByb3ZpZGVyID0gXCJGQVJHQVRFXCIgfCBcIkZBUkdBVEVfU1BPVFwiIHwgXCJFQzJcIjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZvciBlYWNoIGNvbXB1dGUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IHBvcnQgZm9yIHRoZSBjb21wdXRlIHR5cGUuIEVDUzogODAsIEVDMjogMjIsIExhbWJkYTogMCAobm8gcG9ydCkgKi9cbiAgZGVmYXVsdFBvcnQ6IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgc2NhbGluZyBsaW1pdHMgKi9cbiAgZGVmYXVsdFNjYWxpbmc6IHtcbiAgICBtaW5DYXBhY2l0eTogbnVtYmVyO1xuICAgIG1heENhcGFjaXR5OiBudW1iZXI7XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHN1cHBvcnRzIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zICovXG4gIHN1cHBvcnRzQ29ubmVjdGlvbnM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHJlcXVpcmVzIGEgVlBDICovXG4gIHJlcXVpcmVzVnBjOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ09NUFVURV9UWVBFX0NPTkZJRzogUmVjb3JkPENvbXB1dGVUeXBlLCBDb21wdXRlVHlwZUNvbmZpZz4gPSB7XG4gIGVjczoge1xuICAgIGRlZmF1bHRQb3J0OiA4MCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDUgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGVjMjoge1xuICAgIGRlZmF1bHRQb3J0OiAyMixcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDMgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGxhbWJkYToge1xuICAgIGRlZmF1bHRQb3J0OiAwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAwLCBtYXhDYXBhY2l0eTogMTAwIH0sXG4gICAgc3VwcG9ydHNDb25uZWN0aW9uczogZmFsc2UsXG4gICAgcmVxdWlyZXNWcGM6IGZhbHNlXG4gIH1cbn07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgRUNTIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdGhpcyB1c2VzIFNwb3QgcHJpY2luZyAqL1xuICB1c2VzU3BvdDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBydW5zIG9uIEVDMiBpbnN0YW5jZXMgKHZzIHNlcnZlcmxlc3MgRmFyZ2F0ZSkgKi9cbiAgdXNlc0VjMkluc3RhbmNlczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEVDU19DQVBBQ0lUWV9QUk9WSURFUl9DT05GSUc6IFJlY29yZDxcbiAgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZ1xuPiA9IHtcbiAgRkFSR0FURToge1xuICAgIHVzZXNTcG90OiBmYWxzZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBGQVJHQVRFX1NQT1Q6IHtcbiAgICB1c2VzU3BvdDogdHJ1ZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBFQzI6IHtcbiAgICB1c2VzU3BvdDogZmFsc2UsXG4gICAgdXNlc0VjMkluc3RhbmNlczogdHJ1ZVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGVDb25maWcodHlwZTogQ29tcHV0ZVR5cGUpOiBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIHJldHVybiBDT01QVVRFX1RZUEVfQ09ORklHW3R5cGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyhcbiAgcHJvdmlkZXI6IEVjc0NhcGFjaXR5UHJvdmlkZXJcbik6IEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWcge1xuICByZXR1cm4gRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJR1twcm92aWRlcl07XG59XG5cbi8vIFJlLWV4cG9ydCBMYW1iZGEgdHlwZXMgZnJvbSBDREsgZm9yIHVzZXIgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIEh0dHBNZXRob2QsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgY29udGFpbmVyIGluIGFuIEVDUyB0YXNrLlxuICpcbiAqIEZvciBzaW5nbGUtY29udGFpbmVyIHNlcnZpY2VzLCBgbmFtZWAgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGAke3NlcnZpY2VOYW1lfUNvbnRhaW5lcmAuXG4gKiBGb3IgbXVsdGktY29udGFpbmVyIHRhc2tzLCB0aGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBgcG9ydGAgaXMgdGhlICoqcHJpbWFyeSBjb250YWluZXIqKlxuICogdGhhdCByZWNlaXZlcyBsb2FkIGJhbGFuY2VyIHRyYWZmaWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBjb250YWluZXIgKG5hbWUgYXV0by1nZW5lcmF0ZWQpXG4gKiBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLWNvbnRhaW5lciB3aXRoIHNpZGVjYXJzXG4gKiBjb250YWluZXJzOiBbXG4gKiAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWFyeSAtIHJlY2VpdmVzIEFMQiB0cmFmZmljXG4gKiAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9ICAgICAvLyBTaWRlY2FyIC0gbW9uaXRvcmluZ1xuICogXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbnRhaW5lckNvbmZpZyB7XG4gIC8qKiBDb250YWluZXIgbmFtZS4gT3B0aW9uYWwgZm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UuIE9wdGlvbnM6XG4gICAqIC0gT21pdDogVXNlcyBhcHAncyBkZWZhdWx0IEVDUiByZXBvc2l0b3J5IChwcmltYXJ5IGNvbnRhaW5lciBvbmx5KVxuICAgKiAtIHN0cmluZzogRUNSIHJlcG9zaXRvcnkgbmFtZSBvciBwdWJsaWMgaW1hZ2UgVVJMXG4gICAqIC0gUmVwb3NpdG9yeTogQ0RLIEVDUiBSZXBvc2l0b3J5IGNvbnN0cnVjdFxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmcgfCBSZXBvc2l0b3J5O1xuICAvKipcbiAgICogUG9ydCB0aGUgY29udGFpbmVyIGxpc3RlbnMgb24uXG4gICAqIFRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnQgYmVjb21lcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqXG4gICAqIGFuZCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFNlY3JldHMgaW1wb3J0ZWQgZnJvbSBvdGhlciByZXNvdXJjZXMgKi9cbiAgc2VjcmV0c0ltcG9ydD86IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD47XG4gIC8qKiBDb21tYW5kIHRvIHJ1biBpbiB0aGUgY29udGFpbmVyICovXG4gIGNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgLyoqIEVudHJ5IHBvaW50IGZvciB0aGUgY29udGFpbmVyICovXG4gIGVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjb250YWluZXIgaXMgZXNzZW50aWFsLlxuICAgKiBJZiBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHN0b3BzLCBhbGwgY29udGFpbmVycyBpbiB0aGUgdGFzayBzdG9wLlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICBlc3NlbnRpYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogSGVhbHRoIGNoZWNrIGNvbmZpZ3VyYXRpb24uXG4gICAqIERlZmF1bHQ6IEZvciBwcmltYXJ5IGNvbnRhaW5lciB3aXRoIHBvcnQsIHVzZXMgY3VybCBoZWFsdGggY2hlY2suXG4gICAqL1xuICBoZWFsdGhDaGVjaz86IHtcbiAgICBjb21tYW5kOiBzdHJpbmdbXTtcbiAgICBpbnRlcnZhbD86IG51bWJlcjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHJldHJpZXM/OiBudW1iZXI7XG4gICAgc3RhcnRQZXJpb2Q/OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogRUNTIHNjYWxpbmcgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICogLSBgeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDEwIH1gOiBjdXN0b20gc2NhbGluZ1xuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzU2NhbGluZ0NvbmZpZyB7XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgc2NhbGluZ1R5cGU/OiBTY2FsaW5nVHlwZTtcbn1cblxuLyoqXG4gKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgRUNTIEVDMi1iYWNrZWQgY2x1c3RlcnMuXG4gKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ2FwYWNpdHlDb25maWcge1xuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIC8qKiBBTUkgaGFyZHdhcmUgdHlwZS4gRGVmYXVsdDogXCJBUk1cIiAoR3Jhdml0b24gLSBiZXR0ZXIgY29zdC9wZXJmb3JtYW5jZSkgKi9cbiAgYW1pSGFyZHdhcmVUeXBlPzogXCJBUk1cIiB8IFwiU1RBTkRBUkRcIjtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMyAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIEVDMiBpbnN0YW5jZXMuIERlZmF1bHQ6IDIgKGZvciBhdmFpbGFiaWxpdHkpICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcbiAgLyoqIE1lbW9yeSBsaW1pdCBpbiBNaUIgZm9yIHRoZSBjb250YWluZXIuIERlZmF1bHQ6IDEwMjQgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2x1c3Rlci1sZXZlbCBjb25maWd1cmF0aW9uLlxuICogQ29udHJvbHMgdGhlIHNoYXJlZCBBTEIgZm9yIGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2x1c3RlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBEb21haW4gZm9yIEhUVFBTIGFjY2Vzcy5cbiAgICogLSBPbWl0OiBBTEIgY3JlYXRlZCB3aXRoIGRlZmF1bHQgRE5TICgqLmVsYi5hbWF6b25hd3MuY29tKVxuICAgKiAtIFNwZWNpZmllZDogQ3JlYXRlcyBBQ00gY2VydGlmaWNhdGUgKyBSb3V0ZTUzIEROUyBBIHJlY29yZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdCBvciBcInB1YmxpY1wiOiBJbnRlcm5ldC1mYWNpbmcgQUxCIChkZWZhdWx0KVxuICAgKiAtIFwiaW50ZXJuYWxcIjogVlBDLW9ubHkgQUxCXG4gICAqIC0gZmFsc2U6IE5vIEFMQiAoZm9yIHdvcmtlcnMvYmFja2dyb3VuZCBwcm9jZXNzb3JzKVxuICAgKi9cbiAgbG9hZEJhbGFuY2VyPzogZmFsc2UgfCBcInB1YmxpY1wiIHwgXCJpbnRlcm5hbFwiO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZGlyZWN0IEVDMiBhY2Nlc3Mgd2l0aG91dCBBTEIuXG4gICAqIFVzZXMgaG9zdCBuZXR3b3JrIG1vZGUgZm9yIHByZWRpY3RhYmxlIHBvcnRzLlxuICAgKiBBY2Nlc3MgdmlhIEVDMiBwdWJsaWMgSVAgYXQgY29udGFpbmVyIHBvcnQuXG4gICAqL1xuICBkaXJlY3RBY2Nlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZHZhbmNlZCBkb21haW4gY29uZmlndXJhdGlvbiBmb3Igcm91dGluZyBwb2xpY2llcyAobGF0ZW5jeSwgd2VpZ2h0ZWQsIGdlbykuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGRvbWFpbiBpcyBzcGVjaWZpZWQuXG4gICAqIEFsbG93cyBmb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnRzIHdpdGggYWR2YW5jZWQgRE5TIHJvdXRpbmcuXG4gICAqL1xuICBkb21haW5Db25maWc/OiBEb21haW5Db25maWc7XG59XG5cbi8qKlxuICogUm91dGluZyBjb25maWd1cmF0aW9uIGZvciBwYXRoL2hvc3QtYmFzZWQgcm91dGluZyBvbiB0aGUgQUxCLlxuICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICogT3B0aW9uYWwgZm9yIHNpbmdsZSBzZXJ2aWNlIChnZXRzIGFsbCB0cmFmZmljIGF1dG9tYXRpY2FsbHkpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1JvdXRpbmdDb25maWcge1xuICAvKipcbiAgICogUGF0aCBwYXR0ZXJuIGZvciByb3V0aW5nIChlLmcuLCBcIi9hcGkvKlwiLCBcIi91c2Vycy8qXCIpLlxuICAgKiBVc2VzIEFMQiBwYXRoLWJhc2VkIHJvdXRpbmcuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0IGhlYWRlciBmb3Igcm91dGluZyAoZS5nLiwgXCJhcGkuZXhhbXBsZS5jb21cIikuXG4gICAqIFVzZXMgQUxCIGhvc3QtYmFzZWQgcm91dGluZy5cbiAgICovXG4gIGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaW9yaXR5IGZvciB0aGlzIHJvdXRpbmcgcnVsZSAoMS01MDAwMCkuXG4gICAqIExvd2VyIG51bWJlciA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICogQXV0by1hc3NpZ25lZCBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBwYXRoIGZvciB0aGlzIHNlcnZpY2UncyB0YXJnZXQgZ3JvdXAuXG4gICAqIERlZmF1bHQ6IFwiL1wiXG4gICAqL1xuICBoZWFsdGhDaGVja1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBzZXJ2aWNlIGluIGFuIEVDUyBjbHVzdGVyLlxuICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIHNjYWxpbmcgY29uZmlnLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW1wbGUgc2VydmljZVxuICogeyBuYW1lOiBcImFwaVwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VydmljZSB3aXRoIHJvdXRpbmcgKGZvciBtdWx0aS1zZXJ2aWNlIGNsdXN0ZXJzKVxuICogeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiLCBwcmlvcml0eTogMTAwIH0gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXJ2aWNlIHdpdGggc2lkZWNhcnNcbiAqIHtcbiAqICAgbmFtZTogXCJhcGlcIixcbiAqICAgY29udGFpbmVyczogW1xuICogICAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LFxuICogICAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9XG4gKiAgIF1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSAodW5pcXVlIHdpdGhpbiBjbHVzdGVyKSAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSBmb3IgdGhpcyBzZXJ2aWNlIChhcHBsaWVzIHRvIGZpcnN0IGNvbnRhaW5lciB3aXRob3V0IGV4cGxpY2l0IGltYWdlKS5cbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnlcbiAgICogLSBzdHJpbmc6IEVDUiByZXBvc2l0b3J5IG5hbWUgb3IgcHVibGljIGltYWdlIFVSTFxuICAgKiAtIFJlcG9zaXRvcnk6IENESyBFQ1IgUmVwb3NpdG9yeSBjb25zdHJ1Y3RcbiAgICovXG4gIGltYWdlPzogc3RyaW5nIHwgUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGNvbmZpZ3VyYXRpb24ocykgZm9yIHRoaXMgc2VydmljZS5cbiAgICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGNvbnRhaW5lciBuYW1lIGlzIG9wdGlvbmFsIGFuZCBhdXRvLWdlbmVyYXRlZC5cbiAgICogRm9yIG11bHRpLWNvbnRhaW5lciBzZXJ2aWNlcywgdGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBpcyB0aGUgcHJpbWFyeSBjb250YWluZXIuXG4gICAqL1xuICBjb250YWluZXJzPzogRWNzQ29udGFpbmVyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcgcnVsZXMgZm9yIHRoaXMgc2VydmljZSBvbiB0aGUgY2x1c3RlcidzIEFMQi5cbiAgICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICAgKiBPcHRpb25hbCBmb3Igc2luZ2xlIHNlcnZpY2UgKGdldHMgLyogYXV0b21hdGljYWxseSkuXG4gICAqL1xuICByb3V0aW5nPzogRWNzUm91dGluZ0NvbmZpZztcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2NhbGluZyBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGZhbHNlOiBkaXNhYmxlZFxuICAgKi9cbiAgc2NhbGluZz86IEVjc1NjYWxpbmdDb25maWcgfCBmYWxzZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyB0aGlzIHNlcnZpY2UncyBpbWFnZS5cbiAgICogTWV0YWRhdGEgZm9yIENMSSBidWlsZCBwcm9jZXNzLCBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGlubGluZSBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqIFVzZSBmb3Igc2VydmljZS1zcGVjaWZpYyBBV1MgcGVybWlzc2lvbnMgKFMzLCBEeW5hbW9EQiwgU1FTLCBldGMuKS5cbiAgICovXG4gIHRhc2tSb2xlSW5saW5lUG9saWNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBQb2xpY3lEb2N1bWVudD47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWFuYWdlZCBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llcz86IElNYW5hZ2VkUG9saWN5W107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIHNlcnZpY2UgbmVlZHMgdG8gY29ubmVjdCB0byAoZS5nLiwgZGF0YWJhc2VzKS5cbiAgICogQ3JlYXRlcyBzZWN1cml0eSBncm91cCBydWxlcyB0byBhbGxvdyB0cmFmZmljIGZyb20gdGhpcyBzZXJ2aWNlLlxuICAgKiBGb2xsb3dzIGxlYXN0LXByaXZpbGVnZSAtIG9ubHkgdGhpcyBzZXJ2aWNlIGdldHMgYWNjZXNzLCBub3QgYWxsIHNlcnZpY2VzIGluIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPbmx5IGJhY2tlbmQgc2VydmljZSBjb25uZWN0cyB0byBkYXRhYmFzZVxuICAgKiBzZXJ2aWNlczogW1xuICAgKiAgIHsgbmFtZTogXCJmcm9udGVuZFwiIH0sXG4gICAqICAgeyBuYW1lOiBcImJhY2tlbmRcIiwgY29ubmVjdGlvbnM6IFthcHBEYXRhYmFzZV0gfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IElDb25uZWN0YWJsZVtdO1xufVxuXG4vKipcbiAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbiBmb3IgRUMyIGluc3RhbmNlcy5cbiAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBhdXRvLWdlbmVyYXRlZCBrZXlcbiAqIC0gYHsga2V5TmFtZTogXCJteS1rZXlcIiB9YDogZW5hYmxlZCB3aXRoIGV4aXN0aW5nIGtleVxuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NoQ29uZmlnIHtcbiAgLyoqIFNTSCBrZXkgcGFpciBuYW1lICovXG4gIGtleU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIENJRFIgYmxvY2tzIGZvciBTU0ggYWNjZXNzICovXG4gIGFsbG93ZWRDaWRycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICogLSBgeyBhdXRoVHlwZTogXCJOT05FXCIsIGNvcnM6IHsuLi59IH1gOiBwdWJsaWMgd2l0aCBDT1JTXG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblVybENvbmZpZyB7XG4gIC8qKiBBdXRoZW50aWNhdGlvbiB0eXBlLiBEZWZhdWx0OiBBV1NfSUFNICovXG4gIGF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgLyoqIENPUlMgY29uZmlndXJhdGlvbiAqL1xuICBjb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcbn1cblxuaW50ZXJmYWNlIEJhc2VDb21wdXRlUHJvcHMge1xuICB2cGM/OiBJVnBjO1xufVxuXG4vKipcbiAqIEVDUyBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXG4gKiBDcmVhdGVzIGFuIEVDUyBjbHVzdGVyIHdpdGggb25lIG9yIG1vcmUgc2VydmljZXMgc2hhcmluZyBhIGxvYWQgYmFsYW5jZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBzZXJ2aWNlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldlYkFwcFwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwcC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1dXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLXNlcnZpY2UgY2x1c3RlciB3aXRoIHJvdXRpbmdcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiQXBpQ2x1c3RlclwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwaS5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbXG4gKiAgICAgeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiIH0gfSxcbiAqICAgICB7IG5hbWU6IFwib3JkZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDEgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvb3JkZXJzLypcIiB9IH1cbiAqICAgXVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbnRlcm5hbCB3b3JrZXJzIChubyBBTEIpXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldvcmtlcnNcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwicHJvY2Vzc29yXCIgfSwgeyBuYW1lOiBcImVtYWlsZXJcIiB9XVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbXB1dGVQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImVjc1wiO1xuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIENvbnRyb2xzIHRoZSBzaGFyZWQgQUxCIGZvciBhbGwgc2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgKiAtIGB7IGRvbWFpbjogXCIuLi5cIiB9YDogQUxCIHdpdGggSFRUUFMgKyBETlNcbiAgICogLSBgeyBsb2FkQmFsYW5jZXI6IGZhbHNlIH1gOiBObyBBTEIgKGludGVybmFsIHdvcmtlcnMpXG4gICAqL1xuICBjbHVzdGVyPzogRWNzQ2x1c3RlckNvbmZpZztcblxuICAvKipcbiAgICogU2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZywgYW5kIHRhcmdldCBncm91cC5cbiAgICogQWxsIHNlcnZpY2VzIHNoYXJlIHRoZSBjbHVzdGVyJ3MgQUxCICh1bmxlc3MgZGlzYWJsZWQpLlxuICAgKi9cbiAgc2VydmljZXM6IEVjc1NlcnZpY2VDb25maWdbXTtcblxuICAvKipcbiAgICogQ2FwYWNpdHkgcHJvdmlkZXIgZGV0ZXJtaW5lcyBpbmZyYXN0cnVjdHVyZSB0eXBlLlxuICAgKiAtIFwiRkFSR0FURVwiOiBTZXJ2ZXJsZXNzIGNvbnRhaW5lcnMgKGRlZmF1bHQpXG4gICAqIC0gXCJGQVJHQVRFX1NQT1RcIjogU2VydmVybGVzcyB3aXRoIFNwb3QgcHJpY2luZ1xuICAgKiAtIFwiRUMyXCI6IEVDMi1iYWNrZWQgY29udGFpbmVyc1xuICAgKi9cbiAgY2FwYWNpdHlQcm92aWRlcj86IEVjc0NhcGFjaXR5UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEVDMiBjYXBhY2l0eSBjb25maWd1cmF0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gICAqL1xuICBlYzJDb25maWc/OiBFYzJDYXBhY2l0eUNvbmZpZztcblxuICAvKipcbiAgICogRUNSIHJlcG9zaXRvcnkgZm9yIGFsbCBzZXJ2aWNlcyAoZGVmYXVsdCBpbWFnZSkuXG4gICAqIEluZGl2aWR1YWwgc2VydmljZXMgY2FuIG92ZXJyaWRlIHdpdGggdGhlaXIgb3duIGBpbWFnZWAgcHJvcGVydHkuXG4gICAqL1xuICBlY3JSZXBvc2l0b3J5PzogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyBjdXN0b20gaW1hZ2UuXG4gICAqIE5vdGU6IFRoaXMgaXMgbWV0YWRhdGEgZm9yIHRoZSBDTEkgYnVpbGQgcHJvY2VzcyxcbiAgICogbm90IHVzZWQgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gICAqL1xuICBkb2NrZXJmaWxlUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFYzJDb21wdXRlUHJvcHMgZXh0ZW5kcyBCYXNlQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJlYzJcIjtcblxuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbi5cbiAgICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAgICogLSBge31gOiBlbmFibGVkIHdpdGggZGVmYXVsdHNcbiAgICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAqL1xuICBzc2g/OiBTc2hDb25maWcgfCBmYWxzZTtcbiAgLyoqIFVzZXIgZGF0YSBzY3JpcHQgKi9cbiAgdXNlckRhdGE/OiBVc2VyRGF0YTtcbiAgLyoqIE1hY2hpbmUgaW1hZ2UgKEFNSSkgKi9cbiAgbWFjaGluZUltYWdlPzogSU1hY2hpbmVJbWFnZTtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNlIExhbWJkYSBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBib3RoIGNvbnRhaW5lciBhbmQgY29kZSBkZXBsb3ltZW50cy5cbiAqL1xuaW50ZXJmYWNlIEJhc2VMYW1iZGFQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImxhbWJkYVwiO1xuICAvKiogVGltZW91dCBpbiBzZWNvbmRzLiBEZWZhdWx0OiAzICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBNZW1vcnkgc2l6ZSBpbiBNQi4gRGVmYXVsdDogMTI4ICovXG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgZnVuY3Rpb24gZGVzY3JpcHRpb24gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBkZXNjcmlwdGlvbiAqL1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJbmxpbmUgSUFNIHBvbGljeSBzdGF0ZW1lbnRzICovXG4gIGlubGluZVBvbGljeT86IFBvbGljeVN0YXRlbWVudFtdO1xuICAvKipcbiAgICogRnVuY3Rpb24gVVJMIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gICAqIC0gYHsgYXV0aFR5cGU6IFwiTk9ORVwiIH1gOiBwdWJsaWMgYWNjZXNzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgZnVuY3Rpb25Vcmw/OiBGdW5jdGlvblVybENvbmZpZyB8IGZhbHNlO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDb250YWluZXItYmFzZWQgTGFtYmRhIHVzaW5nIEVDUiBpbWFnZS5cbiAqXG4gKiBVc2VzIERvY2tlciBpbWFnZSBmcm9tIEVDUiByZXBvc2l0b3J5LiBIYW5kbGVyIGFuZCBydW50aW1lIGFyZVxuICogYXV0b21hdGljYWxseSBzZXQgdG8gRlJPTV9JTUFHRS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJJbWFnZUxhbWJkYVwiLCB7XG4gKiAgIHR5cGU6IFwibGFtYmRhXCIsXG4gKiAgIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsXG4gKiAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvbnRhaW5lci1iYXNlZCBkZXBsb3ltZW50IHVzaW5nIEVDUiBpbWFnZSAqL1xuICBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiO1xuICAvKiogRUNSIHJlcG9zaXRvcnkgY29udGFpbmluZyB0aGUgTGFtYmRhIGNvbnRhaW5lciBpbWFnZSAqL1xuICBlY3JSZXBvc2l0b3J5OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlO1xufVxuXG4vKipcbiAqIENvZGUtYmFzZWQgTGFtYmRhIHVzaW5nIGlubGluZSBjb2RlIG9yIFMzLlxuICpcbiAqIFVzZXMgdHJhZGl0aW9uYWwgTGFtYmRhIGRlcGxveW1lbnQgd2l0aCBjb2RlLCBoYW5kbGVyLCBhbmQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJDb2RlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gKiAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIiksXG4gKiAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICogICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvZGUtYmFzZWQgZGVwbG95bWVudCAqL1xuICBkZXBsb3ltZW50OiBcImNvZGVcIjtcbiAgLyoqIExhbWJkYSBjb2RlIChmcm9tIGFzc2V0LCBTMywgb3IgaW5saW5lKSAqL1xuICBjb2RlOiBDb2RlO1xuICAvKiogSGFuZGxlciBmdW5jdGlvbi4gRGVmYXVsdDogXCJpbmRleC5oYW5kbGVyXCIgKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgLyoqIExhbWJkYSBydW50aW1lLiBEZWZhdWx0OiBOT0RFSlNfMThfWCAqL1xuICBydW50aW1lPzogUnVudGltZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgY29tcHV0ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gZW5zdXJpbmcgdHlwZS1zYWZlIExhbWJkYSBjb25maWd1cmF0aW9uOlxuICogLSBgZGVwbG95bWVudDogXCJjb250YWluZXJcImAgcmVxdWlyZXMgYGVjclJlcG9zaXRvcnlgXG4gKiAtIGBkZXBsb3ltZW50OiBcImNvZGVcImAgcmVxdWlyZXMgYGNvZGVgIGFuZCBhbGxvd3MgYGhhbmRsZXJgL2BydW50aW1lYFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250YWluZXItYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsIGVjclJlcG9zaXRvcnk6IGVjciB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvZGUtYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29kZVwiLCBjb2RlOiBDb2RlLmZyb21Bc3NldChcIi4vbGFtYmRhXCIpIH1cbiAqL1xuZXhwb3J0IHR5cGUgTGFtYmRhQ29tcHV0ZVByb3BzID0gQ29udGFpbmVyTGFtYmRhUHJvcHMgfCBDb2RlTGFtYmRhUHJvcHM7XG5cbmV4cG9ydCB0eXBlIElDb21wdXRlUHJvcHMgPVxuICB8IEVjc0NvbXB1dGVQcm9wc1xuICB8IEVjMkNvbXB1dGVQcm9wc1xuICB8IExhbWJkYUNvbXB1dGVQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29tcHV0ZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wczogSUNvbXB1dGVQcm9wcyk6IHZvaWQge1xuICBjb25zdCBwcm9wc0FueSA9IHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gRUNTLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUVDUyBjb21wdXRlXG4gIGlmIChwcm9wcy50eXBlICE9PSBcImVjc1wiKSB7XG4gICAgaWYgKFxuICAgICAgXCJjYXBhY2l0eVByb3ZpZGVyXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmNhcGFjaXR5UHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnY2FwYWNpdHlQcm92aWRlcicgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIkNhcGFjaXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJlYzJDb25maWdcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5lYzJDb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZWMyQ29uZmlnJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiRUMyIGNhcGFjaXR5IGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJzZXJ2aWNlc1wiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnNlcnZpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3NlcnZpY2VzJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU2VydmljZXMgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gRUNTIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImNsdXN0ZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5jbHVzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2NsdXN0ZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJDbHVzdGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhbWJkYS1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1MYW1iZGEgY29tcHV0ZVxuICBpZiAocHJvcHMudHlwZSAhPT0gXCJsYW1iZGFcIikge1xuICAgIGlmIChcImZ1bmN0aW9uVXJsXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkuZnVuY3Rpb25VcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZnVuY3Rpb25VcmwnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJGdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gTGFtYmRhIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImhhbmRsZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5oYW5kbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2hhbmRsZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJIYW5kbGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIExhbWJkYSBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJydW50aW1lXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkucnVudGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdydW50aW1lJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiUnVudGltZSBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBMYW1iZGEgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBFQzItc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUMyIGNvbXB1dGVcbiAgaWYgKHByb3BzLnR5cGUgIT09IFwiZWMyXCIpIHtcbiAgICBpZiAoXCJzc2hcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5zc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnc3NoJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU1NIIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJ1c2VyRGF0YVwiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3VzZXJEYXRhJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiVXNlciBkYXRhIG9ubHkgYXBwbGllcyB0byBFQzIgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwibWFjaGluZUltYWdlXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkubWFjaGluZUltYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ21hY2hpbmVJbWFnZScgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIk1hY2hpbmUgaW1hZ2Ugb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVDUy1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gIGlmIChwcm9wcy50eXBlID09PSBcImVjc1wiKSB7XG4gICAgdmFsaWRhdGVFY3NQcm9wcyhwcm9wcyBhcyBFY3NDb21wdXRlUHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIEVDUy1zcGVjaWZpYyBwcm9wcy5cbiAqIEV4dHJhY3RlZCBmb3IgY2xhcml0eSBhbmQgZGV0YWlsIHBhcml0eSB3aXRoIGRhdGFiYXNlL25ldHdvcmsgcGF0dGVybnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRWNzUHJvcHMocHJvcHM6IEVjc0NvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBFQzIgY29uZmlnIHZhbGlkYXRpb25cbiAgaWYgKHByb3BzLmVjMkNvbmZpZyAmJiBwcm9wcy5jYXBhY2l0eVByb3ZpZGVyICE9PSBcIkVDMlwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbRmphbGxdIFdhcm5pbmc6ICdlYzJDb25maWcnIGlzIGlnbm9yZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIG5vdCAnRUMyJy4gXCIgK1xuICAgICAgICBcIlNldCBjYXBhY2l0eVByb3ZpZGVyIHRvICdFQzInIHRvIHVzZSBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbi5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzZXJ2aWNlcyBhcnJheSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxuICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gJ3NlcnZpY2VzJyBhcnJheS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1bmlxdWUgc2VydmljZSBuYW1lc1xuICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gc2VydmljZU5hbWVzLmZpbHRlcihcbiAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICApO1xuICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHNlcnZpY2UgbmFtZSBmb3JtYXRcbiAgY29uc3QgaW52YWxpZE5hbWVzID0gcHJvcHMuc2VydmljZXMuZmlsdGVyKFxuICAgIChzKSA9PiAhL15bYS16QS1aXVthLXpBLVowLTktXSokLy50ZXN0KHMubmFtZSlcbiAgKTtcbiAgaWYgKGludmFsaWROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2VydmljZSBuYW1lczogJHtpbnZhbGlkTmFtZXMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICBcIlNlcnZpY2UgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgcy5jb250YWluZXJzPy5zb21lKChjKSA9PiBjLnBvcnQpXG4gICk7XG5cbiAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcihcbiAgICAgIChzKSA9PiAhcy5yb3V0aW5nPy5wYXRoICYmICFzLnJvdXRpbmc/Lmhvc3RcbiAgICApO1xuICAgIGlmIChtaXNzaW5nUm91dGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZXJ2aWNlcyB3aXRoIHBvcnRzIHJlcXVpcmUgcm91dGluZyBjb25maWcgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlczogYCArXG4gICAgICAgICAgYCR7bWlzc2luZ1JvdXRpbmcubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgIFwiQWRkIHJvdXRpbmc6IHsgcGF0aDogJy8uLi4nIH0gb3Igcm91dGluZzogeyBob3N0OiAnLi4uJyB9IHRvIGVhY2ggc2VydmljZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBlYWNoIHNlcnZpY2UncyBjb250YWluZXJzXG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgIGlmIChzZXJ2aWNlLmNvbnRhaW5lcnMgJiYgc2VydmljZS5jb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzIHdpdGhpbiBzZXJ2aWNlIChvbmx5IG5hbWVkIGNvbnRhaW5lcnMpXG4gICAgICBjb25zdCBjb250YWluZXJOYW1lcyA9IHNlcnZpY2UuY29udGFpbmVyc1xuICAgICAgICAuZmlsdGVyKChjKSA9PiBjLm5hbWUpXG4gICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVDb250YWluZXJOYW1lcyA9IGNvbnRhaW5lck5hbWVzLmZpbHRlcihcbiAgICAgICAgKG5hbWUsIGluZGV4KSA9PiBjb250YWluZXJOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChkdXBsaWNhdGVDb250YWluZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogRHVwbGljYXRlIGNvbnRhaW5lciBuYW1lczogYCArXG4gICAgICAgICAgICBgJHtbLi4ubmV3IFNldChkdXBsaWNhdGVDb250YWluZXJOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgY29tcHV0ZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBzZXJ2aWNlIGNsdXN0ZXJcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktc2VydmljZSBjbHVzdGVyIHdpdGggcm91dGluZ1xuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBpLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdvcmtlciBjbHVzdGVyIChubyBBTEIpXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldvcmtlcnNcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwicHJvY2Vzc29yXCIsIGNvbnRhaW5lcnM6IFt7IGNvbW1hbmQ6IFtcIm5vZGVcIiwgXCJ3b3JrZXIuanNcIl0gfV0gfVxuICogICBdXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBDb21wdXRlID0+IHtcbiAgICAgIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzKTtcblxuICAgICAgY29uc3QgY29tcHV0ZVByb3BzOiBJQ29tcHV0ZVByb3BzID0ge1xuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiBhcHAuZ2V0VnBjKCksXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbmV3IENvbXB1dGUoc2NvcGUsIGlkLCBjb21wdXRlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXB1dGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGNvbXB1dGU6IEVjc0NsdXN0ZXIgfCBFYzJJbnN0YW5jZSB8IExhbWJkYUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgdGhpcy5hZGRDb21wdXRlKHByb3BzKTtcbiAgfVxuXG4gIGFkZENvbXB1dGUocHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJlY3NcIjpcbiAgICAgICAgdGhpcy5hZGRFY3NDb21wdXRlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZWMyXCI6XG4gICAgICAgIHRoaXMuYWRkRWMyQ29tcHV0ZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICB0aGlzLmFkZExhbWJkYUNvbXB1dGUocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGNoZWNrIC0gVHlwZVNjcmlwdCB3aWxsIGVycm9yIGlmIGEgY2FzZSBpcyBtaXNzaW5nXG4gICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGNvbXB1dGUgdHlwZTogJHsoX2V4aGF1c3RpdmUgYXMgSUNvbXB1dGVQcm9wcykudHlwZX1gXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFYzJDb21wdXRlKHByb3BzOiBFYzJDb21wdXRlUHJvcHMpIHtcbiAgICBjb25zdCBlbmFibGVTU0ggPSBwcm9wcy5zc2ggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5zc2ggIT09IGZhbHNlO1xuXG4gICAgY29uc3QgZWMyUHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5pZH1TZXJ2aWNlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlIHx8IFwidDMubWljcm9cIixcbiAgICAgIGVuYWJsZVNTSCxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIG1hY2hpbmVJbWFnZTogcHJvcHMubWFjaGluZUltYWdlLFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5IHx8IDEsXG4gICAgICBtYXhDYXBhY2l0eTogcHJvcHMubWF4Q2FwYWNpdHkgfHwgMSxcbiAgICAgIHZwYzogcHJvcHMudnBjXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBFYzJJbnN0YW5jZSh0aGlzLnNjb3BlLCBgJHt0aGlzLmlkfUVjMmAsIGVjMlByb3BzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFY3NDb21wdXRlKHByb3BzOiBFY3NDb21wdXRlUHJvcHMpIHtcbiAgICBjb25zdCBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyVHlwZSA9XG4gICAgICBwcm9wcy5jYXBhY2l0eVByb3ZpZGVyIHx8IFwiRkFSR0FURVwiO1xuXG4gICAgLy8gVHJhbnNmb3JtIEVjc1NlcnZpY2VDb25maWdbXSB0byBFY3NTZXJ2aWNlUHJvcHNbXSBmb3IgRWNzQ2x1c3RlclxuICAgIGNvbnN0IHNlcnZpY2VzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXSA9IHByb3BzLnNlcnZpY2VzLm1hcChcbiAgICAgIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIC8vIEJ1aWxkIGNvbnRhaW5lciBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzZXJ2aWNlXG4gICAgICAgIGxldCBjb250YWluZXJzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXVtudW1iZXJdW1wiY29udGFpbmVyc1wiXTtcblxuICAgICAgICBpZiAoc2VydmljZS5jb250YWluZXJzICYmIHNlcnZpY2UuY29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gTWFwIGNvbnRhaW5lcnMsIGF1dG8tZ2VuZXJhdGluZyBuYW1lcyBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgICBjb250YWluZXJzID0gc2VydmljZS5jb250YWluZXJzLm1hcCgoYywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBjLm5hbWUgfHwgYCR7c2VydmljZS5uYW1lfUNvbnRhaW5lciR7aW5kZXggPiAwID8gaW5kZXggOiBcIlwifWAsXG4gICAgICAgICAgICBpbWFnZTogYy5pbWFnZSxcbiAgICAgICAgICAgIHBvcnQ6IGMucG9ydCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBjLmVudmlyb25tZW50LFxuICAgICAgICAgICAgc2VjcmV0c0ltcG9ydDogYy5zZWNyZXRzSW1wb3J0LFxuICAgICAgICAgICAgY29tbWFuZDogYy5jb21tYW5kLFxuICAgICAgICAgICAgZW50cnlQb2ludDogYy5lbnRyeVBvaW50LFxuICAgICAgICAgICAgZXNzZW50aWFsOiBjLmVzc2VudGlhbCxcbiAgICAgICAgICAgIGhlYWx0aENoZWNrOiBjLmhlYWx0aENoZWNrXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERlZmF1bHQgY29udGFpbmVyIChubyBwb3J0ID0gd29ya2VyKVxuICAgICAgICAgIGNvbnRhaW5lcnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX1Db250YWluZXJgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBzY2FsaW5nIGNvbmZpZ1xuICAgICAgICBsZXQgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbWluQ2FwYWNpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG1heENhcGFjaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNlcnZpY2Uuc2NhbGluZyAhPT0gZmFsc2UgJiYgc2VydmljZS5zY2FsaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsaW5nVHlwZSA9IHNlcnZpY2Uuc2NhbGluZy5zY2FsaW5nVHlwZSA/PyBTY2FsaW5nVHlwZS5DUFU7XG4gICAgICAgICAgbWluQ2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWluQ2FwYWNpdHk7XG4gICAgICAgICAgbWF4Q2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWF4Q2FwYWNpdHk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VydmljZS5zY2FsaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBEZWZhdWx0OiBlbmFibGUgc2NhbGluZyB3aXRoIENQVVxuICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuQ1BVO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgaW1hZ2U6IHNlcnZpY2UuaW1hZ2UsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBjcHU6IHNlcnZpY2UuY3B1LFxuICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgICAgIGRlc2lyZWRDb3VudDogc2VydmljZS5kZXNpcmVkQ291bnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGUsXG4gICAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgICAgbWF4Q2FwYWNpdHksXG4gICAgICAgICAgcm91dGluZzogc2VydmljZS5yb3V0aW5nLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHNlcnZpY2UudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogc2VydmljZS50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBjb25uZWN0aW9uczogc2VydmljZS5jb25uZWN0aW9uc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBCdWlsZCBjbHVzdGVyIGNvbmZpZ1xuICAgIGNvbnN0IGNsdXN0ZXI6IEVjc0NsdXN0ZXJQcm9wc1tcImNsdXN0ZXJcIl0gPSBwcm9wcy5jbHVzdGVyXG4gICAgICA/IHtcbiAgICAgICAgICBkb21haW46IHByb3BzLmNsdXN0ZXIuZG9tYWluLFxuICAgICAgICAgIGxvYWRCYWxhbmNlcjogcHJvcHMuY2x1c3Rlci5sb2FkQmFsYW5jZXIsXG4gICAgICAgICAgZGlyZWN0QWNjZXNzOiBwcm9wcy5jbHVzdGVyLmRpcmVjdEFjY2VzcyxcbiAgICAgICAgICBkb21haW5Db25maWc6IHByb3BzLmNsdXN0ZXIuZG9tYWluQ29uZmlnXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZWNzUHJvcHM6IEVjc0NsdXN0ZXJQcm9wcyA9IHtcbiAgICAgIGNsdXN0ZXJOYW1lOiBgJHt0aGlzLmlkfUNsdXN0ZXJgLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBlY3JSZXBvc2l0b3J5OiBwcm9wcy5lY3JSZXBvc2l0b3J5IHx8IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgICBjYXBhY2l0eVByb3ZpZGVyLFxuICAgICAgZWMyQ29uZmlnOiBjYXBhY2l0eVByb3ZpZGVyID09PSBcIkVDMlwiID8gcHJvcHMuZWMyQ29uZmlnIDogdW5kZWZpbmVkLFxuICAgICAgY2x1c3RlcixcbiAgICAgIHNlcnZpY2VzXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBFY3NDbHVzdGVyKHRoaXMuc2NvcGUsIGAke3RoaXMuaWR9RWNzYCwgZWNzUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZExhbWJkYUNvbXB1dGUocHJvcHM6IExhbWJkYUNvbXB1dGVQcm9wcykge1xuICAgIGxldCBjb2RlOiBDb2RlO1xuICAgIGxldCBoYW5kbGVyOiBzdHJpbmc7XG4gICAgbGV0IHJ1bnRpbWU6IFJ1bnRpbWU7XG5cbiAgICBpZiAocHJvcHMuZGVwbG95bWVudCA9PT0gXCJjb250YWluZXJcIikge1xuICAgICAgLy8gQ29udGFpbmVyLWJhc2VkIExhbWJkYSB1c2luZyBFQ1JcbiAgICAgIGlmIChwcm9wcy5lY3JSZXBvc2l0b3J5IGluc3RhbmNlb2YgUmVwb3NpdG9yeSkge1xuICAgICAgICBjb2RlID0gQ29kZS5mcm9tRWNySW1hZ2UocHJvcHMuZWNyUmVwb3NpdG9yeSwge1xuICAgICAgICAgIHRhZ09yRGlnZXN0OiBcImxhdGVzdFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiZWNyUmVwb3NpdG9yeSBtdXN0IGJlIGEgUmVwb3NpdG9yeSBpbnN0YW5jZSBmb3IgTGFtYmRhIGNvbXB1dGUgdHlwZVwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRhaW5lciBMYW1iZGEgcmVxdWlyZXMgdGhlc2Ugc3BlY2lhbCB2YWx1ZXNcbiAgICAgIGhhbmRsZXIgPSBIYW5kbGVyLkZST01fSU1BR0U7XG4gICAgICBydW50aW1lID0gUnVudGltZS5GUk9NX0lNQUdFO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb2RlLWJhc2VkIExhbWJkYSAtIHByb3BzLmRlcGxveW1lbnQgPT09IFwiY29kZVwiXG4gICAgICBjb2RlID0gcHJvcHMuY29kZTtcbiAgICAgIGhhbmRsZXIgPSBwcm9wcy5oYW5kbGVyIHx8IFwiaW5kZXguaGFuZGxlclwiO1xuICAgICAgcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgfHwgUnVudGltZS5OT0RFSlNfMThfWDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHByZXNlbmNlLWJhc2VkIGZ1bmN0aW9uVXJsIGNvbmZpZyB0byBsZWdhY3kgYm9vbGVhbiBmb3JtYXRcbiAgICBjb25zdCBmdW5jdGlvblVybENvbmZpZyA9IHByb3BzLmZ1bmN0aW9uVXJsO1xuICAgIGNvbnN0IGVuYWJsZUZ1bmN0aW9uVXJsID1cbiAgICAgIGZ1bmN0aW9uVXJsQ29uZmlnICE9PSB1bmRlZmluZWQgJiYgZnVuY3Rpb25VcmxDb25maWcgIT09IGZhbHNlO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQXV0aFR5cGUgPVxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwgJiYgdHlwZW9mIGZ1bmN0aW9uVXJsQ29uZmlnID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gZnVuY3Rpb25VcmxDb25maWcuYXV0aFR5cGVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxDb3JzID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmNvcnNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBsYW1iZGFQcm9wcyA9IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcnVudGltZSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplLFxuICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcm9sZURlc2NyaXB0aW9uOiBwcm9wcy5yb2xlRGVzY3JpcHRpb24sXG4gICAgICBpbmxpbmVQb2xpY3k6IHByb3BzLmlubGluZVBvbGljeSB8fCBbXSxcbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsLFxuICAgICAgZnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgICAgIGZ1bmN0aW9uVXJsQ29ycyxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudFxuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGUgPSBuZXcgTGFtYmRhRnVuY3Rpb24oXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYCR7dGhpcy5pZH1MYW1iZGFgLFxuICAgICAgbGFtYmRhUHJvcHNcbiAgICApO1xuXG4gICAgLy8gTGFtYmRhIGZ1bmN0aW9ucyBkb24ndCB1c2Ugc2VjdXJpdHkgZ3JvdXBzIHVubGVzcyBWUEMtZW5hYmxlZFxuICAgIC8vIENyZWF0ZSBlbXB0eSBjb25uZWN0aW9ucyBvYmplY3QgZm9yIGludGVyZmFjZSBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucygpO1xuICB9XG59XG4iXX0=
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBRUM7QUFFRCxvRUFJQztBQWhIRCxpREFBaUQ7QUFDakQsaURBTzZCO0FBQzdCLHVEQU1nQztBQU9oQywyQ0FBdUM7QUFJdkMseURBSXlDO0FBQ3pDLHlEQUE4RDtBQUM5RCwrREFBb0U7QUF1QnZELFFBQUEsbUJBQW1CLEdBQTJDO0lBQ3pFLEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELG1CQUFtQixFQUFFLElBQUk7UUFDekIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLENBQUM7UUFDZCxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDcEQsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixXQUFXLEVBQUUsS0FBSztLQUNuQjtDQUNGLENBQUM7QUFZVyxRQUFBLDRCQUE0QixHQUdyQztJQUNGLE9BQU8sRUFBRTtRQUNQLFFBQVEsRUFBRSxLQUFLO1FBQ2YsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELEdBQUcsRUFBRTtRQUNILFFBQVEsRUFBRSxLQUFLO1FBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtLQUN2QjtDQUNGLENBQUM7QUFFRixTQUFnQixvQkFBb0IsQ0FBQyxJQUFpQjtJQUNwRCxPQUFPLDJCQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsUUFBNkI7SUFFN0IsT0FBTyxvQ0FBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsdURBQXVEO0FBQ3ZELHFEQUdnQztBQUY5Qix3R0FBQSxVQUFVLE9BQUE7QUFnZ0JaOzs7O0dBSUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLEtBQW9CO0lBQ2hELE1BQU0sUUFBUSxHQUFHLEtBQTJDLENBQUM7SUFFN0QsMENBQTBDO0lBQzFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUNFLGtCQUFrQixJQUFJLFFBQVE7WUFDOUIsUUFBUSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFDdkMsQ0FBQztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0RBQXNELEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQzFFLDhEQUE4RCxDQUNqRSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksV0FBVyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxJQUFJLENBQ1YsK0NBQStDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ25FLHlEQUF5RCxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlELE9BQU8sQ0FBQyxJQUFJLENBQ1YsOENBQThDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ2xFLHFEQUFxRCxDQUN4RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkNBQTZDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ2pFLG9EQUFvRCxDQUN2RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksYUFBYSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQ1YsaURBQWlELEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ3JFLDREQUE0RCxDQUMvRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkNBQTZDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ2pFLHVEQUF1RCxDQUMxRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkNBQTZDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ2pFLHVEQUF1RCxDQUMxRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksS0FBSyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQ1YseUNBQXlDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQzdELGdEQUFnRCxDQUNuRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlELE9BQU8sQ0FBQyxJQUFJLENBQ1YsOENBQThDLEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ2xFLHdDQUF3QyxDQUMzQyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksY0FBYyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysa0RBQWtELEtBQUssQ0FBQyxJQUFJLFlBQVk7Z0JBQ3RFLDRDQUE0QyxDQUMvQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3pCLGdCQUFnQixDQUFDLEtBQXdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBc0I7SUFDOUMsa0RBQWtEO0lBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FDdEQsQ0FBQztJQUNGLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQy9DLENBQUM7SUFDRixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDYiwwQkFBMEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUN0RSx3RkFBd0YsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3BELENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ2xDLENBQUM7SUFFRixJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQzdDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQzVDLENBQUM7UUFDRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FDYixpRkFBaUY7Z0JBQy9FLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDbkQsNEVBQTRFLENBQy9FLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsNkVBQTZFO1lBQzdFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVO2lCQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sdUJBQXVCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDbkQsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FDeEQsQ0FBQztZQUNGLElBQUksdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksT0FBTyxDQUFDLElBQUksZ0NBQWdDO29CQUN0RCxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3hELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLGdCQUFnQixLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksT0FBTyxDQUFDLElBQUksNERBQTREO2dCQUNsRixtQ0FBbUMsQ0FDdEMsQ0FBQztRQUNKLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM1RCxPQUFPLENBQUMsSUFBSSxDQUNWLDZCQUE2QixPQUFPLENBQUMsSUFBSSxxREFBcUQ7Z0JBQzVGLHdFQUF3RSxDQUMzRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFhLGNBQWM7SUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBb0I7UUFDM0MsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFXLEVBQUU7WUFDN0Msb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUIsTUFBTSxZQUFZLEdBQWtCO2dCQUNsQyxHQUFHO29CQUNELEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO29CQUNqQixhQUFhLEVBQUUsR0FBRyxDQUFDLDJCQUEyQixFQUFFO2lCQUNqRDtnQkFDRCxHQUFHLEtBQUs7YUFDVCxDQUFDO1lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhCRCx3Q0FnQkM7QUFFRCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQVNwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLE1BQU07WUFDUixPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLG9FQUFvRTtnQkFDcEUsTUFBTSxXQUFXLEdBQVUsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLDZCQUE4QixXQUE2QixDQUFDLElBQUksRUFBRSxDQUNuRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQXNCO1FBQzFDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDO1FBRWpFLE1BQU0sUUFBUSxHQUFHO1lBQ2YsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsU0FBUztZQUNoQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxVQUFVO1lBQzlDLFNBQVM7WUFDVCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUM7WUFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQztZQUNuQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7U0FDZixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlCQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQzlDLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBc0I7UUFDMUMsbUVBQW1FO1FBQ25FLE1BQU0sUUFBUSxHQUFnQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDOUQsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNWLGtEQUFrRDtZQUNsRCxJQUFJLFVBQTZELENBQUM7WUFFbEUsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4RCx3REFBd0Q7Z0JBQ3hELFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDbkUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO29CQUNkLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDWixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7b0JBQzFCLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYTtvQkFDOUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO29CQUNsQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7b0JBQ3hCLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztvQkFDdEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO2lCQUMzQixDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7aUJBQU0sQ0FBQztnQkFDTix1Q0FBdUM7Z0JBQ3ZDLFVBQVUsR0FBRztvQkFDWDt3QkFDRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxXQUFXO3FCQUNqQztpQkFDRixDQUFDO1lBQ0osQ0FBQztZQUVELDJCQUEyQjtZQUMzQixJQUFJLFdBQW9DLENBQUM7WUFDekMsSUFBSSxXQUErQixDQUFDO1lBQ3BDLElBQUksV0FBK0IsQ0FBQztZQUVwQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9ELFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxpQkFBVyxDQUFDLEdBQUcsQ0FBQztnQkFDN0QsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUMxQyxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLG1DQUFtQztnQkFDbkMsV0FBVyxHQUFHLGlCQUFXLENBQUMsR0FBRyxDQUFDO1lBQ2hDLENBQUM7WUFFRCxPQUFPO2dCQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixVQUFVO2dCQUNWLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDaEIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO2dCQUN0QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7Z0JBQ2xDLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxXQUFXO2dCQUNYLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQjtnQkFDdEQsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLHVCQUF1QjtnQkFDeEQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO2dCQUMxQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7YUFDN0IsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsdUJBQXVCO1FBQ3ZCLE1BQU0sT0FBTyxHQUErQixLQUFLLENBQUMsT0FBTztZQUN2RCxDQUFDLENBQUM7Z0JBQ0UsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDNUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDeEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDeEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWTthQUN6QztZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLFFBQVEsR0FBb0I7WUFDaEMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsU0FBUztZQUNoQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSwwQkFBMEI7WUFDaEUsT0FBTztZQUNQLFFBQVE7U0FDVCxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDOUMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQXlCO1FBQ2hELElBQUksSUFBVSxDQUFDO1FBQ2YsSUFBSSxPQUFlLENBQUM7UUFDcEIsSUFBSSxPQUFnQixDQUFDO1FBRXJCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxtQ0FBbUM7WUFDbkMsSUFBSSxLQUFLLENBQUMsYUFBYSxZQUFZLG9CQUFVLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxHQUFHLGlCQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7b0JBQzVDLFdBQVcsRUFBRSxRQUFRO2lCQUN0QixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FDYixxRUFBcUUsQ0FDdEUsQ0FBQztZQUNKLENBQUM7WUFFRCxpREFBaUQ7WUFDakQsT0FBTyxHQUFHLG9CQUFPLENBQUMsVUFBVSxDQUFDO1lBQzdCLE9BQU8sR0FBRyxvQkFBTyxDQUFDLFVBQVUsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLGtEQUFrRDtZQUNsRCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDM0MsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksb0JBQU8sQ0FBQyxXQUFXLENBQUM7UUFDakQsQ0FBQztRQUVELHFFQUFxRTtRQUNyRSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUMsTUFBTSxpQkFBaUIsR0FDckIsaUJBQWlCLEtBQUssU0FBUyxJQUFJLGlCQUFpQixLQUFLLEtBQUssQ0FBQztRQUNqRSxNQUFNLG1CQUFtQixHQUN2QixpQkFBaUIsSUFBSSxPQUFPLGlCQUFpQixLQUFLLFFBQVE7WUFDeEQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixNQUFNLGVBQWUsR0FDbkIsaUJBQWlCLElBQUksT0FBTyxpQkFBaUIsS0FBSyxRQUFRO1lBQ3hELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxPQUFPO1lBQ1AsT0FBTztZQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUU7WUFDdEMsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2Ysa0JBQWtCLEVBQUcsS0FBYSxDQUFDLGtCQUFrQjtZQUNyRCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CO1lBQ2hELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxlQUFlO1lBQ3JFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztTQUMvQixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHVCQUFjLENBQy9CLElBQUksQ0FBQyxLQUFLLEVBQ1YsR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQ2xCLFdBQVcsQ0FDWixDQUFDO1FBRUYsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFwTkQsMEJBb05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBSZXBvc2l0b3J5SW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgdHlwZSBJVnBjLFxuICB0eXBlIFVzZXJEYXRhLFxuICB0eXBlIElNYWNoaW5lSW1hZ2UsXG4gIFBvcnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIENvZGUsXG4gIFJ1bnRpbWUsXG4gIEhhbmRsZXIsXG4gIHR5cGUgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICB0eXBlIFBvbGljeVN0YXRlbWVudCxcbiAgdHlwZSBQb2xpY3lEb2N1bWVudCxcbiAgdHlwZSBJTWFuYWdlZFBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuXG5pbXBvcnQgRWNzQ2x1c3Rlciwge1xuICB0eXBlIEVjc0NsdXN0ZXJQcm9wcyxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRG9tYWluQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWNzXCI7XG5pbXBvcnQgeyBFYzJJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvbGFtYmRhXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcblxuZXhwb3J0IHR5cGUgQ29tcHV0ZVR5cGUgPSBcImVjc1wiIHwgXCJlYzJcIiB8IFwibGFtYmRhXCI7XG5leHBvcnQgdHlwZSBFY3NDYXBhY2l0eVByb3ZpZGVyID0gXCJGQVJHQVRFXCIgfCBcIkZBUkdBVEVfU1BPVFwiIHwgXCJFQzJcIjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZvciBlYWNoIGNvbXB1dGUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IHBvcnQgZm9yIHRoZSBjb21wdXRlIHR5cGUuIEVDUzogODAsIEVDMjogMjIsIExhbWJkYTogMCAobm8gcG9ydCkgKi9cbiAgZGVmYXVsdFBvcnQ6IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgc2NhbGluZyBsaW1pdHMgKi9cbiAgZGVmYXVsdFNjYWxpbmc6IHtcbiAgICBtaW5DYXBhY2l0eTogbnVtYmVyO1xuICAgIG1heENhcGFjaXR5OiBudW1iZXI7XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHN1cHBvcnRzIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zICovXG4gIHN1cHBvcnRzQ29ubmVjdGlvbnM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHJlcXVpcmVzIGEgVlBDICovXG4gIHJlcXVpcmVzVnBjOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ09NUFVURV9UWVBFX0NPTkZJRzogUmVjb3JkPENvbXB1dGVUeXBlLCBDb21wdXRlVHlwZUNvbmZpZz4gPSB7XG4gIGVjczoge1xuICAgIGRlZmF1bHRQb3J0OiA4MCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDUgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGVjMjoge1xuICAgIGRlZmF1bHRQb3J0OiAyMixcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDMgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGxhbWJkYToge1xuICAgIGRlZmF1bHRQb3J0OiAwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAwLCBtYXhDYXBhY2l0eTogMTAwIH0sXG4gICAgc3VwcG9ydHNDb25uZWN0aW9uczogZmFsc2UsXG4gICAgcmVxdWlyZXNWcGM6IGZhbHNlXG4gIH1cbn07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgRUNTIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdGhpcyB1c2VzIFNwb3QgcHJpY2luZyAqL1xuICB1c2VzU3BvdDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBydW5zIG9uIEVDMiBpbnN0YW5jZXMgKHZzIHNlcnZlcmxlc3MgRmFyZ2F0ZSkgKi9cbiAgdXNlc0VjMkluc3RhbmNlczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEVDU19DQVBBQ0lUWV9QUk9WSURFUl9DT05GSUc6IFJlY29yZDxcbiAgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZ1xuPiA9IHtcbiAgRkFSR0FURToge1xuICAgIHVzZXNTcG90OiBmYWxzZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBGQVJHQVRFX1NQT1Q6IHtcbiAgICB1c2VzU3BvdDogdHJ1ZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBFQzI6IHtcbiAgICB1c2VzU3BvdDogZmFsc2UsXG4gICAgdXNlc0VjMkluc3RhbmNlczogdHJ1ZVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGVDb25maWcodHlwZTogQ29tcHV0ZVR5cGUpOiBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIHJldHVybiBDT01QVVRFX1RZUEVfQ09ORklHW3R5cGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyhcbiAgcHJvdmlkZXI6IEVjc0NhcGFjaXR5UHJvdmlkZXJcbik6IEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWcge1xuICByZXR1cm4gRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJR1twcm92aWRlcl07XG59XG5cbi8vIFJlLWV4cG9ydCBMYW1iZGEgdHlwZXMgZnJvbSBDREsgZm9yIHVzZXIgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIEh0dHBNZXRob2QsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgY29udGFpbmVyIGluIGFuIEVDUyB0YXNrLlxuICpcbiAqIEZvciBzaW5nbGUtY29udGFpbmVyIHNlcnZpY2VzLCBgbmFtZWAgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGAke3NlcnZpY2VOYW1lfUNvbnRhaW5lcmAuXG4gKiBGb3IgbXVsdGktY29udGFpbmVyIHRhc2tzLCB0aGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBgcG9ydGAgaXMgdGhlICoqcHJpbWFyeSBjb250YWluZXIqKlxuICogdGhhdCByZWNlaXZlcyBsb2FkIGJhbGFuY2VyIHRyYWZmaWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBjb250YWluZXIgKG5hbWUgYXV0by1nZW5lcmF0ZWQpXG4gKiBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLWNvbnRhaW5lciB3aXRoIHNpZGVjYXJzXG4gKiBjb250YWluZXJzOiBbXG4gKiAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWFyeSAtIHJlY2VpdmVzIEFMQiB0cmFmZmljXG4gKiAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9ICAgICAvLyBTaWRlY2FyIC0gbW9uaXRvcmluZ1xuICogXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbnRhaW5lckNvbmZpZyB7XG4gIC8qKiBDb250YWluZXIgbmFtZS4gT3B0aW9uYWwgZm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UuIE9wdGlvbnM6XG4gICAqIC0gT21pdDogVXNlcyBhcHAncyBkZWZhdWx0IEVDUiByZXBvc2l0b3J5IChwcmltYXJ5IGNvbnRhaW5lciBvbmx5KVxuICAgKiAtIHN0cmluZzogRUNSIHJlcG9zaXRvcnkgbmFtZSBvciBwdWJsaWMgaW1hZ2UgVVJMXG4gICAqIC0gUmVwb3NpdG9yeTogQ0RLIEVDUiBSZXBvc2l0b3J5IGNvbnN0cnVjdFxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmcgfCBSZXBvc2l0b3J5O1xuICAvKipcbiAgICogUG9ydCB0aGUgY29udGFpbmVyIGxpc3RlbnMgb24uXG4gICAqIFRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnQgYmVjb21lcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqXG4gICAqIGFuZCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFNlY3JldHMgaW1wb3J0ZWQgZnJvbSBvdGhlciByZXNvdXJjZXMgKi9cbiAgc2VjcmV0c0ltcG9ydD86IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD47XG4gIC8qKiBDb21tYW5kIHRvIHJ1biBpbiB0aGUgY29udGFpbmVyICovXG4gIGNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgLyoqIEVudHJ5IHBvaW50IGZvciB0aGUgY29udGFpbmVyICovXG4gIGVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjb250YWluZXIgaXMgZXNzZW50aWFsLlxuICAgKiBJZiBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHN0b3BzLCBhbGwgY29udGFpbmVycyBpbiB0aGUgdGFzayBzdG9wLlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICBlc3NlbnRpYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogSGVhbHRoIGNoZWNrIGNvbmZpZ3VyYXRpb24uXG4gICAqIERlZmF1bHQ6IEZvciBwcmltYXJ5IGNvbnRhaW5lciB3aXRoIHBvcnQsIHVzZXMgY3VybCBoZWFsdGggY2hlY2suXG4gICAqL1xuICBoZWFsdGhDaGVjaz86IHtcbiAgICBjb21tYW5kOiBzdHJpbmdbXTtcbiAgICBpbnRlcnZhbD86IG51bWJlcjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHJldHJpZXM/OiBudW1iZXI7XG4gICAgc3RhcnRQZXJpb2Q/OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogRUNTIHNjYWxpbmcgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICogLSBgeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDEwIH1gOiBjdXN0b20gc2NhbGluZ1xuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzU2NhbGluZ0NvbmZpZyB7XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgc2NhbGluZ1R5cGU/OiBTY2FsaW5nVHlwZTtcbn1cblxuLyoqXG4gKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgRUNTIEVDMi1iYWNrZWQgY2x1c3RlcnMuXG4gKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ2FwYWNpdHlDb25maWcge1xuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIC8qKiBBTUkgaGFyZHdhcmUgdHlwZS4gRGVmYXVsdDogXCJBUk1cIiAoR3Jhdml0b24gLSBiZXR0ZXIgY29zdC9wZXJmb3JtYW5jZSkgKi9cbiAgYW1pSGFyZHdhcmVUeXBlPzogXCJBUk1cIiB8IFwiU1RBTkRBUkRcIjtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMyAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIEVDMiBpbnN0YW5jZXMuIERlZmF1bHQ6IDIgKGZvciBhdmFpbGFiaWxpdHkpICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcbiAgLyoqIE1lbW9yeSBsaW1pdCBpbiBNaUIgZm9yIHRoZSBjb250YWluZXIuIERlZmF1bHQ6IDEwMjQgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2x1c3Rlci1sZXZlbCBjb25maWd1cmF0aW9uLlxuICogQ29udHJvbHMgdGhlIHNoYXJlZCBBTEIgZm9yIGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2x1c3RlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBEb21haW4gZm9yIEhUVFBTIGFjY2Vzcy5cbiAgICogLSBPbWl0OiBBTEIgY3JlYXRlZCB3aXRoIGRlZmF1bHQgRE5TICgqLmVsYi5hbWF6b25hd3MuY29tKVxuICAgKiAtIFNwZWNpZmllZDogQ3JlYXRlcyBBQ00gY2VydGlmaWNhdGUgKyBSb3V0ZTUzIEROUyBBIHJlY29yZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdCBvciBcInB1YmxpY1wiOiBJbnRlcm5ldC1mYWNpbmcgQUxCIChkZWZhdWx0KVxuICAgKiAtIFwiaW50ZXJuYWxcIjogVlBDLW9ubHkgQUxCXG4gICAqIC0gZmFsc2U6IE5vIEFMQiAoZm9yIHdvcmtlcnMvYmFja2dyb3VuZCBwcm9jZXNzb3JzKVxuICAgKi9cbiAgbG9hZEJhbGFuY2VyPzogZmFsc2UgfCBcInB1YmxpY1wiIHwgXCJpbnRlcm5hbFwiO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZGlyZWN0IEVDMiBhY2Nlc3Mgd2l0aG91dCBBTEIuXG4gICAqIFVzZXMgaG9zdCBuZXR3b3JrIG1vZGUgZm9yIHByZWRpY3RhYmxlIHBvcnRzLlxuICAgKiBBY2Nlc3MgdmlhIEVDMiBwdWJsaWMgSVAgYXQgY29udGFpbmVyIHBvcnQuXG4gICAqL1xuICBkaXJlY3RBY2Nlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZHZhbmNlZCBkb21haW4gY29uZmlndXJhdGlvbiBmb3Igcm91dGluZyBwb2xpY2llcyAobGF0ZW5jeSwgd2VpZ2h0ZWQsIGdlbykuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGRvbWFpbiBpcyBzcGVjaWZpZWQuXG4gICAqIEFsbG93cyBmb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnRzIHdpdGggYWR2YW5jZWQgRE5TIHJvdXRpbmcuXG4gICAqL1xuICBkb21haW5Db25maWc/OiBEb21haW5Db25maWc7XG59XG5cbi8qKlxuICogUm91dGluZyBjb25maWd1cmF0aW9uIGZvciBwYXRoL2hvc3QtYmFzZWQgcm91dGluZyBvbiB0aGUgQUxCLlxuICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICogT3B0aW9uYWwgZm9yIHNpbmdsZSBzZXJ2aWNlIChnZXRzIGFsbCB0cmFmZmljIGF1dG9tYXRpY2FsbHkpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1JvdXRpbmdDb25maWcge1xuICAvKipcbiAgICogUGF0aCBwYXR0ZXJuIGZvciByb3V0aW5nIChlLmcuLCBcIi9hcGkvKlwiLCBcIi91c2Vycy8qXCIpLlxuICAgKiBVc2VzIEFMQiBwYXRoLWJhc2VkIHJvdXRpbmcuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0IGhlYWRlciBmb3Igcm91dGluZyAoZS5nLiwgXCJhcGkuZXhhbXBsZS5jb21cIikuXG4gICAqIFVzZXMgQUxCIGhvc3QtYmFzZWQgcm91dGluZy5cbiAgICovXG4gIGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaW9yaXR5IGZvciB0aGlzIHJvdXRpbmcgcnVsZSAoMS01MDAwMCkuXG4gICAqIExvd2VyIG51bWJlciA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICogQXV0by1hc3NpZ25lZCBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBwYXRoIGZvciB0aGlzIHNlcnZpY2UncyB0YXJnZXQgZ3JvdXAuXG4gICAqIERlZmF1bHQ6IFwiL1wiXG4gICAqL1xuICBoZWFsdGhDaGVja1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBzZXJ2aWNlIGluIGFuIEVDUyBjbHVzdGVyLlxuICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIHNjYWxpbmcgY29uZmlnLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW1wbGUgc2VydmljZVxuICogeyBuYW1lOiBcImFwaVwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VydmljZSB3aXRoIHJvdXRpbmcgKGZvciBtdWx0aS1zZXJ2aWNlIGNsdXN0ZXJzKVxuICogeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiLCBwcmlvcml0eTogMTAwIH0gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXJ2aWNlIHdpdGggc2lkZWNhcnNcbiAqIHtcbiAqICAgbmFtZTogXCJhcGlcIixcbiAqICAgY29udGFpbmVyczogW1xuICogICAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LFxuICogICAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9XG4gKiAgIF1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSAodW5pcXVlIHdpdGhpbiBjbHVzdGVyKSAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSBmb3IgdGhpcyBzZXJ2aWNlIChhcHBsaWVzIHRvIGZpcnN0IGNvbnRhaW5lciB3aXRob3V0IGV4cGxpY2l0IGltYWdlKS5cbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnlcbiAgICogLSBzdHJpbmc6IEVDUiByZXBvc2l0b3J5IG5hbWUgb3IgcHVibGljIGltYWdlIFVSTFxuICAgKiAtIFJlcG9zaXRvcnk6IENESyBFQ1IgUmVwb3NpdG9yeSBjb25zdHJ1Y3RcbiAgICovXG4gIGltYWdlPzogc3RyaW5nIHwgUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGNvbmZpZ3VyYXRpb24ocykgZm9yIHRoaXMgc2VydmljZS5cbiAgICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGNvbnRhaW5lciBuYW1lIGlzIG9wdGlvbmFsIGFuZCBhdXRvLWdlbmVyYXRlZC5cbiAgICogRm9yIG11bHRpLWNvbnRhaW5lciBzZXJ2aWNlcywgdGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBpcyB0aGUgcHJpbWFyeSBjb250YWluZXIuXG4gICAqL1xuICBjb250YWluZXJzPzogRWNzQ29udGFpbmVyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcgcnVsZXMgZm9yIHRoaXMgc2VydmljZSBvbiB0aGUgY2x1c3RlcidzIEFMQi5cbiAgICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICAgKiBPcHRpb25hbCBmb3Igc2luZ2xlIHNlcnZpY2UgKGdldHMgLyogYXV0b21hdGljYWxseSkuXG4gICAqL1xuICByb3V0aW5nPzogRWNzUm91dGluZ0NvbmZpZztcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2NhbGluZyBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGZhbHNlOiBkaXNhYmxlZFxuICAgKi9cbiAgc2NhbGluZz86IEVjc1NjYWxpbmdDb25maWcgfCBmYWxzZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyB0aGlzIHNlcnZpY2UncyBpbWFnZS5cbiAgICogTWV0YWRhdGEgZm9yIENMSSBidWlsZCBwcm9jZXNzLCBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGlubGluZSBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqIFVzZSBmb3Igc2VydmljZS1zcGVjaWZpYyBBV1MgcGVybWlzc2lvbnMgKFMzLCBEeW5hbW9EQiwgU1FTLCBldGMuKS5cbiAgICovXG4gIHRhc2tSb2xlSW5saW5lUG9saWNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBQb2xpY3lEb2N1bWVudD47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWFuYWdlZCBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llcz86IElNYW5hZ2VkUG9saWN5W107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIHNlcnZpY2UgbmVlZHMgdG8gY29ubmVjdCB0byAoZS5nLiwgZGF0YWJhc2VzKS5cbiAgICogQ3JlYXRlcyBzZWN1cml0eSBncm91cCBydWxlcyB0byBhbGxvdyB0cmFmZmljIGZyb20gdGhpcyBzZXJ2aWNlLlxuICAgKiBGb2xsb3dzIGxlYXN0LXByaXZpbGVnZSAtIG9ubHkgdGhpcyBzZXJ2aWNlIGdldHMgYWNjZXNzLCBub3QgYWxsIHNlcnZpY2VzIGluIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPbmx5IGJhY2tlbmQgc2VydmljZSBjb25uZWN0cyB0byBkYXRhYmFzZVxuICAgKiBzZXJ2aWNlczogW1xuICAgKiAgIHsgbmFtZTogXCJmcm9udGVuZFwiIH0sXG4gICAqICAgeyBuYW1lOiBcImJhY2tlbmRcIiwgY29ubmVjdGlvbnM6IFthcHBEYXRhYmFzZV0gfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IElDb25uZWN0YWJsZVtdO1xuXG4gIC8qKlxuICAgKiBDYXBhY2l0eSBwcm92aWRlciBmb3IgdGhpcyBzZXJ2aWNlLiBSRVFVSVJFRC5cbiAgICogRWFjaCBzZXJ2aWNlIHNwZWNpZmllcyBpdHMgb3duIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBNaXhlZCBGQVJHQVRFIGFuZCBFQzIgc2VydmljZXMgaW4gc2FtZSBjbHVzdGVyXG4gICAqIHtcbiAgICogICBzZXJ2aWNlczogW1xuICAgKiAgICAgeyBuYW1lOiBcImFwaVwiLCBjYXBhY2l0eVByb3ZpZGVyOiBcIkZBUkdBVEVcIiB9LFxuICAgKiAgICAgeyBuYW1lOiBcIndvcmtlclwiLCBjYXBhY2l0eVByb3ZpZGVyOiBcIkVDMlwiLCBlYzJDb25maWc6IHsgaW5zdGFuY2VUeXBlOiBcInQzLm1pY3JvXCIgfSB9XG4gICAqICAgXVxuICAgKiB9XG4gICAqL1xuICBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBzZXJ2aWNlIGNhcGFjaXR5UHJvdmlkZXIgaXMgXCJFQzJcIi5cbiAgICogU2VydmljZXMgd2l0aCBtYXRjaGluZyBlYzJDb25maWcgc2hhcmUgYW4gQVNHIGZvciBlZmZpY2llbmN5LlxuICAgKi9cbiAgZWMyQ29uZmlnPzogRWMyQ2FwYWNpdHlDb25maWc7XG59XG5cbi8qKlxuICogU1NIIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBFQzIgaW5zdGFuY2VzLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGF1dG8tZ2VuZXJhdGVkIGtleVxuICogLSBgeyBrZXlOYW1lOiBcIm15LWtleVwiIH1gOiBlbmFibGVkIHdpdGggZXhpc3Rpbmcga2V5XG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2hDb25maWcge1xuICAvKiogU1NIIGtleSBwYWlyIG5hbWUgKi9cbiAga2V5TmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgQ0lEUiBibG9ja3MgZm9yIFNTSCBhY2Nlc3MgKi9cbiAgYWxsb3dlZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiwgY29yczogey4uLn0gfWA6IHB1YmxpYyB3aXRoIENPUlNcbiAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVXJsQ29uZmlnIHtcbiAgLyoqIEF1dGhlbnRpY2F0aW9uIHR5cGUuIERlZmF1bHQ6IEFXU19JQU0gKi9cbiAgYXV0aFR5cGU/OiBGdW5jdGlvblVybEF1dGhUeXBlO1xuICAvKiogQ09SUyBjb25maWd1cmF0aW9uICovXG4gIGNvcnM/OiBGdW5jdGlvblVybENvcnNPcHRpb25zO1xufVxuXG5pbnRlcmZhY2UgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogRUNTIGNvbXB1dGUgY29uZmlndXJhdGlvbi5cbiAqIENyZWF0ZXMgYW4gRUNTIGNsdXN0ZXIgd2l0aCBvbmUgb3IgbW9yZSBzZXJ2aWNlcyBzaGFyaW5nIGEgbG9hZCBiYWxhbmNlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIHNlcnZpY2VcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktc2VydmljZSBjbHVzdGVyIHdpdGggcm91dGluZ1xuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBpLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEludGVybmFsIHdvcmtlcnMgKG5vIEFMQilcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV29ya2Vyc1wiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgbG9hZEJhbGFuY2VyOiBmYWxzZSB9LFxuICogICBzZXJ2aWNlczogW3sgbmFtZTogXCJwcm9jZXNzb3JcIiB9LCB7IG5hbWU6IFwiZW1haWxlclwiIH1dXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ29tcHV0ZVByb3BzIGV4dGVuZHMgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHR5cGU6IFwiZWNzXCI7XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgY29uZmlndXJhdGlvbi5cbiAgICogQ29udHJvbHMgdGhlIHNoYXJlZCBBTEIgZm9yIGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gICAqIC0gT21pdDogQUxCIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHNldHRpbmdzXG4gICAqIC0gYHsgZG9tYWluOiBcIi4uLlwiIH1gOiBBTEIgd2l0aCBIVFRQUyArIEROU1xuICAgKiAtIGB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfWA6IE5vIEFMQiAoaW50ZXJuYWwgd29ya2VycylcbiAgICovXG4gIGNsdXN0ZXI/OiBFY3NDbHVzdGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gICAqIEVhY2ggc2VydmljZSBnZXRzIGl0cyBvd24gdGFzayBkZWZpbml0aW9uLCBzY2FsaW5nLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICAgKiBFYWNoIHNlcnZpY2UgTVVTVCBzcGVjaWZ5IGl0cyBvd24gY2FwYWNpdHlQcm92aWRlci5cbiAgICogQWxsIHNlcnZpY2VzIHNoYXJlIHRoZSBjbHVzdGVyJ3MgQUxCICh1bmxlc3MgZGlzYWJsZWQpLlxuICAgKi9cbiAgc2VydmljZXM6IEVjc1NlcnZpY2VDb25maWdbXTtcblxuICAvKipcbiAgICogRUNSIHJlcG9zaXRvcnkgZm9yIGFsbCBzZXJ2aWNlcyAoZGVmYXVsdCBpbWFnZSkuXG4gICAqIEluZGl2aWR1YWwgc2VydmljZXMgY2FuIG92ZXJyaWRlIHdpdGggdGhlaXIgb3duIGBpbWFnZWAgcHJvcGVydHkuXG4gICAqL1xuICBlY3JSZXBvc2l0b3J5PzogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyBjdXN0b20gaW1hZ2UuXG4gICAqIE5vdGU6IFRoaXMgaXMgbWV0YWRhdGEgZm9yIHRoZSBDTEkgYnVpbGQgcHJvY2VzcyxcbiAgICogbm90IHVzZWQgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gICAqL1xuICBkb2NrZXJmaWxlUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFYzJDb21wdXRlUHJvcHMgZXh0ZW5kcyBCYXNlQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJlYzJcIjtcblxuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbi5cbiAgICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAgICogLSBge31gOiBlbmFibGVkIHdpdGggZGVmYXVsdHNcbiAgICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAqL1xuICBzc2g/OiBTc2hDb25maWcgfCBmYWxzZTtcbiAgLyoqIFVzZXIgZGF0YSBzY3JpcHQgKi9cbiAgdXNlckRhdGE/OiBVc2VyRGF0YTtcbiAgLyoqIE1hY2hpbmUgaW1hZ2UgKEFNSSkgKi9cbiAgbWFjaGluZUltYWdlPzogSU1hY2hpbmVJbWFnZTtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNlIExhbWJkYSBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBib3RoIGNvbnRhaW5lciBhbmQgY29kZSBkZXBsb3ltZW50cy5cbiAqL1xuaW50ZXJmYWNlIEJhc2VMYW1iZGFQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImxhbWJkYVwiO1xuICAvKiogVGltZW91dCBpbiBzZWNvbmRzLiBEZWZhdWx0OiAzICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBNZW1vcnkgc2l6ZSBpbiBNQi4gRGVmYXVsdDogMTI4ICovXG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogTGFtYmRhIGZ1bmN0aW9uIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgZGVzY3JpcHRpb24gKi9cbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIElubGluZSBwb2xpY2llcyAtIHJvdXRlZCB0byBleGVjdXRpb24gcm9sZSBmb3IgRUNTLCB0YXNrIHJvbGUgZm9yIExhbWJkYVxuICAvKiogSW5saW5lIElBTSBwb2xpY3kgc3RhdGVtZW50cyAqL1xuICBpbmxpbmVQb2xpY3k/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGRpc2FibGVkIChkZWZhdWx0KVxuICAgKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICAgKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiB9YDogcHVibGljIGFjY2Vzc1xuICAgKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uVXJsPzogRnVuY3Rpb25VcmxDb25maWcgfCBmYWxzZTtcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyAqL1xuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIENvbnRhaW5lciBzZWNyZXRzIGltcG9ydCAoa2V5OiBlbnYgdmFyLCB2YWx1ZTogU2VjcmV0SW1wb3J0KSAqL1xuICBjb250YWluZXJTZWNyZXRzSW1wb3J0Pzoge1xuICAgIFtrZXk6IHN0cmluZ106IFNlY3JldEltcG9ydDtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoaXMgTGFtYmRhIG5lZWRzIHRvIGNvbm5lY3QgdG8gKGUuZy4sIGRhdGFiYXNlcykuXG4gICAqIENyZWF0ZXMgc2VjdXJpdHkgZ3JvdXAgcnVsZXMgdG8gYWxsb3cgdHJhZmZpYyBmcm9tIHRoaXMgTGFtYmRhLlxuICAgKi9cbiAgY29ubmVjdGlvbnM/OiBJQ29ubmVjdGFibGVbXTtcbn1cblxuLyoqXG4gKiBDb250YWluZXItYmFzZWQgTGFtYmRhIHVzaW5nIEVDUiBpbWFnZS5cbiAqXG4gKiBVc2VzIERvY2tlciBpbWFnZSBmcm9tIEVDUiByZXBvc2l0b3J5LiBIYW5kbGVyIGFuZCBydW50aW1lIGFyZVxuICogYXV0b21hdGljYWxseSBzZXQgdG8gRlJPTV9JTUFHRS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJJbWFnZUxhbWJkYVwiLCB7XG4gKiAgIHR5cGU6IFwibGFtYmRhXCIsXG4gKiAgIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsXG4gKiAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvbnRhaW5lci1iYXNlZCBkZXBsb3ltZW50IHVzaW5nIEVDUiBpbWFnZSAqL1xuICBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiO1xuICAvKiogRUNSIHJlcG9zaXRvcnkgY29udGFpbmluZyB0aGUgTGFtYmRhIGNvbnRhaW5lciBpbWFnZSAqL1xuICBlY3JSZXBvc2l0b3J5OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlO1xufVxuXG4vKipcbiAqIENvZGUtYmFzZWQgTGFtYmRhIHVzaW5nIGlubGluZSBjb2RlIG9yIFMzLlxuICpcbiAqIFVzZXMgdHJhZGl0aW9uYWwgTGFtYmRhIGRlcGxveW1lbnQgd2l0aCBjb2RlLCBoYW5kbGVyLCBhbmQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJDb2RlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gKiAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIiksXG4gKiAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICogICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvZGUtYmFzZWQgZGVwbG95bWVudCAqL1xuICBkZXBsb3ltZW50OiBcImNvZGVcIjtcbiAgLyoqIExhbWJkYSBjb2RlIChmcm9tIGFzc2V0LCBTMywgb3IgaW5saW5lKSAqL1xuICBjb2RlOiBDb2RlO1xuICAvKiogSGFuZGxlciBmdW5jdGlvbi4gRGVmYXVsdDogXCJpbmRleC5oYW5kbGVyXCIgKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgLyoqIExhbWJkYSBydW50aW1lLiBEZWZhdWx0OiBOT0RFSlNfMThfWCAqL1xuICBydW50aW1lPzogUnVudGltZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgY29tcHV0ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gZW5zdXJpbmcgdHlwZS1zYWZlIExhbWJkYSBjb25maWd1cmF0aW9uOlxuICogLSBgZGVwbG95bWVudDogXCJjb250YWluZXJcImAgcmVxdWlyZXMgYGVjclJlcG9zaXRvcnlgXG4gKiAtIGBkZXBsb3ltZW50OiBcImNvZGVcImAgcmVxdWlyZXMgYGNvZGVgIGFuZCBhbGxvd3MgYGhhbmRsZXJgL2BydW50aW1lYFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250YWluZXItYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsIGVjclJlcG9zaXRvcnk6IGVjciB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvZGUtYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29kZVwiLCBjb2RlOiBDb2RlLmZyb21Bc3NldChcIi4vbGFtYmRhXCIpIH1cbiAqL1xuZXhwb3J0IHR5cGUgTGFtYmRhQ29tcHV0ZVByb3BzID0gQ29udGFpbmVyTGFtYmRhUHJvcHMgfCBDb2RlTGFtYmRhUHJvcHM7XG5cbmV4cG9ydCB0eXBlIElDb21wdXRlUHJvcHMgPVxuICB8IEVjc0NvbXB1dGVQcm9wc1xuICB8IEVjMkNvbXB1dGVQcm9wc1xuICB8IExhbWJkYUNvbXB1dGVQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29tcHV0ZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wczogSUNvbXB1dGVQcm9wcyk6IHZvaWQge1xuICBjb25zdCBwcm9wc0FueSA9IHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gRUNTLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUVDUyBjb21wdXRlXG4gIGlmIChwcm9wcy50eXBlICE9PSBcImVjc1wiKSB7XG4gICAgaWYgKFxuICAgICAgXCJjYXBhY2l0eVByb3ZpZGVyXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmNhcGFjaXR5UHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnY2FwYWNpdHlQcm92aWRlcicgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIkNhcGFjaXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJlYzJDb25maWdcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5lYzJDb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZWMyQ29uZmlnJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiRUMyIGNhcGFjaXR5IGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJzZXJ2aWNlc1wiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnNlcnZpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3NlcnZpY2VzJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU2VydmljZXMgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gRUNTIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImNsdXN0ZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5jbHVzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2NsdXN0ZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJDbHVzdGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhbWJkYS1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1MYW1iZGEgY29tcHV0ZVxuICBpZiAocHJvcHMudHlwZSAhPT0gXCJsYW1iZGFcIikge1xuICAgIGlmIChcImZ1bmN0aW9uVXJsXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkuZnVuY3Rpb25VcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZnVuY3Rpb25VcmwnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJGdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gTGFtYmRhIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImhhbmRsZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5oYW5kbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2hhbmRsZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJIYW5kbGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIExhbWJkYSBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJydW50aW1lXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkucnVudGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdydW50aW1lJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiUnVudGltZSBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBMYW1iZGEgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBFQzItc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUMyIGNvbXB1dGVcbiAgaWYgKHByb3BzLnR5cGUgIT09IFwiZWMyXCIpIHtcbiAgICBpZiAoXCJzc2hcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5zc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnc3NoJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU1NIIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJ1c2VyRGF0YVwiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3VzZXJEYXRhJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiVXNlciBkYXRhIG9ubHkgYXBwbGllcyB0byBFQzIgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwibWFjaGluZUltYWdlXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkubWFjaGluZUltYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ21hY2hpbmVJbWFnZScgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIk1hY2hpbmUgaW1hZ2Ugb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVDUy1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gIGlmIChwcm9wcy50eXBlID09PSBcImVjc1wiKSB7XG4gICAgdmFsaWRhdGVFY3NQcm9wcyhwcm9wcyBhcyBFY3NDb21wdXRlUHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIEVDUy1zcGVjaWZpYyBwcm9wcy5cbiAqIEV4dHJhY3RlZCBmb3IgY2xhcml0eSBhbmQgZGV0YWlsIHBhcml0eSB3aXRoIGRhdGFiYXNlL25ldHdvcmsgcGF0dGVybnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRWNzUHJvcHMocHJvcHM6IEVjc0NvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBWYWxpZGF0ZSBzZXJ2aWNlcyBhcnJheSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxuICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gJ3NlcnZpY2VzJyBhcnJheS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1bmlxdWUgc2VydmljZSBuYW1lc1xuICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gc2VydmljZU5hbWVzLmZpbHRlcihcbiAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICApO1xuICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHNlcnZpY2UgbmFtZSBmb3JtYXRcbiAgY29uc3QgaW52YWxpZE5hbWVzID0gcHJvcHMuc2VydmljZXMuZmlsdGVyKFxuICAgIChzKSA9PiAhL15bYS16QS1aXVthLXpBLVowLTktXSokLy50ZXN0KHMubmFtZSlcbiAgKTtcbiAgaWYgKGludmFsaWROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2VydmljZSBuYW1lczogJHtpbnZhbGlkTmFtZXMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICBcIlNlcnZpY2UgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgcy5jb250YWluZXJzPy5zb21lKChjKSA9PiBjLnBvcnQpXG4gICk7XG5cbiAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcihcbiAgICAgIChzKSA9PiAhcy5yb3V0aW5nPy5wYXRoICYmICFzLnJvdXRpbmc/Lmhvc3RcbiAgICApO1xuICAgIGlmIChtaXNzaW5nUm91dGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZXJ2aWNlcyB3aXRoIHBvcnRzIHJlcXVpcmUgcm91dGluZyBjb25maWcgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlczogYCArXG4gICAgICAgICAgYCR7bWlzc2luZ1JvdXRpbmcubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgIFwiQWRkIHJvdXRpbmc6IHsgcGF0aDogJy8uLi4nIH0gb3Igcm91dGluZzogeyBob3N0OiAnLi4uJyB9IHRvIGVhY2ggc2VydmljZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBlYWNoIHNlcnZpY2UncyBjb250YWluZXJzXG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgIGlmIChzZXJ2aWNlLmNvbnRhaW5lcnMgJiYgc2VydmljZS5jb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzIHdpdGhpbiBzZXJ2aWNlIChvbmx5IG5hbWVkIGNvbnRhaW5lcnMpXG4gICAgICBjb25zdCBjb250YWluZXJOYW1lcyA9IHNlcnZpY2UuY29udGFpbmVyc1xuICAgICAgICAuZmlsdGVyKChjKSA9PiBjLm5hbWUpXG4gICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVDb250YWluZXJOYW1lcyA9IGNvbnRhaW5lck5hbWVzLmZpbHRlcihcbiAgICAgICAgKG5hbWUsIGluZGV4KSA9PiBjb250YWluZXJOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChkdXBsaWNhdGVDb250YWluZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogRHVwbGljYXRlIGNvbnRhaW5lciBuYW1lczogYCArXG4gICAgICAgICAgICBgJHtbLi4ubmV3IFNldChkdXBsaWNhdGVDb250YWluZXJOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2UuY2FwYWNpdHlQcm92aWRlciA9PT0gXCJFQzJcIiAmJiAhc2VydmljZS5lYzJDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNlcnZpY2UgJyR7c2VydmljZS5uYW1lfScgdXNlcyBFQzIgY2FwYWNpdHkgcHJvdmlkZXIgYnV0IG5vIGVjMkNvbmZpZyBpcyBkZWZpbmVkLiBgICtcbiAgICAgICAgICBcIlByb3ZpZGUgZWMyQ29uZmlnIG9uIHRoZSBzZXJ2aWNlLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgc2VydmljZSBlYzJDb25maWcgaXMgZGVmaW5lZCBidXQgY2FwYWNpdHlQcm92aWRlciBpcyBub3QgRUMyXG4gICAgaWYgKHNlcnZpY2UuZWMyQ29uZmlnICYmIHNlcnZpY2UuY2FwYWNpdHlQcm92aWRlciAhPT0gXCJFQzJcIikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiBTZXJ2aWNlICcke3NlcnZpY2UubmFtZX0nIGhhcyBlYzJDb25maWcgYnV0IGNhcGFjaXR5UHJvdmlkZXIgaXMgbm90ICdFQzInLiBgICtcbiAgICAgICAgICBcIlRoZSBlYzJDb25maWcgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyBjYXBhY2l0eVByb3ZpZGVyIGlzIHNldCB0byAnRUMyJy5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGYWN0b3J5IGZvciBjcmVhdGluZyBjb21wdXRlIHJlc291cmNlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIHNlcnZpY2UgY2x1c3RlclxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJXZWJBcHBcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGRvbWFpbjogXCJhcHAuZXhhbXBsZS5jb21cIiB9LFxuICogICBzZXJ2aWNlczogW3sgbmFtZTogXCJ3ZWJcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSB9XVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNdWx0aS1zZXJ2aWNlIGNsdXN0ZXIgd2l0aCByb3V0aW5nXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkFwaUNsdXN0ZXJcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGRvbWFpbjogXCJhcGkuZXhhbXBsZS5jb21cIiB9LFxuICogICBzZXJ2aWNlczogW1xuICogICAgIHsgbmFtZTogXCJ1c2Vyc1wiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dLCByb3V0aW5nOiB7IHBhdGg6IFwiL3VzZXJzLypcIiB9IH0sXG4gKiAgICAgeyBuYW1lOiBcIm9yZGVyc1wiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAxIH1dLCByb3V0aW5nOiB7IHBhdGg6IFwiL29yZGVycy8qXCIgfSB9XG4gKiAgIF1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV29ya2VyIGNsdXN0ZXIgKG5vIEFMQilcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV29ya2Vyc1wiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgbG9hZEJhbGFuY2VyOiBmYWxzZSB9LFxuICogICBzZXJ2aWNlczogW1xuICogICAgIHsgbmFtZTogXCJwcm9jZXNzb3JcIiwgY29udGFpbmVyczogW3sgY29tbWFuZDogW1wibm9kZVwiLCBcIndvcmtlci5qc1wiXSB9XSB9XG4gKiAgIF1cbiAqIH0pKTtcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXB1dGVGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCk6IENvbXB1dGUgPT4ge1xuICAgICAgdmFsaWRhdGVDb21wdXRlUHJvcHMocHJvcHMpO1xuXG4gICAgICBjb25zdCBjb21wdXRlUHJvcHM6IElDb21wdXRlUHJvcHMgPSB7XG4gICAgICAgIC4uLntcbiAgICAgICAgICB2cGM6IGFwcC5nZXRWcGMoKSxcbiAgICAgICAgICBlY3JSZXBvc2l0b3J5OiBhcHAuZ2V0RGVmYXVsdENvbnRhaW5lclJlZ2lzdHJ5KClcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcHV0ZShzY29wZSwgaWQsIGNvbXB1dGVQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcHV0ZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuICBwdWJsaWMgc2NvcGU6IENvbnN0cnVjdDtcbiAgcHVibGljIHZwYzogSVZwYztcblxuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgY29tcHV0ZTogRWNzQ2x1c3RlciB8IEVjMkluc3RhbmNlIHwgTGFtYmRhRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICB0aGlzLmFkZENvbXB1dGUocHJvcHMpO1xuICB9XG5cbiAgYWRkQ29tcHV0ZShwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSBcImVjc1wiOlxuICAgICAgICB0aGlzLmFkZEVjc0NvbXB1dGUocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlYzJcIjpcbiAgICAgICAgdGhpcy5hZGRFYzJDb21wdXRlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGFtYmRhXCI6XG4gICAgICAgIHRoaXMuYWRkTGFtYmRhQ29tcHV0ZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBFeGhhdXN0aXZlbmVzcyBjaGVjayAtIFR5cGVTY3JpcHQgd2lsbCBlcnJvciBpZiBhIGNhc2UgaXMgbWlzc2luZ1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBwcm9wcztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBjb21wdXRlIHR5cGU6ICR7KF9leGhhdXN0aXZlIGFzIElDb21wdXRlUHJvcHMpLnR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRWMyQ29tcHV0ZShwcm9wczogRWMyQ29tcHV0ZVByb3BzKSB7XG4gICAgY29uc3QgZW5hYmxlU1NIID0gcHJvcHMuc3NoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuc3NoICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IGVjMlByb3BzID0ge1xuICAgICAgc2VydmljZU5hbWU6IGAke3RoaXMuaWR9U2VydmljZWAsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSB8fCBcInQzLm1pY3JvXCIsXG4gICAgICBlbmFibGVTU0gsXG4gICAgICB1c2VyRGF0YTogcHJvcHMudXNlckRhdGEsXG4gICAgICBtYWNoaW5lSW1hZ2U6IHByb3BzLm1hY2hpbmVJbWFnZSxcbiAgICAgIG1pbkNhcGFjaXR5OiBwcm9wcy5taW5DYXBhY2l0eSB8fCAxLFxuICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLm1heENhcGFjaXR5IHx8IDEsXG4gICAgICB2cGM6IHByb3BzLnZwY1xuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGUgPSBuZXcgRWMySW5zdGFuY2UodGhpcy5zY29wZSwgYCR7dGhpcy5pZH1FYzJgLCBlYzJQcm9wcyk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuY29tcHV0ZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkRWNzQ29tcHV0ZShwcm9wczogRWNzQ29tcHV0ZVByb3BzKSB7XG4gICAgLy8gVHJhbnNmb3JtIEVjc1NlcnZpY2VDb25maWdbXSB0byBFY3NTZXJ2aWNlUHJvcHNbXSBmb3IgRWNzQ2x1c3RlclxuICAgIGNvbnN0IHNlcnZpY2VzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXSA9IHByb3BzLnNlcnZpY2VzLm1hcChcbiAgICAgIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIC8vIEJ1aWxkIGNvbnRhaW5lciBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzZXJ2aWNlXG4gICAgICAgIGxldCBjb250YWluZXJzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXVtudW1iZXJdW1wiY29udGFpbmVyc1wiXTtcblxuICAgICAgICBpZiAoc2VydmljZS5jb250YWluZXJzICYmIHNlcnZpY2UuY29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gTWFwIGNvbnRhaW5lcnMsIGF1dG8tZ2VuZXJhdGluZyBuYW1lcyBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgICBjb250YWluZXJzID0gc2VydmljZS5jb250YWluZXJzLm1hcCgoYywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBjLm5hbWUgfHwgYCR7c2VydmljZS5uYW1lfUNvbnRhaW5lciR7aW5kZXggPiAwID8gaW5kZXggOiBcIlwifWAsXG4gICAgICAgICAgICBpbWFnZTogYy5pbWFnZSxcbiAgICAgICAgICAgIHBvcnQ6IGMucG9ydCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBjLmVudmlyb25tZW50LFxuICAgICAgICAgICAgc2VjcmV0c0ltcG9ydDogYy5zZWNyZXRzSW1wb3J0LFxuICAgICAgICAgICAgY29tbWFuZDogYy5jb21tYW5kLFxuICAgICAgICAgICAgZW50cnlQb2ludDogYy5lbnRyeVBvaW50LFxuICAgICAgICAgICAgZXNzZW50aWFsOiBjLmVzc2VudGlhbCxcbiAgICAgICAgICAgIGhlYWx0aENoZWNrOiBjLmhlYWx0aENoZWNrXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERlZmF1bHQgY29udGFpbmVyIChubyBwb3J0ID0gd29ya2VyKVxuICAgICAgICAgIGNvbnRhaW5lcnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX1Db250YWluZXJgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBzY2FsaW5nIGNvbmZpZ1xuICAgICAgICBsZXQgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbWluQ2FwYWNpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG1heENhcGFjaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNlcnZpY2Uuc2NhbGluZyAhPT0gZmFsc2UgJiYgc2VydmljZS5zY2FsaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsaW5nVHlwZSA9IHNlcnZpY2Uuc2NhbGluZy5zY2FsaW5nVHlwZSA/PyBTY2FsaW5nVHlwZS5DUFU7XG4gICAgICAgICAgbWluQ2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWluQ2FwYWNpdHk7XG4gICAgICAgICAgbWF4Q2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWF4Q2FwYWNpdHk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VydmljZS5zY2FsaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBEZWZhdWx0OiBlbmFibGUgc2NhbGluZyB3aXRoIENQVVxuICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuQ1BVO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgaW1hZ2U6IHNlcnZpY2UuaW1hZ2UsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBjcHU6IHNlcnZpY2UuY3B1LFxuICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgICAgIGRlc2lyZWRDb3VudDogc2VydmljZS5kZXNpcmVkQ291bnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGUsXG4gICAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgICAgbWF4Q2FwYWNpdHksXG4gICAgICAgICAgcm91dGluZzogc2VydmljZS5yb3V0aW5nLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHNlcnZpY2UudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogc2VydmljZS50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBjb25uZWN0aW9uczogc2VydmljZS5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjYXBhY2l0eVByb3ZpZGVyOiBzZXJ2aWNlLmNhcGFjaXR5UHJvdmlkZXIsXG4gICAgICAgICAgZWMyQ29uZmlnOiBzZXJ2aWNlLmVjMkNvbmZpZ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBCdWlsZCBjbHVzdGVyIGNvbmZpZ1xuICAgIGNvbnN0IGNsdXN0ZXI6IEVjc0NsdXN0ZXJQcm9wc1tcImNsdXN0ZXJcIl0gPSBwcm9wcy5jbHVzdGVyXG4gICAgICA/IHtcbiAgICAgICAgICBkb21haW46IHByb3BzLmNsdXN0ZXIuZG9tYWluLFxuICAgICAgICAgIGxvYWRCYWxhbmNlcjogcHJvcHMuY2x1c3Rlci5sb2FkQmFsYW5jZXIsXG4gICAgICAgICAgZGlyZWN0QWNjZXNzOiBwcm9wcy5jbHVzdGVyLmRpcmVjdEFjY2VzcyxcbiAgICAgICAgICBkb21haW5Db25maWc6IHByb3BzLmNsdXN0ZXIuZG9tYWluQ29uZmlnXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZWNzUHJvcHM6IEVjc0NsdXN0ZXJQcm9wcyA9IHtcbiAgICAgIGNsdXN0ZXJOYW1lOiBgJHt0aGlzLmlkfUNsdXN0ZXJgLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBlY3JSZXBvc2l0b3J5OiBwcm9wcy5lY3JSZXBvc2l0b3J5IHx8IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgICBjbHVzdGVyLFxuICAgICAgc2VydmljZXNcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlID0gbmV3IEVjc0NsdXN0ZXIodGhpcy5zY29wZSwgYCR7dGhpcy5pZH1FY3NgLCBlY3NQcm9wcyk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuY29tcHV0ZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkTGFtYmRhQ29tcHV0ZShwcm9wczogTGFtYmRhQ29tcHV0ZVByb3BzKSB7XG4gICAgbGV0IGNvZGU6IENvZGU7XG4gICAgbGV0IGhhbmRsZXI6IHN0cmluZztcbiAgICBsZXQgcnVudGltZTogUnVudGltZTtcblxuICAgIGlmIChwcm9wcy5kZXBsb3ltZW50ID09PSBcImNvbnRhaW5lclwiKSB7XG4gICAgICAvLyBDb250YWluZXItYmFzZWQgTGFtYmRhIHVzaW5nIEVDUlxuICAgICAgaWYgKHByb3BzLmVjclJlcG9zaXRvcnkgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSB7XG4gICAgICAgIGNvZGUgPSBDb2RlLmZyb21FY3JJbWFnZShwcm9wcy5lY3JSZXBvc2l0b3J5LCB7XG4gICAgICAgICAgdGFnT3JEaWdlc3Q6IFwibGF0ZXN0XCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJlY3JSZXBvc2l0b3J5IG11c3QgYmUgYSBSZXBvc2l0b3J5IGluc3RhbmNlIGZvciBMYW1iZGEgY29tcHV0ZSB0eXBlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udGFpbmVyIExhbWJkYSByZXF1aXJlcyB0aGVzZSBzcGVjaWFsIHZhbHVlc1xuICAgICAgaGFuZGxlciA9IEhhbmRsZXIuRlJPTV9JTUFHRTtcbiAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLkZST01fSU1BR0U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvZGUtYmFzZWQgTGFtYmRhIC0gcHJvcHMuZGVwbG95bWVudCA9PT0gXCJjb2RlXCJcbiAgICAgIGNvZGUgPSBwcm9wcy5jb2RlO1xuICAgICAgaGFuZGxlciA9IHByb3BzLmhhbmRsZXIgfHwgXCJpbmRleC5oYW5kbGVyXCI7XG4gICAgICBydW50aW1lID0gcHJvcHMucnVudGltZSB8fCBSdW50aW1lLk5PREVKU18xOF9YO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgcHJlc2VuY2UtYmFzZWQgZnVuY3Rpb25VcmwgY29uZmlnIHRvIGxlZ2FjeSBib29sZWFuIGZvcm1hdFxuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQ29uZmlnID0gcHJvcHMuZnVuY3Rpb25Vcmw7XG4gICAgY29uc3QgZW5hYmxlRnVuY3Rpb25VcmwgPVxuICAgICAgZnVuY3Rpb25VcmxDb25maWcgIT09IHVuZGVmaW5lZCAmJiBmdW5jdGlvblVybENvbmZpZyAhPT0gZmFsc2U7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxBdXRoVHlwZSA9XG4gICAgICBlbmFibGVGdW5jdGlvblVybCAmJiB0eXBlb2YgZnVuY3Rpb25VcmxDb25maWcgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBmdW5jdGlvblVybENvbmZpZy5hdXRoVHlwZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBmdW5jdGlvblVybENvcnMgPVxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwgJiYgdHlwZW9mIGZ1bmN0aW9uVXJsQ29uZmlnID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gZnVuY3Rpb25VcmxDb25maWcuY29yc1xuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGxhbWJkYVByb3BzID0ge1xuICAgICAgY29kZTogY29kZSxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgaGFuZGxlcixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHJvbGVEZXNjcmlwdGlvbjogcHJvcHMucm9sZURlc2NyaXB0aW9uLFxuICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3kgfHwgW10sXG4gICAgICBlbmFibGVGdW5jdGlvblVybCxcbiAgICAgIGZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gICAgICBmdW5jdGlvblVybENvcnMsXG4gICAgICBzY2hlZHVsZUV4cHJlc3Npb246IChwcm9wcyBhcyBhbnkpLnNjaGVkdWxlRXhwcmVzc2lvbixcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGNvbnRhaW5lclNlY3JldHNJbXBvcnQ6IHByb3BzLmNvbnRhaW5lclNlY3JldHNJbXBvcnQsIC8vIFBhc3MgdGhyb3VnaFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBMYW1iZGFGdW5jdGlvbihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgJHt0aGlzLmlkfUxhbWJkYWAsXG4gICAgICBsYW1iZGFQcm9wc1xuICAgICk7XG5cbiAgICBpZiAocHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29ubiBvZiBwcm9wcy5jb25uZWN0aW9ucykge1xuICAgICAgICB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnMuYWxsb3dUbyhjb25uLCBQb3J0LmFsbFRjcCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -3,7 +3,7 @@ import type App from "../../app";
3
3
  import { type Secret } from "../../resources/aws/secrets";
4
4
  import { type Connections, type IConnectable, type IVpc, type SubnetSelection } from "aws-cdk-lib/aws-ec2";
5
5
  import { type IInstanceEngine, type IClusterEngine } from "aws-cdk-lib/aws-rds";
6
- import { type Duration } from "aws-cdk-lib";
6
+ import { Duration } from "aws-cdk-lib";
7
7
  import { type IKey } from "aws-cdk-lib/aws-kms";
8
8
  export type DatabaseEngine = "postgresql" | "mysql";
9
9
  export interface EngineConfig {
@@ -166,6 +166,7 @@ export interface InstanceDatabaseProps extends BaseDatabaseProps {
166
166
  allocatedStorage?: number;
167
167
  port?: number;
168
168
  multiAz?: boolean;
169
+ backupRetention?: number;
169
170
  performanceInsights?: PerformanceInsightsConfig | false;
170
171
  proxy?: ProxyConfig | false;
171
172
  readReplica?: ReadReplicaConfig | false;
@@ -10,6 +10,7 @@ const constructs_1 = require("constructs");
10
10
  const database_1 = require("../../resources/aws/database");
11
11
  const rdsAuroraGlobal_1 = require("../../resources/aws/database/rdsAuroraGlobal");
12
12
  const aws_rds_1 = require("aws-cdk-lib/aws-rds");
13
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
13
14
  exports.DATABASE_ENGINE_CONFIG = {
14
15
  postgresql: {
15
16
  aurora: { version: "16.6", majorVersion: "16" },
@@ -191,10 +192,11 @@ class Database extends constructs_1.Construct {
191
192
  case "Instance":
192
193
  this.addRdsInstance(props);
193
194
  break;
194
- default:
195
+ default: {
195
196
  // Exhaustiveness check
196
197
  const _exhaustive = props;
197
198
  throw new Error(`Unsupported database type ${props.type}`);
199
+ }
198
200
  }
199
201
  }
200
202
  addAurora(props) {
@@ -272,6 +274,9 @@ class Database extends constructs_1.Construct {
272
274
  engine: resolvedEngine,
273
275
  engineConfig,
274
276
  multiAz: props.multiAz,
277
+ backupRetention: props.backupRetention !== undefined
278
+ ? aws_cdk_lib_1.Duration.days(props.backupRetention)
279
+ : undefined,
275
280
  performanceInsights: props.performanceInsights,
276
281
  proxy: props.proxy,
277
282
  readReplica: props.readReplica,
@@ -298,4 +303,4 @@ class Database extends constructs_1.Construct {
298
303
  }
299
304
  }
300
305
  exports.Database = Database;
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZGQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUFrREQsMENBU0M7QUFLRCx3Q0FTQztBQXJMRCwyQ0FBdUM7QUFHdkMsMkRBQXNFO0FBQ3RFLGtGQUErRTtBQVMvRSxpREFTNkI7QUFZaEIsUUFBQSxzQkFBc0IsR0FTL0I7SUFDRixVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDL0MsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSxVQUFVO1FBQzNCLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDhDQUE4QztLQUNoRTtJQUNELEtBQUssRUFBRTtRQUNMLHdFQUF3RTtRQUN4RSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRTtRQUN0RSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7UUFDbkQsZUFBZSxFQUFFLE9BQU87UUFDeEIsYUFBYSxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSx5Q0FBeUM7S0FDM0Q7Q0FDRixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBaUQ7SUFDNUUsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUNmLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsOEJBQXNCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxPQUFPLCtCQUFxQixDQUFDLGNBQWMsQ0FBQztZ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QUFDLFdBQVc7WUFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1lBQzVDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7WUFDNUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtZQUM1QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1NBQ3pDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDL0MsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBekpELDRCQXlKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQgeyBSZHNBdXJvcmEsIFJkc0luc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2VcIjtcbmltcG9ydCB7IFJkc0F1cm9yYUdsb2JhbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL3Jkc0F1cm9yYUdsb2JhbFwiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5cbmltcG9ydCB7XG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgU3VibmV0U2VsZWN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICB0eXBlIElJbnN0YW5jZUVuZ2luZSxcbiAgdHlwZSBJQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLFxuICBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbixcbiAgUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBNeXNxbEVuZ2luZVZlcnNpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IHR5cGUgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgSUtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlRW5naW5lID0gXCJwb3N0Z3Jlc3FsXCIgfCBcIm15c3FsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lQ29uZmlnIHtcbiAgZGVmYXVsdFVzZXJuYW1lOiBzdHJpbmc7XG4gIHNzbFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJvdGF0aW9uQXBwTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREFUQUJBU0VfRU5HSU5FX0NPTkZJRzogUmVjb3JkPFxuICBEYXRhYmFzZUVuZ2luZSxcbiAge1xuICAgIGF1cm9yYTogeyB2ZXJzaW9uOiBzdHJpbmc7IG1ham9yVmVyc2lvbjogc3RyaW5nIH07XG4gICAgaW5zdGFuY2U6IHsgdmVyc2lvbjogc3RyaW5nOyBtYWpvclZlcnNpb246IHN0cmluZyB9O1xuICAgIGRlZmF1bHRVc2VybmFtZTogc3RyaW5nO1xuICAgIHNzbFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcm90YXRpb25BcHBOYW1lOiBzdHJpbmc7XG4gIH1cbj4gPSB7XG4gIHBvc3RncmVzcWw6IHtcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogXCIxNi42XCIsIG1ham9yVmVyc2lvbjogXCIxNlwiIH0sXG4gICAgaW5zdGFuY2U6IHsgdmVyc2lvbjogXCIxNy41XCIsIG1ham9yVmVyc2lvbjogXCIxN1wiIH0sXG4gICAgZGVmYXVsdFVzZXJuYW1lOiBcInBvc3RncmVzXCIsXG4gICAgc3NsUGFyYW1ldGVyczogeyBcInJkcy5mb3JjZV9zc2xcIjogXCIxXCIgfSxcbiAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNQb3N0Z3JlU1FMUm90YXRpb25NdWx0aVVzZXJcIlxuICB9LFxuICBteXNxbDoge1xuICAgIC8vIG1ham9yVmVyc2lvbiBtdXN0IGJlIEF1cm9yYSB2ZXJzaW9uICgzLjA4LjApLCBOT1QgTXlTUUwgdmVyc2lvbiAoOC4wKVxuICAgIGF1cm9yYTogeyB2ZXJzaW9uOiBcIjguMC5teXNxbF9hdXJvcmEuMy4wOC4wXCIsIG1ham9yVmVyc2lvbjogXCIzLjA4LjBcIiB9LFxuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IFwiOC40LjRcIiwgbWFqb3JWZXJzaW9uOiBcIjguNFwiIH0sXG4gICAgZGVmYXVsdFVzZXJuYW1lOiBcImFkbWluXCIsXG4gICAgc3NsUGFyYW1ldGVyczogeyByZXF1aXJlX3NlY3VyZV90cmFuc3BvcnQ6IFwiT05cIiB9LFxuICAgIHJvdGF0aW9uQXBwTmFtZTogXCJTZWNyZXRzTWFuYWdlclJEU015U1FMUm90YXRpb25NdWx0aVVzZXJcIlxuICB9XG59O1xuXG5jb25zdCBBVVJPUkFfRU5HSU5FX0ZBQ1RPUklFUzogUmVjb3JkPERhdGFiYXNlRW5naW5lLCAoKSA9PiBJQ2x1c3RlckVuZ2luZT4gPSB7XG4gIHBvc3RncmVzcWw6ICgpID0+IHtcbiAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID0gREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5wb3N0Z3Jlc3FsLmF1cm9yYTtcbiAgICByZXR1cm4gRGF0YWJhc2VDbHVzdGVyRW5naW5lLmF1cm9yYVBvc3RncmVzKHtcbiAgICAgIHZlcnNpb246IEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgfSk7XG4gIH0sXG4gIG15c3FsOiAoKSA9PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcubXlzcWwuYXVyb3JhO1xuICAgIHJldHVybiBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhTXlzcWwoe1xuICAgICAgdmVyc2lvbjogQXVyb3JhTXlzcWxFbmdpbmVWZXJzaW9uLm9mKHZlcnNpb24sIG1ham9yVmVyc2lvbilcbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3QgSU5TVEFOQ0VfRU5HSU5FX0ZBQ1RPUklFUzogUmVjb3JkPERhdGFiYXNlRW5naW5lLCAoKSA9PiBJSW5zdGFuY2VFbmdpbmU+ID1cbiAge1xuICAgIHBvc3RncmVzcWw6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPVxuICAgICAgICBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLnBvc3RncmVzcWwuaW5zdGFuY2U7XG4gICAgICByZXR1cm4gRGF0YWJhc2VJbnN0YW5jZUVuZ2luZS5wb3N0Z3Jlcyh7XG4gICAgICAgIHZlcnNpb246IFBvc3RncmVzRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG15c3FsOiAoKSA9PiB7XG4gICAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID0gREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5teXNxbC5pbnN0YW5jZTtcbiAgICAgIHJldHVybiBEYXRhYmFzZUluc3RhbmNlRW5naW5lLm15c3FsKHtcbiAgICAgICAgdmVyc2lvbjogTXlzcWxFbmdpbmVWZXJzaW9uLm9mKHZlcnNpb24sIG1ham9yVmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1cm9yYUNsdXN0ZXJFbmdpbmUoZW5naW5lOiBEYXRhYmFzZUVuZ2luZSk6IElDbHVzdGVyRW5naW5lIHtcbiAgcmV0dXJuIEFVUk9SQV9FTkdJTkVfRkFDVE9SSUVTW2VuZ2luZV0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluc3RhbmNlRW5naW5lKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBJSW5zdGFuY2VFbmdpbmUge1xuICByZXR1cm4gSU5TVEFOQ0VfRU5HSU5FX0ZBQ1RPUklFU1tlbmdpbmVdKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmdpbmVDb25maWcoZW5naW5lOiBEYXRhYmFzZUVuZ2luZSk6IEVuZ2luZUNvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IERBVEFCQVNFX0VOR0lORV9DT05GSUdbZW5naW5lXTtcbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0VXNlcm5hbWU6IGNvbmZpZy5kZWZhdWx0VXNlcm5hbWUsXG4gICAgc3NsUGFyYW1ldGVyczogY29uZmlnLnNzbFBhcmFtZXRlcnMsXG4gICAgcm90YXRpb25BcHBOYW1lOiBjb25maWcucm90YXRpb25BcHBOYW1lXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlDb25maWcge1xuICBtYXhDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgbWF4SWRsZUNvbm5lY3Rpb25zPzogbnVtYmVyO1xuICBjb25uZWN0aW9uQm9ycm93VGltZW91dD86IG51bWJlcjtcbiAgcmVxdWlyZVRMUz86IGJvb2xlYW47XG4gIHZwY1N1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFJlcGxpY2FDb25maWcge1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbHNDb25maWcge1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgc2VjcmV0Um90YXRpb24/OiBTZWNyZXRSb3RhdGlvbkNvbmZpZyB8IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldFJvdGF0aW9uQ29uZmlnIHtcbiAgYXV0b21hdGljYWxseUFmdGVyPzogRHVyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGlvbkNvbmZpZyB7XG4gIHN0b3JhZ2VLZXk/OiBFbmNyeXB0aW9uS2V5U3BlYztcbn1cblxuZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblBlcmlvZCA9IDcgfCAzMSB8IDkzIHwgMTg2IHwgMzcyIHwgNzMxO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcge1xuICBlbmNyeXB0aW9uS2V5PzogRW5jcnlwdGlvbktleVNwZWM7XG4gIC8qKiBSZXRlbnRpb24gcGVyaW9kIGluIGRheXMuIERlZmF1bHQ6IDMxICgxIG1vbnRoKS4gKi9cbiAgcmV0ZW50aW9uUGVyaW9kPzogUGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblBlcmlvZDtcbn1cblxuLy8gTWFya2VyIGZvciBBV1MgbWFuYWdlZCBlbmNyeXB0aW9uIGtleSAoYXdzL3JkcywgYXdzL3MzLCBldGMuKVxuZXhwb3J0IGludGVyZmFjZSBBd3NNYW5hZ2VkS2V5IHtcbiAgcmVhZG9ubHkgYXdzTWFuYWdlZDogdHJ1ZTtcbn1cblxuLy8gTWFya2VyIGZvciBleHBsaWNpdGx5IHJlcXVlc3RpbmcgYSBDdXN0b21lciBNYW5hZ2VkIEtleSAoQ01LKS5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyIHtcbiAgcmVhZG9ubHkgdXNlQ01LOiB0cnVlO1xufVxuXG4vLyBFbmNyeXB0aW9uIGtleSBzcGVjaWZpY2F0aW9uIGZvciBSRFMgcmVzb3VyY2VzLlxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbktleVNwZWMgPSBJS2V5IHwgQXdzTWFuYWdlZEtleSB8IEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlcjtcblxuLy8gVHlwZSBndWFyZCB0byBjaGVjayBpZiB0aGUgZW5jcnlwdGlvbiBrZXkgc3BlYyBpcyBBV1MgbWFuYWdlZC5cbmV4cG9ydCBmdW5jdGlvbiBpc0F3c01hbmFnZWRLZXkoXG4gIHNwZWM6IEVuY3J5cHRpb25LZXlTcGVjIHwgdW5kZWZpbmVkXG4pOiBzcGVjIGlzIEF3c01hbmFnZWRLZXkge1xuICByZXR1cm4gKFxuICAgIHNwZWMgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR5cGVvZiBzcGVjID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJhd3NNYW5hZ2VkXCIgaW4gc3BlYyAmJlxuICAgIChzcGVjIGFzIEF3c01hbmFnZWRLZXkpLmF3c01hbmFnZWQgPT09IHRydWVcbiAgKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIENNSyBpcyBleHBsaWNpdGx5IHJlcXVlc3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ01LUmVxdWVzdGVkKFxuICBzcGVjOiBFbmNyeXB0aW9uS2V5U3BlYyB8IHVuZGVmaW5lZFxuKTogc3BlYyBpcyBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXIge1xuICByZXR1cm4gKFxuICAgIHNwZWMgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR5cGVvZiBzcGVjID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJ1c2VDTUtcIiBpbiBzcGVjICYmXG4gICAgKHNwZWMgYXMgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyKS51c2VDTUsgPT09IHRydWVcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZSBjb25zdGFudCBmb3Igc3BlY2lmeWluZyBBV1MgbWFuYWdlZCBlbmNyeXB0aW9uICh0aGUgZGVmYXVsdCkuXG4gKiBAZXhhbXBsZVxuICogZW5jcnlwdGlvbjogeyBzdG9yYWdlS2V5OiBBV1NfTUFOQUdFRCB9XG4gKi9cbmV4cG9ydCBjb25zdCBBV1NfTUFOQUdFRDogQXdzTWFuYWdlZEtleSA9IHsgYXdzTWFuYWdlZDogdHJ1ZSB9IGFzIGNvbnN0O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGNvbnN0YW50IGZvciBleHBsaWNpdGx5IHJlcXVlc3RpbmcgQ01LLlxuICogQGV4YW1wbGVcbiAqIGVuY3J5cHRpb246IHsgc3RvcmFnZUtleTogVVNFX0NNSyB9XG4gKi9cbmV4cG9ydCBjb25zdCBVU0VfQ01LOiBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXIgPSB7IHVzZUNNSzogdHJ1ZSB9IGFzIGNvbnN0O1xuXG4vKipcbiAqICoqREVTVFJVQ1RJVkUqKjogQ2hhbmdpbmcgYHN0b3JhZ2VLZXlgIGFmdGVyIGNsdXN0ZXIgY3JlYXRpb24gY2F1c2VzIGNsdXN0ZXIgUkVQTEFDRU1FTlQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhRW5jcnlwdGlvbkNvbmZpZyB7XG4gIC8qKiBERVNUUlVDVElWRTogQ2hhbmdpbmcgYWZ0ZXIgY3JlYXRpb24gY2F1c2VzIGNsdXN0ZXIgcmVwbGFjZW1lbnQgKi9cbiAgc3RvcmFnZUtleT86IEVuY3J5cHRpb25LZXlTcGVjO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYVJlYWRlckNvbmZpZyB7XG4gIHNjYWxlV2l0aFdyaXRlcj86IGJvb2xlYW47XG4gIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM/OiBib29sZWFuO1xuICBpZGVudGlmaWVyU3VmZml4Pzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYVdyaXRlckNvbmZpZyB7XG4gIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM/OiBib29sZWFuO1xuICBpZGVudGlmaWVyU3VmZml4Pzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYVJlYWRlcnNDb25maWcge1xuICAvKiogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggaW5zdGFuY2VzICovXG4gIGNvdW50PzogbnVtYmVyO1xuICAvKiogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY291bnQgKi9cbiAgaW5zdGFuY2VzPzogQXVyb3JhUmVhZGVyQ29uZmlnW107XG4gIGRlZmF1bHRFbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbn1cblxudHlwZSBEYXRhYmFzZVR5cGUgPSBcIkF1cm9yYVwiIHwgXCJJbnN0YW5jZVwiIHwgXCJHbG9iYWxBdXJvcmFcIjtcblxuLyoqXG4gKiBCYXNlIHByb3BzIGZvciBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0ge1xuICB2cGM/OiBJVnBjO1xuICBkYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICBkZWxldGlvblByb3RlY3Rpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkF1cm9yYVwiO1xuICBkYXRhYmFzZUVuZ2luZT86IERhdGFiYXNlRW5naW5lO1xuICAvKiogT3ZlcnJpZGVzIGRhdGFiYXNlRW5naW5lIGlmIHByb3ZpZGVkICovXG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICB3cml0ZXI/OiBBdXJvcmFXcml0ZXJDb25maWc7XG4gIHJlYWRlcnM/OiBBdXJvcmFSZWFkZXJzQ29uZmlnIHwgZmFsc2U7XG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgLyoqIERFU1RSVUNUSVZFOiBDaGFuZ2luZyBzdG9yYWdlS2V5IGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgcGVyZm9ybWFuY2VJbnNpZ2h0cz86IFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHMgZXh0ZW5kcyBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiR2xvYmFsQXVyb3JhXCI7XG4gIHByaW1hcnlSZWdpb246IHN0cmluZztcbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICBnbG9iYWxDbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nPzogYm9vbGVhbjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIC8qKiBERVNUUlVDVElWRTogQ2hhbmdpbmcgc3RvcmFnZUtleSBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBlbmNyeXB0aW9uPzogQXVyb3JhRW5jcnlwdGlvbkNvbmZpZztcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBtb25pdG9yaW5nSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZURhdGFiYXNlUHJvcHMgZXh0ZW5kcyBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiSW5zdGFuY2VcIjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJSW5zdGFuY2VFbmdpbmU7XG4gIGFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXI7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIG11bHRpQXo/OiBib29sZWFuO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIHJlYWRSZXBsaWNhPzogUmVhZFJlcGxpY2FDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgZW5jcnlwdGlvbj86IEVuY3J5cHRpb25Db25maWc7XG4gIHB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBpbnN0YW5jZSBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZGF0YWJhc2UgcHJvcHMgYW5kIGxvZ3Mgd2FybmluZ3MgZm9yIGlnbm9yZWQgb3IgbWlzY29uZmlndXJlZCBvcHRpb25zLlxuICogVGhlc2UgY2hlY2tzIGhlbHAgY2F0Y2ggaXNzdWVzIHdoZW4gcHJvcHMgY29tZSBmcm9tIGR5bmFtaWMgc291cmNlcyB3aGVyZVxuICogVHlwZVNjcmlwdCdzIGNvbXBpbGUtdGltZSBjaGVja3MgbWF5IG5vdCBhcHBseS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzOiBJRGF0YWJhc2VQcm9wcyk6IHZvaWQge1xuICBjb25zdCBwcm9wc0FueSA9IHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gR2xvYmFsQXVyb3JhIHJlcXVpcmVzIHByaW1hcnlSZWdpb25cbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiR2xvYmFsQXVyb3JhXCIgJiYgIXByb3BzLnByaW1hcnlSZWdpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZSByZXF1aXJlcyAncHJpbWFyeVJlZ2lvbicuIFwiICtcbiAgICAgICAgXCJTcGVjaWZ5IHRoZSBBV1MgcmVnaW9uIHdoZXJlIHRoZSBwcmltYXJ5IGNsdXN0ZXIgd2lsbCBiZSBjcmVhdGVkLlwiXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgSW5zdGFuY2Utb25seSBvcHRpb25zIG9uIEF1cm9yYS9HbG9iYWxBdXJvcmFcbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiQXVyb3JhXCIgfHwgcHJvcHMudHlwZSA9PT0gXCJHbG9iYWxBdXJvcmFcIikge1xuICAgIGlmIChcInJlYWRSZXBsaWNhXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkucmVhZFJlcGxpY2EgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAncmVhZFJlcGxpY2EnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gZGF0YWJhc2VzLiBgICtcbiAgICAgICAgICBcIlVzZSAncmVhZGVycycgY29uZmlndXJhdGlvbiBmb3IgQXVyb3JhIHJlYWQgc2NhbGluZy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwibXVsdGlBelwiIGluIHByb3BzQW55ICYmIHByb3BzQW55Lm11bHRpQXogIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnbXVsdGlBeicgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBkYXRhYmFzZXMuIGAgK1xuICAgICAgICAgIFwiQXVyb3JhIHByb3ZpZGVzIGF1dG9tYXRpYyBtdWx0aS1BWiByZXBsaWNhdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgXCJhbGxvY2F0ZWRTdG9yYWdlXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmFsbG9jYXRlZFN0b3JhZ2UgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnYWxsb2NhdGVkU3RvcmFnZScgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBkYXRhYmFzZXMuIGAgK1xuICAgICAgICAgIFwiQXVyb3JhIHVzZXMgYXV0b21hdGljIHN0b3JhZ2Ugc2NhbGluZy5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYXJuIGFib3V0IEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gSW5zdGFuY2VcbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiSW5zdGFuY2VcIikge1xuICAgIGlmIChcInJlYWRlcnNcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5yZWFkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbRmphbGxdIFdhcm5pbmc6ICdyZWFkZXJzJyBpcyBpZ25vcmVkIGZvciBJbnN0YW5jZSBkYXRhYmFzZXMuIFwiICtcbiAgICAgICAgICBcIlVzZSAncmVhZFJlcGxpY2EnIGNvbmZpZ3VyYXRpb24gZm9yIFJEUyBJbnN0YW5jZSByZWFkIHNjYWxpbmcuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcIndyaXRlclwiIGluIHByb3BzQW55ICYmIHByb3BzQW55LndyaXRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0ZqYWxsXSBXYXJuaW5nOiAnd3JpdGVyJyBpcyBpZ25vcmVkIGZvciBJbnN0YW5jZSBkYXRhYmFzZXMuIFwiICtcbiAgICAgICAgICBcIldyaXRlciBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBBdXJvcmEgY2x1c3RlcnMuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIFwiYmFja3VwUmV0ZW50aW9uXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmJhY2t1cFJldGVudGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0ZqYWxsXSBXYXJuaW5nOiAnYmFja3VwUmV0ZW50aW9uJyBpbiBkYXlzIGZvcm1hdCBpcyBBdXJvcmEtc3BlY2lmaWMuIFwiICtcbiAgICAgICAgICBcIkZvciBSRFMgSW5zdGFuY2UsIGJhY2t1cCByZXRlbnRpb24gaXMgY29uZmlndXJlZCB2aWEgRHVyYXRpb24gaW4gdGhlIGNvbnN0cnVjdC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYXJuIGFib3V0IEdsb2JhbEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gbm9uLWdsb2JhbCBkYXRhYmFzZXNcbiAgaWYgKHByb3BzLnR5cGUgIT09IFwiR2xvYmFsQXVyb3JhXCIpIHtcbiAgICBpZiAoXCJwcmltYXJ5UmVnaW9uXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkucHJpbWFyeVJlZ2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdwcmltYXJ5UmVnaW9uJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGRhdGFiYXNlcy4gYCArXG4gICAgICAgICAgXCJSZWdpb24gY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gR2xvYmFsQXVyb3JhLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBcInNlY29uZGFyeVJlZ2lvbnNcIiBpbiBwcm9wc0FueSAmJlxuICAgICAgcHJvcHNBbnkuc2Vjb25kYXJ5UmVnaW9ucyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdzZWNvbmRhcnlSZWdpb25zJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGRhdGFiYXNlcy4gYCArXG4gICAgICAgICAgXCJNdWx0aS1yZWdpb24gY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gR2xvYmFsQXVyb3JhLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBcImVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZ1wiIGluIHByb3BzQW55ICYmXG4gICAgICBwcm9wc0FueS5lbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGRhdGFiYXNlcy4gYCArXG4gICAgICAgICAgXCJXcml0ZSBmb3J3YXJkaW5nIG9ubHkgYXBwbGllcyB0byBHbG9iYWxBdXJvcmEuXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZUZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQ8VCBleHRlbmRzIElEYXRhYmFzZVByb3BzPihpZDogc3RyaW5nLCBwcm9wczogVCkge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIHZhbGlkYXRlRGF0YWJhc2VQcm9wcyhwcm9wcyk7XG5cbiAgICAgIGNvbnN0IGRhdGFiYXNlUHJvcHMgPSB7XG4gICAgICAgIC4uLihwcm9wcyBhcyBhbnkpLFxuICAgICAgICB2cGM6IChwcm9wcy52cGMgfHwgYXBwLmdldFZwYygpKSBhcyBJVnBjXG4gICAgICB9IGFzIFQ7XG4gICAgICByZXR1cm4gbmV3IERhdGFiYXNlKHNjb3BlLCBpZCwgZGF0YWJhc2VQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGRhdGFiYXNlOiBSZHNBdXJvcmEgfCBSZHNJbnN0YW5jZSB8IFJkc0F1cm9yYUdsb2JhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSURhdGFiYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZTtcbiAgICB0aGlzLmFkZERhdGFiYXNlKHByb3BzKTtcbiAgfVxuXG4gIGFkZERhdGFiYXNlKHByb3BzOiBJRGF0YWJhc2VQcm9wcykge1xuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSBcIkF1cm9yYVwiOlxuICAgICAgICB0aGlzLmFkZEF1cm9yYShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkdsb2JhbEF1cm9yYVwiOlxuICAgICAgICB0aGlzLmFkZEF1cm9yYUdsb2JhbChwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkluc3RhbmNlXCI6XG4gICAgICAgIHRoaXMuYWRkUmRzSW5zdGFuY2UocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGNoZWNrXG4gICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGFiYXNlIHR5cGUgJHsocHJvcHMgYXMgYW55KS50eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhKHByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgIHdyaXRlcjogcHJvcHMud3JpdGVyLFxuICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyxcbiAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbixcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93LFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdXJvcmFHbG9iYWwocHJvcHM6IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcbiAgICBpZiAoIXByb3BzLnByaW1hcnlSZWdpb24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmltYXJ5UmVnaW9uIGlzIHJlcXVpcmVkIGZvciBHbG9iYWwgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhR2xvYmFsKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNHbG9iYWxgLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIHByaW1hcnlSZWdpb246IHByb3BzLnByaW1hcnlSZWdpb24sXG4gICAgICAgIHNlY29uZGFyeVJlZ2lvbnM6IHByb3BzLnNlY29uZGFyeVJlZ2lvbnMsXG4gICAgICAgIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyOiBwcm9wcy5nbG9iYWxDbHVzdGVySWRlbnRpZmllcixcbiAgICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgICAgZW5naW5lQ29uZmlnLFxuICAgICAgICBlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmc6IHByb3BzLmVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZyxcbiAgICAgICAgd3JpdGVyOiBwcm9wcy53cml0ZXIsXG4gICAgICAgIHJlYWRlcnM6IHByb3BzLnJlYWRlcnMsXG4gICAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHByb3BzLmNyZWRlbnRpYWxzLFxuICAgICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbixcbiAgICAgICAgbW9uaXRvcmluZ0ludGVydmFsOiBwcm9wcy5tb25pdG9yaW5nSW50ZXJ2YWwsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgICBzbmFwc2hvdFVzZXJuYW1lOiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmRzSW5zdGFuY2UocHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKSB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEluc3RhbmNlIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRJbnN0YW5jZUVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0luc3RhbmNlKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICBlbmdpbmVDb25maWcsXG4gICAgICBtdWx0aUF6OiBwcm9wcy5tdWx0aUF6LFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgIHJlYWRSZXBsaWNhOiBwcm9wcy5yZWFkUmVwbGljYSxcbiAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICBzbmFwc2hvdFVzZXJuYW1lOiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBTZWNyZXQge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldENyZWRlbnRpYWxzKCk7XG4gIH1cblxuICBnZXRIb3N0RW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKTtcbiAgfVxuXG4gIGdldEhvc3RQb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKTtcbiAgfVxuXG4gIGdldERhdGFiYXNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlTmFtZTtcbiAgfVxufVxuIl19
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZGQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUFrREQsMENBU0M7QUFLRCx3Q0FTQztBQXJMRCwyQ0FBdUM7QUFHdkMsMkRBQXNFO0FBQ3RFLGtGQUErRTtBQVMvRSxpREFTNkI7QUFDN0IsNkNBQXVDO0FBVzFCLFFBQUEsc0JBQXNCLEdBUy9CO0lBQ0YsVUFBVSxFQUFFO1FBQ1YsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQy9DLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRTtRQUNqRCxlQUFlLEVBQUUsVUFBVTtRQUMzQixhQUFhLEVBQUUsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLGVBQWUsRUFBRSw4Q0FBOEM7S0FDaEU7SUFDRCxLQUFLLEVBQUU7UUFDTCx3RUFBd0U7UUFDeEUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUU7UUFDdEUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO1FBQ25ELGVBQWUsRUFBRSxPQUFPO1FBQ3hCLGFBQWEsRUFBRSxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRTtRQUNqRCxlQUFlLEVBQUUseUNBQXlDO0tBQzNEO0NBQ0YsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQWlEO0lBQzVFLFVBQVUsRUFBRSxHQUFHLEVBQUU7UUFDZixNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLDhCQUFzQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDM0UsT0FBTywrQkFBcUIsQ0FB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akMsQ0FBQyxDQUFDLHNCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxTQUFTO1lBQ2YsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtZQUM5QyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtZQUM1QyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1lBQzVDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7WUFDNUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQTlKRCw0QkE4SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHsgUmRzQXVyb3JhLCBSZHNJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBSZHNBdXJvcmFHbG9iYWwgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNBdXJvcmFHbG9iYWxcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5pbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgdHlwZSBJVnBjLFxuICB0eXBlIFN1Ym5ldFNlbGVjdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJSW5zdGFuY2VFbmdpbmUsXG4gIHR5cGUgSUNsdXN0ZXJFbmdpbmUsXG4gIERhdGFiYXNlQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VJbnN0YW5jZUVuZ2luZSxcbiAgQXVyb3JhUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBBdXJvcmFNeXNxbEVuZ2luZVZlcnNpb24sXG4gIFBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgTXlzcWxFbmdpbmVWZXJzaW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgdHlwZSBJS2V5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1rbXNcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VFbmdpbmUgPSBcInBvc3RncmVzcWxcIiB8IFwibXlzcWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVDb25maWcge1xuICBkZWZhdWx0VXNlcm5hbWU6IHN0cmluZztcbiAgc3NsUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcm90YXRpb25BcHBOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBEQVRBQkFTRV9FTkdJTkVfQ09ORklHOiBSZWNvcmQ8XG4gIERhdGFiYXNlRW5naW5lLFxuICB7XG4gICAgYXVyb3JhOiB7IHZlcnNpb246IHN0cmluZzsgbWFqb3JWZXJzaW9uOiBzdHJpbmcgfTtcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBzdHJpbmc7IG1ham9yVmVyc2lvbjogc3RyaW5nIH07XG4gICAgZGVmYXVsdFVzZXJuYW1lOiBzdHJpbmc7XG4gICAgc3NsUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICByb3RhdGlvbkFwcE5hbWU6IHN0cmluZztcbiAgfVxuPiA9IHtcbiAgcG9zdGdyZXNxbDoge1xuICAgIGF1cm9yYTogeyB2ZXJzaW9uOiBcIjE2LjZcIiwgbWFqb3JWZXJzaW9uOiBcIjE2XCIgfSxcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBcIjE3LjVcIiwgbWFqb3JWZXJzaW9uOiBcIjE3XCIgfSxcbiAgICBkZWZhdWx0VXNlcm5hbWU6IFwicG9zdGdyZXNcIixcbiAgICBzc2xQYXJhbWV0ZXJzOiB7IFwicmRzLmZvcmNlX3NzbFwiOiBcIjFcIiB9LFxuICAgIHJvdGF0aW9uQXBwTmFtZTogXCJTZWNyZXRzTWFuYWdlclJEU1Bvc3RncmVTUUxSb3RhdGlvbk11bHRpVXNlclwiXG4gIH0sXG4gIG15c3FsOiB7XG4gICAgLy8gbWFqb3JWZXJzaW9uIG11c3QgYmUgQXVyb3JhIHZlcnNpb24gKDMuMDguMCksIE5PVCBNeVNRTCB2ZXJzaW9uICg4LjApXG4gICAgYXVyb3JhOiB7IHZlcnNpb246IFwiOC4wLm15c3FsX2F1cm9yYS4zLjA4LjBcIiwgbWFqb3JWZXJzaW9uOiBcIjMuMDguMFwiIH0sXG4gICAgaW5zdGFuY2U6IHsgdmVyc2lvbjogXCI4LjQuNFwiLCBtYWpvclZlcnNpb246IFwiOC40XCIgfSxcbiAgICBkZWZhdWx0VXNlcm5hbWU6IFwiYWRtaW5cIixcbiAgICBzc2xQYXJhbWV0ZXJzOiB7IHJlcXVpcmVfc2VjdXJlX3RyYW5zcG9ydDogXCJPTlwiIH0sXG4gICAgcm90YXRpb25BcHBOYW1lOiBcIlNlY3JldHNNYW5hZ2VyUkRTTXlTUUxSb3RhdGlvbk11bHRpVXNlclwiXG4gIH1cbn07XG5cbmNvbnN0IEFVUk9SQV9FTkdJTkVfRkFDVE9SSUVTOiBSZWNvcmQ8RGF0YWJhc2VFbmdpbmUsICgpID0+IElDbHVzdGVyRW5naW5lPiA9IHtcbiAgcG9zdGdyZXNxbDogKCkgPT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLnBvc3RncmVzcWwuYXVyb3JhO1xuICAgIHJldHVybiBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhUG9zdGdyZXMoe1xuICAgICAgdmVyc2lvbjogQXVyb3JhUG9zdGdyZXNFbmdpbmVWZXJzaW9uLm9mKHZlcnNpb24sIG1ham9yVmVyc2lvbilcbiAgICB9KTtcbiAgfSxcbiAgbXlzcWw6ICgpID0+IHtcbiAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID0gREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5teXNxbC5hdXJvcmE7XG4gICAgcmV0dXJuIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFNeXNxbCh7XG4gICAgICB2ZXJzaW9uOiBBdXJvcmFNeXNxbEVuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBJTlNUQU5DRV9FTkdJTkVfRkFDVE9SSUVTOiBSZWNvcmQ8RGF0YWJhc2VFbmdpbmUsICgpID0+IElJbnN0YW5jZUVuZ2luZT4gPVxuICB7XG4gICAgcG9zdGdyZXNxbDogKCkgPT4ge1xuICAgICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9XG4gICAgICAgIERBVEFCQVNFX0VOR0lORV9DT05GSUcucG9zdGdyZXNxbC5pbnN0YW5jZTtcbiAgICAgIHJldHVybiBEYXRhYmFzZUluc3RhbmNlRW5naW5lLnBvc3RncmVzKHtcbiAgICAgICAgdmVyc2lvbjogUG9zdGdyZXNFbmdpbmVWZXJzaW9uLm9mKHZlcnNpb24sIG1ham9yVmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbXlzcWw6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLm15c3FsLmluc3RhbmNlO1xuICAgICAgcmV0dXJuIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUubXlzcWwoe1xuICAgICAgICB2ZXJzaW9uOiBNeXNxbEVuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogSUNsdXN0ZXJFbmdpbmUge1xuICByZXR1cm4gQVVST1JBX0VOR0lORV9GQUNUT1JJRVNbZW5naW5lXSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zdGFuY2VFbmdpbmUoZW5naW5lOiBEYXRhYmFzZUVuZ2luZSk6IElJbnN0YW5jZUVuZ2luZSB7XG4gIHJldHVybiBJTlNUQU5DRV9FTkdJTkVfRkFDVE9SSUVTW2VuZ2luZV0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVuZ2luZUNvbmZpZyhlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogRW5naW5lQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0gREFUQUJBU0VfRU5HSU5FX0NPTkZJR1tlbmdpbmVdO1xuICByZXR1cm4ge1xuICAgIGRlZmF1bHRVc2VybmFtZTogY29uZmlnLmRlZmF1bHRVc2VybmFtZSxcbiAgICBzc2xQYXJhbWV0ZXJzOiBjb25maWcuc3NsUGFyYW1ldGVycyxcbiAgICByb3RhdGlvbkFwcE5hbWU6IGNvbmZpZy5yb3RhdGlvbkFwcE5hbWVcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUNvbmZpZyB7XG4gIG1heENvbm5lY3Rpb25zPzogbnVtYmVyO1xuICBtYXhJZGxlQ29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIGNvbm5lY3Rpb25Cb3Jyb3dUaW1lb3V0PzogbnVtYmVyO1xuICByZXF1aXJlVExTPzogYm9vbGVhbjtcbiAgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkUmVwbGljYUNvbmZpZyB7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFsc0NvbmZpZyB7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICBzZWNyZXRSb3RhdGlvbj86IFNlY3JldFJvdGF0aW9uQ29uZmlnIHwgZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0Um90YXRpb25Db25maWcge1xuICBhdXRvbWF0aWNhbGx5QWZ0ZXI/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQ29uZmlnIHtcbiAgc3RvcmFnZUtleT86IEVuY3J5cHRpb25LZXlTcGVjO1xufVxuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kID0gNyB8IDMxIHwgOTMgfCAxODYgfCAzNzIgfCA3MzE7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB7XG4gIGVuY3J5cHRpb25LZXk/OiBFbmNyeXB0aW9uS2V5U3BlYztcbiAgLyoqIFJldGVudGlvbiBwZXJpb2QgaW4gZGF5cy4gRGVmYXVsdDogMzEgKDEgbW9udGgpLiAqL1xuICByZXRlbnRpb25QZXJpb2Q/OiBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kO1xufVxuXG4vLyBNYXJrZXIgZm9yIEFXUyBtYW5hZ2VkIGVuY3J5cHRpb24ga2V5IChhd3MvcmRzLCBhd3MvczMsIGV0Yy4pXG5leHBvcnQgaW50ZXJmYWNlIEF3c01hbmFnZWRLZXkge1xuICByZWFkb25seSBhd3NNYW5hZ2VkOiB0cnVlO1xufVxuXG4vLyBNYXJrZXIgZm9yIGV4cGxpY2l0bHkgcmVxdWVzdGluZyBhIEN1c3RvbWVyIE1hbmFnZWQgS2V5IChDTUspLlxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXIge1xuICByZWFkb25seSB1c2VDTUs6IHRydWU7XG59XG5cbi8vIEVuY3J5cHRpb24ga2V5IHNwZWNpZmljYXRpb24gZm9yIFJEUyByZXNvdXJjZXMuXG5leHBvcnQgdHlwZSBFbmNyeXB0aW9uS2V5U3BlYyA9IElLZXkgfCBBd3NNYW5hZ2VkS2V5IHwgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyO1xuXG4vLyBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBlbmNyeXB0aW9uIGtleSBzcGVjIGlzIEFXUyBtYW5hZ2VkLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQXdzTWFuYWdlZEtleShcbiAgc3BlYzogRW5jcnlwdGlvbktleVNwZWMgfCB1bmRlZmluZWRcbik6IHNwZWMgaXMgQXdzTWFuYWdlZEtleSB7XG4gIHJldHVybiAoXG4gICAgc3BlYyAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIHNwZWMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcImF3c01hbmFnZWRcIiBpbiBzcGVjICYmXG4gICAgKHNwZWMgYXMgQXdzTWFuYWdlZEtleSkuYXdzTWFuYWdlZCA9PT0gdHJ1ZVxuICApO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgQ01LIGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDTUtSZXF1ZXN0ZWQoXG4gIHNwZWM6IEVuY3J5cHRpb25LZXlTcGVjIHwgdW5kZWZpbmVkXG4pOiBzcGVjIGlzIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciB7XG4gIHJldHVybiAoXG4gICAgc3BlYyAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIHNwZWMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInVzZUNNS1wiIGluIHNwZWMgJiZcbiAgICAoc3BlYyBhcyBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXIpLnVzZUNNSyA9PT0gdHJ1ZVxuICApO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGNvbnN0YW50IGZvciBzcGVjaWZ5aW5nIEFXUyBtYW5hZ2VkIGVuY3J5cHRpb24gKHRoZSBkZWZhdWx0KS5cbiAqIEBleGFtcGxlXG4gKiBlbmNyeXB0aW9uOiB7IHN0b3JhZ2VLZXk6IEFXU19NQU5BR0VEIH1cbiAqL1xuZXhwb3J0IGNvbnN0IEFXU19NQU5BR0VEOiBBd3NNYW5hZ2VkS2V5ID0geyBhd3NNYW5hZ2VkOiB0cnVlIH0gYXMgY29uc3Q7XG5cbi8qKlxuICogQ29udmVuaWVuY2UgY29uc3RhbnQgZm9yIGV4cGxpY2l0bHkgcmVxdWVzdGluZyBDTUsuXG4gKiBAZXhhbXBsZVxuICogZW5jcnlwdGlvbjogeyBzdG9yYWdlS2V5OiBVU0VfQ01LIH1cbiAqL1xuZXhwb3J0IGNvbnN0IFVTRV9DTUs6IEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciA9IHsgdXNlQ01LOiB0cnVlIH0gYXMgY29uc3Q7XG5cbi8qKlxuICogKipERVNUUlVDVElWRSoqOiBDaGFuZ2luZyBgc3RvcmFnZUtleWAgYWZ0ZXIgY2x1c3RlciBjcmVhdGlvbiBjYXVzZXMgY2x1c3RlciBSRVBMQUNFTUVOVC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnIHtcbiAgLyoqIERFU1RSVUNUSVZFOiBDaGFuZ2luZyBhZnRlciBjcmVhdGlvbiBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBzdG9yYWdlS2V5PzogRW5jcnlwdGlvbktleVNwZWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhUmVhZGVyQ29uZmlnIHtcbiAgc2NhbGVXaXRoV3JpdGVyPzogYm9vbGVhbjtcbiAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG4gIGlkZW50aWZpZXJTdWZmaXg/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhV3JpdGVyQ29uZmlnIHtcbiAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG4gIGlkZW50aWZpZXJTdWZmaXg/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhUmVhZGVyc0NvbmZpZyB7XG4gIC8qKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBpbnN0YW5jZXMgKi9cbiAgY291bnQ/OiBudW1iZXI7XG4gIC8qKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBjb3VudCAqL1xuICBpbnN0YW5jZXM/OiBBdXJvcmFSZWFkZXJDb25maWdbXTtcbiAgZGVmYXVsdEVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM/OiBib29sZWFuO1xufVxuXG50eXBlIF9EYXRhYmFzZVR5cGUgPSBcIkF1cm9yYVwiIHwgXCJJbnN0YW5jZVwiIHwgXCJHbG9iYWxBdXJvcmFcIjtcblxuLyoqXG4gKiBCYXNlIHByb3BzIGZvciBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0ge1xuICB2cGM/OiBJVnBjO1xuICBkYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICBkZWxldGlvblByb3RlY3Rpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkF1cm9yYVwiO1xuICBkYXRhYmFzZUVuZ2luZT86IERhdGFiYXNlRW5naW5lO1xuICAvKiogT3ZlcnJpZGVzIGRhdGFiYXNlRW5naW5lIGlmIHByb3ZpZGVkICovXG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICB3cml0ZXI/OiBBdXJvcmFXcml0ZXJDb25maWc7XG4gIHJlYWRlcnM/OiBBdXJvcmFSZWFkZXJzQ29uZmlnIHwgZmFsc2U7XG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgLyoqIERFU1RSVUNUSVZFOiBDaGFuZ2luZyBzdG9yYWdlS2V5IGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgcGVyZm9ybWFuY2VJbnNpZ2h0cz86IFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHMgZXh0ZW5kcyBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiR2xvYmFsQXVyb3JhXCI7XG4gIHByaW1hcnlSZWdpb246IHN0cmluZztcbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICBnbG9iYWxDbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nPzogYm9vbGVhbjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIC8qKiBERVNUUlVDVElWRTogQ2hhbmdpbmcgc3RvcmFnZUtleSBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBlbmNyeXB0aW9uPzogQXVyb3JhRW5jcnlwdGlvbkNvbmZpZztcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBtb25pdG9yaW5nSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZURhdGFiYXNlUHJvcHMgZXh0ZW5kcyBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiSW5zdGFuY2VcIjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJSW5zdGFuY2VFbmdpbmU7XG4gIGFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXI7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIG11bHRpQXo/OiBib29sZWFuO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgcmVhZFJlcGxpY2E/OiBSZWFkUmVwbGljYUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICBlbmNyeXB0aW9uPzogRW5jcnlwdGlvbkNvbmZpZztcbiAgcHVibGljbHlBY2Nlc3NpYmxlPzogYm9vbGVhbjtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGluc3RhbmNlIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSURhdGFiYXNlUHJvcHMgPVxuICB8IEF1cm9yYURhdGFiYXNlUHJvcHNcbiAgfCBJbnN0YW5jZURhdGFiYXNlUHJvcHNcbiAgfCBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBkYXRhYmFzZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGFiYXNlUHJvcHMocHJvcHM6IElEYXRhYmFzZVByb3BzKTogdm9pZCB7XG4gIGNvbnN0IHByb3BzQW55ID0gcHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBHbG9iYWxBdXJvcmEgcmVxdWlyZXMgcHJpbWFyeVJlZ2lvblxuICBpZiAocHJvcHMudHlwZSA9PT0gXCJHbG9iYWxBdXJvcmFcIiAmJiAhcHJvcHMucHJpbWFyeVJlZ2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiR2xvYmFsQXVyb3JhIGRhdGFiYXNlIHJlcXVpcmVzICdwcmltYXJ5UmVnaW9uJy4gXCIgK1xuICAgICAgICBcIlNwZWNpZnkgdGhlIEFXUyByZWdpb24gd2hlcmUgdGhlIHByaW1hcnkgY2x1c3RlciB3aWxsIGJlIGNyZWF0ZWQuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gV2FybiBhYm91dCBJbnN0YW5jZS1vbmx5IG9wdGlvbnMgb24gQXVyb3JhL0dsb2JhbEF1cm9yYVxuICBpZiAocHJvcHMudHlwZSA9PT0gXCJBdXJvcmFcIiB8fCBwcm9wcy50eXBlID09PSBcIkdsb2JhbEF1cm9yYVwiKSB7XG4gICAgaWYgKFwicmVhZFJlcGxpY2FcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5yZWFkUmVwbGljYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdyZWFkUmVwbGljYScgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBkYXRhYmFzZXMuIGAgK1xuICAgICAgICAgIFwiVXNlICdyZWFkZXJzJyBjb25maWd1cmF0aW9uIGZvciBBdXJvcmEgcmVhZCBzY2FsaW5nLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJtdWx0aUF6XCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkubXVsdGlBeiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdtdWx0aUF6JyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGRhdGFiYXNlcy4gYCArXG4gICAgICAgICAgXCJBdXJvcmEgcHJvdmlkZXMgYXV0b21hdGljIG11bHRpLUFaIHJlcGxpY2F0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBcImFsbG9jYXRlZFN0b3JhZ2VcIiBpbiBwcm9wc0FueSAmJlxuICAgICAgcHJvcHNBbnkuYWxsb2NhdGVkU3RvcmFnZSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdhbGxvY2F0ZWRTdG9yYWdlJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGRhdGFiYXNlcy4gYCArXG4gICAgICAgICAgXCJBdXJvcmEgdXNlcyBhdXRvbWF0aWMgc3RvcmFnZSBzY2FsaW5nLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgQXVyb3JhLW9ubHkgb3B0aW9ucyBvbiBJbnN0YW5jZVxuICBpZiAocHJvcHMudHlwZSA9PT0gXCJJbnN0YW5jZVwiKSB7XG4gICAgaWYgKFwicmVhZGVyc1wiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnJlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIltGamFsbF0gV2FybmluZzogJ3JlYWRlcnMnIGlzIGlnbm9yZWQgZm9yIEluc3RhbmNlIGRhdGFiYXNlcy4gXCIgK1xuICAgICAgICAgIFwiVXNlICdyZWFkUmVwbGljYScgY29uZmlndXJhdGlvbiBmb3IgUkRTIEluc3RhbmNlIHJlYWQgc2NhbGluZy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwid3JpdGVyXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkud3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbRmphbGxdIFdhcm5pbmc6ICd3cml0ZXInIGlzIGlnbm9yZWQgZm9yIEluc3RhbmNlIGRhdGFiYXNlcy4gXCIgK1xuICAgICAgICAgIFwiV3JpdGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEF1cm9yYSBjbHVzdGVycy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgXCJiYWNrdXBSZXRlbnRpb25cIiBpbiBwcm9wc0FueSAmJlxuICAgICAgcHJvcHNBbnkuYmFja3VwUmV0ZW50aW9uICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbRmphbGxdIFdhcm5pbmc6ICdiYWNrdXBSZXRlbnRpb24nIGluIGRheXMgZm9ybWF0IGlzIEF1cm9yYS1zcGVjaWZpYy4gXCIgK1xuICAgICAgICAgIFwiRm9yIFJEUyBJbnN0YW5jZSwgYmFja3VwIHJldGVudGlvbiBpcyBjb25maWd1cmVkIHZpYSBEdXJhdGlvbiBpbiB0aGUgY29uc3RydWN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgR2xvYmFsQXVyb3JhLW9ubHkgb3B0aW9ucyBvbiBub24tZ2xvYmFsIGRhdGFiYXNlc1xuICBpZiAocHJvcHMudHlwZSAhPT0gXCJHbG9iYWxBdXJvcmFcIikge1xuICAgIGlmIChcInByaW1hcnlSZWdpb25cIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5wcmltYXJ5UmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3ByaW1hcnlSZWdpb24nIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gZGF0YWJhc2VzLiBgICtcbiAgICAgICAgICBcIlJlZ2lvbiBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBHbG9iYWxBdXJvcmEuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIFwic2Vjb25kYXJ5UmVnaW9uc1wiIGluIHByb3BzQW55ICYmXG4gICAgICBwcm9wc0FueS5zZWNvbmRhcnlSZWdpb25zICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3NlY29uZGFyeVJlZ2lvbnMnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gZGF0YWJhc2VzLiBgICtcbiAgICAgICAgICBcIk11bHRpLXJlZ2lvbiBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBHbG9iYWxBdXJvcmEuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIFwiZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gZGF0YWJhc2VzLiBgICtcbiAgICAgICAgICBcIldyaXRlIGZvcndhcmRpbmcgb25seSBhcHBsaWVzIHRvIEdsb2JhbEF1cm9yYS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZDxUIGV4dGVuZHMgSURhdGFiYXNlUHJvcHM+KGlkOiBzdHJpbmcsIHByb3BzOiBUKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzKTtcblxuICAgICAgY29uc3QgZGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgICAgLi4uKHByb3BzIGFzIGFueSksXG4gICAgICAgIHZwYzogKHByb3BzLnZwYyB8fCBhcHAuZ2V0VnBjKCkpIGFzIElWcGNcbiAgICAgIH0gYXMgVDtcbiAgICAgIHJldHVybiBuZXcgRGF0YWJhc2Uoc2NvcGUsIGlkLCBkYXRhYmFzZVByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuICBwdWJsaWMgc2NvcGU6IENvbnN0cnVjdDtcbiAgcHVibGljIHZwYzogSVZwYztcblxuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgZGF0YWJhc2U6IFJkc0F1cm9yYSB8IFJkc0luc3RhbmNlIHwgUmRzQXVyb3JhR2xvYmFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcblxuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lO1xuICAgIHRoaXMuYWRkRGF0YWJhc2UocHJvcHMpO1xuICB9XG5cbiAgYWRkRGF0YWJhc2UocHJvcHM6IElEYXRhYmFzZVByb3BzKSB7XG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIFwiQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiR2xvYmFsQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhR2xvYmFsKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiSW5zdGFuY2VcIjpcbiAgICAgICAgdGhpcy5hZGRSZHNJbnN0YW5jZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBFeGhhdXN0aXZlbmVzcyBjaGVja1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBwcm9wcztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhYmFzZSB0eXBlICR7KHByb3BzIGFzIGFueSkudHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYShwcm9wczogQXVyb3JhRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKSB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEF1cm9yYSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICBlbmdpbmVDb25maWcsXG4gICAgICB3cml0ZXI6IHByb3BzLndyaXRlcixcbiAgICAgIHJlYWRlcnM6IHByb3BzLnJlYWRlcnMsXG4gICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgYmFja3VwUmV0ZW50aW9uOiBwcm9wcy5iYWNrdXBSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhR2xvYmFsKHByb3BzOiBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEdsb2JhbCBBdXJvcmEgZGF0YWJhc2VcIik7XG4gICAgaWYgKCFwcm9wcy5wcmltYXJ5UmVnaW9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJpbWFyeVJlZ2lvbiBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYUdsb2JhbChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzR2xvYmFsYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBwcmltYXJ5UmVnaW9uOiBwcm9wcy5wcmltYXJ5UmVnaW9uLFxuICAgICAgICBzZWNvbmRhcnlSZWdpb25zOiBwcm9wcy5zZWNvbmRhcnlSZWdpb25zLFxuICAgICAgICBnbG9iYWxDbHVzdGVySWRlbnRpZmllcjogcHJvcHMuZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIsXG4gICAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgICAgZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nOiBwcm9wcy5lbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcsXG4gICAgICAgIHdyaXRlcjogcHJvcHMud3JpdGVyLFxuICAgICAgICByZWFkZXJzOiBwcm9wcy5yZWFkZXJzLFxuICAgICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgICAgYmFja3VwUmV0ZW50aW9uOiBwcm9wcy5iYWNrdXBSZXRlbnRpb24sXG4gICAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3csXG4gICAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZFJkc0luc3RhbmNlKHByb3BzOiBJbnN0YW5jZURhdGFiYXNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYykgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBJbnN0YW5jZSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0SW5zdGFuY2VFbmdpbmUocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG4gICAgY29uc3QgZW5naW5lQ29uZmlnID0gZ2V0RW5naW5lQ29uZmlnKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNJbnN0YW5jZSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlLFxuICAgICAgYWxsb2NhdGVkU3RvcmFnZTogcHJvcHMuYWxsb2NhdGVkU3RvcmFnZSxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBlbmdpbmU6IHJlc29sdmVkRW5naW5lLFxuICAgICAgZW5naW5lQ29uZmlnLFxuICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgcHJvcHMuYmFja3VwUmV0ZW50aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IER1cmF0aW9uLmRheXMocHJvcHMuYmFja3VwUmV0ZW50aW9uKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgIHJlYWRSZXBsaWNhOiBwcm9wcy5yZWFkUmVwbGljYSxcbiAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICBzbmFwc2hvdFVzZXJuYW1lOiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBTZWNyZXQge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldENyZWRlbnRpYWxzKCk7XG4gIH1cblxuICBnZXRIb3N0RW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKTtcbiAgfVxuXG4gIGdldEhvc3RQb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKTtcbiAgfVxuXG4gIGdldERhdGFiYXNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlTmFtZTtcbiAgfVxufVxuIl19