ec2-instance-running-scheduler 0.3.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
- import { TimeZone } from 'aws-cdk-lib';
1
+ import { Duration, RemovalPolicy, TimeZone } from 'aws-cdk-lib';
2
+ import * as logs from 'aws-cdk-lib/aws-logs';
2
3
  import { Construct } from 'constructs';
3
4
  import { type FailureDetectionAlarms, type RunningSchedulerFailureDetection } from './running-scheduler-failure-detection';
4
5
  export type { FailureDetectionAlarms, RunningSchedulerFailureDetection, RunningSchedulerFailureDetectionProps, } from './running-scheduler-failure-detection';
@@ -17,6 +18,10 @@ export interface Schedule {
17
18
  }
18
19
  /**
19
20
  * Defines which EC2 instances are targeted by tag key and values.
21
+ *
22
+ * Instances must already have this tag. IAM allows `ec2:StartInstances` /
23
+ * `ec2:StopInstances` only on instances in the stack account and region whose
24
+ * `aws:ResourceTag/<tagKey>` matches one of {@link TargetResource.tagValues}.
20
25
  */
21
26
  export interface TargetResource {
22
27
  /** Tag key used to select instances (e.g. Schedule). */
@@ -53,6 +58,79 @@ export interface ResourceWaitLimits {
53
58
  * @default {@link DEFAULT_RESOURCE_WAIT_LIMITS.maxElapsedSeconds} (1800, 30 minutes)
54
59
  */
55
60
  readonly maxElapsedSeconds?: number;
61
+ /**
62
+ * Seconds to wait between describe iterations after start/stop or while transitioning.
63
+ *
64
+ * Lower values detect state changes sooner; higher values reduce DescribeInstances calls.
65
+ *
66
+ * @default {@link DEFAULT_RESOURCE_WAIT_LIMITS.statusChangeWaitSeconds} (20)
67
+ */
68
+ readonly statusChangeWaitSeconds?: number;
69
+ }
70
+ /**
71
+ * Lambda invoke settings and bounded parallelism for the running scheduler function.
72
+ *
73
+ * Increase {@link memorySize} and {@link maxConcurrency} when a single invocation targets
74
+ * many instances or regions.
75
+ */
76
+ export interface RunningSchedulerRuntimeProps {
77
+ /**
78
+ * Memory allocated to the running scheduler Lambda, in MB.
79
+ *
80
+ * @default 512
81
+ */
82
+ readonly memorySize?: number;
83
+ /**
84
+ * Invoke timeout for the Lambda function (not the durable execution timeout).
85
+ *
86
+ * AWS Lambda's maximum invoke timeout is 15 minutes. Durable waits can continue
87
+ * beyond this via {@link RunningSchedulerDurableProps.executionTimeout}.
88
+ *
89
+ * @default Duration.minutes(15)
90
+ */
91
+ readonly timeout?: Duration;
92
+ /**
93
+ * Maximum number of instances processed in parallel by the durable `map`.
94
+ *
95
+ * @default {@link DEFAULT_MAX_CONCURRENCY} (10)
96
+ */
97
+ readonly maxConcurrency?: number;
98
+ }
99
+ /**
100
+ * Durable Execution timeout and history retention for the running scheduler Lambda.
101
+ */
102
+ export interface RunningSchedulerDurableProps {
103
+ /**
104
+ * Maximum duration of a durable execution.
105
+ *
106
+ * Increase when many instances are processed with long per-instance waits.
107
+ *
108
+ * @default Duration.hours(2)
109
+ */
110
+ readonly executionTimeout?: Duration;
111
+ /**
112
+ * How long to retain durable execution history.
113
+ *
114
+ * @default Duration.days(1)
115
+ */
116
+ readonly retentionPeriod?: Duration;
117
+ }
118
+ /**
119
+ * CloudWatch Logs settings for the running scheduler function log group.
120
+ */
121
+ export interface RunningSchedulerLogGroupProps {
122
+ /**
123
+ * How long to retain application logs.
124
+ *
125
+ * @default RetentionDays.THREE_MONTHS
126
+ */
127
+ readonly retention?: logs.RetentionDays;
128
+ /**
129
+ * Removal policy for the log group.
130
+ *
131
+ * @default RemovalPolicy.DESTROY
132
+ */
133
+ readonly removalPolicy?: RemovalPolicy;
56
134
  }
57
135
  /**
58
136
  * Properties for creating an EC2 instance running scheduler.
@@ -74,6 +152,24 @@ export interface EC2InstanceRunningSchedulerProps {
74
152
  * @default {@link DEFAULT_RESOURCE_WAIT_LIMITS}
75
153
  */
76
154
  readonly resourceWait?: ResourceWaitLimits;
155
+ /**
156
+ * Lambda memory, invoke timeout, and per-invocation instance concurrency.
157
+ *
158
+ * @default 512 MB, 15 minutes, {@link DEFAULT_MAX_CONCURRENCY} (10)
159
+ */
160
+ readonly runtime?: RunningSchedulerRuntimeProps;
161
+ /**
162
+ * Durable Execution timeout and history retention.
163
+ *
164
+ * @default executionTimeout 2 hours, retentionPeriod 1 day
165
+ */
166
+ readonly durable?: RunningSchedulerDurableProps;
167
+ /**
168
+ * CloudWatch Logs retention and removal policy for the function log group.
169
+ *
170
+ * @default RetentionDays.THREE_MONTHS, RemovalPolicy.DESTROY
171
+ */
172
+ readonly logGroup?: RunningSchedulerLogGroupProps;
77
173
  /**
78
174
  * Optional CloudWatch alarms and log-based metrics for failure detection.
79
175
  *
@@ -90,7 +186,11 @@ export interface EC2InstanceRunningSchedulerProps {
90
186
  * the Resource Groups Tagging API and EC2 APIs; Slack notifications use the secret named in {@link Secrets.slackSecretName}.
91
187
  *
92
188
  * Per-instance wait timeouts are configured via {@link EC2InstanceRunningSchedulerProps.resourceWait}
93
- * and enforced in the handler before the Durable execution timeout. Optional CloudWatch failure
189
+ * and enforced in the handler before the Durable execution timeout. Lambda memory, invoke timeout,
190
+ * and map concurrency are set via {@link EC2InstanceRunningSchedulerProps.runtime}; Durable
191
+ * execution timeout and history retention via {@link EC2InstanceRunningSchedulerProps.durable};
192
+ * log retention via {@link EC2InstanceRunningSchedulerProps.logGroup}. Start/stop IAM is limited
193
+ * to instances tagged as {@link TargetResource}. Optional CloudWatch failure
94
194
  * detection is available via {@link EC2InstanceRunningSchedulerProps.failureDetection}.
95
195
  */
96
196
  export declare class EC2InstanceRunningScheduler extends Construct {
@@ -103,7 +203,9 @@ export declare class EC2InstanceRunningScheduler extends Construct {
103
203
  * @param scope - Parent construct.
104
204
  * @param id - Construct id.
105
205
  * @param props - Target tags, schedules, Slack secret, schedule enable flag, optional
106
- * {@link ResourceWaitLimits}, and optional {@link FailureDetectionAlarms}.
206
+ * {@link ResourceWaitLimits}, {@link RunningSchedulerRuntimeProps},
207
+ * {@link RunningSchedulerDurableProps}, {@link RunningSchedulerLogGroupProps},
208
+ * and optional {@link FailureDetectionAlarms}.
107
209
  */
108
210
  constructor(scope: Construct, id: string, props: EC2InstanceRunningSchedulerProps);
109
211
  }
@@ -47,6 +47,76 @@ const running_scheduler_failure_detection_1 = require("./running-scheduler-failu
47
47
  const running_scheduler_function_1 = require("../funcs/running-scheduler-function");
48
48
  const running_scheduler_predicates_1 = require("../funcs/running-scheduler-predicates");
49
49
  const running_scheduler_wait_config_1 = require("../funcs/running-scheduler-wait-config");
50
+ const DEFAULT_LAMBDA_MEMORY_SIZE = 512;
51
+ const DEFAULT_LAMBDA_TIMEOUT = aws_cdk_lib_1.Duration.minutes(15);
52
+ const DEFAULT_DURABLE_EXECUTION_TIMEOUT = aws_cdk_lib_1.Duration.hours(2);
53
+ const DEFAULT_DURABLE_RETENTION_PERIOD = aws_cdk_lib_1.Duration.days(1);
54
+ /**
55
+ * Returns `value` when set, otherwise `defaultValue`.
56
+ *
57
+ * @param name - Property path used in the error message.
58
+ * @param value - Optional positive integer from construct props.
59
+ * @param defaultValue - Fallback when `value` is omitted.
60
+ * @returns A positive integer.
61
+ * @throws {Error} When `value` is set and is not a positive integer.
62
+ */
63
+ const resolvePositiveInteger = (name, value, defaultValue) => {
64
+ if (value === undefined) {
65
+ return defaultValue;
66
+ }
67
+ if (!Number.isInteger(value) || value <= 0) {
68
+ throw new Error(`${name} must be a positive integer (got ${String(value)})`);
69
+ }
70
+ return value;
71
+ };
72
+ /**
73
+ * Ensures {@link TargetResource} can be used in IAM `aws:ResourceTag` conditions.
74
+ *
75
+ * @param targetResource - Tag key and values used to select EC2 instances.
76
+ * @throws {Error} When `tagKey` is empty or `tagValues` is empty.
77
+ */
78
+ const assertTargetResourceForIam = (targetResource) => {
79
+ if (targetResource.tagKey === '') {
80
+ throw new Error('targetResource.tagKey must be a non-empty string');
81
+ }
82
+ if (targetResource.tagValues.length === 0) {
83
+ throw new Error('targetResource.tagValues must contain at least one value');
84
+ }
85
+ };
86
+ /**
87
+ * IAM statement that allows start/stop only on EC2 instances in this account and region
88
+ * whose tags match {@link TargetResource}.
89
+ *
90
+ * `tag:GetResources` and `ec2:DescribeInstances` cannot use resource-level ARNs or
91
+ * resource-tag conditions (AWS API limitation). Start/stop are scoped instead so a
92
+ * compromised function cannot start or stop untagged instances.
93
+ *
94
+ * @param scope - Construct used to resolve the stack ARN partition, region, and account.
95
+ * @param targetResource - Tag key and values required on target instances.
96
+ * @returns Policy statement for `ec2:StartInstances` and `ec2:StopInstances`.
97
+ */
98
+ const taggedInstanceStartStopStatement = (scope, targetResource) => {
99
+ const instanceArn = aws_cdk_lib_1.Stack.of(scope).formatArn({
100
+ service: 'ec2',
101
+ resource: 'instance',
102
+ resourceName: '*',
103
+ arnFormat: aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME,
104
+ });
105
+ return new iam.PolicyStatement({
106
+ sid: 'Ec2StartStopTaggedInstances',
107
+ effect: iam.Effect.ALLOW,
108
+ actions: [
109
+ 'ec2:StartInstances',
110
+ 'ec2:StopInstances',
111
+ ],
112
+ resources: [instanceArn],
113
+ conditions: {
114
+ StringEquals: {
115
+ [`aws:ResourceTag/${targetResource.tagKey}`]: targetResource.tagValues,
116
+ },
117
+ },
118
+ });
119
+ };
50
120
  /**
51
121
  * Provisions EventBridge Scheduler rules and a Durable Execution Lambda that start/stop tagged EC2 instances.
52
122
  *
@@ -54,11 +124,15 @@ const running_scheduler_wait_config_1 = require("../funcs/running-scheduler-wait
54
124
  * the Resource Groups Tagging API and EC2 APIs; Slack notifications use the secret named in {@link Secrets.slackSecretName}.
55
125
  *
56
126
  * Per-instance wait timeouts are configured via {@link EC2InstanceRunningSchedulerProps.resourceWait}
57
- * and enforced in the handler before the Durable execution timeout. Optional CloudWatch failure
127
+ * and enforced in the handler before the Durable execution timeout. Lambda memory, invoke timeout,
128
+ * and map concurrency are set via {@link EC2InstanceRunningSchedulerProps.runtime}; Durable
129
+ * execution timeout and history retention via {@link EC2InstanceRunningSchedulerProps.durable};
130
+ * log retention via {@link EC2InstanceRunningSchedulerProps.logGroup}. Start/stop IAM is limited
131
+ * to instances tagged as {@link TargetResource}. Optional CloudWatch failure
58
132
  * detection is available via {@link EC2InstanceRunningSchedulerProps.failureDetection}.
59
133
  */
60
134
  class EC2InstanceRunningScheduler extends constructs_1.Construct {
61
- static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.3.6" };
135
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.4.0" };
62
136
  /** Failure detection alarms, when {@link EC2InstanceRunningSchedulerProps.failureDetection} is enabled. */
63
137
  failureDetection;
64
138
  /**
@@ -68,31 +142,41 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
68
142
  * @param scope - Parent construct.
69
143
  * @param id - Construct id.
70
144
  * @param props - Target tags, schedules, Slack secret, schedule enable flag, optional
71
- * {@link ResourceWaitLimits}, and optional {@link FailureDetectionAlarms}.
145
+ * {@link ResourceWaitLimits}, {@link RunningSchedulerRuntimeProps},
146
+ * {@link RunningSchedulerDurableProps}, {@link RunningSchedulerLogGroupProps},
147
+ * and optional {@link FailureDetectionAlarms}.
72
148
  */
73
149
  constructor(scope, id, props) {
74
150
  super(scope, id);
151
+ assertTargetResourceForIam(props.targetResource);
75
152
  const slackSecret = aws_secretsmanager_1.Secret.fromSecretNameV2(this, 'SlackSecret', props.secrets.slackSecretName);
153
+ const maxLoopCount = resolvePositiveInteger('resourceWait.maxLoopCount', props.resourceWait?.maxLoopCount, running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxLoopCount);
154
+ const maxElapsedSeconds = resolvePositiveInteger('resourceWait.maxElapsedSeconds', props.resourceWait?.maxElapsedSeconds, running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxElapsedSeconds);
155
+ const statusChangeWaitSeconds = resolvePositiveInteger('resourceWait.statusChangeWaitSeconds', props.resourceWait?.statusChangeWaitSeconds, running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.statusChangeWaitSeconds);
156
+ const maxConcurrency = resolvePositiveInteger('runtime.maxConcurrency', props.runtime?.maxConcurrency, running_scheduler_predicates_1.DEFAULT_MAX_CONCURRENCY);
157
+ const memorySize = resolvePositiveInteger('runtime.memorySize', props.runtime?.memorySize, DEFAULT_LAMBDA_MEMORY_SIZE);
76
158
  // Durable Functions-based Running Scheduler (previous Step Functions logic implemented in Lambda).
77
159
  // Durable Execution requires Node.js 22+.
78
160
  const runningScheduleFunctionLogGroup = new logs.LogGroup(this, 'RunningSchedulerFunctionLogGroup', {
79
- retention: logs.RetentionDays.THREE_MONTHS,
80
- removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
161
+ retention: props.logGroup?.retention ?? logs.RetentionDays.THREE_MONTHS,
162
+ removalPolicy: props.logGroup?.removalPolicy ?? aws_cdk_lib_1.RemovalPolicy.DESTROY,
81
163
  });
82
164
  const runningScheduleFunction = new running_scheduler_function_1.RunningSchedulerFunction(this, 'RunningSchedulerFunction', {
83
165
  description: 'Starts and stops tagged EC2 instances on EventBridge Scheduler schedules.',
84
166
  architecture: lambda.Architecture.ARM_64,
85
- timeout: aws_cdk_lib_1.Duration.minutes(15),
86
- memorySize: 512,
167
+ timeout: props.runtime?.timeout ?? DEFAULT_LAMBDA_TIMEOUT,
168
+ memorySize,
87
169
  retryAttempts: 2,
88
170
  durableConfig: {
89
- executionTimeout: aws_cdk_lib_1.Duration.hours(2),
90
- retentionPeriod: aws_cdk_lib_1.Duration.days(1),
171
+ executionTimeout: props.durable?.executionTimeout ?? DEFAULT_DURABLE_EXECUTION_TIMEOUT,
172
+ retentionPeriod: props.durable?.retentionPeriod ?? DEFAULT_DURABLE_RETENTION_PERIOD,
91
173
  },
92
174
  environment: {
93
175
  SLACK_SECRET_NAME: props.secrets.slackSecretName,
94
- [running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: String(props.resourceWait?.maxLoopCount ?? running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxLoopCount),
95
- [running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: String(props.resourceWait?.maxElapsedSeconds ?? running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxElapsedSeconds),
176
+ [running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: String(maxLoopCount),
177
+ [running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: String(maxElapsedSeconds),
178
+ [running_scheduler_wait_config_1.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV]: String(statusChangeWaitSeconds),
179
+ [running_scheduler_wait_config_1.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV]: String(maxConcurrency),
96
180
  },
97
181
  paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
98
182
  // Required by aws-lambda-secret-fetcher (extension HTTP API on localhost; port from PARAMETERS_SECRETS_EXTENSION_HTTP_PORT).
@@ -100,7 +184,7 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
100
184
  logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
101
185
  }),
102
186
  role: new iam.Role(this, 'RunningSchedulerFunctionRole', {
103
- description: 'Allows the running scheduler to describe, start, and stop EC2 instances and read Slack secrets.',
187
+ description: 'Allows the running scheduler to describe instances and start/stop tagged EC2 instances, and to read Slack secrets.',
104
188
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
105
189
  managedPolicies: [
106
190
  iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
@@ -118,19 +202,19 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
118
202
  actions: [
119
203
  'tag:GetResources',
120
204
  ],
205
+ // Resource Groups Tagging API does not support resource-level permissions.
121
206
  resources: ['*'],
122
207
  }));
123
- // EC2: describe instances and start/stop by instance id
124
208
  runningScheduleFunction.addToRolePolicy(new iam.PolicyStatement({
125
- sid: 'Ec2RunningControl',
209
+ sid: 'Ec2DescribeInstances',
126
210
  effect: iam.Effect.ALLOW,
127
211
  actions: [
128
212
  'ec2:DescribeInstances',
129
- 'ec2:StartInstances',
130
- 'ec2:StopInstances',
131
213
  ],
214
+ // Describe* APIs do not support resource-level permissions or resource-tag conditions.
132
215
  resources: ['*'],
133
216
  }));
217
+ runningScheduleFunction.addToRolePolicy(taggedInstanceStartStopStatement(this, props.targetResource));
134
218
  // Grant read access to the Slack secret
135
219
  slackSecret.grantRead(runningScheduleFunction);
136
220
  this.failureDetection = (0, running_scheduler_failure_detection_1.createRunningSchedulerFailureDetection)(this, 'FailureDetection', {
@@ -191,4 +275,4 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
191
275
  }
192
276
  }
193
277
  exports.EC2InstanceRunningScheduler = EC2InstanceRunningScheduler;
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MscUVBQXVEO0FBQ3ZELDJFQUE2RDtBQUM3RCx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtGQUkrQztBQUMvQyxvRkFBK0U7QUFDL0Usd0ZBQXFGO0FBQ3JGLDBGQUdnRDtBQThGaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxzQkFBUzs7SUFDeEQsMkdBQTJHO0lBQzNGLGdCQUFnQixDQUFvQztJQUVwRTs7Ozs7Ozs7T0FRRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRywyQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRyxtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsRUFBRTtZQUNsRyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZO1lBQzFDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFDO1FBRUgsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLHFEQUF3QixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUM3RixXQUFXLEVBQUUsMkVBQTJF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Q0FBQyxDQUFDO1FBRUgsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNsRCxXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFFBQVEsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksR0FBRztnQkFDekMsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxTQUFTO2dCQUM5QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksc0JBQVEsQ0FBQyxPQUFPO2FBQzNELENBQUM7WUFDRixNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLDRCQUE0QixFQUFFO2dCQUM3RCxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztvQkFDOUMsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU07d0JBQ25DLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVM7d0JBQ3pDLElBQUksRUFBRSxNQUFNO3FCQUNiO2lCQUNGLENBQUM7YUFDSCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE5SUgsa0VBK0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFRpbWVab25lIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzY2hlZHVsZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNjaGVkdWxlcic7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXItdGFyZ2V0cyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBjcmVhdGVSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbiAgdHlwZSBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zLFxuICB0eXBlIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uLFxufSBmcm9tICcuL3J1bm5pbmctc2NoZWR1bGVyLWZhaWx1cmUtZGV0ZWN0aW9uJztcbmltcG9ydCB7IFJ1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbiB9IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLWZ1bmN0aW9uJztcbmltcG9ydCB7IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMgfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzJztcbmltcG9ydCB7XG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WLFxufSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci13YWl0LWNvbmZpZyc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgRmFpbHVyZURldGVjdGlvbkFsYXJtcyxcbiAgUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24sXG4gIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uUHJvcHMsXG59IGZyb20gJy4vcnVubmluZy1zY2hlZHVsZXItZmFpbHVyZS1kZXRlY3Rpb24nO1xuXG4vKipcbiAqIENyb24tc3R5bGUgc2NoZWR1bGUgY29uZmlndXJhdGlvbiBmb3Igc3RhcnQvc3RvcCBhY3Rpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlIHtcbiAgLyoqIFRpbWUgem9uZSBmb3IgdGhlIHNjaGVkdWxlIChlLmcuIEVUQ19VVEMpLiAqL1xuICByZWFkb25seSB0aW1lem9uZTogVGltZVpvbmU7XG4gIC8qKiBDcm9uIG1pbnV0ZSAoMOKAkzU5KS4gKi9cbiAgcmVhZG9ubHkgbWludXRlPzogc3RyaW5nO1xuICAvKiogQ3JvbiBob3VyICgw4oCTMjMpLiAqL1xuICByZWFkb25seSBob3VyPzogc3RyaW5nO1xuICAvKiogQ3JvbiBkYXkgb2Ygd2VlayAoZS5nLiBNT04tRlJJKS4gKi9cbiAgcmVhZG9ubHkgd2Vlaz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHdoaWNoIEVDMiBpbnN0YW5jZXMgYXJlIHRhcmdldGVkIGJ5IHRhZyBrZXkgYW5kIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHVzZWQgdG8gc2VsZWN0IGluc3RhbmNlcyAoZS5nLiBTY2hlZHVsZSkuICovXG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICAvKiogVGFnIHZhbHVlcyB0aGF0IG1hdGNoIGluc3RhbmNlcyB0byBpbmNsdWRlLiAqL1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlY3JldCBpZGVudGlmaWVycyByZXF1aXJlZCBieSB0aGUgc2NoZWR1bGVyIChlLmcuIFNsYWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgY29udGFpbmluZyBTbGFjayB0b2tlbiBhbmQgY2hhbm5lbC4gKi9cbiAgcmVhZG9ubHkgc2xhY2tTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ0RLLXNpZGUgbGltaXRzIGZvciBwZXItaW5zdGFuY2Ugc3RhYmxlLXN0YXRlIHdhaXRpbmcgaW4gdGhlIER1cmFibGUgTGFtYmRhIGhhbmRsZXIuXG4gKlxuICogT3B0aW9uYWwgZmllbGRzIG1hcCB0byB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZ9IGFuZFxuICoge0BsaW5rIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZ9IG9uIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbi5cbiAqIFByZXZlbnRzIGFibm9ybWFsIG9yIHN0dWNrIHRyYW5zaXRpb25zIGZyb20gcnVubmluZyB1bnRpbCB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC5cbiAqXG4gKiBAc2VlIHtAbGluayBSZXNvdXJjZVdhaXRMaW1pdHN9IGluIGBydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzYCBmb3IgdGhlIGhhbmRsZXItc2lkZSByZXF1aXJlZCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVdhaXRMaW1pdHMge1xuICAvKipcbiAgICogTWF4aW11bSBkZXNjcmliZS93YWl0IGxvb3AgaXRlcmF0aW9ucyBwZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heExvb3BDb3VudH0gKDkwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TG9vcENvdW50PzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSB3YWxsLWNsb2NrIHNlY29uZHMgc3BlbnQgd2FpdGluZyBmb3IgYSBzaW5nbGUgaW5zdGFuY2UgdG8gc3RhYmlsaXplLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kc30gKDE4MDAsIDMwIG1pbnV0ZXMpXG4gICAqL1xuICByZWFkb25seSBtYXhFbGFwc2VkU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VXYWl0PzogUmVzb3VyY2VXYWl0TGltaXRzO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ2xvdWRXYXRjaCBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzIGZvciBmYWlsdXJlIGRldGVjdGlvbi5cbiAgICpcbiAgICogU2V0IGBlbmFibGVkOiB0cnVlYCB0byBjcmVhdGUgYWxhcm1zOyBvcHRpb25hbGx5IHBhc3MgYGFsYXJtVG9waWNgIGZvciBTTlMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWQgd2hlbiBvbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogRmFpbHVyZURldGVjdGlvbkFsYXJtcztcbn1cblxuLyoqXG4gKiBQcm92aXNpb25zIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhbmQgYSBEdXJhYmxlIEV4ZWN1dGlvbiBMYW1iZGEgdGhhdCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLlxuICpcbiAqIEVhY2ggc2NoZWR1bGUgaW52b2tlcyB0aGUgZnVuY3Rpb24gd2l0aCBgUGFyYW1zYCAoYFRhZ0tleWAsIGBUYWdWYWx1ZXNgLCBgTW9kZWApLiBUaGUgZnVuY3Rpb24gdXNlc1xuICogdGhlIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBhbmQgRUMyIEFQSXM7IFNsYWNrIG5vdGlmaWNhdGlvbnMgdXNlIHRoZSBzZWNyZXQgbmFtZWQgaW4ge0BsaW5rIFNlY3JldHMuc2xhY2tTZWNyZXROYW1lfS5cbiAqXG4gKiBQZXItaW5zdGFuY2Ugd2FpdCB0aW1lb3V0cyBhcmUgY29uZmlndXJlZCB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLnJlc291cmNlV2FpdH1cbiAqIGFuZCBlbmZvcmNlZCBpbiB0aGUgaGFuZGxlciBiZWZvcmUgdGhlIER1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQuIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZVxuICogZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLmZhaWx1cmVEZXRlY3Rpb259LlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgd2hlbiB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgdHdvIGNyb24gc2NoZWR1bGVzIChzdGFydC9zdG9wKSxcbiAgICogYW5kIHRoZSBidW5kbGVkIHJ1bm5pbmctc2NoZWR1bGVyIExhbWJkYSAoTm9kZS5qcywgRHVyYWJsZSBFeGVjdXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCB0YWdzLCBzY2hlZHVsZXMsIFNsYWNrIHNlY3JldCwgc2NoZWR1bGUgZW5hYmxlIGZsYWcsIG9wdGlvbmFsXG4gICAqICAge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30sIGFuZCBvcHRpb25hbCB7QGxpbmsgRmFpbHVyZURldGVjdGlvbkFsYXJtc30uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ1J1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbkxvZ0dyb3VwJywge1xuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24gPSBuZXcgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhbmQgc3RvcHMgdGFnZ2VkIEVDMiBpbnN0YW5jZXMgb24gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHNjaGVkdWxlcy4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgIGR1cmFibGVDb25maWc6IHtcbiAgICAgICAgZXhlY3V0aW9uVGltZW91dDogRHVyYXRpb24uaG91cnMoMiksXG4gICAgICAgIHJldGVudGlvblBlcmlvZDogRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTTEFDS19TRUNSRVRfTkFNRTogcHJvcHMuc2VjcmV0cy5zbGFja1NlY3JldE5hbWUsXG4gICAgICAgIFtQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVl06IFN0cmluZyhcbiAgICAgICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heExvb3BDb3VudCA/PyBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heExvb3BDb3VudCxcbiAgICAgICAgKSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBTdHJpbmcoXG4gICAgICAgICAgcHJvcHMucmVzb3VyY2VXYWl0Py5tYXhFbGFwc2VkU2Vjb25kcyA/PyBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc0FuZFNlY3JldHM6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLmZyb21WZXJzaW9uKGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgLy8gUmVxdWlyZWQgYnkgYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlciAoZXh0ZW5zaW9uIEhUVFAgQVBJIG9uIGxvY2FsaG9zdDsgcG9ydCBmcm9tIFBBUkFNRVRFUlNfU0VDUkVUU19FWFRFTlNJT05fSFRUUF9QT1JUKS5cbiAgICAgICAgY2FjaGVTaXplOiA1MDAsXG4gICAgICAgIGxvZ0xldmVsOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICB9KSxcbiAgICAgIHJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uUm9sZScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBbGxvd3MgdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIHRvIGRlc2NyaWJlLCBzdGFydCwgYW5kIHN0b3AgRUMyIGluc3RhbmNlcyBhbmQgcmVhZCBTbGFjayBzZWNyZXRzLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgLy8gRUMyOiBkZXNjcmliZSBpbnN0YW5jZXMgYW5kIHN0YXJ0L3N0b3AgYnkgaW5zdGFuY2UgaWRcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyUnVubmluZ0NvbnRyb2wnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgICAgJ2VjMjpTdGFydEluc3RhbmNlcycsXG4gICAgICAgICdlYzI6U3RvcEluc3RhbmNlcycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgLy8gR3JhbnQgcmVhZCBhY2Nlc3MgdG8gdGhlIFNsYWNrIHNlY3JldFxuICAgIHNsYWNrU2VjcmV0LmdyYW50UmVhZChydW5uaW5nU2NoZWR1bGVGdW5jdGlvbik7XG5cbiAgICB0aGlzLmZhaWx1cmVEZXRlY3Rpb24gPSBjcmVhdGVSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbih0aGlzLCAnRmFpbHVyZURldGVjdGlvbicsIHtcbiAgICAgIGZhaWx1cmVEZXRlY3Rpb246IHByb3BzLmZhaWx1cmVEZXRlY3Rpb24sXG4gICAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbixcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9kdXJhYmxlLWdldHRpbmctc3RhcnRlZC1pYWMuaHRtbFxuICAgIGNvbnN0IHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMgPSBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgLy8gV2hldGhlciBzY2hlZHVsZXMgYXJlIGVuYWJsZWQgKGRlZmF1bHQgdHJ1ZSB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZCkuXG4gICAgY29uc3Qgc2NoZWR1bGVFbmFibGVkOiBib29sZWFuID0gKCgpID0+IHtcbiAgICAgIGlmIChwcm9wcy5lbmFibGVTY2hlZHVsaW5nID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5hYmxlU2NoZWR1bGluZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnM6IExhbWJkYSBwZXJmb3JtcyB0YWcgbG9va3VwIGFuZCBpbnN0YW5jZSBzdGFydC9zdG9wIGluIGEgc2luZ2xlIHJ1bi5cbiAgICBuZXcgc2NoZWR1bGVyLlNjaGVkdWxlKHRoaXMsICdSdW5uaW5nU3RhcnRTY2hlZHVsZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncnVubmluZyBzdGFydCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdGFydFNjaGVkdWxlPy5taW51dGUgPz8gJzUwJyxcbiAgICAgICAgaG91cjogcHJvcHMuc3RhcnRTY2hlZHVsZT8uaG91ciA/PyAnNycsXG4gICAgICAgIHdlZWtEYXk6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8udGltZXpvbmUgPz8gVGltZVpvbmUuRVRDX1VUQyxcbiAgICAgIH0pLFxuICAgICAgdGFyZ2V0OiBuZXcgdGFyZ2V0cy5MYW1iZGFJbnZva2UocnVubmluZ1NjaGVkdWxlRnVuY3Rpb25BbGlhcywge1xuICAgICAgICBpbnB1dDogc2NoZWR1bGVyLlNjaGVkdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgUGFyYW1zOiB7XG4gICAgICAgICAgICBUYWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICAgIFRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgTW9kZTogJ1N0YXJ0JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0b3BTY2hlZHVsZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncnVubmluZyBzdG9wIHNjaGVkdWxlJyxcbiAgICAgIGVuYWJsZWQ6IHNjaGVkdWxlRW5hYmxlZCxcbiAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZXIuU2NoZWR1bGVFeHByZXNzaW9uLmNyb24oe1xuICAgICAgICBtaW51dGU6IHByb3BzLnN0b3BTY2hlZHVsZT8ubWludXRlID8/ICc1JyxcbiAgICAgICAgaG91cjogcHJvcHMuc3RvcFNjaGVkdWxlPy5ob3VyID8/ICcxOScsXG4gICAgICAgIHdlZWtEYXk6IHByb3BzLnN0b3BTY2hlZHVsZT8ud2VlayA/PyAnTU9OLUZSSScsXG4gICAgICAgIHRpbWVab25lOiBwcm9wcy5zdG9wU2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdG9wJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBa0Y7QUFDbEYseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MscUVBQXVEO0FBQ3ZELDJFQUE2RDtBQUM3RCx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtGQUkrQztBQUMvQyxvRkFBK0U7QUFDL0Usd0ZBRytDO0FBQy9DLDBGQUtnRDtBQWdNaEQsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxNQUFNLGlDQUFpQyxHQUFHLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sZ0NBQWdDLEdBQUcsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsSUFBWSxFQUFFLEtBQXlCLEVBQUUsWUFBb0IsRUFBVSxFQUFFO0lBQ3ZHLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksb0NBQW9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFD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QUFTO3dCQUN6QyxJQUFJLEVBQUUsTUFBTTtxQkFDYjtpQkFDRixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUtILGtFQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFybkZvcm1hdCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUaW1lWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgc2NoZWR1bGVyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXInO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2NoZWR1bGVyLXRhcmdldHMnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24sXG4gIHR5cGUgRmFpbHVyZURldGVjdGlvbkFsYXJtcyxcbiAgdHlwZSBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1mYWlsdXJlLWRldGVjdGlvbic7XG5pbXBvcnQgeyBSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1mdW5jdGlvbic7XG5pbXBvcnQge1xuICBERUZBVUxUX01BWF9DT05DVVJSRU5DWSxcbiAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUyxcbn0gZnJvbSAnLi4vZnVuY3MvcnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcyc7XG5pbXBvcnQge1xuICBQUk9DRVNTX1JFU09VUkNFX01BWF9FTEFQU0VEX1NFQ09ORFNfRU5WLFxuICBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VTX01BWF9DT05DVVJSRU5DWV9FTlYsXG59IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLXdhaXQtY29uZmlnJztcblxuZXhwb3J0IHR5cGUge1xuICBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zLFxuICBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbiAgUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb25Qcm9wcyxcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1mYWlsdXJlLWRldGVjdGlvbic7XG5cbi8qKlxuICogQ3Jvbi1zdHlsZSBzY2hlZHVsZSBjb25maWd1cmF0aW9uIGZvciBzdGFydC9zdG9wIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGUge1xuICAvKiogVGltZSB6b25lIGZvciB0aGUgc2NoZWR1bGUgKGUuZy4gRVRDX1VUQykuICovXG4gIHJlYWRvbmx5IHRpbWV6b25lOiBUaW1lWm9uZTtcbiAgLyoqIENyb24gbWludXRlICgw4oCTNTkpLiAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGhvdXIgKDDigJMyMykuICovXG4gIHJlYWRvbmx5IGhvdXI/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGRheSBvZiB3ZWVrIChlLmcuIE1PTi1GUkkpLiAqL1xuICByZWFkb25seSB3ZWVrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggRUMyIGluc3RhbmNlcyBhcmUgdGFyZ2V0ZWQgYnkgdGFnIGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEluc3RhbmNlcyBtdXN0IGFscmVhZHkgaGF2ZSB0aGlzIHRhZy4gSUFNIGFsbG93cyBgZWMyOlN0YXJ0SW5zdGFuY2VzYCAvXG4gKiBgZWMyOlN0b3BJbnN0YW5jZXNgIG9ubHkgb24gaW5zdGFuY2VzIGluIHRoZSBzdGFjayBhY2NvdW50IGFuZCByZWdpb24gd2hvc2VcbiAqIGBhd3M6UmVzb3VyY2VUYWcvPHRhZ0tleT5gIG1hdGNoZXMgb25lIG9mIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdXNlZCB0byBzZWxlY3QgaW5zdGFuY2VzIChlLmcuIFNjaGVkdWxlKS4gKi9cbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBUYWcgdmFsdWVzIHRoYXQgbWF0Y2ggaW5zdGFuY2VzIHRvIGluY2x1ZGUuICovXG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VjcmV0IGlkZW50aWZpZXJzIHJlcXVpcmVkIGJ5IHRoZSBzY2hlZHVsZXIgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDREstc2lkZSBsaW1pdHMgZm9yIHBlci1pbnN0YW5jZSBzdGFibGUtc3RhdGUgd2FpdGluZyBpbiB0aGUgRHVyYWJsZSBMYW1iZGEgaGFuZGxlci5cbiAqXG4gKiBPcHRpb25hbCBmaWVsZHMgbWFwIHRvIHtAbGluayBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVn0gYW5kXG4gKiB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVn0gb24gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICogUHJldmVudHMgYWJub3JtYWwgb3Igc3R1Y2sgdHJhbnNpdGlvbnMgZnJvbSBydW5uaW5nIHVudGlsIHRoZSBEdXJhYmxlIGV4ZWN1dGlvbiB0aW1lb3V0LlxuICpcbiAqIEBzZWUge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMudHNgIGZvciB0aGUgaGFuZGxlci1zaWRlIHJlcXVpcmVkIHNoYXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlV2FpdExpbWl0cyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGRlc2NyaWJlL3dhaXQgbG9vcCBpdGVyYXRpb25zIHBlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50fSAoOTApXG4gICAqL1xuICByZWFkb25seSBtYXhMb29wQ291bnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBzcGVudCB3YWl0aW5nIGZvciBhIHNpbmdsZSBpbnN0YW5jZSB0byBzdGFiaWxpemUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzfSAoMTgwMCwgMzAgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IG1heEVsYXBzZWRTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogU2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZGVzY3JpYmUgaXRlcmF0aW9ucyBhZnRlciBzdGFydC9zdG9wIG9yIHdoaWxlIHRyYW5zaXRpb25pbmcuXG4gICAqXG4gICAqIExvd2VyIHZhbHVlcyBkZXRlY3Qgc3RhdGUgY2hhbmdlcyBzb29uZXI7IGhpZ2hlciB2YWx1ZXMgcmVkdWNlIERlc2NyaWJlSW5zdGFuY2VzIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kc30gKDIwKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGFtYmRhIGludm9rZSBzZXR0aW5ncyBhbmQgYm91bmRlZCBwYXJhbGxlbGlzbSBmb3IgdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICpcbiAqIEluY3JlYXNlIHtAbGluayBtZW1vcnlTaXplfSBhbmQge0BsaW5rIG1heENvbmN1cnJlbmN5fSB3aGVuIGEgc2luZ2xlIGludm9jYXRpb24gdGFyZ2V0c1xuICogbWFueSBpbnN0YW5jZXMgb3IgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIE1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSwgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDUxMlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEludm9rZSB0aW1lb3V0IGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uIChub3QgdGhlIGR1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQpLlxuICAgKlxuICAgKiBBV1MgTGFtYmRhJ3MgbWF4aW11bSBpbnZva2UgdGltZW91dCBpcyAxNSBtaW51dGVzLiBEdXJhYmxlIHdhaXRzIGNhbiBjb250aW51ZVxuICAgKiBiZXlvbmQgdGhpcyB2aWEge0BsaW5rIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMuZXhlY3V0aW9uVGltZW91dH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoMTUpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSBkdXJhYmxlIGBtYXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbmN5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIER1cmFibGUgRXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIGZvciB0aGUgcnVubmluZyBzY2hlZHVsZXIgTGFtYmRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMge1xuICAvKipcbiAgICogTWF4aW11bSBkdXJhdGlvbiBvZiBhIGR1cmFibGUgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBJbmNyZWFzZSB3aGVuIG1hbnkgaW5zdGFuY2VzIGFyZSBwcm9jZXNzZWQgd2l0aCBsb25nIHBlci1pbnN0YW5jZSB3YWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMilcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHJldGFpbiBkdXJhYmxlIGV4ZWN1dGlvbiBoaXN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5kYXlzKDEpXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb25QZXJpb2Q/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDbG91ZFdhdGNoIExvZ3Mgc2V0dGluZ3MgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbiBsb2cgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmluZ1NjaGVkdWxlckxvZ0dyb3VwUHJvcHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gcmV0YWluIGFwcGxpY2F0aW9uIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGxvZyBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VXYWl0PzogUmVzb3VyY2VXYWl0TGltaXRzO1xuICAvKipcbiAgICogTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsIGFuZCBwZXItaW52b2NhdGlvbiBpbnN0YW5jZSBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgNTEyIE1CLCAxNSBtaW51dGVzLCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzO1xuICAvKipcbiAgICogRHVyYWJsZSBFeGVjdXRpb24gdGltZW91dCBhbmQgaGlzdG9yeSByZXRlbnRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGV4ZWN1dGlvblRpbWVvdXQgMiBob3VycywgcmV0ZW50aW9uUGVyaW9kIDEgZGF5XG4gICAqL1xuICByZWFkb25seSBkdXJhYmxlPzogUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wcztcbiAgLyoqXG4gICAqIENsb3VkV2F0Y2ggTG9ncyByZXRlbnRpb24gYW5kIHJlbW92YWwgcG9saWN5IGZvciB0aGUgZnVuY3Rpb24gbG9nIGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUywgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IFJ1bm5pbmdTY2hlZHVsZXJMb2dHcm91cFByb3BzO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ2xvdWRXYXRjaCBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzIGZvciBmYWlsdXJlIGRldGVjdGlvbi5cbiAgICpcbiAgICogU2V0IGBlbmFibGVkOiB0cnVlYCB0byBjcmVhdGUgYWxhcm1zOyBvcHRpb25hbGx5IHBhc3MgYGFsYXJtVG9waWNgIGZvciBTTlMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWQgd2hlbiBvbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogRmFpbHVyZURldGVjdGlvbkFsYXJtcztcbn1cblxuY29uc3QgREVGQVVMVF9MQU1CREFfTUVNT1JZX1NJWkUgPSA1MTI7XG5jb25zdCBERUZBVUxUX0xBTUJEQV9USU1FT1VUID0gRHVyYXRpb24ubWludXRlcygxNSk7XG5jb25zdCBERUZBVUxUX0RVUkFCTEVfRVhFQ1VUSU9OX1RJTUVPVVQgPSBEdXJhdGlvbi5ob3VycygyKTtcbmNvbnN0IERFRkFVTFRfRFVSQUJMRV9SRVRFTlRJT05fUEVSSU9EID0gRHVyYXRpb24uZGF5cygxKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgd2hlbiBzZXQsIG90aGVyd2lzZSBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFByb3BlcnR5IHBhdGggdXNlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIE9wdGlvbmFsIHBvc2l0aXZlIGludGVnZXIgZnJvbSBjb25zdHJ1Y3QgcHJvcHMuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRmFsbGJhY2sgd2hlbiBgdmFsdWVgIGlzIG9taXR0ZWQuXG4gKiBAcmV0dXJucyBBIHBvc2l0aXZlIGludGVnZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdmFsdWVgIGlzIHNldCBhbmQgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuY29uc3QgcmVzb2x2ZVBvc2l0aXZlSW50ZWdlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290ICR7U3RyaW5nKHZhbHVlKX0pYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBFbnN1cmVzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0gY2FuIGJlIHVzZWQgaW4gSUFNIGBhd3M6UmVzb3VyY2VUYWdgIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHRhcmdldFJlc291cmNlIC0gVGFnIGtleSBhbmQgdmFsdWVzIHVzZWQgdG8gc2VsZWN0IEVDMiBpbnN0YW5jZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdGFnS2V5YCBpcyBlbXB0eSBvciBgdGFnVmFsdWVzYCBpcyBlbXB0eS5cbiAqL1xuY29uc3QgYXNzZXJ0VGFyZ2V0UmVzb3VyY2VGb3JJYW0gPSAodGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlKTogdm9pZCA9PiB7XG4gIGlmICh0YXJnZXRSZXNvdXJjZS50YWdLZXkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXRSZXNvdXJjZS50YWdLZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuICBpZiAodGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJQU0gc3RhdGVtZW50IHRoYXQgYWxsb3dzIHN0YXJ0L3N0b3Agb25seSBvbiBFQzIgaW5zdGFuY2VzIGluIHRoaXMgYWNjb3VudCBhbmQgcmVnaW9uXG4gKiB3aG9zZSB0YWdzIG1hdGNoIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uXG4gKlxuICogYHRhZzpHZXRSZXNvdXJjZXNgIGFuZCBgZWMyOkRlc2NyaWJlSW5zdGFuY2VzYCBjYW5ub3QgdXNlIHJlc291cmNlLWxldmVsIEFSTnMgb3JcbiAqIHJlc291cmNlLXRhZyBjb25kaXRpb25zIChBV1MgQVBJIGxpbWl0YXRpb24pLiBTdGFydC9zdG9wIGFyZSBzY29wZWQgaW5zdGVhZCBzbyBhXG4gKiBjb21wcm9taXNlZCBmdW5jdGlvbiBjYW5ub3Qgc3RhcnQgb3Igc3RvcCB1bnRhZ2dlZCBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gQ29uc3RydWN0IHVzZWQgdG8gcmVzb2x2ZSB0aGUgc3RhY2sgQVJOIHBhcnRpdGlvbiwgcmVnaW9uLCBhbmQgYWNjb3VudC5cbiAqIEBwYXJhbSB0YXJnZXRSZXNvdXJjZSAtIFRhZyBrZXkgYW5kIHZhbHVlcyByZXF1aXJlZCBvbiB0YXJnZXQgaW5zdGFuY2VzLlxuICogQHJldHVybnMgUG9saWN5IHN0YXRlbWVudCBmb3IgYGVjMjpTdGFydEluc3RhbmNlc2AgYW5kIGBlYzI6U3RvcEluc3RhbmNlc2AuXG4gKi9cbmNvbnN0IHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50ID0gKFxuICBzY29wZTogQ29uc3RydWN0LFxuICB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2UsXG4pOiBpYW0uUG9saWN5U3RhdGVtZW50ID0+IHtcbiAgY29uc3QgaW5zdGFuY2VBcm4gPSBTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICBzZXJ2aWNlOiAnZWMyJyxcbiAgICByZXNvdXJjZTogJ2luc3RhbmNlJyxcbiAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICB9KTtcblxuICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgIHNpZDogJ0VjMlN0YXJ0U3RvcFRhZ2dlZEluc3RhbmNlcycsXG4gICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgIGFjdGlvbnM6IFtcbiAgICAgICdlYzI6U3RhcnRJbnN0YW5jZXMnLFxuICAgICAgJ2VjMjpTdG9wSW5zdGFuY2VzJyxcbiAgICBdLFxuICAgIHJlc291cmNlczogW2luc3RhbmNlQXJuXSxcbiAgICBjb25kaXRpb25zOiB7XG4gICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgW2Bhd3M6UmVzb3VyY2VUYWcvJHt0YXJnZXRSZXNvdXJjZS50YWdLZXl9YF06IHRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFByb3Zpc2lvbnMgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHJ1bGVzIGFuZCBhIER1cmFibGUgRXhlY3V0aW9uIExhbWJkYSB0aGF0IHN0YXJ0L3N0b3AgdGFnZ2VkIEVDMiBpbnN0YW5jZXMuXG4gKlxuICogRWFjaCBzY2hlZHVsZSBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGBQYXJhbXNgIChgVGFnS2V5YCwgYFRhZ1ZhbHVlc2AsIGBNb2RlYCkuIFRoZSBmdW5jdGlvbiB1c2VzXG4gKiB0aGUgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGFuZCBFQzIgQVBJczsgU2xhY2sgbm90aWZpY2F0aW9ucyB1c2UgdGhlIHNlY3JldCBuYW1lZCBpbiB7QGxpbmsgU2VjcmV0cy5zbGFja1NlY3JldE5hbWV9LlxuICpcbiAqIFBlci1pbnN0YW5jZSB3YWl0IHRpbWVvdXRzIGFyZSBjb25maWd1cmVkIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMucmVzb3VyY2VXYWl0fVxuICogYW5kIGVuZm9yY2VkIGluIHRoZSBoYW5kbGVyIGJlZm9yZSB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC4gTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsXG4gKiBhbmQgbWFwIGNvbmN1cnJlbmN5IGFyZSBzZXQgdmlhIHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcy5ydW50aW1lfTsgRHVyYWJsZVxuICogZXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZHVyYWJsZX07XG4gKiBsb2cgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMubG9nR3JvdXB9LiBTdGFydC9zdG9wIElBTSBpcyBsaW1pdGVkXG4gKiB0byBpbnN0YW5jZXMgdGFnZ2VkIGFzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZVxuICogZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLmZhaWx1cmVEZXRlY3Rpb259LlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgd2hlbiB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgdHdvIGNyb24gc2NoZWR1bGVzIChzdGFydC9zdG9wKSxcbiAgICogYW5kIHRoZSBidW5kbGVkIHJ1bm5pbmctc2NoZWR1bGVyIExhbWJkYSAoTm9kZS5qcywgRHVyYWJsZSBFeGVjdXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCB0YWdzLCBzY2hlZHVsZXMsIFNsYWNrIHNlY3JldCwgc2NoZWR1bGUgZW5hYmxlIGZsYWcsIG9wdGlvbmFsXG4gICAqICAge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzfSxcbiAgICogICB7QGxpbmsgUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wc30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyTG9nR3JvdXBQcm9wc30sXG4gICAqICAgYW5kIG9wdGlvbmFsIHtAbGluayBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zfS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBhc3NlcnRUYXJnZXRSZXNvdXJjZUZvcklhbShwcm9wcy50YXJnZXRSZXNvdXJjZSk7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHRoaXMsICdTbGFja1NlY3JldCcsIHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIGNvbnN0IG1heExvb3BDb3VudCA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncmVzb3VyY2VXYWl0Lm1heExvb3BDb3VudCcsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heExvb3BDb3VudCxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50LFxuICAgICk7XG4gICAgY29uc3QgbWF4RWxhcHNlZFNlY29uZHMgPSByZXNvbHZlUG9zaXRpdmVJbnRlZ2VyKFxuICAgICAgJ3Jlc291cmNlV2FpdC5tYXhFbGFwc2VkU2Vjb25kcycsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzID0gcmVzb2x2ZVBvc2l0aXZlSW50ZWdlcihcbiAgICAgICdyZXNvdXJjZVdhaXQuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMnLFxuICAgICAgcHJvcHMucmVzb3VyY2VXYWl0Py5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kcyxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMsXG4gICAgKTtcbiAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tYXhDb25jdXJyZW5jeScsXG4gICAgICBwcm9wcy5ydW50aW1lPy5tYXhDb25jdXJyZW5jeSxcbiAgICAgIERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZLFxuICAgICk7XG4gICAgY29uc3QgbWVtb3J5U2l6ZSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tZW1vcnlTaXplJyxcbiAgICAgIHByb3BzLnJ1bnRpbWU/Lm1lbW9yeVNpemUsXG4gICAgICBERUZBVUxUX0xBTUJEQV9NRU1PUllfU0laRSxcbiAgICApO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnMtYmFzZWQgUnVubmluZyBTY2hlZHVsZXIgKHByZXZpb3VzIFN0ZXAgRnVuY3Rpb25zIGxvZ2ljIGltcGxlbWVudGVkIGluIExhbWJkYSkuXG4gICAgLy8gRHVyYWJsZSBFeGVjdXRpb24gcmVxdWlyZXMgTm9kZS5qcyAyMisuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nR3JvdXA/LnJldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMubG9nR3JvdXA/LnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24gPSBuZXcgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhbmQgc3RvcHMgdGFnZ2VkIEVDMiBpbnN0YW5jZXMgb24gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHNjaGVkdWxlcy4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnJ1bnRpbWU/LnRpbWVvdXQgPz8gREVGQVVMVF9MQU1CREFfVElNRU9VVCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBwcm9wcy5kdXJhYmxlPy5leGVjdXRpb25UaW1lb3V0ID8/IERFRkFVTFRfRFVSQUJMRV9FWEVDVVRJT05fVElNRU9VVCxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBwcm9wcy5kdXJhYmxlPy5yZXRlbnRpb25QZXJpb2QgPz8gREVGQVVMVF9EVVJBQkxFX1JFVEVOVElPTl9QRVJJT0QsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU0xBQ0tfU0VDUkVUX05BTUU6IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZdOiBTdHJpbmcobWF4TG9vcENvdW50KSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBTdHJpbmcobWF4RWxhcHNlZFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlZdOiBTdHJpbmcoc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZX0VOVl06IFN0cmluZyhtYXhDb25jdXJyZW5jeSksXG4gICAgICB9LFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICAvLyBSZXF1aXJlZCBieSBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIChleHRlbnNpb24gSFRUUCBBUEkgb24gbG9jYWxob3N0OyBwb3J0IGZyb20gUEFSQU1FVEVSU19TRUNSRVRTX0VYVEVOU0lPTl9IVFRQX1BPUlQpLlxuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93cyB0aGUgcnVubmluZyBzY2hlZHVsZXIgdG8gZGVzY3JpYmUgaW5zdGFuY2VzIGFuZCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLCBhbmQgdG8gcmVhZCBTbGFjayBzZWNyZXRzLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgLy8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyRGVzY3JpYmVJbnN0YW5jZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgIF0sXG4gICAgICAvLyBEZXNjcmliZSogQVBJcyBkbyBub3Qgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9ucyBvciByZXNvdXJjZS10YWcgY29uZGl0aW9ucy5cbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50KHRoaXMsIHByb3BzLnRhcmdldFJlc291cmNlKSxcbiAgICApO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQocnVubmluZ1NjaGVkdWxlRnVuY3Rpb24pO1xuXG4gICAgdGhpcy5mYWlsdXJlRGV0ZWN0aW9uID0gY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24odGhpcywgJ0ZhaWx1cmVEZXRlY3Rpb24nLCB7XG4gICAgICBmYWlsdXJlRGV0ZWN0aW9uOiBwcm9wcy5mYWlsdXJlRGV0ZWN0aW9uLFxuICAgICAgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24sXG4gICAgICBsb2dHcm91cDogcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCxcbiAgICB9KTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzID0gcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIC8vIFdoZXRoZXIgc2NoZWR1bGVzIGFyZSBlbmFibGVkIChkZWZhdWx0IHRydWUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQpLlxuICAgIGNvbnN0IHNjaGVkdWxlRW5hYmxlZDogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlU2NoZWR1bGluZyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIC8vIER1cmFibGUgRnVuY3Rpb25zOiBMYW1iZGEgcGVyZm9ybXMgdGFnIGxvb2t1cCBhbmQgaW5zdGFuY2Ugc3RhcnQvc3RvcCBpbiBhIHNpbmdsZSBydW4uXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0YXJ0U2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RhcnQgc2NoZWR1bGUnLFxuICAgICAgZW5hYmxlZDogc2NoZWR1bGVFbmFibGVkLFxuICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlci5TY2hlZHVsZUV4cHJlc3Npb24uY3Jvbih7XG4gICAgICAgIG1pbnV0ZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8ubWludXRlID8/ICc1MCcsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LmhvdXIgPz8gJzcnLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdGFydFNjaGVkdWxlPy53ZWVrID8/ICdNT04tRlJJJyxcbiAgICAgICAgdGltZVpvbmU6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdGFydCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIG5ldyBzY2hlZHVsZXIuU2NoZWR1bGUodGhpcywgJ1J1bm5pbmdTdG9wU2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RvcCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdG9wU2NoZWR1bGU/Lm1pbnV0ZSA/PyAnNScsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0b3BTY2hlZHVsZT8uaG91ciA/PyAnMTknLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdG9wU2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RvcFNjaGVkdWxlPy50aW1lem9uZSA/PyBUaW1lWm9uZS5FVENfVVRDLFxuICAgICAgfSksXG4gICAgICB0YXJnZXQ6IG5ldyB0YXJnZXRzLkxhbWJkYUludm9rZShydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgIGlucHV0OiBzY2hlZHVsZXIuU2NoZWR1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICBQYXJhbXM6IHtcbiAgICAgICAgICAgIFRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgVGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICAgICAgICBNb2RlOiAnU3RvcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -88,7 +88,7 @@ const createLogSumAlarm = (scope, id, props) => {
88
88
  * Custom metrics are published under the `EC2InstanceRunningScheduler` namespace.
89
89
  */
90
90
  class RunningSchedulerFailureDetection extends constructs_1.Construct {
91
- static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.RunningSchedulerFailureDetection", version: "0.3.6" };
91
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.RunningSchedulerFailureDetection", version: "0.4.0" };
92
92
  /** SNS topic used for alarm actions, when configured. */
93
93
  alarmTopic;
94
94
  /** Fires when the Lambda `Errors` metric is non-zero. */
@@ -9,9 +9,13 @@ export interface ResourceWaitLimits {
9
9
  readonly maxLoopCount: number;
10
10
  /** Maximum wall-clock seconds from the first wait iteration before failing. */
11
11
  readonly maxElapsedSeconds: number;
12
+ /** Seconds between describe iterations after start/stop or while transitioning. */
13
+ readonly statusChangeWaitSeconds: number;
12
14
  }
13
15
  /** Default wait limits (90 loops × 20s wait ≈ 30 minutes of waits; 30 minutes elapsed). */
14
16
  export declare const DEFAULT_RESOURCE_WAIT_LIMITS: ResourceWaitLimits;
17
+ /** Default bounded parallelism for durable `map` over target instances. */
18
+ export declare const DEFAULT_MAX_CONCURRENCY = 10;
15
19
  /**
16
20
  * Why per-instance waiting stopped with an error.
17
21
  *
@@ -3,12 +3,15 @@
3
3
  * Pure predicates for the EC2 running scheduler Lambda (no AWS SDK).
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.formatResourceWaitFailure = exports.getWaitAbortReason = exports.isTransitioningState = exports.isDesiredStableState = exports.DEFAULT_RESOURCE_WAIT_LIMITS = void 0;
6
+ exports.formatResourceWaitFailure = exports.getWaitAbortReason = exports.isTransitioningState = exports.isDesiredStableState = exports.DEFAULT_MAX_CONCURRENCY = exports.DEFAULT_RESOURCE_WAIT_LIMITS = void 0;
7
7
  /** Default wait limits (90 loops × 20s wait ≈ 30 minutes of waits; 30 minutes elapsed). */
8
8
  exports.DEFAULT_RESOURCE_WAIT_LIMITS = {
9
9
  maxLoopCount: 90,
10
10
  maxElapsedSeconds: 1800,
11
+ statusChangeWaitSeconds: 20,
11
12
  };
13
+ /** Default bounded parallelism for durable `map` over target instances. */
14
+ exports.DEFAULT_MAX_CONCURRENCY = 10;
12
15
  /**
13
16
  * Whether the instance is already in the goal state for the scheduler mode (no start/stop needed).
14
17
  *
@@ -66,4 +69,4 @@ const formatResourceWaitFailure = (reason, context) => {
66
69
  return `ResourceWaitFailed:UnexpectedInstanceState: ${common}`;
67
70
  };
68
71
  exports.formatResourceWaitFailure = formatResourceWaitFailure;
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBYUgsMkZBQTJGO0FBQzlFLFFBQUEsNEJBQTRCLEdBQXVCO0lBQzlELFlBQVksRUFBRSxFQUFFO0lBQ2hCLGlCQUFpQixFQUFFLElBQUk7Q0FDeEIsQ0FBQztBQWNGOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEekYsUUFBQSxvQkFBb0Isd0JBQ3FFO0FBRXRHOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxJQUFJLFlBQVksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRjVFLFFBQUEsb0JBQW9CLHdCQUV3RDtBQUV6Rjs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BQTBCLEVBQ3FDLEVBQUU7SUFDakUsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNwRCxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFkVyxRQUFBLGtCQUFrQixzQkFjN0I7QUFnQkY7Ozs7OztHQU1HO0FBQ0ksTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxNQUFpQyxFQUNqQyxPQUFtQyxFQUMzQixFQUFFO0lBQ1YsTUFBTSxNQUFNLEdBQ1YsY0FBYyxPQUFPLENBQUMsVUFBVSxTQUFTLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixPQUFPLENBQUMsWUFBWSxjQUFjLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5SCxJQUFJLE1BQU0sS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sNENBQTRDLE1BQU0saUJBQWlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7UUFDeEMsT0FBTyw4Q0FBOEMsTUFBTSxzQkFBc0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RILENBQUM7SUFDRCxPQUFPLCtDQUErQyxNQUFNLEVBQUUsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFiVyxRQUFBLHlCQUF5Qiw2QkFhcEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1cmUgcHJlZGljYXRlcyBmb3IgdGhlIEVDMiBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEgKG5vIEFXUyBTREspLlxuICovXG5cbi8qKiBWYWx1ZSBvZiBgUGFyYW1zLk1vZGVgIGZyb20gdGhlIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBwYXlsb2FkLiAqL1xuZXhwb3J0IHR5cGUgUnVubmluZ1NjaGVkdWxlck1vZGUgPSAnU3RhcnQnIHwgJ1N0b3AnO1xuXG4vKiogVXBwZXIgYm91bmRzIGZvciBwZXItaW5zdGFuY2Ugc3RhYmxlLXN0YXRlIHdhaXRpbmcgaW4gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSBoYW5kbGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVdhaXRMaW1pdHMge1xuICAvKiogTWF4aW11bSBkZXNjcmliZS93YWl0IGxvb3AgaXRlcmF0aW9ucyBiZWZvcmUgZmFpbGluZyAoZWFjaCBsb29wIG1heSBpbmNsdWRlIGEgZHVyYWJsZSB3YWl0KS4gKi9cbiAgcmVhZG9ubHkgbWF4TG9vcENvdW50OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBmcm9tIHRoZSBmaXJzdCB3YWl0IGl0ZXJhdGlvbiBiZWZvcmUgZmFpbGluZy4gKi9cbiAgcmVhZG9ubHkgbWF4RWxhcHNlZFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqIERlZmF1bHQgd2FpdCBsaW1pdHMgKDkwIGxvb3BzIMOXIDIwcyB3YWl0IOKJiCAzMCBtaW51dGVzIG9mIHdhaXRzOyAzMCBtaW51dGVzIGVsYXBzZWQpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFM6IFJlc291cmNlV2FpdExpbWl0cyA9IHtcbiAgbWF4TG9vcENvdW50OiA5MCxcbiAgbWF4RWxhcHNlZFNlY29uZHM6IDE4MDAsXG59O1xuXG4vKipcbiAqIFdoeSBwZXItaW5zdGFuY2Ugd2FpdGluZyBzdG9wcGVkIHdpdGggYW4gZXJyb3IuXG4gKlxuICogLSBgTWF4TG9vcENvdW50RXhjZWVkZWRgIOKAkyB7QGxpbmsgZ2V0V2FpdEFib3J0UmVhc29ufSBoaXQge0BsaW5rIFJlc291cmNlV2FpdExpbWl0cy5tYXhMb29wQ291bnR9LlxuICogLSBgTWF4RWxhcHNlZFRpbWVFeGNlZWRlZGAg4oCTIGVsYXBzZWQgd2FsbC1jbG9jayB0aW1lIGV4Y2VlZGVkIHtAbGluayBSZXNvdXJjZVdhaXRMaW1pdHMubWF4RWxhcHNlZFNlY29uZHN9LlxuICogLSBgVW5leHBlY3RlZEluc3RhbmNlU3RhdGVgIOKAkyBzdGF0ZSBpcyBuZWl0aGVyIHN0YWJsZSwgYWN0aW9uYWJsZSwgbm9yIGEga25vd24gdHJhbnNpdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VXYWl0RmFpbHVyZVJlYXNvbiA9XG4gIHwgJ01heExvb3BDb3VudEV4Y2VlZGVkJ1xuICB8ICdNYXhFbGFwc2VkVGltZUV4Y2VlZGVkJ1xuICB8ICdVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZSc7XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5zdGFuY2UgaXMgYWxyZWFkeSBpbiB0aGUgZ29hbCBzdGF0ZSBmb3IgdGhlIHNjaGVkdWxlciBtb2RlIChubyBzdGFydC9zdG9wIG5lZWRlZCkuXG4gKlxuICogQHBhcmFtIG1vZGUgLSBgU3RhcnRgIGV4cGVjdHMgYHJ1bm5pbmdgOyBgU3RvcGAgZXhwZWN0cyBgc3RvcHBlZGAuXG4gKiBAcGFyYW0gY3VycmVudFN0YXRlIC0gSW5zdGFuY2Ugc3RhdGUgZnJvbSBgRGVzY3JpYmVJbnN0YW5jZXNgIChlLmcuIGBydW5uaW5nYCwgYHBlbmRpbmdgKS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBpbnN0YW5jZSBtYXRjaGVzIHRoZSB0YXJnZXQgc3RhdGUgZm9yIGBtb2RlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGVzaXJlZFN0YWJsZVN0YXRlID0gKG1vZGU6IFJ1bm5pbmdTY2hlZHVsZXJNb2RlLCBjdXJyZW50U3RhdGU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgKG1vZGUgPT09ICdTdGFydCcgJiYgY3VycmVudFN0YXRlID09PSAncnVubmluZycpIHx8IChtb2RlID09PSAnU3RvcCcgJiYgY3VycmVudFN0YXRlID09PSAnc3RvcHBlZCcpO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGluIGEga25vd24gdHJhbnNpdGlvbmFsIHN0YXRlIGZvciB0aGUgc2NoZWR1bGVyIG1vZGUuXG4gKlxuICogQHBhcmFtIG1vZGUgLSBgU3RhcnRgIG9yIGBTdG9wYC5cbiAqIEBwYXJhbSBjdXJyZW50U3RhdGUgLSBJbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgaW5zdGFuY2UgaXMgbW92aW5nIHRvd2FyZCB0aGUgZ29hbCBzdGF0ZSBmb3IgYG1vZGVgLlxuICovXG5leHBvcnQgY29uc3QgaXNUcmFuc2l0aW9uaW5nU3RhdGUgPSAobW9kZTogUnVubmluZ1NjaGVkdWxlck1vZGUsIGN1cnJlbnRTdGF0ZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAobW9kZSA9PT0gJ1N0YXJ0JyAmJiBjdXJyZW50U3RhdGUgPT09ICdwZW5kaW5nJykgfHxcbiAgKG1vZGUgPT09ICdTdG9wJyAmJiAoY3VycmVudFN0YXRlID09PSAnc3RvcHBpbmcnIHx8IGN1cnJlbnRTdGF0ZSA9PT0gJ3NodXR0aW5nLWRvd24nKSk7XG5cbi8qKlxuICogUmV0dXJucyBhIHdhaXQgYWJvcnQgcmVhc29uIHdoZW4gbG9vcCBjb3VudCBvciBlbGFwc2VkIHRpbWUgZXhjZWVkcyBjb25maWd1cmVkIGxpbWl0cy5cbiAqXG4gKiBAcGFyYW0gbG9vcENvdW50IC0gWmVyby1iYXNlZCBpdGVyYXRpb24gY291bnQgZm9yIHRoZSBjdXJyZW50IHdhaXQgbG9vcC5cbiAqIEBwYXJhbSBzdGFydGVkQXRNcyAtIEVwb2NoIG1pbGxpc2Vjb25kcyByZWNvcmRlZCBhdCB0aGUgc3RhcnQgb2Ygd2FpdGluZyAoZHVyYWJsZSBzdGVwKS5cbiAqIEBwYXJhbSBub3dNcyAtIEN1cnJlbnQgZXBvY2ggbWlsbGlzZWNvbmRzIChmcm9tIGEgZHVyYWJsZSBzdGVwIHdoZW4gcmVwbGF5IG1hdHRlcnMpLlxuICogQHBhcmFtIGxpbWl0cyAtIENvbmZpZ3VyZWQge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30uXG4gKiBAcmV0dXJucyBBYm9ydCByZWFzb24sIG9yIGB1bmRlZmluZWRgIHdoZW4gd2FpdGluZyBtYXkgY29udGludWUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRXYWl0QWJvcnRSZWFzb24gPSAoXG4gIGxvb3BDb3VudDogbnVtYmVyLFxuICBzdGFydGVkQXRNczogbnVtYmVyLFxuICBub3dNczogbnVtYmVyLFxuICBsaW1pdHM6IFJlc291cmNlV2FpdExpbWl0cyxcbik6ICdNYXhMb29wQ291bnRFeGNlZWRlZCcgfCAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAobG9vcENvdW50ID49IGxpbWl0cy5tYXhMb29wQ291bnQpIHtcbiAgICByZXR1cm4gJ01heExvb3BDb3VudEV4Y2VlZGVkJztcbiAgfVxuICBjb25zdCBlbGFwc2VkU2Vjb25kcyA9IChub3dNcyAtIHN0YXJ0ZWRBdE1zKSAvIDEwMDA7XG4gIGlmIChlbGFwc2VkU2Vjb25kcyA+PSBsaW1pdHMubWF4RWxhcHNlZFNlY29uZHMpIHtcbiAgICByZXR1cm4gJ01heEVsYXBzZWRUaW1lRXhjZWVkZWQnO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKiogSW5wdXRzIGZvciB7QGxpbmsgZm9ybWF0UmVzb3VyY2VXYWl0RmFpbHVyZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlV2FpdEZhaWx1cmVDb250ZXh0IHtcbiAgLyoqIEVDMiBpbnN0YW5jZSBpZCBwYXJzZWQgZnJvbSB0aGUgdGFyZ2V0IEFSTi4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nO1xuICAvKiogU2NoZWR1bGVyIG1vZGUgZnJvbSB0aGUgaW52b2NhdGlvbiBwYXlsb2FkLiAqL1xuICByZWFkb25seSBtb2RlOiBSdW5uaW5nU2NoZWR1bGVyTW9kZTtcbiAgLyoqIExhc3Qgb2JzZXJ2ZWQgaW5zdGFuY2Ugc3RhdGUgZnJvbSBgRGVzY3JpYmVJbnN0YW5jZXNgLiAqL1xuICByZWFkb25seSBjdXJyZW50U3RhdGU6IHN0cmluZztcbiAgLyoqIFplcm8tYmFzZWQgd2FpdCBsb29wIGl0ZXJhdGlvbiB3aGVuIHRoZSBmYWlsdXJlIG9jY3VycmVkLiAqL1xuICByZWFkb25seSBsb29wQ291bnQ6IG51bWJlcjtcbiAgLyoqIEFjdGl2ZSB3YWl0IGxpbWl0cyBmb3IgbGltaXQtcmVsYXRlZCBmYWlsdXJlIG1lc3NhZ2VzLiAqL1xuICByZWFkb25seSBsaW1pdHM6IFJlc291cmNlV2FpdExpbWl0cztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzdGFibGUsIGdyZXAtZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBmb3Igd2FpdCBmYWlsdXJlcy5cbiAqXG4gKiBAcGFyYW0gcmVhc29uIC0gRmFpbHVyZSBjYXRlZ29yeS5cbiAqIEBwYXJhbSBjb250ZXh0IC0gSW5zdGFuY2UgaWQsIG1vZGUsIHN0YXRlLCBsb29wIGNvdW50LCBhbmQgbGltaXRzLlxuICogQHJldHVybnMgTWVzc2FnZSBwcmVmaXhlZCB3aXRoIGBSZXNvdXJjZVdhaXRGYWlsZWQ6YCAoZS5nLiBgUmVzb3VyY2VXYWl0RmFpbGVkOk1heExvb3BDb3VudEV4Y2VlZGVkOiAuLi5gKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdFJlc291cmNlV2FpdEZhaWx1cmUgPSAoXG4gIHJlYXNvbjogUmVzb3VyY2VXYWl0RmFpbHVyZVJlYXNvbixcbiAgY29udGV4dDogUmVzb3VyY2VXYWl0RmFpbHVyZUNvbnRleHQsXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjb21tb24gPVxuICAgIGBpZGVudGlmaWVyPSR7Y29udGV4dC5pZGVudGlmaWVyfSBtb2RlPSR7Y29udGV4dC5tb2RlfSBjdXJyZW50U3RhdGU9JHtjb250ZXh0LmN1cnJlbnRTdGF0ZX0gbG9vcENvdW50PSR7Y29udGV4dC5sb29wQ291bnR9YDtcbiAgaWYgKHJlYXNvbiA9PT0gJ01heExvb3BDb3VudEV4Y2VlZGVkJykge1xuICAgIHJldHVybiBgUmVzb3VyY2VXYWl0RmFpbGVkOk1heExvb3BDb3VudEV4Y2VlZGVkOiAke2NvbW1vbn0gbWF4TG9vcENvdW50PSR7Y29udGV4dC5saW1pdHMubWF4TG9vcENvdW50fWA7XG4gIH1cbiAgaWYgKHJlYXNvbiA9PT0gJ01heEVsYXBzZWRUaW1lRXhjZWVkZWQnKSB7XG4gICAgcmV0dXJuIGBSZXNvdXJjZVdhaXRGYWlsZWQ6TWF4RWxhcHNlZFRpbWVFeGNlZWRlZDogJHtjb21tb259IG1heEVsYXBzZWRTZWNvbmRzPSR7Y29udGV4dC5saW1pdHMubWF4RWxhcHNlZFNlY29uZHN9YDtcbiAgfVxuICByZXR1cm4gYFJlc291cmNlV2FpdEZhaWxlZDpVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZTogJHtjb21tb259YDtcbn07XG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBZUgsMkZBQTJGO0FBQzlFLFFBQUEsNEJBQTRCLEdBQXVCO0lBQzlELFlBQVksRUFBRSxFQUFFO0lBQ2hCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsdUJBQXVCLEVBQUUsRUFBRTtDQUM1QixDQUFDO0FBRUYsMkVBQTJFO0FBQzlELFFBQUEsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBYzFDOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEekYsUUFBQSxvQkFBb0Isd0JBQ3FFO0FBRXRHOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxJQUFJLFlBQVksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRjVFLFFBQUEsb0JBQW9CLHdCQUV3RDtBQUV6Rjs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BQTBCLEVBQ3FDLEVBQUU7SUFDakUsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNwRCxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFkVyxRQUFBLGtCQUFrQixzQkFjN0I7QUFnQkY7Ozs7OztHQU1HO0FBQ0ksTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxNQUFpQyxFQUNqQyxPQUFtQyxFQUMzQixFQUFFO0lBQ1YsTUFBTSxNQUFNLEdBQ1YsY0FBYyxPQUFPLENBQUMsVUFBVSxTQUFTLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixPQUFPLENBQUMsWUFBWSxjQUFjLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5SCxJQUFJLE1BQU0sS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sNENBQTRDLE1BQU0saUJBQWlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7UUFDeEMsT0FBTyw4Q0FBOEMsTUFBTSxzQkFBc0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RILENBQUM7SUFDRCxPQUFPLCtDQUErQyxNQUFNLEVBQUUsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFiVyxRQUFBLHlCQUF5Qiw2QkFhcEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1cmUgcHJlZGljYXRlcyBmb3IgdGhlIEVDMiBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEgKG5vIEFXUyBTREspLlxuICovXG5cbi8qKiBWYWx1ZSBvZiBgUGFyYW1zLk1vZGVgIGZyb20gdGhlIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBwYXlsb2FkLiAqL1xuZXhwb3J0IHR5cGUgUnVubmluZ1NjaGVkdWxlck1vZGUgPSAnU3RhcnQnIHwgJ1N0b3AnO1xuXG4vKiogVXBwZXIgYm91bmRzIGZvciBwZXItaW5zdGFuY2Ugc3RhYmxlLXN0YXRlIHdhaXRpbmcgaW4gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSBoYW5kbGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVdhaXRMaW1pdHMge1xuICAvKiogTWF4aW11bSBkZXNjcmliZS93YWl0IGxvb3AgaXRlcmF0aW9ucyBiZWZvcmUgZmFpbGluZyAoZWFjaCBsb29wIG1heSBpbmNsdWRlIGEgZHVyYWJsZSB3YWl0KS4gKi9cbiAgcmVhZG9ubHkgbWF4TG9vcENvdW50OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBmcm9tIHRoZSBmaXJzdCB3YWl0IGl0ZXJhdGlvbiBiZWZvcmUgZmFpbGluZy4gKi9cbiAgcmVhZG9ubHkgbWF4RWxhcHNlZFNlY29uZHM6IG51bWJlcjtcbiAgLyoqIFNlY29uZHMgYmV0d2VlbiBkZXNjcmliZSBpdGVyYXRpb25zIGFmdGVyIHN0YXJ0L3N0b3Agb3Igd2hpbGUgdHJhbnNpdGlvbmluZy4gKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqIERlZmF1bHQgd2FpdCBsaW1pdHMgKDkwIGxvb3BzIMOXIDIwcyB3YWl0IOKJiCAzMCBtaW51dGVzIG9mIHdhaXRzOyAzMCBtaW51dGVzIGVsYXBzZWQpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFM6IFJlc291cmNlV2FpdExpbWl0cyA9IHtcbiAgbWF4TG9vcENvdW50OiA5MCxcbiAgbWF4RWxhcHNlZFNlY29uZHM6IDE4MDAsXG4gIHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzOiAyMCxcbn07XG5cbi8qKiBEZWZhdWx0IGJvdW5kZWQgcGFyYWxsZWxpc20gZm9yIGR1cmFibGUgYG1hcGAgb3ZlciB0YXJnZXQgaW5zdGFuY2VzLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZID0gMTA7XG5cbi8qKlxuICogV2h5IHBlci1pbnN0YW5jZSB3YWl0aW5nIHN0b3BwZWQgd2l0aCBhbiBlcnJvci5cbiAqXG4gKiAtIGBNYXhMb29wQ291bnRFeGNlZWRlZGAg4oCTIHtAbGluayBnZXRXYWl0QWJvcnRSZWFzb259IGhpdCB7QGxpbmsgUmVzb3VyY2VXYWl0TGltaXRzLm1heExvb3BDb3VudH0uXG4gKiAtIGBNYXhFbGFwc2VkVGltZUV4Y2VlZGVkYCDigJMgZWxhcHNlZCB3YWxsLWNsb2NrIHRpbWUgZXhjZWVkZWQge0BsaW5rIFJlc291cmNlV2FpdExpbWl0cy5tYXhFbGFwc2VkU2Vjb25kc30uXG4gKiAtIGBVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZWAg4oCTIHN0YXRlIGlzIG5laXRoZXIgc3RhYmxlLCBhY3Rpb25hYmxlLCBub3IgYSBrbm93biB0cmFuc2l0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVdhaXRGYWlsdXJlUmVhc29uID1cbiAgfCAnTWF4TG9vcENvdW50RXhjZWVkZWQnXG4gIHwgJ01heEVsYXBzZWRUaW1lRXhjZWVkZWQnXG4gIHwgJ1VuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlJztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBpcyBhbHJlYWR5IGluIHRoZSBnb2FsIHN0YXRlIGZvciB0aGUgc2NoZWR1bGVyIG1vZGUgKG5vIHN0YXJ0L3N0b3AgbmVlZGVkKS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIGBTdGFydGAgZXhwZWN0cyBgcnVubmluZ2A7IGBTdG9wYCBleHBlY3RzIGBzdG9wcGVkYC5cbiAqIEBwYXJhbSBjdXJyZW50U3RhdGUgLSBJbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AgKGUuZy4gYHJ1bm5pbmdgLCBgcGVuZGluZ2ApLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGluc3RhbmNlIG1hdGNoZXMgdGhlIHRhcmdldCBzdGF0ZSBmb3IgYG1vZGVgLlxuICovXG5leHBvcnQgY29uc3QgaXNEZXNpcmVkU3RhYmxlU3RhdGUgPSAobW9kZTogUnVubmluZ1NjaGVkdWxlck1vZGUsIGN1cnJlbnRTdGF0ZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAobW9kZSA9PT0gJ1N0YXJ0JyAmJiBjdXJyZW50U3RhdGUgPT09ICdydW5uaW5nJykgfHwgKG1vZGUgPT09ICdTdG9wJyAmJiBjdXJyZW50U3RhdGUgPT09ICdzdG9wcGVkJyk7XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5zdGFuY2UgaXMgaW4gYSBrbm93biB0cmFuc2l0aW9uYWwgc3RhdGUgZm9yIHRoZSBzY2hlZHVsZXIgbW9kZS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIGBTdGFydGAgb3IgYFN0b3BgLlxuICogQHBhcmFtIGN1cnJlbnRTdGF0ZSAtIEluc3RhbmNlIHN0YXRlIGZyb20gYERlc2NyaWJlSW5zdGFuY2VzYC5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBtb3ZpbmcgdG93YXJkIHRoZSBnb2FsIHN0YXRlIGZvciBgbW9kZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYW5zaXRpb25pbmdTdGF0ZSA9IChtb2RlOiBSdW5uaW5nU2NoZWR1bGVyTW9kZSwgY3VycmVudFN0YXRlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIChtb2RlID09PSAnU3RhcnQnICYmIGN1cnJlbnRTdGF0ZSA9PT0gJ3BlbmRpbmcnKSB8fFxuICAobW9kZSA9PT0gJ1N0b3AnICYmIChjdXJyZW50U3RhdGUgPT09ICdzdG9wcGluZycgfHwgY3VycmVudFN0YXRlID09PSAnc2h1dHRpbmctZG93bicpKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgd2FpdCBhYm9ydCByZWFzb24gd2hlbiBsb29wIGNvdW50IG9yIGVsYXBzZWQgdGltZSBleGNlZWRzIGNvbmZpZ3VyZWQgbGltaXRzLlxuICpcbiAqIEBwYXJhbSBsb29wQ291bnQgLSBaZXJvLWJhc2VkIGl0ZXJhdGlvbiBjb3VudCBmb3IgdGhlIGN1cnJlbnQgd2FpdCBsb29wLlxuICogQHBhcmFtIHN0YXJ0ZWRBdE1zIC0gRXBvY2ggbWlsbGlzZWNvbmRzIHJlY29yZGVkIGF0IHRoZSBzdGFydCBvZiB3YWl0aW5nIChkdXJhYmxlIHN0ZXApLlxuICogQHBhcmFtIG5vd01zIC0gQ3VycmVudCBlcG9jaCBtaWxsaXNlY29uZHMgKGZyb20gYSBkdXJhYmxlIHN0ZXAgd2hlbiByZXBsYXkgbWF0dGVycykuXG4gKiBAcGFyYW0gbGltaXRzIC0gQ29uZmlndXJlZCB7QGxpbmsgUmVzb3VyY2VXYWl0TGltaXRzfS5cbiAqIEByZXR1cm5zIEFib3J0IHJlYXNvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiB3YWl0aW5nIG1heSBjb250aW51ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFdhaXRBYm9ydFJlYXNvbiA9IChcbiAgbG9vcENvdW50OiBudW1iZXIsXG4gIHN0YXJ0ZWRBdE1zOiBudW1iZXIsXG4gIG5vd01zOiBudW1iZXIsXG4gIGxpbWl0czogUmVzb3VyY2VXYWl0TGltaXRzLFxuKTogJ01heExvb3BDb3VudEV4Y2VlZGVkJyB8ICdNYXhFbGFwc2VkVGltZUV4Y2VlZGVkJyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChsb29wQ291bnQgPj0gbGltaXRzLm1heExvb3BDb3VudCkge1xuICAgIHJldHVybiAnTWF4TG9vcENvdW50RXhjZWVkZWQnO1xuICB9XG4gIGNvbnN0IGVsYXBzZWRTZWNvbmRzID0gKG5vd01zIC0gc3RhcnRlZEF0TXMpIC8gMTAwMDtcbiAgaWYgKGVsYXBzZWRTZWNvbmRzID49IGxpbWl0cy5tYXhFbGFwc2VkU2Vjb25kcykge1xuICAgIHJldHVybiAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCc7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBJbnB1dHMgZm9yIHtAbGluayBmb3JtYXRSZXNvdXJjZVdhaXRGYWlsdXJlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VXYWl0RmFpbHVyZUNvbnRleHQge1xuICAvKiogRUMyIGluc3RhbmNlIGlkIHBhcnNlZCBmcm9tIHRoZSB0YXJnZXQgQVJOLiAqL1xuICByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIC8qKiBTY2hlZHVsZXIgbW9kZSBmcm9tIHRoZSBpbnZvY2F0aW9uIHBheWxvYWQuICovXG4gIHJlYWRvbmx5IG1vZGU6IFJ1bm5pbmdTY2hlZHVsZXJNb2RlO1xuICAvKiogTGFzdCBvYnNlcnZlZCBpbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AuICovXG4gIHJlYWRvbmx5IGN1cnJlbnRTdGF0ZTogc3RyaW5nO1xuICAvKiogWmVyby1iYXNlZCB3YWl0IGxvb3AgaXRlcmF0aW9uIHdoZW4gdGhlIGZhaWx1cmUgb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IGxvb3BDb3VudDogbnVtYmVyO1xuICAvKiogQWN0aXZlIHdhaXQgbGltaXRzIGZvciBsaW1pdC1yZWxhdGVkIGZhaWx1cmUgbWVzc2FnZXMuICovXG4gIHJlYWRvbmx5IGxpbWl0czogUmVzb3VyY2VXYWl0TGltaXRzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHN0YWJsZSwgZ3JlcC1mcmllbmRseSBlcnJvciBtZXNzYWdlIGZvciB3YWl0IGZhaWx1cmVzLlxuICpcbiAqIEBwYXJhbSByZWFzb24gLSBGYWlsdXJlIGNhdGVnb3J5LlxuICogQHBhcmFtIGNvbnRleHQgLSBJbnN0YW5jZSBpZCwgbW9kZSwgc3RhdGUsIGxvb3AgY291bnQsIGFuZCBsaW1pdHMuXG4gKiBAcmV0dXJucyBNZXNzYWdlIHByZWZpeGVkIHdpdGggYFJlc291cmNlV2FpdEZhaWxlZDpgIChlLmcuIGBSZXNvdXJjZVdhaXRGYWlsZWQ6TWF4TG9vcENvdW50RXhjZWVkZWQ6IC4uLmApLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0UmVzb3VyY2VXYWl0RmFpbHVyZSA9IChcbiAgcmVhc29uOiBSZXNvdXJjZVdhaXRGYWlsdXJlUmVhc29uLFxuICBjb250ZXh0OiBSZXNvdXJjZVdhaXRGYWlsdXJlQ29udGV4dCxcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNvbW1vbiA9XG4gICAgYGlkZW50aWZpZXI9JHtjb250ZXh0LmlkZW50aWZpZXJ9IG1vZGU9JHtjb250ZXh0Lm1vZGV9IGN1cnJlbnRTdGF0ZT0ke2NvbnRleHQuY3VycmVudFN0YXRlfSBsb29wQ291bnQ9JHtjb250ZXh0Lmxvb3BDb3VudH1gO1xuICBpZiAocmVhc29uID09PSAnTWF4TG9vcENvdW50RXhjZWVkZWQnKSB7XG4gICAgcmV0dXJuIGBSZXNvdXJjZVdhaXRGYWlsZWQ6TWF4TG9vcENvdW50RXhjZWVkZWQ6ICR7Y29tbW9ufSBtYXhMb29wQ291bnQ9JHtjb250ZXh0LmxpbWl0cy5tYXhMb29wQ291bnR9YDtcbiAgfVxuICBpZiAocmVhc29uID09PSAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCcpIHtcbiAgICByZXR1cm4gYFJlc291cmNlV2FpdEZhaWxlZDpNYXhFbGFwc2VkVGltZUV4Y2VlZGVkOiAke2NvbW1vbn0gbWF4RWxhcHNlZFNlY29uZHM9JHtjb250ZXh0LmxpbWl0cy5tYXhFbGFwc2VkU2Vjb25kc31gO1xuICB9XG4gIHJldHVybiBgUmVzb3VyY2VXYWl0RmFpbGVkOlVuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlOiAke2NvbW1vbn1gO1xufTtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Environment variable names for per-instance wait limits.
2
+ * Environment variable names for running scheduler handler configuration.
3
3
  *
4
4
  * Values are set by {@link EC2InstanceRunningScheduler} and read at handler cold start.
5
5
  */
@@ -15,3 +15,15 @@ export declare const PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = "PROCESS_RESOURCE_MAX
15
15
  * @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
16
16
  */
17
17
  export declare const PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = "PROCESS_RESOURCE_MAX_ELAPSED_SECONDS";
18
+ /**
19
+ * Lambda environment variable name for seconds between describe/wait iterations.
20
+ *
21
+ * @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
22
+ */
23
+ export declare const PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV = "PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS";
24
+ /**
25
+ * Lambda environment variable name for durable `map` bounded concurrency.
26
+ *
27
+ * @see {@link parseMaxConcurrencyFromEnv} in `running-scheduler-wait-env.ts`
28
+ */
29
+ export declare const PROCESS_RESOURCES_MAX_CONCURRENCY_ENV = "PROCESS_RESOURCES_MAX_CONCURRENCY";
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
- * Environment variable names for per-instance wait limits.
3
+ * Environment variable names for running scheduler handler configuration.
4
4
  *
5
5
  * Values are set by {@link EC2InstanceRunningScheduler} and read at handler cold start.
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = void 0;
8
+ exports.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV = exports.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = void 0;
9
9
  /**
10
10
  * Lambda environment variable name for max wait loop count.
11
11
  *
@@ -18,4 +18,16 @@ exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = 'PROCESS_RESOURCE_MAX_LOOP_COUNT';
18
18
  * @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
19
19
  */
20
20
  exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = 'PROCESS_RESOURCE_MAX_ELAPSED_SECONDS';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVIOzs7O0dBSUc7QUFDVSxRQUFBLG1DQUFtQyxHQUFHLGlDQUFpQyxDQUFDO0FBRXJGOzs7O0dBSUc7QUFDVSxRQUFBLHdDQUF3QyxHQUFHLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBmb3IgcGVyLWluc3RhbmNlIHdhaXQgbGltaXRzLlxuICpcbiAqIFZhbHVlcyBhcmUgc2V0IGJ5IHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJ9IGFuZCByZWFkIGF0IGhhbmRsZXIgY29sZCBzdGFydC5cbiAqL1xuXG4vKipcbiAqIExhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBtYXggd2FpdCBsb29wIGNvdW50LlxuICpcbiAqIEBzZWUge0BsaW5rIHBhcnNlUmVzb3VyY2VXYWl0TGltaXRzRnJvbUVudn0gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXdhaXQtZW52LnRzYFxuICovXG5leHBvcnQgY29uc3QgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVCc7XG5cbi8qKlxuICogTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgZm9yIG1heCB3YWl0IGVsYXBzZWQgc2Vjb25kcy5cbiAqXG4gKiBAc2VlIHtAbGluayBwYXJzZVJlc291cmNlV2FpdExpbWl0c0Zyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTJztcbiJdfQ==
21
+ /**
22
+ * Lambda environment variable name for seconds between describe/wait iterations.
23
+ *
24
+ * @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
25
+ */
26
+ exports.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV = 'PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS';
27
+ /**
28
+ * Lambda environment variable name for durable `map` bounded concurrency.
29
+ *
30
+ * @see {@link parseMaxConcurrencyFromEnv} in `running-scheduler-wait-env.ts`
31
+ */
32
+ exports.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV = 'PROCESS_RESOURCES_MAX_CONCURRENCY';
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVIOzs7O0dBSUc7QUFDVSxRQUFBLG1DQUFtQyxHQUFHLGlDQUFpQyxDQUFDO0FBRXJGOzs7O0dBSUc7QUFDVSxRQUFBLHdDQUF3QyxHQUFHLHNDQUFzQyxDQUFDO0FBRS9GOzs7O0dBSUc7QUFDVSxRQUFBLCtDQUErQyxHQUFHLDZDQUE2QyxDQUFDO0FBRTdHOzs7O0dBSUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBmb3IgcnVubmluZyBzY2hlZHVsZXIgaGFuZGxlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIFZhbHVlcyBhcmUgc2V0IGJ5IHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJ9IGFuZCByZWFkIGF0IGhhbmRsZXIgY29sZCBzdGFydC5cbiAqL1xuXG4vKipcbiAqIExhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBtYXggd2FpdCBsb29wIGNvdW50LlxuICpcbiAqIEBzZWUge0BsaW5rIHBhcnNlUmVzb3VyY2VXYWl0TGltaXRzRnJvbUVudn0gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXdhaXQtZW52LnRzYFxuICovXG5leHBvcnQgY29uc3QgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVCc7XG5cbi8qKlxuICogTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgZm9yIG1heCB3YWl0IGVsYXBzZWQgc2Vjb25kcy5cbiAqXG4gKiBAc2VlIHtAbGluayBwYXJzZVJlc291cmNlV2FpdExpbWl0c0Zyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTJztcblxuLyoqXG4gKiBMYW1iZGEgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSBmb3Igc2Vjb25kcyBiZXR3ZWVuIGRlc2NyaWJlL3dhaXQgaXRlcmF0aW9ucy5cbiAqXG4gKiBAc2VlIHtAbGluayBwYXJzZVJlc291cmNlV2FpdExpbWl0c0Zyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VfU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFNfRU5WID0gJ1BST0NFU1NfUkVTT1VSQ0VfU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMnO1xuXG4vKipcbiAqIExhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBkdXJhYmxlIGBtYXBgIGJvdW5kZWQgY29uY3VycmVuY3kuXG4gKlxuICogQHNlZSB7QGxpbmsgcGFyc2VNYXhDb25jdXJyZW5jeUZyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VTX01BWF9DT05DVVJSRU5DWV9FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZJztcbiJdfQ==
@@ -3,7 +3,13 @@ import { type ResourceWaitLimits } from './running-scheduler-predicates';
3
3
  * Reads per-instance wait limits from Lambda environment variables set by the CDK construct.
4
4
  *
5
5
  * @returns Parsed limits, using {@link DEFAULT_RESOURCE_WAIT_LIMITS} when variables are unset.
6
- * @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a finite number.
7
- * @throws {Error} When a set variable is zero or negative.
6
+ * @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a positive integer.
8
7
  */
9
8
  export declare const parseResourceWaitLimitsFromEnv: () => ResourceWaitLimits;
9
+ /**
10
+ * Reads durable `map` bounded concurrency from the Lambda environment.
11
+ *
12
+ * @returns Parsed concurrency, using {@link DEFAULT_MAX_CONCURRENCY} when unset.
13
+ * @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a positive integer.
14
+ */
15
+ export declare const parseMaxConcurrencyFromEnv: () => number;