@aws-cdk/toolkit-lib 1.25.0 → 1.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/diff/private/helpers.js +3 -3
  4. package/lib/api/aws-auth/sdk.d.ts +16 -0
  5. package/lib/api/aws-auth/sdk.js +22 -3
  6. package/lib/api/deployments/cfn-api.d.ts +10 -10
  7. package/lib/api/deployments/cfn-api.js +51 -43
  8. package/lib/api/deployments/deploy-stack.js +51 -48
  9. package/lib/api/deployments/deployments.d.ts +9 -1
  10. package/lib/api/deployments/deployments.js +20 -12
  11. package/lib/api/diagnosing/{early-validation.d.ts → changeset-error-fetcher.d.ts} +10 -8
  12. package/lib/api/diagnosing/changeset-error-fetcher.js +83 -0
  13. package/lib/api/diagnosing/diagnosis-formatting.js +7 -6
  14. package/lib/api/diagnosing/stack-diagnoser.d.ts +7 -0
  15. package/lib/api/diagnosing/stack-diagnoser.js +64 -48
  16. package/lib/api/diagnosing/tree-builder.d.ts +2 -1
  17. package/lib/api/diagnosing/tree-builder.js +5 -5
  18. package/lib/api/diagnosing/tree.d.ts +10 -4
  19. package/lib/api/diagnosing/tree.js +23 -12
  20. package/lib/api/io/private/span.d.ts +1 -1
  21. package/lib/api/io/private/span.js +3 -3
  22. package/lib/api/logs-monitor/logs-monitor.js +4 -4
  23. package/lib/api/stack-events/stack-activity-monitor.d.ts +4 -4
  24. package/lib/api/stack-events/stack-activity-monitor.js +14 -13
  25. package/lib/api/stack-events/stack-event-poller.d.ts +1 -1
  26. package/lib/api/stack-events/stack-event-poller.js +5 -4
  27. package/lib/api/stack-events/stack-progress-monitor.d.ts +2 -2
  28. package/lib/api/stack-events/stack-progress-monitor.js +8 -2
  29. package/lib/index_bg.wasm +0 -0
  30. package/lib/toolkit/toolkit.js +2 -2
  31. package/lib/util/cloudformation.d.ts +14 -0
  32. package/lib/util/cloudformation.js +27 -1
  33. package/package.json +11 -12
  34. package/lib/api/diagnosing/early-validation.js +0 -81
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CloudFormationStackDiagnoser = void 0;
4
4
  exports.changeSetHasNoChanges = changeSetHasNoChanges;
5
5
  const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
6
- const early_validation_1 = require("./early-validation");
6
+ const changeset_error_fetcher_1 = require("./changeset-error-fetcher");
7
7
  const stack_events_1 = require("../stack-events");
8
8
  const stack_status_1 = require("../stack-events/stack-status");
9
9
  /**
@@ -49,9 +49,9 @@ class CloudFormationStackDiagnoser {
49
49
  };
50
50
  }
51
51
  if (status.isFailure) {
52
- return await this._diagnoseViaStackEvents(stackName, stack);
52
+ return await this._diagnoseViaStackEvents(stack);
53
53
  }
54
- return await this._diagnoseChangeSetFailureFromStackName(stackName);
54
+ return await this._diagnoseChangeSetFailureFromStackName(stack);
55
55
  }
56
56
  catch (e) {
57
57
  return { type: 'error-diagnosing', message: e.message };
@@ -90,9 +90,9 @@ class CloudFormationStackDiagnoser {
90
90
  *
91
91
  * This is the same logic that the deployment monitor uses.
92
92
  */
