p6-cdk-s3-protector 0.0.25 → 0.0.26

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 (68) hide show
  1. package/.jsii +6 -6
  2. package/lib/p6cdks3protector.js +1 -1
  3. package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.browser.d.ts +1 -0
  4. package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.d.ts +1 -0
  5. package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.native.d.ts +1 -0
  6. package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.browser.d.ts +1 -0
  7. package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.d.ts +1 -0
  8. package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.native.d.ts +1 -0
  9. package/node_modules/@aws-sdk/client-s3/package.json +19 -19
  10. package/node_modules/@aws-sdk/client-s3-control/package.json +14 -14
  11. package/node_modules/@aws-sdk/client-sso/package.json +12 -12
  12. package/node_modules/@aws-sdk/client-sts/package.json +13 -13
  13. package/node_modules/@aws-sdk/core/package.json +3 -3
  14. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  15. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
  16. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/package.json +8 -8
  17. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  18. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  19. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  20. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/package.json +12 -12
  21. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  22. package/node_modules/@aws-sdk/middleware-expect-continue/dist-cjs/index.js +23 -6
  23. package/node_modules/@aws-sdk/middleware-expect-continue/dist-es/index.js +23 -6
  24. package/node_modules/@aws-sdk/middleware-expect-continue/dist-types/index.d.ts +3 -1
  25. package/node_modules/@aws-sdk/middleware-expect-continue/dist-types/ts3.4/index.d.ts +3 -0
  26. package/node_modules/@aws-sdk/middleware-expect-continue/package.json +1 -1
  27. package/node_modules/@aws-sdk/middleware-flexible-checksums/package.json +4 -4
  28. package/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js +2 -1
  29. package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3Configuration.js +2 -1
  30. package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3Configuration.d.ts +17 -0
  31. package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3Configuration.d.ts +2 -0
  32. package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +5 -5
  33. package/node_modules/@aws-sdk/middleware-sdk-s3-control/package.json +2 -2
  34. package/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
  35. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
  36. package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/package.json +12 -12
  37. package/node_modules/@aws-sdk/token-providers/package.json +3 -3
  38. package/node_modules/@aws-sdk/util-endpoints/dist-cjs/index.js +3 -0
  39. package/node_modules/@aws-sdk/util-endpoints/dist-cjs/lib/aws/partitions.json +3 -0
  40. package/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partitions.json +3 -0
  41. package/node_modules/@aws-sdk/util-endpoints/package.json +1 -1
  42. package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
  43. package/node_modules/@smithy/core/package.json +2 -2
  44. package/node_modules/@smithy/middleware-endpoint/package.json +2 -2
  45. package/node_modules/@smithy/middleware-retry/package.json +2 -2
  46. package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +17 -12
  47. package/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +16 -11
  48. package/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +1 -1
  49. package/node_modules/@smithy/node-http-handler/package.json +1 -1
  50. package/node_modules/@smithy/smithy-client/package.json +4 -4
  51. package/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
  52. package/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
  53. package/node_modules/@smithy/util-stream/package.json +2 -2
  54. package/node_modules/cdk-iam-floyd/README.md +4 -4
  55. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.d.ts +2 -0
  56. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.js +5 -1
  57. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.d.ts +2 -0
  58. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.js +3 -1
  59. package/node_modules/cdk-iam-floyd/lib/generated/index.d.ts +1 -0
  60. package/node_modules/cdk-iam-floyd/lib/generated/index.js +5 -3
  61. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/auroradsql.d.ts +24 -0
  62. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/auroradsql.js +34 -1
  63. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.d.ts +2 -2
  64. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.js +6 -6
  65. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/rtbfabric.d.ts +436 -0
  66. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/rtbfabric.js +559 -0
  67. package/node_modules/cdk-iam-floyd/package.json +1 -1
  68. package/package.json +5 -5
@@ -339,12 +339,12 @@ class Observabilityadmin extends shared_1.PolicyStatement {
339
339
  * - .ifAwsResourceTag()
340
340
  */
341
341
  onTelemetryRule(telemetryRuleName, account, region, partition) {
342
- return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:telemetry-rule:${telemetryRuleName}`);
342
+ return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:telemetry-rule/${telemetryRuleName}`);
343
343
  }
344
344
  /**
345
345
  * Adds a resource of type organization-telemetry-rule to the statement
346
346
  *
347
- * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_OrganizationTelemetryRule.html
347
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_TelemetryRule.html
348
348
  *
349
349
  * @param telemetryRuleName - Identifier for the telemetryRuleName.
350
350
  * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
@@ -355,12 +355,12 @@ class Observabilityadmin extends shared_1.PolicyStatement {
355
355
  * - .ifAwsResourceTag()
356
356
  */