93
- async _diagnoseViaStackEvents(stackName, stack) {
93
+ async _diagnoseViaStackEvents(stack) {
94
94
  const poller = new stack_events_1.StackEventPoller(this.cfn, {
95
- stackName,
95
+ stackArn: stack.StackId,
96
96
  initialPollRange: stack_events_1.PollRange.mostRecentOperation(),
97
97
  });
98
98
  // We don't need the resulting events of polling. Polling will automatically update the error collection,
@@ -100,15 +100,15 @@ class CloudFormationStackDiagnoser {
100
100
  await poller.poll();
101
101
  return this.diagnoseFromErrorCollection(poller.errors, stack);
102
102
  }
103
- async _diagnoseChangeSetFailureFromStackName(stackName) {
103
+ async _diagnoseChangeSetFailureFromStackName(stack) {
104
104
  const cs = (await this.cfn.listChangeSets({
105
- StackName: stackName,
105
+ StackName: stack.StackId,
106
106
  })).Summaries ?? [];
107
107
  const pending = cs.filter(x => x.Status === client_cloudformation_1.ChangeSetStatus.CREATE_IN_PROGRESS || x.Status === client_cloudformation_1.ChangeSetStatus.CREATE_PENDING);
108
108
  if (pending.length > 0) {
109
109
  return {
110
110
  type: 'error-diagnosing',
111
- message: `Stack with name ${stackName} has change sets currently being created (${pending[0].ChangeSetName}). Try again when it's finished.`,
111
+ message: `Stack with name ${stack.StackName} has change sets currently being created (${pending[0].ChangeSetName}). Try again when it's finished.`,
112
112
  };
113
113
  }
114
114
  const failed = cs.filter(x => x.Status === client_cloudformation_1.ChangeSetStatus.FAILED);
@@ -133,36 +133,21 @@ class CloudFormationStackDiagnoser {
133
133
  // This will lead to a change set that is FAILED but it's not actually a problem
134
134
  return { type: 'no-problem' };
135
135
  }
136
+ // We report early validation errors differently than generic changeset errors. Mostly
137
+ // for historical reasons.
136
138
  const isEarlyValidationError = changeSet.StatusReason?.includes('AWS::EarlyValidation');
137
139
  if (isEarlyValidationError) {
138
- const ev = await new early_validation_1.EarlyValidationReporter(this.props.sdk, this.props.envResources)
139
- .fetchDetailsStructured(changeSet.ChangeSetName, changeSet.StackName);
140
- switch (ev.type) {
141
- case 'could-not-check':
142
- // Emit the warning here and otherwise just return an empty error block
143
- await this.props.ioHelper.defaults.warn(ev.message);
144
- return {
145
- type: 'problem',
146
- detectedBy: {
147
- type: 'early-validation',
148
- changeSetName: changeSet.ChangeSetName ?? '',
149
- },
150
- problems: [],
151
- };
152
- case 'resource-errors':
153
- return {
154
- type: 'problem',
155
- detectedBy: {
156
- type: 'early-validation',
157
- changeSetName: changeSet.ChangeSetName ?? '',
158
- },
159
- problems: await this.addErrorTraces(ev.errors.map((e) => resourceErrorFromEarlyValidationError(changeSet.StackId ?? '', this.parentStackLogicalIds, e))),
160
- };
161
- }
140
+ return this._reportChangeSetFailureFromEvents(changeSet, {
141
+ type: 'early-validation',
142
+ changeSetName: changeSet.ChangeSetName ?? '',
143
+ });
162
144
  }
145
+ // We will recurse into nested change sets if necessary.
163
146
  if (changeSet.StatusReason?.includes('Nested change set')) {
164
147
  return this._diagnoseNestedChangeSetFailure(changeSet);
165
148
  }
149
+ // We special-case failed automatic imports. We know all the meat of the error details are in the
150
+ // status reason, and nowhere else. We parse it specifically.
166
151
  const failedAutoErrors = this._tryDetectFailedAutoImport(changeSet);
167
152
  if (failedAutoErrors) {
168
153
  return {
@@ -176,7 +161,38 @@ class CloudFormationStackDiagnoser {
176
161
  problems: await this.addErrorTraces(failedAutoErrors),
177
162
  };
178
163
  }
179
- return this._nonSpecificChangeSetError(changeSet);
164
+ // Otherwise, a generic change set creation error where `DescribeEvents`
165
+ // might or might not give additional information.
166
+ return this._reportChangeSetFailureFromEvents(changeSet, {
167
+ type: 'change-set',
168
+ changeSetStatus: changeSet.Status ?? '',
169
+ changeSetName: changeSet.ChangeSetName ?? '',
170
+ statusReason: changeSet.StatusReason ?? '',
171
+ });
172
+ }
173
+ /**
174
+ * Try to read the resource-specific reasons for a changeset failure from `DescribeEvents`.
175
+ *
176
+ * If we couldn't read the events or there are 0 errors returned by that API, return a generic
177
+ * error.
178
+ */
179
+ async _reportChangeSetFailureFromEvents(changeSet, detectedBy) {
180
+ const ev = await new changeset_error_fetcher_1.ChangeSetResourceErrorFetcher(this.props.sdk, this.props.envResources)
181
+ .fetchDetailsStructured(changeSet.ChangeSetName, changeSet.StackName);
182
+ // If we have errors to return, return them
183
+ if (ev.type === 'resource-errors' && ev.errors.length > 0) {
184
+ return {
185
+ type: 'problem',
186
+ detectedBy,
187
+ problems: await this.addErrorTraces(ev.errors.map((e) => resourceErrorFromEarlyValidationError(changeSet.StackId ?? '', this.parentStackLogicalIds, e))),
188
+ };
189
+ }
190
+ // Otherwise, we will return a generic changeset error message. If there was a problem
191
+ // checking, we log that for good measure but the result is the same.
192
+ if (ev.type === 'could-not-check') {
193
+ await this.props.ioHelper.defaults.warn(ev.message);
194
+ }
195
+ return this._nonSpecificChangeSetError(changeSet, detectedBy);
180
196
  }
181
197
  async addErrorTraces(errs) {
182
198
  // eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
@@ -197,15 +213,10 @@ class CloudFormationStackDiagnoser {
197
213
  *
198
214
  * We can't point to a specific resource.
199
215
  */
200
- async _nonSpecificChangeSetError(changeSet) {
216
+ async _nonSpecificChangeSetError(changeSet, detectedBy) {
201
217
  return {
202
218
  type: 'problem',
203
- detectedBy: {
204
- type: 'change-set',
205
- changeSetName: changeSet.ChangeSetName ?? '',
206
- changeSetStatus: changeSet.Status ?? '',
207
- statusReason: changeSet.StatusReason ?? '',
208
- },
219
+ detectedBy,
209
220
  problems: [
210
221
  await this.addErrorTrace({
211
222
  // It's about a stack
@@ -226,11 +237,16 @@ class CloudFormationStackDiagnoser {
226
237
  const nested = await this._findFailedNestedStack(changeSet);
227
238
  if (!nested) {
228
239
  // That's weird. Let's return the change set's status reason as a non-specific error
229
- return this._nonSpecificChangeSetError(changeSet);
240
+ return this._nonSpecificChangeSetError(changeSet, {
241
+ type: 'change-set',
242
+ changeSetName: changeSet.ChangeSetName ?? '',
243
+ changeSetStatus: changeSet.Status ?? '',
244
+ statusReason: changeSet.StatusReason ?? '',
245
+ });
230
246
  }
231
247
  const nestedCs = await this.cfn.describeChangeSet({
232
- ChangeSetName: nested.changeSetName,
233
- StackName: nested.stackName,
248
+ ChangeSetName: nested.changeSetArn,
249
+ StackName: nested.stackArn,
234
250
  });
235
251
  const nestedDiag = new CloudFormationStackDiagnoser(this.props);
236
252
  nestedDiag.parentStackLogicalIds = [...this.parentStackLogicalIds, nested.logicalId];
@@ -244,15 +260,15 @@ class CloudFormationStackDiagnoser {
244
260
  do {
245
261
  // Changes in this response might be paginated
246
262
  const resp = await this.cfn.describeChangeSet({
247
- StackName: changeSet.StackName,
248
- ChangeSetName: changeSet.ChangeSetName,
263
+ StackName: changeSet.StackId,
264
+ ChangeSetName: changeSet.ChangeSetId,
249
265
  ...nextToken ? { NextToken: nextToken } : {},
250
266
  });
251
267
  for (const change of resp.Changes ?? []) {
252
268
  if (change.Type === client_cloudformation_1.ChangeType.Resource && change.ResourceChange?.ResourceType === 'AWS::CloudFormation::Stack' && change.ResourceChange?.ChangeSetId && changeSet.StatusReason?.includes(change.ResourceChange?.ChangeSetId)) {
253
269
  return {
254
- changeSetName: change.ResourceChange.ChangeSetId,
255
- stackName: change.ResourceChange.PhysicalResourceId ?? '',
270
+ changeSetArn: change.ResourceChange.ChangeSetId,
271
+ stackArn: change.ResourceChange.PhysicalResourceId ?? '',
256
272
  logicalId: change.ResourceChange.LogicalResourceId ?? '',
257
273
  };
258
274
  }
@@ -335,4 +351,4 @@ function resourceErrorFromEarlyValidationError(stackId, parentStackLogicalIds, e
335
351
  stackArn: stackId,
336
352
  };
337
353
  }
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZGlhZ25vc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stZGlhZ25vc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThXQSxzREFXQztBQXhYRCwwRUFBNkU7QUFFN0UseURBQTZEO0FBTTdELGtEQUE4RDtBQUU5RCwrREFBMkQ7QUFVM0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSw0QkFBNEI7SUFJVjtJQUhaLEdBQUcsQ0FBd0I7SUFDcEMscUJBQXFCLENBQVc7SUFFeEMsWUFBNkIsS0FBd0M7UUFBeEMsVUFBSyxHQUFMLEtBQUssQ0FBbUM7UUFDbkUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUM5QyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDekUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPO29CQUNMLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsU0FBUyxZQUFZO2lCQUNsRCxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLDBCQUFXLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsT0FBTyxFQUFF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QUFFLENBQUMsWUFBWSxHQUFHO1FBQ2hELFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtRQUNqRCxxQkFBcUI7UUFDckIsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoYW5nZVNldFN1bW1hcnksIFN0YWNrIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENoYW5nZVNldFN0YXR1cywgQ2hhbmdlVHlwZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IEVhcmx5VmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9lYXJseS12YWxpZGF0aW9uJztcbmltcG9ydCB7IEVhcmx5VmFsaWRhdGlvblJlcG9ydGVyIH0gZnJvbSAnLi9lYXJseS12YWxpZGF0aW9uJztcbmltcG9ydCB0eXBlIHsgU3RhY2tEaWFnbm9zaXMsIFRyYWNlZFJlc291cmNlRXJyb3IgfSBmcm9tICcuLi8uLi9hY3Rpb25zL2RpYWdub3NlJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGsnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlL2lvLWhlbHBlcic7XG5pbXBvcnQgdHlwZSB7IElTb3VyY2VUcmFjZXIgfSBmcm9tICcuLi9zb3VyY2UtdHJhY2luZy9wcml2YXRlL3NvdXJjZS10cmFjaW5nJztcbmltcG9ydCB7IFBvbGxSYW5nZSwgU3RhY2tFdmVudFBvbGxlciB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRXJyb3IsIFJlc291cmNlRXJyb3JzIH0gZnJvbSAnLi4vc3RhY2stZXZlbnRzL3Jlc291cmNlLWVycm9ycyc7XG5pbXBvcnQgeyBTdGFja1N0YXR1cyB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cy9zdGFjay1zdGF0dXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXJQcm9wcyB7XG4gIHJlYWRvbmx5IHNkazogU0RLO1xuICByZWFkb25seSBlbnZSZXNvdXJjZXM/OiBFbnZpcm9ubWVudFJlc291cmNlcztcbiAgcmVhZG9ubHkgc291cmNlVHJhY2VyOiBJU291cmNlVHJhY2VyO1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG4gIHJlYWRvbmx5IHRvcExldmVsU3RhY2tIaWVyYXJjaGljYWxJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpYWdub3NlIGEgc3RhY2sncyBmYWlsZWQgc3RhdGVcbiAqXG4gKiAtIEZpcnN0LCBkZXRlcm1pbmUgdGhlIHN0YWNrJ3Mgc3RhdGUuXG4gKiAtIElmIGl0IGlzIGluIGEgZmFpbGVkIHN0YXRlLCB3ZSBzdGFydGVkIGEgZGVwbG95bWVudCB0aGF0IGZhaWxlZC4gRGVzY3JpYmUgdGhlIHN0YWNrXG4gKiAgIGV2ZW50cywgYW5kIHRyeSB0byBkZXRlcm1pbmUgdGhlIHJvb3QgY2F1c2UgZnJvbSB0aGF0LlxuICogLSBJZiBpdCBpcyBpbiBhIG5vcm1hbCBzdGF0ZSwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZmFpbGVkIGNoYW5nZSBzZXRzLiBFaXRoZXJcbiAqICAgZ2V0IHRoZSBmYWlsdXJlIG1lc3NhZ2UgZnJvbSB0aGUgY2hhbmdlIHNldCwgb3IgZ2V0IHRoZSBmYWlsdXJlIGV2ZW50cyBmcm9tXG4gKiAgIHRoZSBjaGFuZ2Ugc2V0IChlYXJseSB2YWxpZGF0aW9uKS5cbiAqXG4gKiBUaGlzIGNsYXNzIHdvcmtzIGF0IHRoZSBDbG91ZEZvcm1hdGlvbiBsZXZlbCwgYW5kIGRvZXMgbm90IGRlYWwgd2l0aCB0cmFjaW5nXG4gKiBDbG91ZEZvcm1hdGlvbiBlcnJvcnMgdG8gY29uc3RydWN0IGNvZGUgc291cmNlcyB5ZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblN0YWNrRGlhZ25vc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcHJpdmF0ZSBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXJQcm9wcykge1xuICAgIHRoaXMuY2ZuID0gdGhpcy5wcm9wcy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICB0aGlzLnBhcmVudFN0YWNrTG9naWNhbElkcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERpYWdub3NlIGEgc3RhY2sncyByb290IGNhdXNlIGdpdmVuIG5vIHByZS1leGlzdGluZyBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpYWdub3NlRnJvbUZyZXNoKHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTdGFja0RpYWdub3Npcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2ZuLmRlc2NyaWJlU3RhY2tzKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSk7XG4gICAgICBjb25zdCBzdGFjayA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdO1xuICAgICAgaWYgKCFzdGFjaykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJyxcbiAgICAgICAgICBtZXNzYWdlOiBgU3RhY2sgd2l0aCBuYW1lICR7c3RhY2tOYW1lfSBub3QgZm91bmRgLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0dXMgPSBTdGFja1N0YXR1cy5mcm9tU3RhY2tEZXNjcmlwdGlvbihzdGFjayk7XG4gICAgICBpZiAoc3RhdHVzLmlzSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJyxcbiAgICAgICAgICBtZXNzYWdlOiBgU3RhY2sgd2l0aCBuYW1lICR7c3RhY2tOYW1lfSBpcyBjdXJyZW50bHkgYmVpbmcgdXBkYXRlZCAoJHtzdGF0dXMubmFtZX0pLiBUcnkgYWdhaW4gd2hlbiBpdCdzIGZpbmlzaGVkLmAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0dXMuaXNGYWlsdXJlKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9kaWFnbm9zZVZpYVN0YWNrRXZlbnRzKHN0YWNrTmFtZSwgc3RhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGlhZ25vc2VDaGFuZ2VTZXRGYWlsdXJlRnJvbVN0YWNrTmFtZShzdGFja05hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2Vycm9yLWRpYWdub3NpbmcnLCBtZXNzYWdlOiBlLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlhZ25vc2UgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggdGhlIGNoYW5nZSBzZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWFnbm9zZUNoYW5nZVNldChjaGFuZ2VTZXQ6IENoYW5nZVNldFN1bW1hcnkpOiBQcm9taXNlPFN0YWNrRGlhZ25vc2lzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9kaWFnbm9zZUNoYW5nZVNldEZhaWx1cmUoY2hhbmdlU2V0KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJywgbWVzc2FnZTogZS5tZXNzYWdlIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpYWdub3NlIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIHRoZSBjaGFuZ2Ugc2V0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlhZ25vc2VGcm9tRXJyb3JDb2xsZWN0aW9uKGVycm9yczogUmVzb3VyY2VFcnJvcnMsIHN0YWNrOiBTdGFjayk6IFByb21pc2U8U3RhY2tEaWFnbm9zaXM+IHtcbiAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ25vLXByb2JsZW0nIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICAgIGRldGVjdGVkQnk6IHtcbiAgICAgICAgdHlwZTogJ2RlcGxveW1lbnQnLFxuICAgICAgICBzdGFja1N0YXR1czogc3RhY2suU3RhY2tTdGF0dXMgPz8gJycsXG4gICAgICAgIHN0YXR1c1JlYXNvbjogc3RhY2suU3RhY2tTdGF0dXNSZWFzb24gPz8gJycsXG4gICAgICB9LFxuICAgICAgcHJvYmxlbXM6IGF3YWl0IHRoaXMuYWRkRXJyb3JUcmFjZXMoZXJyb3JzLmFsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaWFnbm9zZSBhIGRlcGxveW1lbnQgZmFpbHVyZSB2aWEgc3RhY2sgZXZlbnRzXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIHNhbWUgbG9naWMgdGhhdCB0aGUgZGVwbG95bWVudCBtb25pdG9yIHVzZXMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9kaWFnbm9zZVZpYVN0YWNrRXZlbnRzKHN0YWNrTmFtZTogc3RyaW5nLCBzdGFjazogU3RhY2spOiBQcm9taXNlPFN0YWNrRGlhZ25vc2lzPiB7XG4gICAgY29uc3QgcG9sbGVyID0gbmV3IFN0YWNrRXZlbnRQb2xsZXIodGhpcy5jZm4sIHtcbiAgICAgIHN0YWNrTmFtZSxcbiAgICAgIGluaXRpYWxQb2xsUmFuZ2U6IFBvbGxSYW5nZS5tb3N0UmVjZW50T3BlcmF0aW9uKCksXG4gICAgfSk7XG5cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSByZXN1bHRpbmcgZXZlbnRzIG9mIHBvbGxpbmcuIFBvbGxpbmcgd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgZXJyb3IgY29sbGVjdGlvbixcbiAgICAvLyB3aGljaCBpcyB0aGUgdGhpbmcgd2UgY2FyZSBhYm91dC5cbiAgICBhd2FpdCBwb2xsZXIucG9sbCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGlhZ25vc2VGcm9tRXJyb3JDb2xsZWN0aW9uKHBvbGxlci5lcnJvcnMsIHN0YWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2RpYWdub3NlQ2hhbmdlU2V0RmFpbHVyZUZyb21TdGFja05hbWUoc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0YWNrRGlhZ25vc2lzPiB7XG4gICAgY29uc3QgY3MgPSAoYXdhaXQgdGhpcy5jZm4ubGlzdENoYW5nZVNldHMoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgfSkpLlN1bW1hcmllcyA/PyBbXTtcblxuICAgIGNvbnN0IHBlbmRpbmcgPSBjcy5maWx0ZXIoeCA9PiB4LlN0YXR1cyA9PT0gQ2hhbmdlU2V0U3RhdHVzLkNSRUFURV9JTl9QUk9HUkVTUyB8fCB4LlN0YXR1cyA9PT0gQ2hhbmdlU2V0U3RhdHVzLkNSRUFURV9QRU5ESU5HKTtcbiAgICBpZiAocGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZXJyb3ItZGlhZ25vc2luZycsXG4gICAgICAgIG1lc3NhZ2U6IGBTdGFjayB3aXRoIG5hbWUgJHtzdGFja05hbWV9IGhhcyBjaGFuZ2Ugc2V0cyBjdXJyZW50bHkgYmVpbmcgY3JlYXRlZCAoJHtwZW5kaW5nWzBdLkNoYW5nZVNldE5hbWV9KS4gVHJ5IGFnYWluIHdoZW4gaXQncyBmaW5pc2hlZC5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWlsZWQgPSBjcy5maWx0ZXIoeCA9PiB4LlN0YXR1cyA9PT0gQ2hhbmdlU2V0U3RhdHVzLkZBSUxFRCk7XG4gICAgaWYgKGZhaWxlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICduby1wcm9ibGVtJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kaWFnbm9zZUNoYW5nZVNldEZhaWx1cmUoZmFpbGVkWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gZGlhZ25vc2UgdGhlIHJlYXNvbiB0aGF0IGNhdXNlZCBhIGNoYW5nZXNldCB0byBmYWlsIHRvIGNyZWF0ZVxuICAgKlxuICAgKiBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgZGlmZmVyZW50IHJlYXNvbnMgdGhpcyBjYW4gaGFwcGVuLCBhbmQgd2UgZ28gdGhyb3VnaCBlYWNoIG9mIHRoZW0gaW4gb3JkZXIuXG4gICAqXG4gICAqIFVzdWFsbHkgdGhpcyBzdGFydHMgZnJvbSB0cnlpbmcgdG8gZGV0ZWN0IGFuIGVycm9yIG1lc3NhZ2UgcGF0dGVybiBpbiB0aGUgY2hhbmdlIHNldCBzdGF0dXMgcmVhc29uLFxuICAgKiBhbmQgdGhlbiBwb3RlbnRpYWxseSBnb2luZyB0byBmZXRjaCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHVzaW5nIGFkZGl0aW9uYWwgQVBJIGNhbGxzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfZGlhZ25vc2VDaGFuZ2VTZXRGYWlsdXJlKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSk6IFByb21pc2U8U3RhY2tEaWFnbm9zaXM+IHtcbiAgICBpZiAoY2hhbmdlU2V0LlN0YXR1cyAhPT0gQ2hhbmdlU2V0U3RhdHVzLkZBSUxFRCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ25vLXByb2JsZW0nIH07XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVNldEhhc05vQ2hhbmdlcyhjaGFuZ2VTZXQpKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgbGVhZCB0byBhIGNoYW5nZSBzZXQgdGhhdCBpcyBGQUlMRUQgYnV0IGl0J3Mgbm90IGFjdHVhbGx5IGEgcHJvYmxlbVxuICAgICAgcmV0dXJuIHsgdHlwZTogJ25vLXByb2JsZW0nIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXNFYXJseVZhbGlkYXRpb25FcnJvciA9IGNoYW5nZVNldC5TdGF0dXNSZWFzb24/LmluY2x1ZGVzKCdBV1M6OkVhcmx5VmFsaWRhdGlvbicpO1xuICAgIGlmIChpc0Vhcmx5VmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICBjb25zdCBldiA9IGF3YWl0IG5ldyBFYXJseVZhbGlkYXRpb25SZXBvcnRlcih0aGlzLnByb3BzLnNkaywgdGhpcy5wcm9wcy5lbnZSZXNvdXJjZXMpXG4gICAgICAgIC5mZXRjaERldGFpbHNTdHJ1Y3R1cmVkKGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lISwgY2hhbmdlU2V0LlN0YWNrTmFtZSEpO1xuICAgICAgc3dpdGNoIChldi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvdWxkLW5vdC1jaGVjayc6XG4gICAgICAgICAgLy8gRW1pdCB0aGUgd2FybmluZyBoZXJlIGFuZCBvdGhlcndpc2UganVzdCByZXR1cm4gYW4gZW1wdHkgZXJyb3IgYmxvY2tcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3BzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oZXYubWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICAgICAgICAgIGRldGVjdGVkQnk6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vhcmx5LXZhbGlkYXRpb24nLFxuICAgICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXQuQ2hhbmdlU2V0TmFtZSA/PyAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9ibGVtczogW10sXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAncmVzb3VyY2UtZXJyb3JzJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgICAgICAgICAgZGV0ZWN0ZWRCeToge1xuICAgICAgICAgICAgICB0eXBlOiAnZWFybHktdmFsaWRhdGlvbicsXG4gICAgICAgICAgICAgIGNoYW5nZVNldE5hbWU6IGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lID8/ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2JsZW1zOiBhd2FpdCB0aGlzLmFkZEVycm9yVHJhY2VzKGV2LmVycm9ycy5tYXAoKGUpID0+IHJlc291cmNlRXJyb3JGcm9tRWFybHlWYWxpZGF0aW9uRXJyb3IoY2hhbmdlU2V0LlN0YWNrSWQgPz8gJycsIHRoaXMucGFyZW50U3RhY2tMb2dpY2FsSWRzLCBlKSkpLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVNldC5TdGF0dXNSZWFzb24/LmluY2x1ZGVzKCdOZXN0ZWQgY2hhbmdlIHNldCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlhZ25vc2VOZXN0ZWRDaGFuZ2VTZXRGYWlsdXJlKGNoYW5nZVNldCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFpbGVkQXV0b0Vycm9ycyA9IHRoaXMuX3RyeURldGVjdEZhaWxlZEF1dG9JbXBvcnQoY2hhbmdlU2V0KTtcbiAgICBpZiAoZmFpbGVkQXV0b0Vycm9ycykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgICAgICBkZXRlY3RlZEJ5OiB7XG4gICAgICAgICAgdHlwZTogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgIGNoYW5nZVNldFN0YXR1czogY2hhbmdlU2V0LlN0YXR1cyA/PyAnJyxcbiAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXQuQ2hhbmdlU2V0TmFtZSA/PyAnJyxcbiAgICAgICAgICBzdGF0dXNSZWFzb246IGNoYW5nZVNldC5TdGF0dXNSZWFzb24gPz8gJycsXG4gICAgICAgIH0sXG4gICAgICAgIHByb2JsZW1zOiBhd2FpdCB0aGlzLmFkZEVycm9yVHJhY2VzKGZhaWxlZEF1dG9FcnJvcnMpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbm9uU3BlY2lmaWNDaGFuZ2VTZXRFcnJvcihjaGFuZ2VTZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRFcnJvclRyYWNlcyhlcnJzOiByZWFkb25seSBSZXNvdXJjZUVycm9yW10pOiBQcm9taXNlPFRyYWNlZFJlc291cmNlRXJyb3JbXT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICAgIHJldHVybiBQcm9taXNlLmFsbChlcnJzLm1hcCgoZSkgPT4gdGhpcy5hZGRFcnJvclRyYWNlKGUpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZEVycm9yVHJhY2UoZXJyOiBSZXNvdXJjZUVycm9yKTogUHJvbWlzZTxUcmFjZWRSZXNvdXJjZUVycm9yPiB7XG4gICAgbGV0IHNvdXJjZVRyYWNlO1xuICAgIGlmIChlcnIubG9naWNhbElkKSB7XG4gICAgICBzb3VyY2VUcmFjZSA9IGF3YWl0IHRoaXMucHJvcHMuc291cmNlVHJhY2VyLnRyYWNlUmVzb3VyY2UoZXJyLnN0YWNrQXJuLCBlcnIucGFyZW50U3RhY2tMb2dpY2FsSWRzLCBlcnIubG9naWNhbElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlVHJhY2UgPSBhd2FpdCB0aGlzLnByb3BzLnNvdXJjZVRyYWNlci50cmFjZVN0YWNrKGVyci5zdGFja0FybiwgZXJyLnBhcmVudFN0YWNrTG9naWNhbElkcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uZXJyLCBzb3VyY2VUcmFjZSwgdG9wTGV2ZWxTdGFja0hpZXJhcmNoaWNhbElkOiB0aGlzLnByb3BzLnRvcExldmVsU3RhY2tIaWVyYXJjaGljYWxJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgZ2VuZXJpYyBzdGFjayBlcnJvciBmcm9tIHRoZSBnaXZlbiBjaGFuZ2Ugc2V0IGluZm9ybWF0aW9uXG4gICAqXG4gICAqIFdlIGNhbid0IHBvaW50IHRvIGEgc3BlY2lmaWMgcmVzb3VyY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9ub25TcGVjaWZpY0NoYW5nZVNldEVycm9yKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSk6IFByb21pc2U8U3RhY2tEaWFnbm9zaXM+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgICAgZGV0ZWN0ZWRCeToge1xuICAgICAgICB0eXBlOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lID8/ICcnLFxuICAgICAgICBjaGFuZ2VTZXRTdGF0dXM6IGNoYW5nZVNldC5TdGF0dXMgPz8gJycsXG4gICAgICAgIHN0YXR1c1JlYXNvbjogY2hhbmdlU2V0LlN0YXR1c1JlYXNvbiA/PyAnJyxcbiAgICAgIH0sXG4gICAgICBwcm9ibGVtczogW1xuICAgICAgICBhd2FpdCB0aGlzLmFkZEVycm9yVHJhY2Uoe1xuICAgICAgICAgIC8vIEl0J3MgYWJvdXQgYSBzdGFja1xuICAgICAgICAgIGxvZ2ljYWxJZDogdW5kZWZpbmVkLFxuICAgICAgICAgIG1lc3NhZ2U6IGNoYW5nZVNldC5TdGF0dXNSZWFzb24gPz8gJycsXG4gICAgICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiB0aGlzLnBhcmVudFN0YWNrTG9naWNhbElkcyxcbiAgICAgICAgICBzdGFja0FybjogY2hhbmdlU2V0LlN0YWNrSWQgPz8gJycsXG4gICAgICAgICAgcGh5c2ljYWxJZDogY2hhbmdlU2V0LlN0YWNrSWQsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIGZvciBuZXN0ZWQgY2hhbmdlIHNldHMgdGhhdCBoYXZlIGZhaWxlZCwgYW5kIGRpYWdub3NlIHRob3NlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfZGlhZ25vc2VOZXN0ZWRDaGFuZ2VTZXRGYWlsdXJlKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSk6IFByb21pc2U8U3RhY2tEaWFnbm9zaXM+IHtcbiAgICBjb25zdCBuZXN0ZWQgPSBhd2FpdCB0aGlzLl9maW5kRmFpbGVkTmVzdGVkU3RhY2soY2hhbmdlU2V0KTtcbiAgICBpZiAoIW5lc3RlZCkge1xuICAgICAgLy8gVGhhdCdzIHdlaXJkLiBMZXQncyByZXR1cm4gdGhlIGNoYW5nZSBzZXQncyBzdGF0dXMgcmVhc29uIGFzIGEgbm9uLXNwZWNpZmljIGVycm9yXG4gICAgICByZXR1cm4gdGhpcy5fbm9uU3BlY2lmaWNDaGFuZ2VTZXRFcnJvcihjaGFuZ2VTZXQpO1xuICAgIH1cblxuICAgIGNvbnN0IG5lc3RlZENzID0gYXdhaXQgdGhpcy5jZm4uZGVzY3JpYmVDaGFuZ2VTZXQoe1xuICAgICAgQ2hhbmdlU2V0TmFtZTogbmVzdGVkLmNoYW5nZVNldE5hbWUsXG4gICAgICBTdGFja05hbWU6IG5lc3RlZC5zdGFja05hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXN0ZWREaWFnID0gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXIodGhpcy5wcm9wcyk7XG4gICAgbmVzdGVkRGlhZy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMgPSBbLi4udGhpcy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMsIG5lc3RlZC5sb2dpY2FsSWRdO1xuICAgIHJldHVybiBuZXN0ZWREaWFnLl9kaWFnbm9zZUNoYW5nZVNldEZhaWx1cmUobmVzdGVkQ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZmluZEZhaWxlZE5lc3RlZFN0YWNrKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSk6IFByb21pc2U8e1xuICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIGNoYW5nZVNldE5hbWU6IHN0cmluZztcbiAgICBsb2dpY2FsSWQ6IHN0cmluZztcbiAgfSB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIFRoZSBzdGF0dXMgcmVhc29uIG9ubHkgaW5jbHVkZXMgdGhlIGNoYW5nZSBzZXQgSUQsIGJ1dCB3ZSBhbHNvIG5lZWQgdGhlIHN0YWNrIG5hbWUuIFRoZSB3YXkgdG8gZ2V0IHRoaXMgaXNcbiAgICAvLyBkZXNjcmliZSB0aGUgY3VycmVudCBjaGFuZ2Ugc2V0LCB0aGVuIGZyb20gdGhlIENoYW5nZXMgZmluZCB0aGUgc3RhY2sgd2hvc2UgQ2hhbmdlU2V0SWQgaXMgbWVudGlvbmVkIGluIHRoZVxuICAgIC8vIHN0YXR1cyByZWFzb24sIHRoZW4gbG9vayB1cCB0aGF0IGNoYW5nZSBzZXQgYW5kIHJlY3Vyc2UgaW50byBhIHJlZ3VsYXIgY2hhbmdlIHNldCBkaWFnbm9zaXMuXG4gICAgbGV0IG5leHRUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICBkbyB7XG4gICAgICAvLyBDaGFuZ2VzIGluIHRoaXMgcmVzcG9uc2UgbWlnaHQgYmUgcGFnaW5hdGVkXG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5jZm4uZGVzY3JpYmVDaGFuZ2VTZXQoe1xuICAgICAgICBTdGFja05hbWU6IGNoYW5nZVNldC5TdGFja05hbWUsXG4gICAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lLFxuICAgICAgICAuLi5uZXh0VG9rZW4gPyB7IE5leHRUb2tlbjogbmV4dFRva2VuIH0gOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiByZXNwLkNoYW5nZXMgPz8gW10pIHtcbiAgICAgICAgaWYgKGNoYW5nZS5UeXBlID09PSBDaGFuZ2VUeXBlLlJlc291cmNlICYmIGNoYW5nZS5SZXNvdXJjZUNoYW5nZT8uUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snICYmIGNoYW5nZS5SZXNvdXJjZUNoYW5nZT8uQ2hhbmdlU2V0SWQgJiYgY2hhbmdlU2V0LlN0YXR1c1JlYXNvbj8uaW5jbHVkZXMoY2hhbmdlLlJlc291cmNlQ2hhbmdlPy5DaGFuZ2VTZXRJZCkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogY2hhbmdlLlJlc291cmNlQ2hhbmdlLkNoYW5nZVNldElkLFxuICAgICAgICAgICAgc3RhY2tOYW1lOiBjaGFuZ2UuUmVzb3VyY2VDaGFuZ2UuUGh5c2ljYWxSZXNvdXJjZUlkID8/ICcnLFxuICAgICAgICAgICAgbG9naWNhbElkOiBjaGFuZ2UuUmVzb3VyY2VDaGFuZ2UuTG9naWNhbFJlc291cmNlSWQgPz8gJycsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0VG9rZW4gPSByZXNwLk5leHRUb2tlbjtcbiAgICB9IHdoaWxlIChuZXh0VG9rZW4pO1xuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcGFyc2UgZmFpbGVkIGF1dG8taW1wb3J0cyBvdXQgZnJvbSBhIGNoYW5nZSBzZXQgc3RhdHVzXG4gICAqXG4gICAqIFRoZSBwYXR0ZXJuIGxvb2tzIGxpa2UgdGhpczpcbiAgICpcbiAgICogYGBgXG4gICAqIENsb3VkRm9ybWF0aW9uIGlzIGF0dGVtcHRpbmcgdG8gaW1wb3J0IHNvbWUgcmVzb3VyY2VzIGJlY2F1c2UgdGhleSBhbHJlYWR5IGV4aXN0IGluIHlvdXIgYWNjb3VudC4gVGhlIHJlc291cmNlcyBtdXN0IGhhdmUgdGhlIERlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSBzZXQgdG8gJ1JldGFpbicgb3IgJ1JldGFpbkV4Y2VwdE9uQ3JlYXRlJyBpbiB0aGUgdGVtcGxhdGUgZm9yIHN1Y2Nlc3NmdWwgaW1wb3J0LiBUaGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGFyZSBTb21lQnVja2V0RDVCNzA3MDQgKHtCdWNrZXROYW1lPXpvbWFhcmVlbmJ1Y2tldH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBGb2xsb3dlZCBieVxuICAgKlxuICAgKiBgYGBcbiAgICogTG9naWNhbElEICh7UHJvcD1WYWx1ZSxQcm9wPVZhbHVlfSksIExvZ2ljYWxJRCAoe1Byb3A9VmFsdWV9KSwgLi4uXG4gICAqIGBgYFxuICAgKi9cbiAgcHJpdmF0ZSBfdHJ5RGV0ZWN0RmFpbGVkQXV0b0ltcG9ydChjaGFuZ2VTZXQ6IENoYW5nZVNldFN1bW1hcnkpOiBSZXNvdXJjZUVycm9yW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjaGFuZ2VTZXQuU3RhdHVzUmVhc29uO1xuICAgIC8vIE9ubHkgZW5oYW5jZSB0aGUgc3BlY2lmaWMgQ0ZOIGVycm9yIGFib3V0IGltcG9ydGluZyBleGlzdGluZyByZXNvdXJjZXNcbiAgICBpZiAoIW1lc3NhZ2U/LmluY2x1ZGVzKCdDbG91ZEZvcm1hdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGltcG9ydCBzb21lIHJlc291cmNlcyBiZWNhdXNlIHRoZXkgYWxyZWFkeSBleGlzdCBpbiB5b3VyIGFjY291bnQnKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXJrZXIgPSAnVGhlIGFmZmVjdGVkIHJlc291cmNlcyBhcmUgJztcbiAgICBjb25zdCBtYXJrZXJJbmRleCA9IG1lc3NhZ2UuaW5kZXhPZihtYXJrZXIpO1xuICAgIGlmIChtYXJrZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0OiBSZXNvdXJjZUVycm9yW10gPSBbXTtcbiAgICBsZXQgcmVtYWluaW5nID0gbWVzc2FnZS5zbGljZShtYXJrZXJJbmRleCArIG1hcmtlci5sZW5ndGgpO1xuICAgIHdoaWxlIChyZW1haW5pbmcpIHtcbiAgICAgIGNvbnN0IGVuZEl4ID0gcmVtYWluaW5nLmluZGV4T2YoJyksICcpO1xuICAgICAgY29uc3QgdGhpc1Jlc291cmNlID0gZW5kSXggPiAtMSA/IHJlbWFpbmluZy5zbGljZSgwLCBlbmRJeCArIDEpIDogcmVtYWluaW5nO1xuICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nLnNsaWNlKHRoaXNSZXNvdXJjZS5sZW5ndGggKyAyKTtcblxuICAgICAgLy8gdGhpc1Jlc291cmNlID0gXCJMb2dpY2FsSWQgKHtQcm9wPVZhbHVlLCBQcm9wPVZhbHVlfSlcIlxuICAgICAgY29uc3Qgb3BlblBhcmVuID0gdGhpc1Jlc291cmNlLmluZGV4T2YoJygnKTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IG9wZW5QYXJlbiA+IC0xID8gdGhpc1Jlc291cmNlLnNsaWNlKDAsIG9wZW5QYXJlbikudHJpbSgpIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXQucHVzaCh7XG4gICAgICAgIG1lc3NhZ2U6IGBBdXRvbWF0aWMgaW1wb3J0IG9mIGV4aXN0aW5nIHJlc291cmNlICR7dGhpc1Jlc291cmNlfSBuZWVkcyBhIERlbGV0aW9uUG9saWN5IG9mIFxcJ1JldGFpblxcJyBvciBcXCdSZXRhaW5FeGNlcHRPbkNyZWF0ZVxcJy4gU2V0IHRoZSByZW1vdmFsIHBvbGljeSB0byBcXCdSZW1vdmFsUG9saWN5LlJFVEFJTlxcJyBvciBcXCdSZW1vdmFsUG9saWN5LlJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFXFwnIChTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay92Mi9ndWlkZS9yZXNvdXJjZXMuaHRtbCNyZXNvdXJjZXMtcmVtb3ZhbClgLFxuICAgICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHRoaXMucGFyZW50U3RhY2tMb2dpY2FsSWRzLFxuICAgICAgICBzdGFja0FybjogY2hhbmdlU2V0LlN0YWNrSWQgPz8gJycsXG4gICAgICAgIGVycm9yQ29kZTogJ0F1dG9tYXRpY0ltcG9ydE5lZWRzUmV0YWluJyxcbiAgICAgICAgbG9naWNhbElkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhbmdlIHNldCBoYXMgbm8gY2hhbmdlc1xuICpcbiAqIFRoaXMgbXVzdCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIHN0YXR1cywgbm90IHRoZSAnQ2hhbmdlcycgYXJyYXkgb24gdGhlXG4gKiBvYmplY3Q7IHRoZSBsYXR0ZXIgY2FuIGJlIGVtcHR5IGJlY2F1c2Ugbm8gcmVzb3VyY2VzIHdlcmUgY2hhbmdlZCwgYnV0IGlmXG4gKiB0aGVyZSBhcmUgY2hhbmdlcyB0byBPdXRwdXRzLCB0aGUgY2hhbmdlIHNldCBjYW4gc3RpbGwgYmUgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoZGVzY3JpcHRpb246IENoYW5nZVNldFN1bW1hcnkpIHtcbiAgY29uc3Qgbm9DaGFuZ2VFcnJvclByZWZpeGVzID0gW1xuICAgIC8vIEVycm9yIG1lc3NhZ2UgZm9yIGEgcmVndWxhciB0ZW1wbGF0ZVxuICAgIFwiVGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbiBkaWRuJ3QgY29udGFpbiBjaGFuZ2VzLlwiLFxuICAgIC8vIEVycm9yIG1lc3NhZ2Ugd2hlbiBhIFRyYW5zZm9ybSBpcyBpbnZvbHZlZCAoc2VlICMxMDY1MClcbiAgICAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicsXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdGQUlMRUQnICYmIG5vQ2hhbmdlRXJyb3JQcmVmaXhlcy5zb21lKChwKSA9PiAoZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8/ICcnKS5zdGFydHNXaXRoKHApKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZUVycm9yRnJvbUVhcmx5VmFsaWRhdGlvbkVycm9yKHN0YWNrSWQ6IHN0cmluZywgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBzdHJpbmdbXSwgZXY6IEVhcmx5VmFsaWRhdGlvbkVycm9yKTogUmVzb3VyY2VFcnJvciB7XG4gIHJldHVybiB7XG4gICAgbG9naWNhbElkOiBldi5sb2dpY2FsSWQsXG4gICAgcGh5c2ljYWxJZDogZXYucGh5c2ljYWxJZCxcbiAgICByZXNvdXJjZVR5cGU6IGV2LnJlc291cmNlVHlwZSxcbiAgICBtZXNzYWdlOiBgJHtldi5tZXNzYWdlfSAoYXQgJHtldi5kb2N1bWVudFBhdGh9KWAsXG4gICAgZXJyb3JDb2RlOiBgJHtldi52YWxpZGF0aW9uTmFtZX1fJHtldi5ldmVudFR5cGV9YCxcbiAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHMsXG4gICAgc3RhY2tBcm46IHN0YWNrSWQsXG4gIH07XG59XG4iXX0=
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZGlhZ25vc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stZGlhZ25vc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWtZQSxzREFXQztBQTVZRCwwRUFBNkU7QUFFN0UsdUVBQTBFO0FBTTFFLGtEQUE4RDtBQUU5RCwrREFBMkQ7QUFVM0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSw0QkFBNEI7SUFJVjtJQUhaLEdBQUcsQ0FBd0I7SUFDcEMscUJBQXFCLENBQVc7SUFFeEMsWUFBNkIsS0FBd0M7UUFBeEMsVUFBSyxHQUFMLEtBQUssQ0FBbUM7UUFDbkUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUM5QyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDekUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPO29CQUNMLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsU0FBUyxZQUFZO2lCQUNsRCxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLDBCQUFXLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsT0FBTyxFQUFF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Q0FBaUM7S0FDbEMsQ0FBQztJQUVGLE9BQU8sQ0FDTCxXQUFXLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckgsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHFDQUFxQyxDQUFDLE9BQWUsRUFBRSxxQkFBK0IsRUFBRSxFQUEwQjtJQUN6SCxPQUFPO1FBQ0wsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTO1FBQ3ZCLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVTtRQUN6QixZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVk7UUFDN0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sUUFBUSxFQUFFLENBQUMsWUFBWSxHQUFHO1FBQ2hELFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtRQUNqRCxxQkFBcUI7UUFDckIsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoYW5nZVNldFN1bW1hcnksIFN0YWNrIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENoYW5nZVNldFN0YXR1cywgQ2hhbmdlVHlwZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IENoYW5nZVNldFJlc291cmNlRXJyb3IgfSBmcm9tICcuL2NoYW5nZXNldC1lcnJvci1mZXRjaGVyJztcbmltcG9ydCB7IENoYW5nZVNldFJlc291cmNlRXJyb3JGZXRjaGVyIH0gZnJvbSAnLi9jaGFuZ2VzZXQtZXJyb3ItZmV0Y2hlcic7XG5pbXBvcnQgdHlwZSB7IFN0YWNrRGlhZ25vc2lzLCBTdGFja1Byb2JsZW1Tb3VyY2UsIFRyYWNlZFJlc291cmNlRXJyb3IgfSBmcm9tICcuLi8uLi9hY3Rpb25zL2RpYWdub3NlJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGsnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlL2lvLWhlbHBlcic7XG5pbXBvcnQgdHlwZSB7IElTb3VyY2VUcmFjZXIgfSBmcm9tICcuLi9zb3VyY2UtdHJhY2luZy9wcml2YXRlL3NvdXJjZS10cmFjaW5nJztcbmltcG9ydCB7IFBvbGxSYW5nZSwgU3RhY2tFdmVudFBvbGxlciB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRXJyb3IsIFJlc291cmNlRXJyb3JzIH0gZnJvbSAnLi4vc3RhY2stZXZlbnRzL3Jlc291cmNlLWVycm9ycyc7XG5pbXBvcnQgeyBTdGFja1N0YXR1cyB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cy9zdGFjay1zdGF0dXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXJQcm9wcyB7XG4gIHJlYWRvbmx5IHNkazogU0RLO1xuICByZWFkb25seSBlbnZSZXNvdXJjZXM/OiBFbnZpcm9ubWVudFJlc291cmNlcztcbiAgcmVhZG9ubHkgc291cmNlVHJhY2VyOiBJU291cmNlVHJhY2VyO1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG4gIHJlYWRvbmx5IHRvcExldmVsU3RhY2tIaWVyYXJjaGljYWxJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpYWdub3NlIGEgc3RhY2sncyBmYWlsZWQgc3RhdGVcbiAqXG4gKiAtIEZpcnN0LCBkZXRlcm1pbmUgdGhlIHN0YWNrJ3Mgc3RhdGUuXG4gKiAtIElmIGl0IGlzIGluIGEgZmFpbGVkIHN0YXRlLCB3ZSBzdGFydGVkIGEgZGVwbG95bWVudCB0aGF0IGZhaWxlZC4gRGVzY3JpYmUgdGhlIHN0YWNrXG4gKiAgIGV2ZW50cywgYW5kIHRyeSB0byBkZXRlcm1pbmUgdGhlIHJvb3QgY2F1c2UgZnJvbSB0aGF0LlxuICogLSBJZiBpdCBpcyBpbiBhIG5vcm1hbCBzdGF0ZSwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZmFpbGVkIGNoYW5nZSBzZXRzLiBFaXRoZXJcbiAqICAgZ2V0IHRoZSBmYWlsdXJlIG1lc3NhZ2UgZnJvbSB0aGUgY2hhbmdlIHNldCwgb3IgZ2V0IHRoZSBmYWlsdXJlIGV2ZW50cyBmcm9tXG4gKiAgIHRoZSBjaGFuZ2Ugc2V0IChlYXJseSB2YWxpZGF0aW9uKS5cbiAqXG4gKiBUaGlzIGNsYXNzIHdvcmtzIGF0IHRoZSBDbG91ZEZvcm1hdGlvbiBsZXZlbCwgYW5kIGRvZXMgbm90IGRlYWwgd2l0aCB0cmFjaW5nXG4gKiBDbG91ZEZvcm1hdGlvbiBlcnJvcnMgdG8gY29uc3RydWN0IGNvZGUgc291cmNlcyB5ZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblN0YWNrRGlhZ25vc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcHJpdmF0ZSBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXJQcm9wcykge1xuICAgIHRoaXMuY2ZuID0gdGhpcy5wcm9wcy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICB0aGlzLnBhcmVudFN0YWNrTG9naWNhbElkcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERpYWdub3NlIGEgc3RhY2sncyByb290IGNhdXNlIGdpdmVuIG5vIHByZS1leGlzdGluZyBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpYWdub3NlRnJvbUZyZXNoKHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTdGFja0RpYWdub3Npcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2ZuLmRlc2NyaWJlU3RhY2tzKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSk7XG4gICAgICBjb25zdCBzdGFjayA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdO1xuICAgICAgaWYgKCFzdGFjaykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJyxcbiAgICAgICAgICBtZXNzYWdlOiBgU3RhY2sgd2l0aCBuYW1lICR7c3RhY2tOYW1lfSBub3QgZm91bmRgLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0dXMgPSBTdGFja1N0YXR1cy5mcm9tU3RhY2tEZXNjcmlwdGlvbihzdGFjayk7XG4gICAgICBpZiAoc3RhdHVzLmlzSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJyxcbiAgICAgICAgICBtZXNzYWdlOiBgU3RhY2sgd2l0aCBuYW1lICR7c3RhY2tOYW1lfSBpcyBjdXJyZW50bHkgYmVpbmcgdXBkYXRlZCAoJHtzdGF0dXMubmFtZX0pLiBUcnkgYWdhaW4gd2hlbiBpdCdzIGZpbmlzaGVkLmAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0dXMuaXNGYWlsdXJlKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9kaWFnbm9zZVZpYVN0YWNrRXZlbnRzKHN0YWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2RpYWdub3NlQ2hhbmdlU2V0RmFpbHVyZUZyb21TdGFja05hbWUoc3RhY2spO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2Vycm9yLWRpYWdub3NpbmcnLCBtZXNzYWdlOiBlLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlhZ25vc2UgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggdGhlIGNoYW5nZSBzZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWFnbm9zZUNoYW5nZVNldChjaGFuZ2VTZXQ6IENoYW5nZVNldFN1bW1hcnkpOiBQcm9taXNlPFN0YWNrRGlhZ25vc2lzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9kaWFnbm9zZUNoYW5nZVNldEZhaWx1cmUoY2hhbmdlU2V0KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJywgbWVzc2FnZTogZS5tZXNzYWdlIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpYWdub3NlIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIHRoZSBjaGFuZ2Ugc2V0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlhZ25vc2VGcm9tRXJyb3JDb2xsZWN0aW9uKGVycm9yczogUmVzb3VyY2VFcnJvcnMsIHN0YWNrOiBTdGFjayk6IFByb21pc2U8U3RhY2tEaWFnbm9zaXM+IHtcbiAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ25vLXByb2JsZW0nIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICAgIGRldGVjdGVkQnk6IHtcbiAgICAgICAgdHlwZTogJ2RlcGxveW1lbnQnLFxuICAgICAgICBzdGFja1N0YXR1czogc3RhY2suU3RhY2tTdGF0dXMgPz8gJycsXG4gICAgICAgIHN0YXR1c1JlYXNvbjogc3RhY2suU3RhY2tTdGF0dXNSZWFzb24gPz8gJycsXG4gICAgICB9LFxuICAgICAgcHJvYmxlbXM6IGF3YWl0IHRoaXMuYWRkRXJyb3JUcmFjZXMoZXJyb3JzLmFsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaWFnbm9zZSBhIGRlcGxveW1lbnQgZmFpbHVyZSB2aWEgc3RhY2sgZXZlbnRzXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIHNhbWUgbG9naWMgdGhhdCB0aGUgZGVwbG95bWVudCBtb25pdG9yIHVzZXMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9kaWFnbm9zZVZpYVN0YWNrRXZlbnRzKHN0YWNrOiBTdGFjayk6IFByb21pc2U8U3RhY2tEaWFnbm9zaXM+IHtcbiAgICBjb25zdCBwb2xsZXIgPSBuZXcgU3RhY2tFdmVudFBvbGxlcih0aGlzLmNmbiwge1xuICAgICAgc3RhY2tBcm46IHN0YWNrLlN0YWNrSWQhLFxuICAgICAgaW5pdGlhbFBvbGxSYW5nZTogUG9sbFJhbmdlLm1vc3RSZWNlbnRPcGVyYXRpb24oKSxcbiAgICB9KTtcblxuICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIHJlc3VsdGluZyBldmVudHMgb2YgcG9sbGluZy4gUG9sbGluZyB3aWxsIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBlcnJvciBjb2xsZWN0aW9uLFxuICAgIC8vIHdoaWNoIGlzIHRoZSB0aGluZyB3ZSBjYXJlIGFib3V0LlxuICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kaWFnbm9zZUZyb21FcnJvckNvbGxlY3Rpb24ocG9sbGVyLmVycm9ycywgc3RhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGlhZ25vc2VDaGFuZ2VTZXRGYWlsdXJlRnJvbVN0YWNrTmFtZShzdGFjazogU3RhY2spOiBQcm9taXNlPFN0YWNrRGlhZ25vc2lzPiB7XG4gICAgY29uc3QgY3MgPSAoYXdhaXQgdGhpcy5jZm4ubGlzdENoYW5nZVNldHMoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFjay5TdGFja0lkISxcbiAgICB9KSkuU3VtbWFyaWVzID8/IFtdO1xuXG4gICAgY29uc3QgcGVuZGluZyA9IGNzLmZpbHRlcih4ID0+IHguU3RhdHVzID09PSBDaGFuZ2VTZXRTdGF0dXMuQ1JFQVRFX0lOX1BST0dSRVNTIHx8IHguU3RhdHVzID09PSBDaGFuZ2VTZXRTdGF0dXMuQ1JFQVRFX1BFTkRJTkcpO1xuICAgIGlmIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdlcnJvci1kaWFnbm9zaW5nJyxcbiAgICAgICAgbWVzc2FnZTogYFN0YWNrIHdpdGggbmFtZSAke3N0YWNrLlN0YWNrTmFtZX0gaGFzIGNoYW5nZSBzZXRzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkICgke3BlbmRpbmdbMF0uQ2hhbmdlU2V0TmFtZX0pLiBUcnkgYWdhaW4gd2hlbiBpdCdzIGZpbmlzaGVkLmAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZhaWxlZCA9IGNzLmZpbHRlcih4ID0+IHguU3RhdHVzID09PSBDaGFuZ2VTZXRTdGF0dXMuRkFJTEVEKTtcbiAgICBpZiAoZmFpbGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ25vLXByb2JsZW0nIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2RpYWdub3NlQ2hhbmdlU2V0RmFpbHVyZShmYWlsZWRbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBkaWFnbm9zZSB0aGUgcmVhc29uIHRoYXQgY2F1c2VkIGEgY2hhbmdlc2V0IHRvIGZhaWwgdG8gY3JlYXRlXG4gICAqXG4gICAqIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgcmVhc29ucyB0aGlzIGNhbiBoYXBwZW4sIGFuZCB3ZSBnbyB0aHJvdWdoIGVhY2ggb2YgdGhlbSBpbiBvcmRlci5cbiAgICpcbiAgICogVXN1YWxseSB0aGlzIHN0YXJ0cyBmcm9tIHRyeWluZyB0byBkZXRlY3QgYW4gZXJyb3IgbWVzc2FnZSBwYXR0ZXJuIGluIHRoZSBjaGFuZ2Ugc2V0IHN0YXR1cyByZWFzb24sXG4gICAqIGFuZCB0aGVuIHBvdGVudGlhbGx5IGdvaW5nIHRvIGZldGNoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdXNpbmcgYWRkaXRpb25hbCBBUEkgY2FsbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9kaWFnbm9zZUNoYW5nZVNldEZhaWx1cmUoY2hhbmdlU2V0OiBDaGFuZ2VTZXRTdW1tYXJ5KTogUHJvbWlzZTxTdGFja0RpYWdub3Npcz4ge1xuICAgIGlmIChjaGFuZ2VTZXQuU3RhdHVzICE9PSBDaGFuZ2VTZXRTdGF0dXMuRkFJTEVEKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnbm8tcHJvYmxlbScgfTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGNoYW5nZVNldCkpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCBsZWFkIHRvIGEgY2hhbmdlIHNldCB0aGF0IGlzIEZBSUxFRCBidXQgaXQncyBub3QgYWN0dWFsbHkgYSBwcm9ibGVtXG4gICAgICByZXR1cm4geyB0eXBlOiAnbm8tcHJvYmxlbScgfTtcbiAgICB9XG5cbiAgICAvLyBXZSByZXBvcnQgZWFybHkgdmFsaWRhdGlvbiBlcnJvcnMgZGlmZmVyZW50bHkgdGhhbiBnZW5lcmljIGNoYW5nZXNldCBlcnJvcnMuIE1vc3RseVxuICAgIC8vIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuXG4gICAgY29uc3QgaXNFYXJseVZhbGlkYXRpb25FcnJvciA9IGNoYW5nZVNldC5TdGF0dXNSZWFzb24/LmluY2x1ZGVzKCdBV1M6OkVhcmx5VmFsaWRhdGlvbicpO1xuICAgIGlmIChpc0Vhcmx5VmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVwb3J0Q2hhbmdlU2V0RmFpbHVyZUZyb21FdmVudHMoY2hhbmdlU2V0LCB7XG4gICAgICAgIHR5cGU6ICdlYXJseS12YWxpZGF0aW9uJyxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0LkNoYW5nZVNldE5hbWUgPz8gJycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBXZSB3aWxsIHJlY3Vyc2UgaW50byBuZXN0ZWQgY2hhbmdlIHNldHMgaWYgbmVjZXNzYXJ5LlxuICAgIGlmIChjaGFuZ2VTZXQuU3RhdHVzUmVhc29uPy5pbmNsdWRlcygnTmVzdGVkIGNoYW5nZSBzZXQnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RpYWdub3NlTmVzdGVkQ2hhbmdlU2V0RmFpbHVyZShjaGFuZ2VTZXQpO1xuICAgIH1cblxuICAgIC8vIFdlIHNwZWNpYWwtY2FzZSBmYWlsZWQgYXV0b21hdGljIGltcG9ydHMuIFdlIGtub3cgYWxsIHRoZSBtZWF0IG9mIHRoZSBlcnJvciBkZXRhaWxzIGFyZSBpbiB0aGVcbiAgICAvLyBzdGF0dXMgcmVhc29uLCBhbmQgbm93aGVyZSBlbHNlLiBXZSBwYXJzZSBpdCBzcGVjaWZpY2FsbHkuXG4gICAgY29uc3QgZmFpbGVkQXV0b0Vycm9ycyA9IHRoaXMuX3RyeURldGVjdEZhaWxlZEF1dG9JbXBvcnQoY2hhbmdlU2V0KTtcbiAgICBpZiAoZmFpbGVkQXV0b0Vycm9ycykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgICAgICBkZXRlY3RlZEJ5OiB7XG4gICAgICAgICAgdHlwZTogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgIGNoYW5nZVNldFN0YXR1czogY2hhbmdlU2V0LlN0YXR1cyA/PyAnJyxcbiAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXQuQ2hhbmdlU2V0TmFtZSA/PyAnJyxcbiAgICAgICAgICBzdGF0dXNSZWFzb246IGNoYW5nZVNldC5TdGF0dXNSZWFzb24gPz8gJycsXG4gICAgICAgIH0sXG4gICAgICAgIHByb2JsZW1zOiBhd2FpdCB0aGlzLmFkZEVycm9yVHJhY2VzKGZhaWxlZEF1dG9FcnJvcnMpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGEgZ2VuZXJpYyBjaGFuZ2Ugc2V0IGNyZWF0aW9uIGVycm9yIHdoZXJlIGBEZXNjcmliZUV2ZW50c2BcbiAgICAvLyBtaWdodCBvciBtaWdodCBub3QgZ2l2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICAgIHJldHVybiB0aGlzLl9yZXBvcnRDaGFuZ2VTZXRGYWlsdXJlRnJvbUV2ZW50cyhjaGFuZ2VTZXQsIHtcbiAgICAgIHR5cGU6ICdjaGFuZ2Utc2V0JyxcbiAgICAgIGNoYW5nZVNldFN0YXR1czogY2hhbmdlU2V0LlN0YXR1cyA/PyAnJyxcbiAgICAgIGNoYW5nZVNldE5hbWU6IGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lID8/ICcnLFxuICAgICAgc3RhdHVzUmVhc29uOiBjaGFuZ2VTZXQuU3RhdHVzUmVhc29uID8/ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZWFkIHRoZSByZXNvdXJjZS1zcGVjaWZpYyByZWFzb25zIGZvciBhIGNoYW5nZXNldCBmYWlsdXJlIGZyb20gYERlc2NyaWJlRXZlbnRzYC5cbiAgICpcbiAgICogSWYgd2UgY291bGRuJ3QgcmVhZCB0aGUgZXZlbnRzIG9yIHRoZXJlIGFyZSAwIGVycm9ycyByZXR1cm5lZCBieSB0aGF0IEFQSSwgcmV0dXJuIGEgZ2VuZXJpY1xuICAgKiBlcnJvci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3JlcG9ydENoYW5nZVNldEZhaWx1cmVGcm9tRXZlbnRzKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSwgZGV0ZWN0ZWRCeTogU3RhY2tQcm9ibGVtU291cmNlKTogUHJvbWlzZTxTdGFja0RpYWdub3Npcz4ge1xuICAgIGNvbnN0IGV2ID0gYXdhaXQgbmV3IENoYW5nZVNldFJlc291cmNlRXJyb3JGZXRjaGVyKHRoaXMucHJvcHMuc2RrLCB0aGlzLnByb3BzLmVudlJlc291cmNlcylcbiAgICAgIC5mZXRjaERldGFpbHNTdHJ1Y3R1cmVkKGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lISwgY2hhbmdlU2V0LlN0YWNrTmFtZSEpO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBlcnJvcnMgdG8gcmV0dXJuLCByZXR1cm4gdGhlbVxuICAgIGlmIChldi50eXBlID09PSAncmVzb3VyY2UtZXJyb3JzJyAmJiBldi5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgICAgICBkZXRlY3RlZEJ5LFxuICAgICAgICBwcm9ibGVtczogYXdhaXQgdGhpcy5hZGRFcnJvclRyYWNlcyhldi5lcnJvcnMubWFwKChlKSA9PiByZXNvdXJjZUVycm9yRnJvbUVhcmx5VmFsaWRhdGlvbkVycm9yKGNoYW5nZVNldC5TdGFja0lkID8/ICcnLCB0aGlzLnBhcmVudFN0YWNrTG9naWNhbElkcywgZSkpKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3aWxsIHJldHVybiBhIGdlbmVyaWMgY2hhbmdlc2V0IGVycm9yIG1lc3NhZ2UuIElmIHRoZXJlIHdhcyBhIHByb2JsZW1cbiAgICAvLyBjaGVja2luZywgd2UgbG9nIHRoYXQgZm9yIGdvb2QgbWVhc3VyZSBidXQgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZS5cbiAgICBpZiAoZXYudHlwZSA9PT0gJ2NvdWxkLW5vdC1jaGVjaycpIHtcbiAgICAgIGF3YWl0IHRoaXMucHJvcHMuaW9IZWxwZXIuZGVmYXVsdHMud2Fybihldi5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbm9uU3BlY2lmaWNDaGFuZ2VTZXRFcnJvcihjaGFuZ2VTZXQsIGRldGVjdGVkQnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRFcnJvclRyYWNlcyhlcnJzOiByZWFkb25seSBSZXNvdXJjZUVycm9yW10pOiBQcm9taXNlPFRyYWNlZFJlc291cmNlRXJyb3JbXT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICAgIHJldHVybiBQcm9taXNlLmFsbChlcnJzLm1hcCgoZSkgPT4gdGhpcy5hZGRFcnJvclRyYWNlKGUpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZEVycm9yVHJhY2UoZXJyOiBSZXNvdXJjZUVycm9yKTogUHJvbWlzZTxUcmFjZWRSZXNvdXJjZUVycm9yPiB7XG4gICAgbGV0IHNvdXJjZVRyYWNlO1xuICAgIGlmIChlcnIubG9naWNhbElkKSB7XG4gICAgICBzb3VyY2VUcmFjZSA9IGF3YWl0IHRoaXMucHJvcHMuc291cmNlVHJhY2VyLnRyYWNlUmVzb3VyY2UoZXJyLnN0YWNrQXJuLCBlcnIucGFyZW50U3RhY2tMb2dpY2FsSWRzLCBlcnIubG9naWNhbElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlVHJhY2UgPSBhd2FpdCB0aGlzLnByb3BzLnNvdXJjZVRyYWNlci50cmFjZVN0YWNrKGVyci5zdGFja0FybiwgZXJyLnBhcmVudFN0YWNrTG9naWNhbElkcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uZXJyLCBzb3VyY2VUcmFjZSwgdG9wTGV2ZWxTdGFja0hpZXJhcmNoaWNhbElkOiB0aGlzLnByb3BzLnRvcExldmVsU3RhY2tIaWVyYXJjaGljYWxJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgZ2VuZXJpYyBzdGFjayBlcnJvciBmcm9tIHRoZSBnaXZlbiBjaGFuZ2Ugc2V0IGluZm9ybWF0aW9uXG4gICAqXG4gICAqIFdlIGNhbid0IHBvaW50IHRvIGEgc3BlY2lmaWMgcmVzb3VyY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9ub25TcGVjaWZpY0NoYW5nZVNldEVycm9yKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSwgZGV0ZWN0ZWRCeTogU3RhY2tQcm9ibGVtU291cmNlKTogUHJvbWlzZTxTdGFja0RpYWdub3Npcz4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgICBkZXRlY3RlZEJ5LFxuICAgICAgcHJvYmxlbXM6IFtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRFcnJvclRyYWNlKHtcbiAgICAgICAgICAvLyBJdCdzIGFib3V0IGEgc3RhY2tcbiAgICAgICAgICBsb2dpY2FsSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtZXNzYWdlOiBjaGFuZ2VTZXQuU3RhdHVzUmVhc29uID8/ICcnLFxuICAgICAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogdGhpcy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMsXG4gICAgICAgICAgc3RhY2tBcm46IGNoYW5nZVNldC5TdGFja0lkID8/ICcnLFxuICAgICAgICAgIHBoeXNpY2FsSWQ6IGNoYW5nZVNldC5TdGFja0lkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTG9vayBmb3IgbmVzdGVkIGNoYW5nZSBzZXRzIHRoYXQgaGF2ZSBmYWlsZWQsIGFuZCBkaWFnbm9zZSB0aG9zZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2RpYWdub3NlTmVzdGVkQ2hhbmdlU2V0RmFpbHVyZShjaGFuZ2VTZXQ6IENoYW5nZVNldFN1bW1hcnkpOiBQcm9taXNlPFN0YWNrRGlhZ25vc2lzPiB7XG4gICAgY29uc3QgbmVzdGVkID0gYXdhaXQgdGhpcy5fZmluZEZhaWxlZE5lc3RlZFN0YWNrKGNoYW5nZVNldCk7XG4gICAgaWYgKCFuZXN0ZWQpIHtcbiAgICAgIC8vIFRoYXQncyB3ZWlyZC4gTGV0J3MgcmV0dXJuIHRoZSBjaGFuZ2Ugc2V0J3Mgc3RhdHVzIHJlYXNvbiBhcyBhIG5vbi1zcGVjaWZpYyBlcnJvclxuICAgICAgcmV0dXJuIHRoaXMuX25vblNwZWNpZmljQ2hhbmdlU2V0RXJyb3IoY2hhbmdlU2V0LCB7XG4gICAgICAgIHR5cGU6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0LkNoYW5nZVNldE5hbWUgPz8gJycsXG4gICAgICAgIGNoYW5nZVNldFN0YXR1czogY2hhbmdlU2V0LlN0YXR1cyA/PyAnJyxcbiAgICAgICAgc3RhdHVzUmVhc29uOiBjaGFuZ2VTZXQuU3RhdHVzUmVhc29uID8/ICcnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmVzdGVkQ3MgPSBhd2FpdCB0aGlzLmNmbi5kZXNjcmliZUNoYW5nZVNldCh7XG4gICAgICBDaGFuZ2VTZXROYW1lOiBuZXN0ZWQuY2hhbmdlU2V0QXJuLFxuICAgICAgU3RhY2tOYW1lOiBuZXN0ZWQuc3RhY2tBcm4sXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXN0ZWREaWFnID0gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXIodGhpcy5wcm9wcyk7XG4gICAgbmVzdGVkRGlhZy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMgPSBbLi4udGhpcy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMsIG5lc3RlZC5sb2dpY2FsSWRdO1xuICAgIHJldHVybiBuZXN0ZWREaWFnLl9kaWFnbm9zZUNoYW5nZVNldEZhaWx1cmUobmVzdGVkQ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZmluZEZhaWxlZE5lc3RlZFN0YWNrKGNoYW5nZVNldDogQ2hhbmdlU2V0U3VtbWFyeSk6IFByb21pc2U8e1xuICAgIHN0YWNrQXJuOiBzdHJpbmc7XG4gICAgY2hhbmdlU2V0QXJuOiBzdHJpbmc7XG4gICAgbG9naWNhbElkOiBzdHJpbmc7XG4gIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBUaGUgc3RhdHVzIHJlYXNvbiBvbmx5IGluY2x1ZGVzIHRoZSBjaGFuZ2Ugc2V0IElELCBidXQgd2UgYWxzbyBuZWVkIHRoZSBzdGFjayBuYW1lLiBUaGUgd2F5IHRvIGdldCB0aGlzIGlzXG4gICAgLy8gZGVzY3JpYmUgdGhlIGN1cnJlbnQgY2hhbmdlIHNldCwgdGhlbiBmcm9tIHRoZSBDaGFuZ2VzIGZpbmQgdGhlIHN0YWNrIHdob3NlIENoYW5nZVNldElkIGlzIG1lbnRpb25lZCBpbiB0aGVcbiAgICAvLyBzdGF0dXMgcmVhc29uLCB0aGVuIGxvb2sgdXAgdGhhdCBjaGFuZ2Ugc2V0IGFuZCByZWN1cnNlIGludG8gYSByZWd1bGFyIGNoYW5nZSBzZXQgZGlhZ25vc2lzLlxuICAgIGxldCBuZXh0VG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgZG8ge1xuICAgICAgLy8gQ2hhbmdlcyBpbiB0aGlzIHJlc3BvbnNlIG1pZ2h0IGJlIHBhZ2luYXRlZFxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuY2ZuLmRlc2NyaWJlQ2hhbmdlU2V0KHtcbiAgICAgICAgU3RhY2tOYW1lOiBjaGFuZ2VTZXQuU3RhY2tJZCxcbiAgICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0LkNoYW5nZVNldElkLFxuICAgICAgICAuLi5uZXh0VG9rZW4gPyB7IE5leHRUb2tlbjogbmV4dFRva2VuIH0gOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiByZXNwLkNoYW5nZXMgPz8gW10pIHtcbiAgICAgICAgaWYgKGNoYW5nZS5UeXBlID09PSBDaGFuZ2VUeXBlLlJlc291cmNlICYmIGNoYW5nZS5SZXNvdXJjZUNoYW5nZT8uUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snICYmIGNoYW5nZS5SZXNvdXJjZUNoYW5nZT8uQ2hhbmdlU2V0SWQgJiYgY2hhbmdlU2V0LlN0YXR1c1JlYXNvbj8uaW5jbHVkZXMoY2hhbmdlLlJlc291cmNlQ2hhbmdlPy5DaGFuZ2VTZXRJZCkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hhbmdlU2V0QXJuOiBjaGFuZ2UuUmVzb3VyY2VDaGFuZ2UuQ2hhbmdlU2V0SWQsXG4gICAgICAgICAgICBzdGFja0FybjogY2hhbmdlLlJlc291cmNlQ2hhbmdlLlBoeXNpY2FsUmVzb3VyY2VJZCA/PyAnJyxcbiAgICAgICAgICAgIGxvZ2ljYWxJZDogY2hhbmdlLlJlc291cmNlQ2hhbmdlLkxvZ2ljYWxSZXNvdXJjZUlkID8/ICcnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV4dFRva2VuID0gcmVzcC5OZXh0VG9rZW47XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHBhcnNlIGZhaWxlZCBhdXRvLWltcG9ydHMgb3V0IGZyb20gYSBjaGFuZ2Ugc2V0IHN0YXR1c1xuICAgKlxuICAgKiBUaGUgcGF0dGVybiBsb29rcyBsaWtlIHRoaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiBDbG91ZEZvcm1hdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGltcG9ydCBzb21lIHJlc291cmNlcyBiZWNhdXNlIHRoZXkgYWxyZWFkeSBleGlzdCBpbiB5b3VyIGFjY291bnQuIFRoZSByZXNvdXJjZXMgbXVzdCBoYXZlIHRoZSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgc2V0IHRvICdSZXRhaW4nIG9yICdSZXRhaW5FeGNlcHRPbkNyZWF0ZScgaW4gdGhlIHRlbXBsYXRlIGZvciBzdWNjZXNzZnVsIGltcG9ydC4gVGhlIGFmZmVjdGVkIHJlc291cmNlcyBhcmUgU29tZUJ1Y2tldEQ1QjcwNzA0ICh7QnVja2V0TmFtZT16b21hYXJlZW5idWNrZXR9KVxuICAgKiBgYGBcbiAgICpcbiAgICogRm9sbG93ZWQgYnlcbiAgICpcbiAgICogYGBgXG4gICAqIExvZ2ljYWxJRCAoe1Byb3A9VmFsdWUsUHJvcD1WYWx1ZX0pLCBMb2dpY2FsSUQgKHtQcm9wPVZhbHVlfSksIC4uLlxuICAgKiBgYGBcbiAgICovXG4gIHByaXZhdGUgX3RyeURldGVjdEZhaWxlZEF1dG9JbXBvcnQoY2hhbmdlU2V0OiBDaGFuZ2VTZXRTdW1tYXJ5KTogUmVzb3VyY2VFcnJvcltdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY2hhbmdlU2V0LlN0YXR1c1JlYXNvbjtcbiAgICAvLyBPbmx5IGVuaGFuY2UgdGhlIHNwZWNpZmljIENGTiBlcnJvciBhYm91dCBpbXBvcnRpbmcgZXhpc3RpbmcgcmVzb3VyY2VzXG4gICAgaWYgKCFtZXNzYWdlPy5pbmNsdWRlcygnQ2xvdWRGb3JtYXRpb24gaXMgYXR0ZW1wdGluZyB0byBpbXBvcnQgc29tZSByZXNvdXJjZXMgYmVjYXVzZSB0aGV5IGFscmVhZHkgZXhpc3QgaW4geW91ciBhY2NvdW50JykpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbWFya2VyID0gJ1RoZSBhZmZlY3RlZCByZXNvdXJjZXMgYXJlICc7XG4gICAgY29uc3QgbWFya2VySW5kZXggPSBtZXNzYWdlLmluZGV4T2YobWFya2VyKTtcbiAgICBpZiAobWFya2VySW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJldDogUmVzb3VyY2VFcnJvcltdID0gW107XG4gICAgbGV0IHJlbWFpbmluZyA9IG1lc3NhZ2Uuc2xpY2UobWFya2VySW5kZXggKyBtYXJrZXIubGVuZ3RoKTtcbiAgICB3aGlsZSAocmVtYWluaW5nKSB7XG4gICAgICBjb25zdCBlbmRJeCA9IHJlbWFpbmluZy5pbmRleE9mKCcpLCAnKTtcbiAgICAgIGNvbnN0IHRoaXNSZXNvdXJjZSA9IGVuZEl4ID4gLTEgPyByZW1haW5pbmcuc2xpY2UoMCwgZW5kSXggKyAxKSA6IHJlbWFpbmluZztcbiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zbGljZSh0aGlzUmVzb3VyY2UubGVuZ3RoICsgMik7XG5cbiAgICAgIC8vIHRoaXNSZXNvdXJjZSA9IFwiTG9naWNhbElkICh7UHJvcD1WYWx1ZSwgUHJvcD1WYWx1ZX0pXCJcbiAgICAgIGNvbnN0IG9wZW5QYXJlbiA9IHRoaXNSZXNvdXJjZS5pbmRleE9mKCcoJyk7XG4gICAgICBjb25zdCBsb2dpY2FsSWQgPSBvcGVuUGFyZW4gPiAtMSA/IHRoaXNSZXNvdXJjZS5zbGljZSgwLCBvcGVuUGFyZW4pLnRyaW0oKSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0LnB1c2goe1xuICAgICAgICBtZXNzYWdlOiBgQXV0b21hdGljIGltcG9ydCBvZiBleGlzdGluZyByZXNvdXJjZSAke3RoaXNSZXNvdXJjZX0gbmVlZHMgYSBEZWxldGlvblBvbGljeSBvZiBcXCdSZXRhaW5cXCcgb3IgXFwnUmV0YWluRXhjZXB0T25DcmVhdGVcXCcuIFNldCB0aGUgcmVtb3ZhbCBwb2xpY3kgdG8gXFwnUmVtb3ZhbFBvbGljeS5SRVRBSU5cXCcgb3IgXFwnUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURVxcJyAoU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvdjIvZ3VpZGUvcmVzb3VyY2VzLmh0bWwjcmVzb3VyY2VzLXJlbW92YWwpYCxcbiAgICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiB0aGlzLnBhcmVudFN0YWNrTG9naWNhbElkcyxcbiAgICAgICAgc3RhY2tBcm46IGNoYW5nZVNldC5TdGFja0lkID8/ICcnLFxuICAgICAgICBlcnJvckNvZGU6ICdBdXRvbWF0aWNJbXBvcnROZWVkc1JldGFpbicsXG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNoYW5nZSBzZXQgaGFzIG5vIGNoYW5nZXNcbiAqXG4gKiBUaGlzIG11c3QgYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzdGF0dXMsIG5vdCB0aGUgJ0NoYW5nZXMnIGFycmF5IG9uIHRoZVxuICogb2JqZWN0OyB0aGUgbGF0dGVyIGNhbiBiZSBlbXB0eSBiZWNhdXNlIG5vIHJlc291cmNlcyB3ZXJlIGNoYW5nZWQsIGJ1dCBpZlxuICogdGhlcmUgYXJlIGNoYW5nZXMgdG8gT3V0cHV0cywgdGhlIGNoYW5nZSBzZXQgY2FuIHN0aWxsIGJlIGV4ZWN1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uOiBDaGFuZ2VTZXRTdW1tYXJ5KSB7XG4gIGNvbnN0IG5vQ2hhbmdlRXJyb3JQcmVmaXhlcyA9IFtcbiAgICAvLyBFcnJvciBtZXNzYWdlIGZvciBhIHJlZ3VsYXIgdGVtcGxhdGVcbiAgICBcIlRoZSBzdWJtaXR0ZWQgaW5mb3JtYXRpb24gZGlkbid0IGNvbnRhaW4gY2hhbmdlcy5cIixcbiAgICAvLyBFcnJvciBtZXNzYWdlIHdoZW4gYSBUcmFuc2Zvcm0gaXMgaW52b2x2ZWQgKHNlZSAjMTA2NTApXG4gICAgJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nLFxuICBdO1xuXG4gIHJldHVybiAoXG4gICAgZGVzY3JpcHRpb24uU3RhdHVzID09PSAnRkFJTEVEJyAmJiBub0NoYW5nZUVycm9yUHJlZml4ZXMuc29tZSgocCkgPT4gKGRlc2NyaXB0aW9uLlN0YXR1c1JlYXNvbiA/PyAnJykuc3RhcnRzV2l0aChwKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb3VyY2VFcnJvckZyb21FYXJseVZhbGlkYXRpb25FcnJvcihzdGFja0lkOiBzdHJpbmcsIHBhcmVudFN0YWNrTG9naWNhbElkczogc3RyaW5nW10sIGV2OiBDaGFuZ2VTZXRSZXNvdXJjZUVycm9yKTogUmVzb3VyY2VFcnJvciB7XG4gIHJldHVybiB7XG4gICAgbG9naWNhbElkOiBldi5sb2dpY2FsSWQsXG4gICAgcGh5c2ljYWxJZDogZXYucGh5c2ljYWxJZCxcbiAgICByZXNvdXJjZVR5cGU6IGV2LnJlc291cmNlVHlwZSxcbiAgICBtZXNzYWdlOiBgJHtldi5tZXNzYWdlfSAoYXQgJHtldi5kb2N1bWVudFBhdGh9KWAsXG4gICAgZXJyb3JDb2RlOiBgJHtldi52YWxpZGF0aW9uTmFtZX1fJHtldi5ldmVudFR5cGV9YCxcbiAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHMsXG4gICAgc3RhY2tBcm46IHN0YWNrSWQsXG4gIH07XG59XG4iXX0=
@@ -1,8 +1,9 @@
1
+ import { TreeText } from './tree';
1
2
  export declare class TreeBuilder {
2
3
  private readonly rootText;
3
4
  private readonly root;
4
5
  constructor(rootText: string);
5
- setNodeText(constructPath: string, nodeText: string): void;
6
+ nodeText(constructPath: string): TreeText;
6
7
  render(): string;
7
8
  toString(): string;
8
9
  private obtainNode;
@@ -10,12 +10,12 @@ class TreeBuilder {
10
10
  constructor(rootText) {
11
11
  this.rootText = rootText;
12
12
  this.root = {
13
- tree: new tree_1.Tree(rootText),
13
+ tree: new tree_1.Tree(new tree_1.TreeText([rootText])),
14
14
  children: {},
15
15
  };
16
16
  }
17
- setNodeText(constructPath, nodeText) {
18
- this.obtainNode(constructPath).text = nodeText;
17
+ nodeText(constructPath) {
18
+ return this.obtainNode(constructPath).text;
19
19
  }
20
20
  render() {
21
21
  const out = this.root.tree.render();
@@ -41,7 +41,7 @@ class TreeBuilder {
41
41
  cur = child;
42
42
  }
43
43
  else {
44
- const tree = new tree_1.Tree(next);
44
+ const tree = new tree_1.Tree(new tree_1.TreeText([next]));
45
45
  cur.tree.addChild(tree);
46
46
  cur = cur.children[next] = {
47
47
  tree,
@@ -83,4 +83,4 @@ function wrapText(n, text) {
83
83
  }
84
84
  return ret;
85
85
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJlZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBEQSxnQ0FVQztBQUVELDRCQXNCQztBQTVGRCxpQ0FBOEI7QUFFOUIsTUFBYSxXQUFXO0lBR087SUFGWixJQUFJLENBQWtCO0lBRXZDLFlBQTZCLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksRUFBRSxJQUFJLFdBQUksQ0FBQyxRQUFRLENBQUM7WUFDeEIsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVcsQ0FBQyxhQUFxQixFQUFFLFFBQWdCO1FBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNqRCxDQUFDO0lBRU0sTUFBTTtRQUNYLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELDBFQUEwRTtRQUMxRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sVUFBVSxDQUFDLGFBQXFCO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNC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SCxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGNsYXNzIFRyZWVCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb290OiBUcmVlQnVpbGRlck5vZGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb290VGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb290ID0ge1xuICAgICAgdHJlZTogbmV3IFRyZWUocm9vdFRleHQpLFxuICAgICAgY2hpbGRyZW46IHt9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2V0Tm9kZVRleHQoY29uc3RydWN0UGF0aDogc3RyaW5nLCBub2RlVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5vYnRhaW5Ob2RlKGNvbnN0cnVjdFBhdGgpLnRleHQgPSBub2RlVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3Qgb3V0ID0gdGhpcy5yb290LnRyZWUucmVuZGVyKCk7XG4gICAgaWYgKHRoaXMucm9vdFRleHQpIHtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIC8vIFJvb3RUZXh0IGlzIGVtcHR5LCBoaWRlIHRoZSBlbnRpcmUgbm9kZSAoc2xpY2Ugb2ZmIHRoZSBpbml0aWFsIG5ld2xpbmUpXG4gICAgcmV0dXJuIG91dC5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgb2J0YWluTm9kZShjb25zdHJ1Y3RQYXRoOiBzdHJpbmcpOiBUcmVlIHtcbiAgICBjb25zdCBwYXJ0cyA9IGNvbnN0cnVjdFBhdGguc3BsaXQoJy8nKTtcbiAgICBsZXQgY3VyID0gdGhpcy5yb290O1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBuZXh0ID0gcGFydHMuc2hpZnQoKTtcbiAgICAgIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGN1ci50cmVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZCA9IGN1ci5jaGlsZHJlbltuZXh0XTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICBjdXIgPSBjaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgVHJlZShuZXh0KTtcbiAgICAgICAgY3VyLnRyZWUuYWRkQ2hpbGQodHJlZSk7XG4gICAgICAgIGN1ciA9IGN1ci5jaGlsZHJlbltuZXh0XSA9IHtcbiAgICAgICAgICB0cmVlLFxuICAgICAgICAgIGNoaWxkcmVuOiB7fSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRyZWVCdWlsZGVyTm9kZSB7XG4gIHRyZWU6IFRyZWU7XG4gIGNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCBUcmVlQnVpbGRlck5vZGU+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lkZUJ5U2lkZShsZWZ0OiBzdHJpbmdbXSwgc2VwOiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmdbXSkge1xuICBjb25zdCB3aWR0aCA9IGxlZnQubWFwKHggPT4geC5sZW5ndGgpLnJlZHVjZSgoYWNjLCBuKSA9PiBNYXRoLm1heChhY2MsIG4pLCAwKTtcblxuICBjb25zdCByZXQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVmdC5sZW5ndGggfHwgaSA8IHJpZ2h0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbCA9IGkgPCBsZWZ0Lmxlbmd0aCA/IGxlZnRbaV0gOiAnICcucmVwZWF0KHdpZHRoKTtcbiAgICBjb25zdCByID0gaSA8IHJpZ2h0Lmxlbmd0aCA/IHJpZ2h0W2ldIDogJyc7XG4gICAgcmV0LnB1c2goYCR7bH0ke3NlcH0ke3J9YCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBUZXh0KG46IG51bWJlciwgdGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBicmVha2VycyA9IFsnICcsICdcXG4nXTtcblxuICBjb25zdCByZXQ6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5lU3RhcnQgPSAwO1xuICB3aGlsZSAobGluZVN0YXJ0IDwgdGV4dC5sZW5ndGgpIHtcbiAgICBsZXQgbGluZUVuZCA9IGxpbmVTdGFydCArIG47XG4gICAgd2hpbGUgKGxpbmVFbmQgPiBsaW5lU3RhcnQgJiYgbGluZUVuZCA8IHRleHQubGVuZ3RoICYmICFicmVha2Vycy5pbmNsdWRlcyh0ZXh0W2xpbmVFbmRdKSkge1xuICAgICAgbGluZUVuZCAtPSAxO1xuICAgIH1cbiAgICBpZiAobGluZUVuZCA9PT0gbGluZVN0YXJ0KSB7XG4gICAgICAvLyBDb3VsZCBub3QgZmluZCBhIHNwYWNlIGluIHRoaXMgbGluZS4gU2VlayBmb3J3YXJkIHRvIHRoZSBmaXJzdCBzcGFjZSB0byBnZXQgdGhlIHNtYWxsZXN0IGxpbmUgb3ZlcmZsb3dcbiAgICAgIGxpbmVFbmQgPSBsaW5lU3RhcnQgKyBuO1xuICAgICAgd2hpbGUgKGxpbmVFbmQgPCB0ZXh0Lmxlbmd0aCAmJiAhYnJlYWtlcnMuaW5jbHVkZXModGV4dFtsaW5lRW5kXSkpIHtcbiAgICAgICAgbGluZUVuZCArPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldC5wdXNoKHRleHQuc2xpY2UobGluZVN0YXJ0LCBsaW5lRW5kKSk7XG4gICAgbGluZVN0YXJ0ID0gbGluZUVuZCArIDE7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJlZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBEQSxnQ0FVQztBQUVELDRCQXNCQztBQTVGRCxpQ0FBd0M7QUFFeEMsTUFBYSxXQUFXO0lBR087SUFGWixJQUFJLENBQWtCO0lBRXZDLFlBQTZCLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksRUFBRSxJQUFJLFdBQUksQ0FBQyxJQUFJLGVBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDeEMsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVNLFFBQVEsQ0FBQyxhQUFxQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFTSxNQUFNO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsMEVBQTBFO1FBQzFFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxVQUFVLENBQUMsYUFBcUI7UUFDdEMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxF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QUFDO2dCQUNsRSxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekMsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyZWUsIFRyZWVUZXh0IH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGNsYXNzIFRyZWVCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb290OiBUcmVlQnVpbGRlck5vZGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb290VGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb290ID0ge1xuICAgICAgdHJlZTogbmV3IFRyZWUobmV3IFRyZWVUZXh0KFtyb290VGV4dF0pKSxcbiAgICAgIGNoaWxkcmVuOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG5vZGVUZXh0KGNvbnN0cnVjdFBhdGg6IHN0cmluZyk6IFRyZWVUZXh0IHtcbiAgICByZXR1cm4gdGhpcy5vYnRhaW5Ob2RlKGNvbnN0cnVjdFBhdGgpLnRleHQ7XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IG91dCA9IHRoaXMucm9vdC50cmVlLnJlbmRlcigpO1xuICAgIGlmICh0aGlzLnJvb3RUZXh0KSB7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICAvLyBSb290VGV4dCBpcyBlbXB0eSwgaGlkZSB0aGUgZW50aXJlIG5vZGUgKHNsaWNlIG9mZiB0aGUgaW5pdGlhbCBuZXdsaW5lKVxuICAgIHJldHVybiBvdXQuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIG9idGFpbk5vZGUoY29uc3RydWN0UGF0aDogc3RyaW5nKTogVHJlZSB7XG4gICAgY29uc3QgcGFydHMgPSBjb25zdHJ1Y3RQYXRoLnNwbGl0KCcvJyk7XG4gICAgbGV0IGN1ciA9IHRoaXMucm9vdDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgbmV4dCA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjdXIudHJlZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGQgPSBjdXIuY2hpbGRyZW5bbmV4dF07XG4gICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgY3VyID0gY2hpbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0cmVlID0gbmV3IFRyZWUobmV3IFRyZWVUZXh0KFtuZXh0XSkpO1xuICAgICAgICBjdXIudHJlZS5hZGRDaGlsZCh0cmVlKTtcbiAgICAgICAgY3VyID0gY3VyLmNoaWxkcmVuW25leHRdID0ge1xuICAgICAgICAgIHRyZWUsXG4gICAgICAgICAgY2hpbGRyZW46IHt9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5pbnRlcmZhY2UgVHJlZUJ1aWxkZXJOb2RlIHtcbiAgdHJlZTogVHJlZTtcbiAgY2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIFRyZWVCdWlsZGVyTm9kZT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWRlQnlTaWRlKGxlZnQ6IHN0cmluZ1tdLCBzZXA6IHN0cmluZywgcmlnaHQ6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHdpZHRoID0gbGVmdC5tYXAoeCA9PiB4Lmxlbmd0aCkucmVkdWNlKChhY2MsIG4pID0+IE1hdGgubWF4KGFjYywgbiksIDApO1xuXG4gIGNvbnN0IHJldDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZWZ0Lmxlbmd0aCB8fCBpIDwgcmlnaHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsID0gaSA8IGxlZnQubGVuZ3RoID8gbGVmdFtpXSA6ICcgJy5yZXBlYXQod2lkdGgpO1xuICAgIGNvbnN0IHIgPSBpIDwgcmlnaHQubGVuZ3RoID8gcmlnaHRbaV0gOiAnJztcbiAgICByZXQucHVzaChgJHtsfSR7c2VwfSR7cn1gKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFRleHQobjogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGJyZWFrZXJzID0gWycgJywgJ1xcbiddO1xuXG4gIGNvbnN0IHJldDogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIHdoaWxlIChsaW5lU3RhcnQgPCB0ZXh0Lmxlbmd0aCkge1xuICAgIGxldCBsaW5lRW5kID0gbGluZVN0YXJ0ICsgbjtcbiAgICB3aGlsZSAobGluZUVuZCA+IGxpbmVTdGFydCAmJiBsaW5lRW5kIDwgdGV4dC5sZW5ndGggJiYgIWJyZWFrZXJzLmluY2x1ZGVzKHRleHRbbGluZUVuZF0pKSB7XG4gICAgICBsaW5lRW5kIC09IDE7XG4gICAgfVxuICAgIGlmIChsaW5lRW5kID09PSBsaW5lU3RhcnQpIHtcbiAgICAgIC8vIENvdWxkIG5vdCBmaW5kIGEgc3BhY2UgaW4gdGhpcyBsaW5lLiBTZWVrIGZvcndhcmQgdG8gdGhlIGZpcnN0IHNwYWNlIHRvIGdldCB0aGUgc21hbGxlc3QgbGluZSBvdmVyZmxvd1xuICAgICAgbGluZUVuZCA9IGxpbmVTdGFydCArIG47XG4gICAgICB3aGlsZSAobGluZUVuZCA8IHRleHQubGVuZ3RoICYmICFicmVha2Vycy5pbmNsdWRlcyh0ZXh0W2xpbmVFbmRdKSkge1xuICAgICAgICBsaW5lRW5kICs9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0LnB1c2godGV4dC5zbGljZShsaW5lU3RhcnQsIGxpbmVFbmQpKTtcbiAgICBsaW5lU3RhcnQgPSBsaW5lRW5kICsgMTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
@@ -1,13 +1,19 @@
1
1
  export declare class Tree {
2
- private lines;
2
+ text: TreeText;
3
3
  private readonly children;
4
- constructor(text: string, children?: Tree[]);
5
- get text(): string;
6
- set text(text: string);
4
+ constructor(text: TreeText, children?: Tree[]);
7
5
  addChild(tree: Tree): void;
8
6
  height(): number;
9
7
  render(): string;
10
8
  toString(): string;
11
9
  private _render;
12
10
  }
11
+ export declare class TreeText {
12
+ header: string[];
13
+ body: string[];
14
+ footer: string[];
15
+ constructor(header?: string[], body?: string[], footer?: string[]);
16
+ get lines(): string[];
17
+ lineCount(): number;
18
+ }
13
19
  //# sourceMappingURL=tree.d.ts.map
@@ -1,24 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Tree = void 0;
3
+ exports.TreeText = exports.Tree = void 0;
4
4
  class Tree {
5
- lines;
5
+ text;
6
6
  children;
7
7
  constructor(text, children = []) {
8
- this.lines = text.split('\n');
8
+ this.text = text;
9
9
  this.children = [...children];
10
10
  }
11
- get text() {
12
- return this.lines.join('\n');
13
- }
14
- set text(text) {
15
- this.lines = text.split('\n');
16
- }
17
11
  addChild(tree) {
18
12
  this.children.push(tree);
19
13
  }
20
14
  height() {
21
- return this.lines.length + sum(this.children.map(c => c.height()));
15
+ return this.text.lineCount() + sum(this.children.map(c => c.height()));
22
16
  }
23
17
  render() {
24
18
  return this._render().join('\n');
@@ -28,7 +22,7 @@ class Tree {
28
22
  }
29
23
  _render() {
30
24
  const ret = [];
31
- ret.push(...this.lines);
25
+ ret.push(...this.text.lines);
32
26
  for (let i = 0; i < this.children.length; i++) {
33
27
  const isLastChild = i === this.children.length - 1;
34
28
  let bullet;
@@ -51,6 +45,23 @@ class Tree {
51
45
  }
52
46
  }
53
47
  exports.Tree = Tree;
48
+ class TreeText {
49
+ header;
50
+ body;
51
+ footer;
52
+ constructor(header = [], body = [], footer = []) {
53
+ this.header = header;
54
+ this.body = body;
55
+ this.footer = footer;
56
+ }
57
+ get lines() {
58
+ return [...this.header, ...this.body, ...this.footer];
59
+ }
60
+ lineCount() {
61
+ return this.header.length + this.body.length + this.footer.length;
62
+ }
63
+ }
64
+ exports.TreeText = TreeText;
54
65
  function sum(xs) {
55
66
  let ret = 0;
56
67
  for (const x of xs) {
@@ -58,4 +69,4 @@ function sum(xs) {
58
69
  }
59
70
  return ret;
60
71
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxJQUFJO0lBQ1AsS0FBSyxDQUFXO0lBQ1AsUUFBUSxDQUFTO0lBRWxDLFlBQVksSUFBWSxFQUFFLFdBQW1CLEVBQUU7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLElBQUksQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVU7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sT0FBTztRQUNiLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFFbkQsSUFBSSxNQUFNLENBQUM7WUFDWCxJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDbEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDbEIsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBMURELG9CQTBEQztBQUVELFNBQVMsR0FBRyxDQUFDLEVBQW9CO0lBQy9CLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbkIsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVHJlZSB7XG4gIHByaXZhdGUgbGluZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiBUcmVlW107XG5cbiAgY29uc3RydWN0b3IodGV4dDogc3RyaW5nLCBjaGlsZHJlbjogVHJlZVtdID0gW10pIHtcbiAgICB0aGlzLmxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5jaGlsZHJlbl07XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5saW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIGFkZENoaWxkKHRyZWU6IFRyZWUpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2godHJlZSk7XG4gIH1cblxuICBwdWJsaWMgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoICsgc3VtKHRoaXMuY2hpbGRyZW4ubWFwKGMgPT4gYy5oZWlnaHQoKSkpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXIoKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlcigpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0OiBzdHJpbmdbXSA9IFtdO1xuICAgIHJldC5wdXNoKC4uLnRoaXMubGluZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXNMYXN0Q2hpbGQgPSBpID09PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG5cbiAgICAgIGxldCBidWxsZXQ7XG4gICAgICBsZXQgaGFuZ2VyO1xuICAgICAgaWYgKGlzTGFzdENoaWxkKSB7XG4gICAgICAgIGJ1bGxldCA9ICcg4pSU4pSAICc7XG4gICAgICAgIGhhbmdlciA9ICcgICAgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1bGxldCA9ICcg4pSc4pSAICc7XG4gICAgICAgIGhhbmdlciA9ICcg4pSCICAnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHRoaXMuY2hpbGRyZW5baV0uX3JlbmRlcigpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZFJlbmRlci5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBpc0ZpcnN0TGluZSA9IGogPT09IDA7XG5cbiAgICAgICAgcmV0LnB1c2goKGlzRmlyc3RMaW5lID8gYnVsbGV0IDogaGFuZ2VyKSArIGNoaWxkUmVuZGVyW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdW0oeHM6IEl0ZXJhYmxlPG51bWJlcj4pOiBudW1iZXIge1xuICBsZXQgcmV0ID0gMDtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0ICs9IHg7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxJQUFJO0lBQ1IsSUFBSSxDQUFXO0lBQ0wsUUFBUSxDQUFTO0lBRWxDLFlBQVksSUFBYyxFQUFFLFdBQW1CLEVBQUU7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFVO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sT0FBTztRQUNiLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRW5ELElBQUksTUFBTSxDQUFDO1lBQ1gsSUFBSSxNQUFNLENBQUM7WUFDWCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQWxERCxvQkFrREM7QUFFRCxNQUFhLFFBQVE7SUFFVjtJQUNBO0lBQ0E7SUFIVCxZQUNTLFNBQW1CLEVBQUUsRUFDckIsT0FBaUIsRUFBRSxFQUNuQixTQUFtQixFQUFFO1FBRnJCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFlO0lBRTlCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEUsQ0FBQztDQUNGO0FBZkQsNEJBZUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxFQUFvQjtJQUMvQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25CLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFRyZWUge1xuICBwdWJsaWMgdGV4dDogVHJlZVRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IFRyZWVbXTtcblxuICBjb25zdHJ1Y3Rvcih0ZXh0OiBUcmVlVGV4dCwgY2hpbGRyZW46IFRyZWVbXSA9IFtdKSB7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLmNoaWxkcmVuXTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDaGlsZCh0cmVlOiBUcmVlKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKHRyZWUpO1xuICB9XG5cbiAgcHVibGljIGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRleHQubGluZUNvdW50KCkgKyBzdW0odGhpcy5jaGlsZHJlbi5tYXAoYyA9PiBjLmhlaWdodCgpKSk7XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcigpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdID0gW107XG4gICAgcmV0LnB1c2goLi4udGhpcy50ZXh0LmxpbmVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlzTGFzdENoaWxkID0gaSA9PT0gdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxO1xuXG4gICAgICBsZXQgYnVsbGV0O1xuICAgICAgbGV0IGhhbmdlcjtcbiAgICAgIGlmIChpc0xhc3RDaGlsZCkge1xuICAgICAgICBidWxsZXQgPSAnIOKUlOKUgCAnO1xuICAgICAgICBoYW5nZXIgPSAnICAgICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWxsZXQgPSAnIOKUnOKUgCAnO1xuICAgICAgICBoYW5nZXIgPSAnIOKUgiAgJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSB0aGlzLmNoaWxkcmVuW2ldLl9yZW5kZXIoKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGRSZW5kZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgaXNGaXJzdExpbmUgPSBqID09PSAwO1xuXG4gICAgICAgIHJldC5wdXNoKChpc0ZpcnN0TGluZSA/IGJ1bGxldCA6IGhhbmdlcikgKyBjaGlsZFJlbmRlcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyZWVUZXh0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGhlYWRlcjogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWMgYm9keTogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWMgZm9vdGVyOiBzdHJpbmdbXSA9IFtdLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGluZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmhlYWRlciwgLi4udGhpcy5ib2R5LCAuLi50aGlzLmZvb3Rlcl07XG4gIH1cblxuICBwdWJsaWMgbGluZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyLmxlbmd0aCArIHRoaXMuYm9keS5sZW5ndGggKyB0aGlzLmZvb3Rlci5sZW5ndGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VtKHhzOiBJdGVyYWJsZTxudW1iZXI+KTogbnVtYmVyIHtcbiAgbGV0IHJldCA9IDA7XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIHJldCArPSB4O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
+ import type { IoDefaultMessages } from './io-default-messages';
1
2
  import type { IoHelper } from './io-helper';
2
3
  import type * as make from './message-maker';
3
4
  import type { Duration } from '../../../payloads/types';
4
5
  import type { IActionAwareIoHost } from '../io-host';
5
- import type { IoDefaultMessages } from './io-default-messages';
6
6
  /**
7
7
  * These data fields are automatically added by ending a span
8
8
  */