357
357
  onOrganizationTelemetryRule(telemetryRuleName, account, region, partition) {
358
- return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:organization-telemetry-rule:${telemetryRuleName}`);
358
+ return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:organization-telemetry-rule/${telemetryRuleName}`);
359
359
  }
360
360
  /**
361
361
  * Adds a resource of type organization-centralization-rule to the statement
362
362
  *
363
- * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_OrganizationCentralizationRule.html
363
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_CentralizationRule.html
364
364
  *
365
365
  * @param centralizationRuleName - Identifier for the centralizationRuleName.
366
366
  * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
@@ -371,7 +371,7 @@ class Observabilityadmin extends shared_1.PolicyStatement {
371
371
  * - .ifAwsResourceTag()
372
372
  */
373
373
  onOrganizationCentralizationRule(centralizationRuleName, account, region, partition) {
374
- return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:organization-centralization-rule:${centralizationRuleName}`);
374
+ return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:organization-centralization-rule/${centralizationRuleName}`);
375
375
  }
376
376
  /**
377
377
  * Filters access by the tags that are passed in the request
@@ -520,4 +520,4 @@ class Observabilityadmin extends shared_1.PolicyStatement {
520
520
  }
521
521
  }
522
522
  exports.Observabilityadmin = Observabilityadmin;
523
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZHdhdGNob2JzZXJ2YWJpbGl0eWFkbWluc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBeUQ7QUFHekQ7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsd0JBQWU7SUFHckQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLHlDQUF5QztRQUM5QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUNBQXlDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0NBQXNDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSw4QkFBOEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QixDQUFDLENB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Z0JBQ3JCLG9DQUFvQztnQkFDcEMseUNBQXlDO2dCQUN6QyxxQkFBcUI7Z0JBQ3JCLG9DQUFvQztnQkFDcEMsMEJBQTBCO2dCQUMxQiwwQkFBMEI7Z0JBQzFCLHlDQUF5QztnQkFDekMseUJBQXlCO2dCQUN6Qix5QkFBeUI7Z0JBQ3pCLHdDQUF3QztnQkFDeEMseUNBQXlDO2dCQUN6QyxxQkFBcUI7Z0JBQ3JCLG9DQUFvQzthQUNyQztZQUNELElBQUksRUFBRTtnQkFDSixzQ0FBc0M7Z0JBQ3RDLDhCQUE4QjtnQkFDOUIsOEJBQThCO2dCQUM5Qiw2Q0FBNkM7Z0JBQzdDLGtCQUFrQjtnQkFDbEIsaUNBQWlDO2dCQUNqQyx1QkFBdUI7Z0JBQ3ZCLHNDQUFzQzthQUN2QztZQUNELElBQUksRUFBRTtnQkFDSix3Q0FBd0M7Z0JBQ3hDLHFCQUFxQjtnQkFDckIsb0JBQW9CO2dCQUNwQixtQ0FBbUM7YUFDcEM7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQW1LRixDQUFDO0NBQ0Y7QUF2aUJELGdEQXVpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW29ic2VydmFiaWxpdHlhZG1pbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmlsaXR5YWRtaW4gZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdvYnNlcnZhYmlsaXR5YWRtaW4nO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgb3JnYW5pemF0aW9uIGNlbnRyYWxpemF0aW9uIHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uU291cmNlUmVnaW9ucygpXG4gICAqIC0gLmlmQ2VudHJhbGl6YXRpb25EZXN0aW5hdGlvblJlZ2lvbigpXG4gICAqIC0gLmlmQ2VudHJhbGl6YXRpb25CYWNrdXBSZWdpb24oKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9DcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfQ3JlYXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0NyZWF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBvcmdhbml6YXRpb24gY2VudHJhbGl6YXRpb24gcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHRlbGVtZXRyeSBydWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZVRlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlVGVsZW1ldHJ5UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlVGVsZW1ldHJ5UnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBvcmdhbml6YXRpb24gdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9EZWxldGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiBjZW50cmFsaXphdGlvbiBydWxlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUVucmljaG1lbnRTdGF0dXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RW5yaWNobWVudFN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RW5yaWNobWVudFN0YXR1cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgc3RhdHVzIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGhlIFRlbGVtZXRyeSBDb25maWcgZmVhdHVyZSBzdGF0dXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUV2YWx1YXRpb25TdGF0dXNGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRUZWxlbWV0cnlSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFRlbGVtZXRyeVJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFRlbGVtZXRyeVJ1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgY2VudHJhbGl6YXRpb24gcnVsZXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RDZW50cmFsaXphdGlvblJ1bGVzRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDZW50cmFsaXphdGlvblJ1bGVzRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q2VudHJhbGl6YXRpb25SdWxlc0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRlbGVtZXRyeSBjb25maWd1cmF0aW9ucyBmb3IgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFJlc291cmNlVGVsZW1ldHJ5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZXNvdXJjZVRlbGVtZXRyeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlc291cmNlVGVsZW1ldHJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGVsZW1ldHJ5IGNvbmZpZ3VyYXRpb25zIGZvciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVzb3VyY2VUZWxlbWV0cnlGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RUYWdzRm9yUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRhZ3NGb3JSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRlbGVtZXRyeSBydWxlcyBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RUZWxlbWV0cnlSdWxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGVsZW1ldHJ5UnVsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUZWxlbWV0cnlSdWxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRlbGVtZXRyeSBydWxlcyBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUZWxlbWV0cnlSdWxlc0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZW5hYmxlIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUVucmljaG1lbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFbnJpY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUVucmljaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNhYmxlIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdG9wVGVsZW1ldHJ5RW5yaWNobWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdG9wVGVsZW1ldHJ5RW5yaWNobWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RvcFRlbGVtZXRyeUVucmljaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdG9wIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RvcCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWRkIG9yIHVwZGF0ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUYWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZ1xuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VbnRhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHNwZWNpZmllZCBjZW50cmFsaXphdGlvbiBydWxlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZDZW50cmFsaXphdGlvblNvdXJjZVJlZ2lvbnMoKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uRGVzdGluYXRpb25SZWdpb24oKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uQmFja3VwUmVnaW9uKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVXBkYXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VcGRhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY2Nlc3NMZXZlbExpc3Q6IEFjY2Vzc0xldmVsTGlzdCA9IHtcbiAgICBXcml0ZTogW1xuICAgICAgJ0NyZWF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZScsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnRGVsZXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdEZWxldGVUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdEZWxldGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdTdGFydFRlbGVtZXRyeUVucmljaG1lbnQnLFxuICAgICAgJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicsXG4gICAgICAnU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdTdG9wVGVsZW1ldHJ5RW5yaWNobWVudCcsXG4gICAgICAnU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24nLFxuICAgICAgJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdVcGRhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nLFxuICAgICAgJ1VwZGF0ZVRlbGVtZXRyeVJ1bGUnLFxuICAgICAgJ1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnR2V0Q2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFbnJpY2htZW50U3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdMaXN0UmVzb3VyY2VUZWxlbWV0cnknLFxuICAgICAgJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbidcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0Q2VudHJhbGl6YXRpb25SdWxlc0Zvck9yZ2FuaXphdGlvbicsXG4gICAgICAnTGlzdFRhZ3NGb3JSZXNvdXJjZScsXG4gICAgICAnTGlzdFRlbGVtZXRyeVJ1bGVzJyxcbiAgICAgICdMaXN0VGVsZW1ldHJ5UnVsZXNGb3JPcmdhbml6YXRpb24nXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSB0ZWxlbWV0cnktcnVsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5UnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgdGVsZW1ldHJ5UnVsZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvblRlbGVtZXRyeVJ1bGUodGVsZW1ldHJ5UnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnRlbGVtZXRyeS1ydWxlOiR7IHRlbGVtZXRyeVJ1bGVOYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBvcmdhbml6YXRpb24tdGVsZW1ldHJ5LXJ1bGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9Pcmdhbml6YXRpb25UZWxlbWV0cnlSdWxlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHRlbGVtZXRyeVJ1bGVOYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHRlbGVtZXRyeVJ1bGVOYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Pcmdhbml6YXRpb25UZWxlbWV0cnlSdWxlKHRlbGVtZXRyeVJ1bGVOYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b2JzZXJ2YWJpbGl0eWFkbWluOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpvcmdhbml6YXRpb24tdGVsZW1ldHJ5LXJ1bGU6JHsgdGVsZW1ldHJ5UnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIG9yZ2FuaXphdGlvbi1jZW50cmFsaXphdGlvbi1ydWxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfT3JnYW5pemF0aW9uQ2VudHJhbGl6YXRpb25SdWxlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGNlbnRyYWxpemF0aW9uUnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgY2VudHJhbGl6YXRpb25SdWxlTmFtZS5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uT3JnYW5pemF0aW9uQ2VudHJhbGl6YXRpb25SdWxlKGNlbnRyYWxpemF0aW9uUnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om9yZ2FuaXphdGlvbi1jZW50cmFsaXphdGlvbi1ydWxlOiR7IGNlbnRyYWxpemF0aW9uUnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWdzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXF1ZXN0VGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlcXVlc3RUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIHRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLXRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLWNlbnRyYWxpemF0aW9uLXJ1bGVcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgYmFja3VwIHJlZ2lvbiB0aGF0IGlzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uYmFja3VwcmVnaW9uXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQ2VudHJhbGl6YXRpb25CYWNrdXBSZWdpb24odmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYENlbnRyYWxpemF0aW9uQmFja3VwUmVnaW9uYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIGRlc3RpbmF0aW9uIHJlZ2lvbiB0aGF0IGlzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uZGVzdGluYXRpb25yZWdpb25cbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpXG4gICAqIC0gLnRvVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZDZW50cmFsaXphdGlvbkRlc3RpbmF0aW9uUmVnaW9uKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBDZW50cmFsaXphdGlvbkRlc3RpbmF0aW9uUmVnaW9uYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHNvdXJjZSByZWdpb25zIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uc291cmNlcmVnaW9uc1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9VcGRhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkNlbnRyYWxpemF0aW9uU291cmNlUmVnaW9ucyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgQ2VudHJhbGl6YXRpb25Tb3VyY2VSZWdpb25zYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtvYnNlcnZhYmlsaXR5YWRtaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2FtYXpvbmNsb3Vkd2F0Y2hvYnNlcnZhYmlsaXR5YWRtaW5zZXJ2aWNlLmh0bWwpLlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBpYW0uUG9saWN5U3RhdGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cbiJdfQ==
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZHdhdGNob2JzZXJ2YWJpbGl0eWFkbWluc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBeUQ7QUFHekQ7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsd0JBQWU7SUFHckQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLHlDQUF5QztRQUM5QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUNBQXlDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0NBQXNDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSw4QkFBOEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QixDQUFDLENB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Z0JBQ3JCLG9DQUFvQztnQkFDcEMseUNBQXlDO2dCQUN6QyxxQkFBcUI7Z0JBQ3JCLG9DQUFvQztnQkFDcEMsMEJBQTBCO2dCQUMxQiwwQkFBMEI7Z0JBQzFCLHlDQUF5QztnQkFDekMseUJBQXlCO2dCQUN6Qix5QkFBeUI7Z0JBQ3pCLHdDQUF3QztnQkFDeEMseUNBQXlDO2dCQUN6QyxxQkFBcUI7Z0JBQ3JCLG9DQUFvQzthQUNyQztZQUNELElBQUksRUFBRTtnQkFDSixzQ0FBc0M7Z0JBQ3RDLDhCQUE4QjtnQkFDOUIsOEJBQThCO2dCQUM5Qiw2Q0FBNkM7Z0JBQzdDLGtCQUFrQjtnQkFDbEIsaUNBQWlDO2dCQUNqQyx1QkFBdUI7Z0JBQ3ZCLHNDQUFzQzthQUN2QztZQUNELElBQUksRUFBRTtnQkFDSix3Q0FBd0M7Z0JBQ3hDLHFCQUFxQjtnQkFDckIsb0JBQW9CO2dCQUNwQixtQ0FBbUM7YUFDcEM7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQW1LRixDQUFDO0NBQ0Y7QUF2aUJELGdEQXVpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW29ic2VydmFiaWxpdHlhZG1pbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmlsaXR5YWRtaW4gZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdvYnNlcnZhYmlsaXR5YWRtaW4nO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgb3JnYW5pemF0aW9uIGNlbnRyYWxpemF0aW9uIHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uU291cmNlUmVnaW9ucygpXG4gICAqIC0gLmlmQ2VudHJhbGl6YXRpb25EZXN0aW5hdGlvblJlZ2lvbigpXG4gICAqIC0gLmlmQ2VudHJhbGl6YXRpb25CYWNrdXBSZWdpb24oKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9DcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfQ3JlYXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0NyZWF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBvcmdhbml6YXRpb24gY2VudHJhbGl6YXRpb24gcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHRlbGVtZXRyeSBydWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZVRlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlVGVsZW1ldHJ5UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlVGVsZW1ldHJ5UnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBvcmdhbml6YXRpb24gdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9EZWxldGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiBjZW50cmFsaXphdGlvbiBydWxlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUVucmljaG1lbnRTdGF0dXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RW5yaWNobWVudFN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RW5yaWNobWVudFN0YXR1cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgc3RhdHVzIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGhlIFRlbGVtZXRyeSBDb25maWcgZmVhdHVyZSBzdGF0dXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUV2YWx1YXRpb25TdGF0dXNGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRUZWxlbWV0cnlSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFRlbGVtZXRyeVJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFRlbGVtZXRyeVJ1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgY2VudHJhbGl6YXRpb24gcnVsZXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RDZW50cmFsaXphdGlvblJ1bGVzRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDZW50cmFsaXphdGlvblJ1bGVzRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q2VudHJhbGl6YXRpb25SdWxlc0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRlbGVtZXRyeSBjb25maWd1cmF0aW9ucyBmb3IgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFJlc291cmNlVGVsZW1ldHJ5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZXNvdXJjZVRlbGVtZXRyeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlc291cmNlVGVsZW1ldHJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGVsZW1ldHJ5IGNvbmZpZ3VyYXRpb25zIGZvciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVzb3VyY2VUZWxlbWV0cnlGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RUYWdzRm9yUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRhZ3NGb3JSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRlbGVtZXRyeSBydWxlcyBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RUZWxlbWV0cnlSdWxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGVsZW1ldHJ5UnVsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUZWxlbWV0cnlSdWxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRlbGVtZXRyeSBydWxlcyBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUZWxlbWV0cnlSdWxlc0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZW5hYmxlIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUVucmljaG1lbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFbnJpY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUVucmljaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNhYmxlIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdG9wVGVsZW1ldHJ5RW5yaWNobWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdG9wVGVsZW1ldHJ5RW5yaWNobWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RvcFRlbGVtZXRyeUVucmljaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdG9wIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RvcCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWRkIG9yIHVwZGF0ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUYWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZ1xuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VbnRhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHNwZWNpZmllZCBjZW50cmFsaXphdGlvbiBydWxlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZDZW50cmFsaXphdGlvblNvdXJjZVJlZ2lvbnMoKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uRGVzdGluYXRpb25SZWdpb24oKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uQmFja3VwUmVnaW9uKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVXBkYXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VcGRhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY2Nlc3NMZXZlbExpc3Q6IEFjY2Vzc0xldmVsTGlzdCA9IHtcbiAgICBXcml0ZTogW1xuICAgICAgJ0NyZWF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZScsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnRGVsZXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdEZWxldGVUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdEZWxldGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdTdGFydFRlbGVtZXRyeUVucmljaG1lbnQnLFxuICAgICAgJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicsXG4gICAgICAnU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdTdG9wVGVsZW1ldHJ5RW5yaWNobWVudCcsXG4gICAgICAnU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24nLFxuICAgICAgJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdVcGRhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nLFxuICAgICAgJ1VwZGF0ZVRlbGVtZXRyeVJ1bGUnLFxuICAgICAgJ1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnR2V0Q2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFbnJpY2htZW50U3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdMaXN0UmVzb3VyY2VUZWxlbWV0cnknLFxuICAgICAgJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbidcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0Q2VudHJhbGl6YXRpb25SdWxlc0Zvck9yZ2FuaXphdGlvbicsXG4gICAgICAnTGlzdFRhZ3NGb3JSZXNvdXJjZScsXG4gICAgICAnTGlzdFRlbGVtZXRyeVJ1bGVzJyxcbiAgICAgICdMaXN0VGVsZW1ldHJ5UnVsZXNGb3JPcmdhbml6YXRpb24nXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSB0ZWxlbWV0cnktcnVsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5UnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgdGVsZW1ldHJ5UnVsZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvblRlbGVtZXRyeVJ1bGUodGVsZW1ldHJ5UnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnRlbGVtZXRyeS1ydWxlLyR7IHRlbGVtZXRyeVJ1bGVOYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBvcmdhbml6YXRpb24tdGVsZW1ldHJ5LXJ1bGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9UZWxlbWV0cnlSdWxlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHRlbGVtZXRyeVJ1bGVOYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHRlbGVtZXRyeVJ1bGVOYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Pcmdhbml6YXRpb25UZWxlbWV0cnlSdWxlKHRlbGVtZXRyeVJ1bGVOYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b2JzZXJ2YWJpbGl0eWFkbWluOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpvcmdhbml6YXRpb24tdGVsZW1ldHJ5LXJ1bGUvJHsgdGVsZW1ldHJ5UnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIG9yZ2FuaXphdGlvbi1jZW50cmFsaXphdGlvbi1ydWxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfQ2VudHJhbGl6YXRpb25SdWxlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGNlbnRyYWxpemF0aW9uUnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgY2VudHJhbGl6YXRpb25SdWxlTmFtZS5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uT3JnYW5pemF0aW9uQ2VudHJhbGl6YXRpb25SdWxlKGNlbnRyYWxpemF0aW9uUnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om9yZ2FuaXphdGlvbi1jZW50cmFsaXphdGlvbi1ydWxlLyR7IGNlbnRyYWxpemF0aW9uUnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWdzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXF1ZXN0VGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlcXVlc3RUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIHRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLXRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLWNlbnRyYWxpemF0aW9uLXJ1bGVcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgYmFja3VwIHJlZ2lvbiB0aGF0IGlzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uYmFja3VwcmVnaW9uXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQ2VudHJhbGl6YXRpb25CYWNrdXBSZWdpb24odmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYENlbnRyYWxpemF0aW9uQmFja3VwUmVnaW9uYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIGRlc3RpbmF0aW9uIHJlZ2lvbiB0aGF0IGlzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uZGVzdGluYXRpb25yZWdpb25cbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpXG4gICAqIC0gLnRvVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZDZW50cmFsaXphdGlvbkRlc3RpbmF0aW9uUmVnaW9uKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBDZW50cmFsaXphdGlvbkRlc3RpbmF0aW9uUmVnaW9uYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHNvdXJjZSByZWdpb25zIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uc291cmNlcmVnaW9uc1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9VcGRhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkNlbnRyYWxpemF0aW9uU291cmNlUmVnaW9ucyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgQ2VudHJhbGl6YXRpb25Tb3VyY2VSZWdpb25zYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtvYnNlcnZhYmlsaXR5YWRtaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2FtYXpvbmNsb3Vkd2F0Y2hvYnNlcnZhYmlsaXR5YWRtaW5zZXJ2aWNlLmh0bWwpLlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBpYW0uUG9saWN5U3RhdGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,436 @@
1
+ import { AccessLevelList } from '../../shared/access-level';
2
+ import { PolicyStatement, Operator } from '../../shared';
3
+ import { aws_iam as iam } from "aws-cdk-lib";
4
+ /**
5
+ * Statement provider for service [rtbfabric](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrtbfabric.html).
6
+ *
7
+ * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
8
+ */
9
+ export declare class Rtbfabric extends PolicyStatement {
10
+ servicePrefix: string;
11
+ /**
12
+ * Grants permission to accept a link invitation from another Gateway
13
+ *
14
+ * Access Level: Write
15
+ *
16
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_AcceptLink.html
17
+ */
18
+ toAcceptLink(): this;
19
+ /**
20
+ * Grants permission to create an inbound external link for a responder gateway
21
+ *
22
+ * Access Level: Write
23
+ *
24
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateInboundExternalLink.html
25
+ */
26
+ toCreateInboundExternalLink(): this;
27
+ /**
28
+ * Grants permission to create a new link between RTB applications
29
+ *
30
+ * Access Level: Write
31
+ *
32
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateLink.html
33
+ */
34
+ toCreateLink(): this;
35
+ /**
36
+ * Grants permission to create an outbound external link for a requester gateway to connect to external public responder endpoints
37
+ *
38
+ * Access Level: Write
39
+ *
40
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateOutboundExternalLink.html
41
+ */
42
+ toCreateOutboundExternalLink(): this;
43
+ /**
44
+ * Grants permission to create a requester gateway
45
+ *
46
+ * Access Level: Write
47
+ *
48
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateRequesterGateway.html
49
+ */
50
+ toCreateRequesterGateway(): this;
51
+ /**
52
+ * Grants permission to create a responder gateway
53
+ *
54
+ * Access Level: Write
55
+ *
56
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateResponderGateway.html
57
+ */
58
+ toCreateResponderGateway(): this;
59
+ /**
60
+ * Grants permission to delete an inbound external link
61
+ *
62
+ * Access Level: Write
63
+ *
64
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteInboundExternalLink.html
65
+ */
66
+ toDeleteInboundExternalLink(): this;
67
+ /**
68
+ * Grants permission to delete a link between RTB applications
69
+ *
70
+ * Access Level: Write
71
+ *
72
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteLink.html
73
+ */
74
+ toDeleteLink(): this;
75
+ /**
76
+ * Grants permission to delete an outbound external link
77
+ *
78
+ * Access Level: Write
79
+ *
80
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteOutboundExternalLink.html
81
+ */
82
+ toDeleteOutboundExternalLink(): this;
83
+ /**
84
+ * Grants permission to delete a requester gateway
85
+ *
86
+ * Access Level: Write
87
+ *
88
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteRequesterGateway.html
89
+ */
90
+ toDeleteRequesterGateway(): this;
91
+ /**
92
+ * Grants permission to delete a responder gateway
93
+ *
94
+ * Access Level: Write
95
+ *
96
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteResponderGateway.html
97
+ */
98
+ toDeleteResponderGateway(): this;
99
+ /**
100
+ * Grants permission to retrieve information about an inbound external link
101
+ *
102
+ * Access Level: Read
103
+ *
104
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetInboundExternalLink.html
105
+ */
106
+ toGetInboundExternalLink(): this;
107
+ /**
108
+ * Grants permission to retrieve information about a link between RTB applications
109
+ *
110
+ * Access Level: Read
111
+ *
112
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetLink.html
113
+ */
114
+ toGetLink(): this;
115
+ /**
116
+ * Grants permission to retrieve information about an outbound external link
117
+ *
118
+ * Access Level: Read
119
+ *
120
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetOutboundExternalLink.html
121
+ */
122
+ toGetOutboundExternalLink(): this;
123
+ /**
124
+ * Grants permission to retrieve information about a requester gateway
125
+ *
126
+ * Access Level: Read
127
+ *
128
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetRequesterGateway.html
129
+ */
130
+ toGetRequesterGateway(): this;
131
+ /**
132
+ * Grants permission to retrieve information about a responder gateway
133
+ *
134
+ * Access Level: Read
135
+ *
136
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetResponderGateway.html
137
+ */
138
+ toGetResponderGateway(): this;
139
+ /**
140
+ * Grants permission to list links associated with an RTB application
141
+ *
142
+ * Access Level: List
143
+ *
144
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListLinks.html
145
+ */
146
+ toListLinks(): this;
147
+ /**
148
+ * Grants permission to list requester gateways with optional filtering and pagination
149
+ *
150
+ * Access Level: List
151
+ *
152
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListRequesterGateways.html
153
+ */
154
+ toListRequesterGateways(): this;
155
+ /**
156
+ * Grants permission to list responder gateways with optional filtering and pagination
157
+ *
158
+ * Access Level: List
159
+ *
160
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListResponderGateways.html
161
+ */
162
+ toListResponderGateways(): this;
163
+ /**
164
+ * Grants permission to list tags for a resource
165
+ *
166
+ * Access Level: Read
167
+ *
168
+ * Possible conditions:
169
+ * - .ifAwsResourceTag()
170
+ *
171
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListTagsForResource.html
172
+ */
173
+ toListTagsForResource(): this;
174
+ /**
175
+ * Grants permission to reject a link request between RTB applications
176
+ *
177
+ * Access Level: Write
178
+ *
179
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_RejectLink.html
180
+ */
181
+ toRejectLink(): this;
182
+ /**
183
+ * Grants permission to assign one or more tags (key-value pairs) to the specified resource
184
+ *
185
+ * Access Level: Tagging
186
+ *
187
+ * Possible conditions:
188
+ * - .ifAwsRequestTag()
189
+ * - .ifAwsResourceTag()
190
+ * - .ifAwsTagKeys()
191
+ *
192
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_TagResource.html
193
+ */
194
+ toTagResource(): this;
195
+ /**
196
+ * Grants permission to remove a tag or tags from a resource
197
+ *
198
+ * Access Level: Tagging
199
+ *
200
+ * Possible conditions:
201
+ * - .ifAwsResourceTag()
202
+ * - .ifAwsTagKeys()
203
+ *
204
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UntagResource.html
205
+ */
206
+ toUntagResource(): this;
207
+ /**
208
+ * Grants permission to update configuration settings for an existing link
209
+ *
210
+ * Access Level: Write
211
+ *
212
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateLink.html
213
+ */
214
+ toUpdateLink(): this;
215
+ /**
216
+ * Grants permission to update a link module flow
217
+ *
218
+ * Access Level: Write
219
+ *
220
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateLinkModuleFlow.html
221
+ */
222
+ toUpdateLinkModuleFlow(): this;
223
+ /**
224
+ * Grants permission to update a requester gateway
225
+ *
226
+ * Access Level: Write
227
+ *
228
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateRequesterGateway.html
229
+ */
230
+ toUpdateRequesterGateway(): this;
231
+ /**
232
+ * Grants permission to update a responder gateway
233
+ *
234
+ * Access Level: Write
235
+ *
236
+ * https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateResponderGateway.html
237
+ */
238
+ toUpdateResponderGateway(): this;
239
+ protected accessLevelList: AccessLevelList;
240
+ /**
241
+ * Adds a resource of type InboundExternalLink to the statement
242
+ *
243
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/links.html
244
+ *
245
+ * @param gatewayId - Identifier for the gatewayId.
246
+ * @param linkId - Identifier for the linkId.
247
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
248
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
249
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
250
+ *
251
+ * Possible conditions:
252
+ * - .ifInboundExternalLinkLinkId()
253
+ * - .ifResponderGatewayGatewayId()
254
+ */
255
+ onInboundExternalLink(gatewayId: string, linkId: string, account?: string, region?: string, partition?: string): this;
256
+ /**
257
+ * Adds a resource of type Link to the statement
258
+ *
259
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/links.html
260
+ *
261
+ * @param gatewayId - Identifier for the gatewayId.
262
+ * @param linkId - Identifier for the linkId.
263
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
264
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
265
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
266
+ *
267
+ * Possible conditions:
268
+ * - .ifLinkLinkId()
269
+ * - .ifRequesterGatewayGatewayId()
270
+ * - .ifResponderGatewayGatewayId()
271
+ */
272
+ onLink(gatewayId: string, linkId: string, account?: string, region?: string, partition?: string): this;
273
+ /**
274
+ * Adds a resource of type OutboundExternalLink to the statement
275
+ *
276
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/links.html
277
+ *
278
+ * @param gatewayId - Identifier for the gatewayId.
279
+ * @param linkId - Identifier for the linkId.
280
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
281
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
282
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
283
+ *
284
+ * Possible conditions:
285
+ * - .ifOutboundExternalLinkLinkId()
286
+ * - .ifRequesterGatewayGatewayId()
287
+ */
288
+ onOutboundExternalLink(gatewayId: string, linkId: string, account?: string, region?: string, partition?: string): this;
289
+ /**
290
+ * Adds a resource of type RequesterGateway to the statement
291
+ *
292
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/working-with-requester-rtb-applications.html
293
+ *
294
+ * @param gatewayId - Identifier for the gatewayId.
295
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
296
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
297
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
298
+ *
299
+ * Possible conditions:
300
+ * - .ifRequesterGatewayGatewayId()
301
+ */
302
+ onRequesterGateway(gatewayId: string, account?: string, region?: string, partition?: string): this;
303
+ /**
304
+ * Adds a resource of type ResponderGateway to the statement
305
+ *
306
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/working-with-responder-rtb-applications.html
307
+ *
308
+ * @param gatewayId - Identifier for the gatewayId.
309
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
310
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
311
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
312
+ *
313
+ * Possible conditions:
314
+ * - .ifResponderGatewayGatewayId()
315
+ */
316
+ onResponderGateway(gatewayId: string, account?: string, region?: string, partition?: string): this;
317
+ /**
318
+ * Filters access by a tag key and value pair that is allowed in the request
319
+ *
320
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
321
+ *
322
+ * Applies to actions:
323
+ * - .toTagResource()
324
+ *
325
+ * @param tagKey The tag key to check
326
+ * @param value The value(s) to check
327
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
328
+ */
329
+ ifAwsRequestTag(tagKey: string, value: string | string[], operator?: Operator | string): this;
330
+ /**
331
+ * Filters access by a tag key and value pair of a resource
332
+ *
333
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
334
+ *
335
+ * Applies to actions:
336
+ * - .toListTagsForResource()
337
+ * - .toTagResource()
338
+ * - .toUntagResource()
339
+ *
340
+ * @param tagKey The tag key to check
341
+ * @param value The value(s) to check
342
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
343
+ */
344
+ ifAwsResourceTag(tagKey: string, value: string | string[], operator?: Operator | string): this;
345
+ /**
346
+ * Filters access by a list of tag keys that are allowed in the request
347
+ *
348
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
349
+ *
350
+ * Applies to actions:
351
+ * - .toTagResource()
352
+ * - .toUntagResource()
353
+ *
354
+ * @param value The value(s) to check
355
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
356
+ */
357
+ ifAwsTagKeys(value: string | string[], operator?: Operator | string): this;
358
+ /**
359
+ * Filters access by gateway identifier supporting rtb-gw-* formats
360
+ *
361
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
362
+ *
363
+ * @param value The value(s) to check
364
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
365
+ */
366
+ ifInboundExternalLinkGatewayId(value: string | string[], operator?: Operator | string): this;
367
+ /**
368
+ * Filters access by InboundExternalLink resource linkId identifier
369
+ *
370
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
371
+ *
372
+ * Applies to resource types:
373
+ * - InboundExternalLink
374
+ *
375
+ * @param value The value(s) to check
376
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
377
+ */
378
+ ifInboundExternalLinkLinkId(value: string | string[], operator?: Operator | string): this;
379
+ /**
380
+ * Filters access by Link resource linkId identifier
381
+ *
382
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
383
+ *
384
+ * Applies to resource types:
385
+ * - Link
386
+ *
387
+ * @param value The value(s) to check
388
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
389
+ */
390
+ ifLinkLinkId(value: string | string[], operator?: Operator | string): this;
391
+ /**
392
+ * Filters access by OutboundExternalLink resource linkId identifier
393
+ *
394
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
395
+ *
396
+ * Applies to resource types:
397
+ * - OutboundExternalLink
398
+ *
399
+ * @param value The value(s) to check
400
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
401
+ */
402
+ ifOutboundExternalLinkLinkId(value: string | string[], operator?: Operator | string): this;
403
+ /**
404
+ * Filters access by gateway identifier supporting rtb-gw-* formats
405
+ *
406
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
407
+ *
408
+ * Applies to resource types:
409
+ * - Link
410
+ * - OutboundExternalLink
411
+ * - RequesterGateway
412
+ *
413
+ * @param value The value(s) to check
414
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
415
+ */
416
+ ifRequesterGatewayGatewayId(value: string | string[], operator?: Operator | string): this;
417
+ /**
418
+ * Filters access by gateway identifier supporting rtb-gw-* formats
419
+ *
420
+ * https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
421
+ *
422
+ * Applies to resource types:
423
+ * - InboundExternalLink
424
+ * - Link
425
+ * - ResponderGateway
426
+ *
427
+ * @param value The value(s) to check
428
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
429
+ */
430
+ ifResponderGatewayGatewayId(value: string | string[], operator?: Operator | string): this;
431
+ /**
432
+ * Statement provider for service [rtbfabric](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrtbfabric.html).
433
+ *
434
+ */
435
+ constructor(props?: iam.PolicyStatementProps);
436
+ }