@workflow/core 5.0.0-beta.40 → 5.0.0-beta.42

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 (82) hide show
  1. package/dist/events-consumer.d.ts +224 -6
  2. package/dist/events-consumer.d.ts.map +1 -1
  3. package/dist/events-consumer.js +497 -50
  4. package/dist/private.d.ts +87 -18
  5. package/dist/private.d.ts.map +1 -1
  6. package/dist/private.js +118 -47
  7. package/dist/runtime/constants.d.ts +50 -1
  8. package/dist/runtime/constants.d.ts.map +1 -1
  9. package/dist/runtime/constants.js +59 -3
  10. package/dist/runtime/helpers.d.ts +212 -70
  11. package/dist/runtime/helpers.d.ts.map +1 -1
  12. package/dist/runtime/helpers.js +275 -86
  13. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -1
  14. package/dist/runtime/quickjs-assets.generated.js +2 -2
  15. package/dist/runtime/quickjs-entrypoint.d.ts +8 -9
  16. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
  17. package/dist/runtime/quickjs-entrypoint.js +172 -41
  18. package/dist/runtime/quickjs-runtime.d.ts +36 -1
  19. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  20. package/dist/runtime/quickjs-runtime.js +613 -185
  21. package/dist/runtime/quickjs-serde.d.ts +107 -0
  22. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  23. package/dist/runtime/quickjs-serde.js +2098 -0
  24. package/dist/runtime/replay-budget.d.ts +13 -14
  25. package/dist/runtime/replay-budget.d.ts.map +1 -1
  26. package/dist/runtime/replay-budget.js +20 -73
  27. package/dist/runtime/resume-hook.d.ts.map +1 -1
  28. package/dist/runtime/resume-hook.js +57 -13
  29. package/dist/runtime/resume-latency.d.ts +143 -0
  30. package/dist/runtime/resume-latency.d.ts.map +1 -0
  31. package/dist/runtime/resume-latency.js +153 -0
  32. package/dist/runtime/runs.d.ts.map +1 -1
  33. package/dist/runtime/runs.js +3 -4
  34. package/dist/runtime/start.js +2 -7
  35. package/dist/runtime/step-executor.d.ts +27 -12
  36. package/dist/runtime/step-executor.d.ts.map +1 -1
  37. package/dist/runtime/step-executor.js +105 -15
  38. package/dist/runtime/suspension-handler.d.ts +46 -8
  39. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  40. package/dist/runtime/suspension-handler.js +173 -15
  41. package/dist/runtime/world-compatibility.d.ts +16 -0
  42. package/dist/runtime/world-compatibility.d.ts.map +1 -1
  43. package/dist/runtime/world-compatibility.js +26 -5
  44. package/dist/runtime.d.ts.map +1 -1
  45. package/dist/runtime.js +911 -524
  46. package/dist/serialization/codec-devalue-vm.d.ts +7 -0
  47. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -1
  48. package/dist/serialization/codec-devalue-vm.js +12 -1
  49. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  50. package/dist/serialization/codec-devalue.js +15 -4
  51. package/dist/serialization/workflow-vm.d.ts +8 -3
  52. package/dist/serialization/workflow-vm.d.ts.map +1 -1
  53. package/dist/serialization/workflow-vm.js +9 -4
  54. package/dist/serialization.d.ts.map +1 -1
  55. package/dist/serialization.js +8 -3
  56. package/dist/step.js +2 -2
  57. package/dist/telemetry/semantic-conventions.d.ts +104 -0
  58. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  59. package/dist/telemetry/semantic-conventions.js +84 -1
  60. package/dist/test-support/orchestrator-context.d.ts +25 -0
  61. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  62. package/dist/test-support/orchestrator-context.js +91 -0
  63. package/dist/version.d.ts +1 -1
  64. package/dist/version.js +2 -2
  65. package/dist/vm/index.d.ts.map +1 -1
  66. package/dist/vm/index.js +9 -6
  67. package/dist/workflow/abort-controller.d.ts.map +1 -1
  68. package/dist/workflow/abort-controller.js +4 -6
  69. package/dist/workflow/attribute-dispatcher.js +2 -2
  70. package/dist/workflow/hook.js +2 -2
  71. package/dist/workflow/sleep.js +2 -2
  72. package/dist/workflow.d.ts +10 -0
  73. package/dist/workflow.d.ts.map +1 -1
  74. package/dist/workflow.js +94 -20
  75. package/docs/how-it-works/event-sourcing.mdx +11 -3
  76. package/package.json +7 -7
  77. package/dist/correlation-id.d.ts +0 -109
  78. package/dist/correlation-id.d.ts.map +0 -1
  79. package/dist/correlation-id.js +0 -139
  80. package/dist/serialization/vm-bundle-entry.d.ts +0 -12
  81. package/dist/serialization/vm-bundle-entry.d.ts.map +0 -1
  82. package/dist/serialization/vm-bundle-entry.js +0 -58
@@ -0,0 +1,153 @@
1
+ import * as Attribute from '../telemetry/semantic-conventions.js';
2
+ /**
3
+ * Rebuild tracking from a queue message's timing object. Returns undefined for
4
+ * a message that carries none (an older producer, or any non-hook delivery) —
5
+ * the caller then simply reports no TTR.
6
+ */
7
+ export function resumeTrackingFromMessage(timing, stepExecution) {
8
+ if (!timing)
9
+ return undefined;
10
+ if (!Number.isFinite(timing.resumeRequestedAtMs) ||
11
+ !Number.isFinite(timing.queuePublishRequestedAtMs)) {
12
+ return undefined;
13
+ }
14
+ return {
15
+ trigger: 'hook',
16
+ ...(timing.strategy === 'parallel' || timing.strategy === 'sequential'
17
+ ? { strategy: timing.strategy }
18
+ : {}),
19
+ resumeRequestedAtMs: timing.resumeRequestedAtMs,
20
+ queuePublishRequestedAtMs: timing.queuePublishRequestedAtMs,
21
+ // A dispatched step reads the resuming invocation's boundaries off the
22
+ // message; an inline one has them stamped locally by the caller, which
23
+ // overwrites this placeholder immediately after construction.
24
+ consumerStartedAtMs: timing.consumerStartedAtMs ?? Number.NaN,
25
+ ...(timing.replayStartedAtMs !== undefined
26
+ ? { replayStartedAtMs: timing.replayStartedAtMs }
27
+ : {}),
28
+ ...(timing.nextStepEncounteredAtMs !== undefined
29
+ ? { nextStepEncounteredAtMs: timing.nextStepEncounteredAtMs }
30
+ : {}),
31
+ ...(timing.setupSource === 'hook_preload' ||
32
+ timing.setupSource === 'run_started' ||
33
+ timing.setupSource === 'event_load'
34
+ ? { setupSource: timing.setupSource }
35
+ : {}),
36
+ stepExecution,
37
+ };
38
+ }
39
+ /**
40
+ * Serialize tracking back onto a queue message, for the case where the
41
+ * resuming invocation dispatches the next durable step to another invocation
42
+ * instead of running it inline. Returns undefined when the tracking is not
43
+ * complete enough to be worth forwarding.
44
+ */
45
+ export function resumeTimingForMessage(tracking) {
46
+ if (!tracking)
47
+ return undefined;
48
+ if (!Number.isFinite(tracking.consumerStartedAtMs))
49
+ return undefined;
50
+ return {
51
+ resumeRequestedAtMs: tracking.resumeRequestedAtMs,
52
+ queuePublishRequestedAtMs: tracking.queuePublishRequestedAtMs,
53
+ ...(tracking.strategy !== undefined ? { strategy: tracking.strategy } : {}),
54
+ consumerStartedAtMs: tracking.consumerStartedAtMs,
55
+ ...(tracking.replayStartedAtMs !== undefined
56
+ ? { replayStartedAtMs: tracking.replayStartedAtMs }
57
+ : {}),
58
+ ...(tracking.nextStepEncounteredAtMs !== undefined
59
+ ? { nextStepEncounteredAtMs: tracking.nextStepEncounteredAtMs }
60
+ : {}),
61
+ ...(tracking.setupSource !== undefined
62
+ ? { setupSource: tracking.setupSource }
63
+ : {}),
64
+ };
65
+ }
66
+ /**
67
+ * Validate that every required boundary is a finite epoch-ms value and that
68
+ * the whole sequence is non-decreasing. Returns undefined otherwise, which
69
+ * suppresses the metric entirely rather than reporting a phase that never
70
+ * happened or a negative duration.
71
+ */
72
+ function validateBoundaries(b) {
73
+ const ordered = [
74
+ b.resumeRequestedAtMs,
75
+ b.queuePublishRequestedAtMs,
76
+ b.consumerStartedAtMs,
77
+ b.replayStartedAtMs,
78
+ b.nextStepEncounteredAtMs,
79
+ b.stepClaimStartedAtMs,
80
+ ...(b.stepClaimCompletedAtMs !== undefined
81
+ ? [b.stepClaimCompletedAtMs]
82
+ : []),
83
+ b.stepCodeStartedAtMs,
84
+ ];
85
+ for (const value of ordered) {
86
+ if (typeof value !== 'number' || !Number.isFinite(value))
87
+ return undefined;
88
+ }
89
+ for (let i = 1; i < ordered.length; i++) {
90
+ if (ordered[i] < ordered[i - 1])
91
+ return undefined;
92
+ }
93
+ return ordered;
94
+ }
95
+ /**
96
+ * Compute the TTR span attributes for a step that is the first durable step
97
+ * following a hook resume. Returns undefined — emitting nothing at all — when
98
+ * any of these hold:
99
+ *
100
+ * - the invocation carries no resume tracking (not a hook resume, or an older
101
+ * queue message with no timing);
102
+ * - this is a retry (`attempt !== 1`), which measures a re-execution rather
103
+ * than the resumption;
104
+ * - a required boundary is missing, non-finite, or out of order.
105
+ *
106
+ * `step_claim_ms` is the one phase that may be individually omitted. Under
107
+ * optimistic inline start the `step_started` claim is deliberately NOT awaited
108
+ * before the body runs, so its completion instant does not exist yet at T7;
109
+ * rather than invent one, the claim phase is dropped and `step_prepare_ms`
110
+ * spans T5→T7. The sum-equals-total property holds either way.
111
+ */
112
+ export function computeResumeTtrAttributes(params) {
113
+ const { tracking } = params;
114
+ if (!tracking || params.attempt !== 1)
115
+ return undefined;
116
+ if (tracking.replayStartedAtMs === undefined ||
117
+ tracking.nextStepEncounteredAtMs === undefined ||
118
+ params.stepClaimStartedAtMs === undefined) {
119
+ return undefined;
120
+ }
121
+ const boundaries = {
122
+ resumeRequestedAtMs: tracking.resumeRequestedAtMs,
123
+ queuePublishRequestedAtMs: tracking.queuePublishRequestedAtMs,
124
+ consumerStartedAtMs: tracking.consumerStartedAtMs,
125
+ replayStartedAtMs: tracking.replayStartedAtMs,
126
+ nextStepEncounteredAtMs: tracking.nextStepEncounteredAtMs,
127
+ stepClaimStartedAtMs: params.stepClaimStartedAtMs,
128
+ stepClaimCompletedAtMs: params.stepClaimCompletedAtMs,
129
+ stepCodeStartedAtMs: params.stepCodeStartedAtMs,
130
+ };
131
+ if (!validateBoundaries(boundaries))
132
+ return undefined;
133
+ const { resumeRequestedAtMs: t0, queuePublishRequestedAtMs: t1, consumerStartedAtMs: t2, replayStartedAtMs: t3, nextStepEncounteredAtMs: t4, stepClaimStartedAtMs: t5, stepClaimCompletedAtMs: t6, stepCodeStartedAtMs: t7, } = boundaries;
134
+ return {
135
+ ...Attribute.ResumeTotalMs(t7 - t0),
136
+ ...Attribute.ResumeProducerPrepMs(t1 - t0),
137
+ ...Attribute.ResumeQueueDeliveryMs(t2 - t1),
138
+ ...Attribute.ResumeSetupMs(t3 - t2),
139
+ ...Attribute.ResumeReplayMs(t4 - t3),
140
+ ...Attribute.ResumeStepDispatchMs(t5 - t4),
141
+ ...(t6 !== undefined ? Attribute.ResumeStepClaimMs(t6 - t5) : {}),
142
+ ...Attribute.ResumeStepPrepareMs(t7 - (t6 ?? t5)),
143
+ ...Attribute.ResumeTrigger(tracking.trigger),
144
+ ...(tracking.strategy !== undefined
145
+ ? Attribute.ResumeStrategy(tracking.strategy)
146
+ : {}),
147
+ ...(tracking.setupSource !== undefined
148
+ ? Attribute.ResumeSetupSource(tracking.setupSource)
149
+ : {}),
150
+ ...Attribute.ResumeStepExecution(tracking.stepExecution),
151
+ };
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdW1lLWxhdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9yZXN1bWUtbGF0ZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBNEdsRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxNQUFvQyxFQUNwQyxhQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLElBQ0UsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUM1QyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQ2xELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssWUFBWTtZQUNwRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjtRQUMvQyx5QkFBeUIsRUFBRSxNQUFNLENBQUMseUJBQXlCO1FBQzNELHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsOERBQThEO1FBQzlELG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMsR0FBRztRQUM3RCxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixLQUFLLFNBQVM7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ2pELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLENBQUMs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cG9ydCB0eXBlIHsgSG9va1Jlc3VtZVRpbWluZyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgKiBhcyBBdHRyaWJ1dGUgZnJvbSAnLi4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcblxuLyoqXG4gKiBIb29rLXRyaWdnZXJlZCB0aW1lLXRvLXJlc3VtZSAoVFRSKTogd2FsbC1jbG9jayBmcm9tIGVudHJ5IGludG9cbiAqIGByZXN1bWVIb29rKClgIChUMCkgdG8gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIG5leHQgZHVyYWJsZSBzdGVwIChUNyksIHBsdXMgYVxuICogZGVjb21wb3NpdGlvbiBpbnRvIG5vbi1vdmVybGFwcGluZyBwaGFzZXMgdGhhdCBzdW0gZXhhY3RseSB0byBpdC5cbiAqXG4gKiBgYGB0ZXh0XG4gKiBUMCByZXN1bWVIb29rKCkgZW50ZXJlZFxuICogICAgICBwcm9kdWNlcl9wcmVwICAg4oCUIGhvb2sgbG9va3VwLCBzZXJpYWxpemF0aW9uLCBlbmNyeXB0aW9uXG4gKiBUMSBxdWV1ZSBwdWJsaXNoIHJlcXVlc3RlZFxuICogICAgICBxdWV1ZV9kZWxpdmVyeSAg4oCUIG5ldHdvcmsgKyBWUVMgZGVsaXZlcnkgKGluY2wuIGFueSBhZmZpbml0eSByZS1yb3V0ZSlcbiAqIFQyIGZpbmFsIGNvbnN1bWVyJ3MgcXVldWUgaGFuZGxlciBlbnRlcmVkXG4gKiAgICAgIHJlc3VtZV9zZXR1cCAgICDigJQgYWZmaW5pdHkgY2hlY2ssIGhvb2tfcmVjZWl2ZWQgcmUtZW5zdXJlLCByZXBsYXkgcHJlbG9hZFxuICogVDMgcmVwbGF5IGJlZ2luc1xuICogICAgICByZXBsYXkgICAgICAgICAg4oCUIFZNL3Nlc3Npb24gY3JlYXRpb24gYW5kIHdvcmtmbG93IHJlcGxheVxuICogVDQgbmV4dCBkdXJhYmxlIHN0ZXAgZW5jb3VudGVyZWRcbiAqICAgICAgc3RlcF9kaXNwYXRjaCAgIOKAlCBzdXNwZW5zaW9uIGhhbmRsaW5nLCBpbmxpbmUgYmF0Y2ggb3IgcXVldWUgZGlzcGF0Y2hcbiAqIFQ1IHN0ZXBfc3RhcnRlZCByZXF1ZXN0IGJlZ2luc1xuICogICAgICBzdGVwX2NsYWltICAgICAg4oCUIHRoZSBjbGFpbSByb3VuZCB0cmlwXG4gKiBUNiBzdGVwX3N0YXJ0ZWQgcmVzcG9uc2UgcmV0dXJuZWRcbiAqICAgICAgc3RlcF9wcmVwYXJlICAgIOKAlCBrZXkgcmVzb2x1dGlvbiwgYXJndW1lbnQgaHlkcmF0aW9uLCBjb250ZXh0IHNldHVwXG4gKiBUNyBpbW1lZGlhdGVseSBiZWZvcmUgc3RlcEZuLmFwcGx5KClcbiAqIGBgYFxuICpcbiAqIFRoZSBwcm9kdWNlcidzIGRpcmVjdCBgaG9va19yZWNlaXZlZGAgUE9TVCByYWNlcyB0aGUgcXVldWUgcHVibGlzaCBvbiB0aGVcbiAqIHBhcmFsbGVsIGZhc3QgcGF0aCwgc28gaXQgZGVsaWJlcmF0ZWx5IGhhcyBubyBwaGFzZSBvZiBpdHMgb3duIOKAlCB0aGUgdHdvXG4gKiBvdmVybGFwLCBhbmQgcmVwcmVzZW50aW5nIGJvdGggYXMgYWRkaXRpdmUgcGhhc2VzIHdvdWxkIGRvdWJsZS1jb3VudC4gSXRcbiAqIHJlbWFpbnMgdmlzaWJsZSBhcyBhIGNvbnRleHR1YWwgc3BhbiAoYGhvb2sucmVzdW1lYCkuXG4gKlxuICogVDAvVDEgYXJlIHN0YW1wZWQgb24gdGhlIHByb2R1Y2VyJ3MgbWFjaGluZSBhbmQgVDIuLlQ3IG9uIHRoZSBjb25zdW1lcidzLCBzb1xuICogdGhlIG1lYXN1cmVtZW50IGlzIHN1YmplY3QgdG8gY3Jvc3MtbWFjaGluZSBjbG9jayBza2V3LiBSYXRoZXIgdGhhbiBjbGFtcFxuICogKHdoaWNoIHdvdWxkIGJyZWFrIHRoZSBzdW0tZXF1YWxzLXRvdGFsIHByb3BlcnR5IHRoaXMgZGVjb21wb3NpdGlvbiBleGlzdHNcbiAqIGZvciksIGEgbm9uLW1vbm90b25pYyBib3VuZGFyeSBzZXQgZHJvcHMgdGhlIHdob2xlIHNhbXBsZSDigJQgc2VlXG4gKiB7QGxpbmsgY29tcHV0ZVJlc3VtZVR0ckF0dHJpYnV0ZXN9LlxuICovXG5cbi8qKiBXaGF0IGNhdXNlZCB0aGUgcmVzdW1wdGlvbiBiZWluZyBtZWFzdXJlZC4gT25seSBob29rcyBhcmUgbWVhc3VyZWQgdG9kYXkuICovXG5leHBvcnQgdHlwZSBSZXN1bWVUcmlnZ2VyID0gJ2hvb2snO1xuXG4vKiogV2hpY2ggYHJlc3VtZUhvb2soKWAgZGlzcGF0Y2ggcGF0aCBwcm9kdWNlZCB0aGlzIHJlc3VtZS4gKi9cbmV4cG9ydCB0eXBlIFJlc3VtZVN0cmF0ZWd5ID0gJ3BhcmFsbGVsJyB8ICdzZXF1ZW50aWFsJztcblxuLyoqXG4gKiBIb3cgdGhlIGNvbnN1bWluZyBpbnZvY2F0aW9uIGluaXRpYWxpemVkIGl0cyByZXBsYXkgc3RhdGU6XG4gKlxuICogLSBgaG9va19wcmVsb2FkYCDigJQgdGhlIGhvaXN0ZWQgYGhvb2tfcmVjZWl2ZWRgIHdyaXRlIHJldHVybmVkIGEgdXNhYmxlXG4gKiAgIHJlcGxheSBwcmVsb2FkLCBzbyBuZWl0aGVyIGBydW5fc3RhcnRlZGAgbm9yIHRoZSBpbml0aWFsIGBldmVudHMubGlzdGAgcmFuLlxuICogLSBgcnVuX3N0YXJ0ZWRgIOKAlCB0aGUgZ2VuZXJpYyBgcnVuX3N0YXJ0ZWRgIHNldHVwIHJhbiAoaW5jbHVkaW5nIHRoZSBmYXN0XG4gKiAgIHBhdGgncyBmYWxsYmFjaywgd2hlcmUgdGhlIGhvaXN0ZWQgd3JpdGUgc3VjY2VlZGVkIGJ1dCByZXR1cm5lZCBubyB1c2FibGVcbiAqICAgcHJlbG9hZCkuXG4gKiAtIGBldmVudF9sb2FkYCDigJQgbmVpdGhlciBzZXR1cCByYW4gYmVjYXVzZSB0aGUgcnVuIGFycml2ZWQgYWxyZWFkeSBsb2FkZWQsXG4gKiAgIHNvIHNldHVwIHdhcyBhIHBsYWluIGV2ZW50IGxvYWQuIE5vIGN1cnJlbnQgcGF0aCBwcm9kdWNlcyBpdCAodGhlIG9uZVxuICogICBwcmVsb2FkZWQtcnVuIHBhdGgsIHRoZSBiYWNrZ3JvdW5kLXN0ZXAgZmFsbC10aHJvdWdoLCBjb25zdW1lcyB0aGVcbiAqICAgdHJhY2tpbmcgb24gaXRzIG93biBzdGVwIGZpcnN0KTsgaXQgaXMgdGhlIGhvbmVzdCBkZWZhdWx0IHJhdGhlciB0aGFuIGFcbiAqICAgbGl2ZSB2YWx1ZSwgYW5kIGtlZXBzIHRoZSBkaW1lbnNpb24gdG90YWwgaWYgc3VjaCBhIHBhdGggaXMgYWRkZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VtZVNldHVwU291cmNlID0gJ2hvb2tfcHJlbG9hZCcgfCAncnVuX3N0YXJ0ZWQnIHwgJ2V2ZW50X2xvYWQnO1xuXG4vKiogV2hldGhlciB0aGUgbWVhc3VyZWQgc3RlcCByYW4gaW4gdGhlIHJlc3VtaW5nIGludm9jYXRpb24gb3IgYSBxdWV1ZWQgb25lLiAqL1xuZXhwb3J0IHR5cGUgUmVzdW1lU3RlcEV4ZWN1dGlvbiA9ICdpbmxpbmUnIHwgJ2Rpc3BhdGNoZWQnO1xuXG4vKipcbiAqIFRoZSByZXN1bWUgYm91bmRhcmllcyBvYnNlcnZlZCBzbyBmYXIsIHRocmVhZGVkIGZyb20gdGhlIHF1ZXVlIGhhbmRsZXIgaW50b1xuICogYGV4ZWN1dGVTdGVwYC4gUHJvZHVjZXIgZmllbGRzIGFycml2ZSBvbiB0aGUgcXVldWUgbWVzc2FnZVxuICogKHtAbGluayBIb29rUmVzdW1lVGltaW5nfSk7IGNvbnN1bWVyIGZpZWxkcyBhcmUgc3RhbXBlZCBieSB0aGUgaW52b2NhdGlvblxuICogdGhhdCByZXBsYXlzIHRoZSByZXN1bWUuXG4gKlxuICogVGhlIHJ1bnRpbWUgaG9sZHMgYXQgbW9zdCBvbmUgb2YgdGhlc2UgcGVyIGludm9jYXRpb24gYW5kIENPTlNVTUVTIGl0IHdoZW5cbiAqIGl0IGhhbmRzIGl0IHRvIHRoZSBleGVjdXRpb24gdGhhdCB3aWxsIGF0dGVtcHQgdGhlIG5leHQgZHVyYWJsZSBzdGVwLCBzbyBhXG4gKiBsYXRlciBzdGVwIGluIHRoZSBzYW1lIGludm9jYXRpb24g4oCUIG9yIGEgcmV0cnkgb2YgdGhlIHNhbWUgc3RlcCDigJQgbmV2ZXJcbiAqIHJlLXJlcG9ydHMgdGhlIHNhbWUgcmVzdW1wdGlvbi4gV2l0aGluIG9uZSBpbmxpbmUgYmF0Y2ggdGhlIG9iamVjdCBpc1xuICogc2hhcmVkIGJ5IGV2ZXJ5IHN0ZXAgYW5kIHRoZSB7QGxpbmsgUmVzdW1lVHRyVHJhY2tpbmcucmVwb3J0ZWR9IGxhdGNoIHBpY2tzXG4gKiB0aGUgc2luZ2xlIHJlcG9ydGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VtZVR0clRyYWNraW5nIHtcbiAgdHJpZ2dlcjogUmVzdW1lVHJpZ2dlcjtcbiAgLyoqIEFic2VudCBvbmx5IGlmIGFuIG9sZGVyIHByb2R1Y2VyIG9taXR0ZWQgaXQgZnJvbSB0aGUgcXVldWUgbWVzc2FnZS4gKi9cbiAgc3RyYXRlZ3k/OiBSZXN1bWVTdHJhdGVneTtcbiAgLyoqIFQwIOKAlCBlbnRyeSBpbnRvIGByZXN1bWVIb29rKClgLiAqL1xuICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMSDigJQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBxdWV1ZSBwdWJsaXNoIHdhcyByZXF1ZXN0ZWQuICovXG4gIHF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFQyIOKAlCBlbnRyeSBpbnRvIHRoZSBGSU5BTCBjb25zdW1lcidzIHF1ZXVlIGhhbmRsZXIuIEEgZGVsaXZlcnkgdGhhdFxuICAgKiByZS1yb3V0ZXMgZm9yIGRlcGxveW1lbnQgYWZmaW5pdHkgbmV2ZXIgc3RhbXBzIHRoaXMsIHNvIHRoZSByZS1yb3V0ZWQgaG9wXG4gICAqIHN0YXlzIGluc2lkZSBgcXVldWVfZGVsaXZlcnlgIHdoZXJlIGl0IGJlbG9uZ3MuXG4gICAqL1xuICBjb25zdW1lclN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMyDigJQgdGhpcyBpbnZvY2F0aW9uJ3MgZmlyc3QgcmVwbGF5IHBhc3MuICovXG4gIHJlcGxheVN0YXJ0ZWRBdE1zPzogbnVtYmVyO1xuICAvKiogVDQg4oCUIHJlcGxheSBmaXJzdCBlbmNvdW50ZXJlZCBhIGR1cmFibGUgc3RlcCBhZnRlciB0aGUgcmVzdW1lLiAqL1xuICBuZXh0U3RlcEVuY291bnRlcmVkQXRNcz86IG51bWJlcjtcbiAgc2V0dXBTb3VyY2U/OiBSZXN1bWVTZXR1cFNvdXJjZTtcbiAgc3RlcEV4ZWN1dGlvbjogUmVzdW1lU3RlcEV4ZWN1dGlvbjtcbiAgLyoqXG4gICAqIE9uZS1zaG90IGxhdGNoLCBzZXQgYnkgdGhlIHN0ZXAgZXhlY3V0b3Igb25jZSB0aGlzIHJlc3VtcHRpb24gaGFzIGJlZW5cbiAgICogcmVwb3J0ZWQuIEV2ZXJ5IHN0ZXAgb2YgYW4gaW5saW5lIGJhdGNoIGlzIGhhbmRlZCB0aGUgU0FNRSB0cmFja2luZ1xuICAgKiBvYmplY3QsIHNvIHRoZSBmaXJzdCBvbmUgdG8gcmVhY2ggdXNlciBjb2RlIHRha2VzIHRoZSBtZWFzdXJlbWVudCBhbmQgdGhlXG4gICAqIHJlc3Qgc2VlIHRoaXMgYW5kIHNraXAg4oCUIG9uZSByZXN1bXB0aW9uLCBvbmUgc2FtcGxlLCB3aXRob3V0IHBpbm5pbmcgdGhlXG4gICAqIHNhbXBsZSB0byBhIHN0ZXAgdGhhdCBtYXkgbG9zZSBpdHMgY3JlYXRlLWNsYWltIGFuZCBuZXZlciBydW4uXG4gICAqXG4gICAqIERlbGliZXJhdGVseSBub3QgcGFydCBvZiB7QGxpbmsgSG9va1Jlc3VtZVRpbWluZ306IGl0IGlzIGludm9jYXRpb24tbG9jYWxcbiAgICogc3RhdGUsIGFuZCBhIHF1ZXVlIG1lc3NhZ2UgY2FycmllcyB0aGUgYm91bmRhcmllcywgbm90IHRoZSBjbGFpbS5cbiAgICovXG4gIHJlcG9ydGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWJ1aWxkIHRyYWNraW5nIGZyb20gYSBxdWV1ZSBtZXNzYWdlJ3MgdGltaW5nIG9iamVjdC4gUmV0dXJucyB1bmRlZmluZWQgZm9yXG4gKiBhIG1lc3NhZ2UgdGhhdCBjYXJyaWVzIG5vbmUgKGFuIG9sZGVyIHByb2R1Y2VyLCBvciBhbnkgbm9uLWhvb2sgZGVsaXZlcnkpIOKAlFxuICogdGhlIGNhbGxlciB0aGVuIHNpbXBseSByZXBvcnRzIG5vIFRUUi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3VtZVRyYWNraW5nRnJvbU1lc3NhZ2UoXG4gIHRpbWluZzogSG9va1Jlc3VtZVRpbWluZyB8IHVuZGVmaW5lZCxcbiAgc3RlcEV4ZWN1dGlvbjogUmVzdW1lU3RlcEV4ZWN1dGlvblxuKTogUmVzdW1lVHRyVHJhY2tpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXRpbWluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgICFOdW1iZXIuaXNGaW5pdGUodGltaW5nLnJlc3VtZVJlcXVlc3RlZEF0TXMpIHx8XG4gICAgIU51bWJlci5pc0Zpbml0ZSh0aW1pbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcylcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRyaWdnZXI6ICdob29rJyxcbiAgICAuLi4odGltaW5nLnN0cmF0ZWd5ID09PSAncGFyYWxsZWwnIHx8IHRpbWluZy5zdHJhdGVneSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICA/IHsgc3RyYXRlZ3k6IHRpbWluZy5zdHJhdGVneSB9XG4gICAgICA6IHt9KSxcbiAgICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiB0aW1pbmcucmVzdW1lUmVxdWVzdGVkQXRNcyxcbiAgICBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiB0aW1pbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcyxcbiAgICAvLyBBIGRpc3BhdGNoZWQgc3RlcCByZWFkcyB0aGUgcmVzdW1pbmcgaW52b2NhdGlvbidzIGJvdW5kYXJpZXMgb2ZmIHRoZVxuICAgIC8vIG1lc3NhZ2U7IGFuIGlubGluZSBvbmUgaGFzIHRoZW0gc3RhbXBlZCBsb2NhbGx5IGJ5IHRoZSBjYWxsZXIsIHdoaWNoXG4gICAgLy8gb3ZlcndyaXRlcyB0aGlzIHBsYWNlaG9sZGVyIGltbWVkaWF0ZWx5IGFmdGVyIGNvbnN0cnVjdGlvbi5cbiAgICBjb25zdW1lclN0YXJ0ZWRBdE1zOiB0aW1pbmcuY29uc3VtZXJTdGFydGVkQXRNcyA/PyBOdW1iZXIuTmFOLFxuICAgIC4uLih0aW1pbmcucmVwbGF5U3RhcnRlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHJlcGxheVN0YXJ0ZWRBdE1zOiB0aW1pbmcucmVwbGF5U3RhcnRlZEF0TXMgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKHRpbWluZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHRpbWluZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odGltaW5nLnNldHVwU291cmNlID09PSAnaG9va19wcmVsb2FkJyB8fFxuICAgIHRpbWluZy5zZXR1cFNvdXJjZSA9PT0gJ3J1bl9zdGFydGVkJyB8fFxuICAgIHRpbWluZy5zZXR1cFNvdXJjZSA9PT0gJ2V2ZW50X2xvYWQnXG4gICAgICA/IHsgc2V0dXBTb3VyY2U6IHRpbWluZy5zZXR1cFNvdXJjZSB9XG4gICAgICA6IHt9KSxcbiAgICBzdGVwRXhlY3V0aW9uLFxuICB9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0cmFja2luZyBiYWNrIG9udG8gYSBxdWV1ZSBtZXNzYWdlLCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlXG4gKiByZXN1bWluZyBpbnZvY2F0aW9uIGRpc3BhdGNoZXMgdGhlIG5leHQgZHVyYWJsZSBzdGVwIHRvIGFub3RoZXIgaW52b2NhdGlvblxuICogaW5zdGVhZCBvZiBydW5uaW5nIGl0IGlubGluZS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgdHJhY2tpbmcgaXMgbm90XG4gKiBjb21wbGV0ZSBlbm91Z2ggdG8gYmUgd29ydGggZm9yd2FyZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3VtZVRpbWluZ0Zvck1lc3NhZ2UoXG4gIHRyYWNraW5nOiBSZXN1bWVUdHJUcmFja2luZyB8IHVuZGVmaW5lZFxuKTogSG9va1Jlc3VtZVRpbWluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdHJhY2tpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRyYWNraW5nLmNvbnN1bWVyU3RhcnRlZEF0TXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIHJlc3VtZVJlcXVlc3RlZEF0TXM6IHRyYWNraW5nLnJlc3VtZVJlcXVlc3RlZEF0TXMsXG4gICAgcXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNczogdHJhY2tpbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcyxcbiAgICAuLi4odHJhY2tpbmcuc3RyYXRlZ3kgIT09IHVuZGVmaW5lZCA/IHsgc3RyYXRlZ3k6IHRyYWNraW5nLnN0cmF0ZWd5IH0gOiB7fSksXG4gICAgY29uc3VtZXJTdGFydGVkQXRNczogdHJhY2tpbmcuY29uc3VtZXJTdGFydGVkQXRNcyxcbiAgICAuLi4odHJhY2tpbmcucmVwbGF5U3RhcnRlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHJlcGxheVN0YXJ0ZWRBdE1zOiB0cmFja2luZy5yZXBsYXlTdGFydGVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odHJhY2tpbmcubmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IG5leHRTdGVwRW5jb3VudGVyZWRBdE1zOiB0cmFja2luZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odHJhY2tpbmcuc2V0dXBTb3VyY2UgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHNldHVwU291cmNlOiB0cmFja2luZy5zZXR1cFNvdXJjZSB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIEV2ZXJ5IGJvdW5kYXJ5IHRoZSBlbWlzc2lvbiBnYXRlIHJlcXVpcmVzLCBwbHVzIHRoZSBvcHRpb25hbCBjbGFpbSBlbmQuICovXG5pbnRlcmZhY2UgUmVzdW1lQm91bmRhcmllcyB7XG4gIC8qKiBUMCAqLyByZXN1bWVSZXF1ZXN0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMSAqLyBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMiAqLyBjb25zdW1lclN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMyAqLyByZXBsYXlTdGFydGVkQXRNczogbnVtYmVyO1xuICAvKiogVDQgKi8gbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQ1ICovIHN0ZXBDbGFpbVN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUNiDigJQgYWJzZW50IG9uIHRoZSBvcHRpbWlzdGljLXN0YXJ0IHBhdGg7IHNlZSBiZWxvdy4gKi9cbiAgc3RlcENsYWltQ29tcGxldGVkQXRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogVDcgKi8gc3RlcENvZGVTdGFydGVkQXRNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgZXZlcnkgcmVxdWlyZWQgYm91bmRhcnkgaXMgYSBmaW5pdGUgZXBvY2gtbXMgdmFsdWUgYW5kIHRoYXRcbiAqIHRoZSB3aG9sZSBzZXF1ZW5jZSBpcyBub24tZGVjcmVhc2luZy4gUmV0dXJucyB1bmRlZmluZWQgb3RoZXJ3aXNlLCB3aGljaFxuICogc3VwcHJlc3NlcyB0aGUgbWV0cmljIGVudGlyZWx5IHJhdGhlciB0aGFuIHJlcG9ydGluZyBhIHBoYXNlIHRoYXQgbmV2ZXJcbiAqIGhhcHBlbmVkIG9yIGEgbmVnYXRpdmUgZHVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm91bmRhcmllcyhcbiAgYjogUmVzdW1lQm91bmRhcmllc1xuKTogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBvcmRlcmVkID0gW1xuICAgIGIucmVzdW1lUmVxdWVzdGVkQXRNcyxcbiAgICBiLnF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXMsXG4gICAgYi5jb25zdW1lclN0YXJ0ZWRBdE1zLFxuICAgIGIucmVwbGF5U3RhcnRlZEF0TXMsXG4gICAgYi5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyxcbiAgICBiLnN0ZXBDbGFpbVN0YXJ0ZWRBdE1zLFxuICAgIC4uLihiLnN0ZXBDbGFpbUNvbXBsZXRlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyBbYi5zdGVwQ2xhaW1Db21wbGV0ZWRBdE1zXVxuICAgICAgOiBbXSksXG4gICAgYi5zdGVwQ29kZVN0YXJ0ZWRBdE1zLFxuICBdO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9yZGVyZWQpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBmb3IgKGxldCBpID0gMTsgaSA8IG9yZGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3JkZXJlZFtpXSA8IG9yZGVyZWRbaSAtIDFdKSByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBvcmRlcmVkO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIFRUUiBzcGFuIGF0dHJpYnV0ZXMgZm9yIGEgc3RlcCB0aGF0IGlzIHRoZSBmaXJzdCBkdXJhYmxlIHN0ZXBcbiAqIGZvbGxvd2luZyBhIGhvb2sgcmVzdW1lLiBSZXR1cm5zIHVuZGVmaW5lZCDigJQgZW1pdHRpbmcgbm90aGluZyBhdCBhbGwg4oCUIHdoZW5cbiAqIGFueSBvZiB0aGVzZSBob2xkOlxuICpcbiAqIC0gdGhlIGludm9jYXRpb24gY2FycmllcyBubyByZXN1bWUgdHJhY2tpbmcgKG5vdCBhIGhvb2sgcmVzdW1lLCBvciBhbiBvbGRlclxuICogICBxdWV1ZSBtZXNzYWdlIHdpdGggbm8gdGltaW5nKTtcbiAqIC0gdGhpcyBpcyBhIHJldHJ5IChgYXR0ZW1wdCAhPT0gMWApLCB3aGljaCBtZWFzdXJlcyBhIHJlLWV4ZWN1dGlvbiByYXRoZXJcbiAqICAgdGhhbiB0aGUgcmVzdW1wdGlvbjtcbiAqIC0gYSByZXF1aXJlZCBib3VuZGFyeSBpcyBtaXNzaW5nLCBub24tZmluaXRlLCBvciBvdXQgb2Ygb3JkZXIuXG4gKlxuICogYHN0ZXBfY2xhaW1fbXNgIGlzIHRoZSBvbmUgcGhhc2UgdGhhdCBtYXkgYmUgaW5kaXZpZHVhbGx5IG9taXR0ZWQuIFVuZGVyXG4gKiBvcHRpbWlzdGljIGlubGluZSBzdGFydCB0aGUgYHN0ZXBfc3RhcnRlZGAgY2xhaW0gaXMgZGVsaWJlcmF0ZWx5IE5PVCBhd2FpdGVkXG4gKiBiZWZvcmUgdGhlIGJvZHkgcnVucywgc28gaXRzIGNvbXBsZXRpb24gaW5zdGFudCBkb2VzIG5vdCBleGlzdCB5ZXQgYXQgVDc7XG4gKiByYXRoZXIgdGhhbiBpbnZlbnQgb25lLCB0aGUgY2xhaW0gcGhhc2UgaXMgZHJvcHBlZCBhbmQgYHN0ZXBfcHJlcGFyZV9tc2BcbiAqIHNwYW5zIFQ14oaSVDcuIFRoZSBzdW0tZXF1YWxzLXRvdGFsIHByb3BlcnR5IGhvbGRzIGVpdGhlciB3YXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUmVzdW1lVHRyQXR0cmlidXRlcyhwYXJhbXM6IHtcbiAgdHJhY2tpbmc6IFJlc3VtZVR0clRyYWNraW5nIHwgdW5kZWZpbmVkO1xuICAvKiogVGhlIGF0dGVtcHQgbnVtYmVyIG9mIHRoZSBleGVjdXRpb24gYWJvdXQgdG8gcnVuLiAqL1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIC8qKiBUNSDigJQgYERhdGUubm93KClgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgYHN0ZXBfc3RhcnRlZGAgcmVxdWVzdC4gKi9cbiAgc3RlcENsYWltU3RhcnRlZEF0TXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIFQ2IOKAlCBgRGF0ZS5ub3coKWAgb25jZSB0aGUgYHN0ZXBfc3RhcnRlZGAgcmVzcG9uc2UgcmV0dXJuZWQuICovXG4gIHN0ZXBDbGFpbUNvbXBsZXRlZEF0TXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIFQ3IOKAlCBgRGF0ZS5ub3coKWAgaW1tZWRpYXRlbHkgYmVmb3JlIGBzdGVwRm4uYXBwbHkoKWAuICovXG4gIHN0ZXBDb2RlU3RhcnRlZEF0TXM6IG51bWJlcjtcbn0pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB0cmFja2luZyB9ID0gcGFyYW1zO1xuICBpZiAoIXRyYWNraW5nIHx8IHBhcmFtcy5hdHRlbXB0ICE9PSAxKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdHJhY2tpbmcucmVwbGF5U3RhcnRlZEF0TXMgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRyYWNraW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zID09PSB1bmRlZmluZWQgfHxcbiAgICBwYXJhbXMuc3RlcENsYWltU3RhcnRlZEF0TXMgPT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgYm91bmRhcmllczogUmVzdW1lQm91bmRhcmllcyA9IHtcbiAgICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiB0cmFja2luZy5yZXN1bWVSZXF1ZXN0ZWRBdE1zLFxuICAgIHF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXM6IHRyYWNraW5nLnF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXMsXG4gICAgY29uc3VtZXJTdGFydGVkQXRNczogdHJhY2tpbmcuY29uc3VtZXJTdGFydGVkQXRNcyxcbiAgICByZXBsYXlTdGFydGVkQXRNczogdHJhY2tpbmcucmVwbGF5U3RhcnRlZEF0TXMsXG4gICAgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHRyYWNraW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zLFxuICAgIHN0ZXBDbGFpbVN0YXJ0ZWRBdE1zOiBwYXJhbXMuc3RlcENsYWltU3RhcnRlZEF0TXMsXG4gICAgc3RlcENsYWltQ29tcGxldGVkQXRNczogcGFyYW1zLnN0ZXBDbGFpbUNvbXBsZXRlZEF0TXMsXG4gICAgc3RlcENvZGVTdGFydGVkQXRNczogcGFyYW1zLnN0ZXBDb2RlU3RhcnRlZEF0TXMsXG4gIH07XG4gIGlmICghdmFsaWRhdGVCb3VuZGFyaWVzKGJvdW5kYXJpZXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHtcbiAgICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiB0MCxcbiAgICBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiB0MSxcbiAgICBjb25zdW1lclN0YXJ0ZWRBdE1zOiB0MixcbiAgICByZXBsYXlTdGFydGVkQXRNczogdDMsXG4gICAgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHQ0LFxuICAgIHN0ZXBDbGFpbVN0YXJ0ZWRBdE1zOiB0NSxcbiAgICBzdGVwQ2xhaW1Db21wbGV0ZWRBdE1zOiB0NixcbiAgICBzdGVwQ29kZVN0YXJ0ZWRBdE1zOiB0NyxcbiAgfSA9IGJvdW5kYXJpZXM7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lVG90YWxNcyh0NyAtIHQwKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lUHJvZHVjZXJQcmVwTXModDEgLSB0MCksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVF1ZXVlRGVsaXZlcnlNcyh0MiAtIHQxKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lU2V0dXBNcyh0MyAtIHQyKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lUmVwbGF5TXModDQgLSB0MyksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVN0ZXBEaXNwYXRjaE1zKHQ1IC0gdDQpLFxuICAgIC4uLih0NiAhPT0gdW5kZWZpbmVkID8gQXR0cmlidXRlLlJlc3VtZVN0ZXBDbGFpbU1zKHQ2IC0gdDUpIDoge30pLFxuICAgIC4uLkF0dHJpYnV0ZS5SZXN1bWVTdGVwUHJlcGFyZU1zKHQ3IC0gKHQ2ID8/IHQ1KSksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVRyaWdnZXIodHJhY2tpbmcudHJpZ2dlciksXG4gICAgLi4uKHRyYWNraW5nLnN0cmF0ZWd5ICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXR0cmlidXRlLlJlc3VtZVN0cmF0ZWd5KHRyYWNraW5nLnN0cmF0ZWd5KVxuICAgICAgOiB7fSksXG4gICAgLi4uKHRyYWNraW5nLnNldHVwU291cmNlICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXR0cmlidXRlLlJlc3VtZVNldHVwU291cmNlKHRyYWNraW5nLnNldHVwU291cmNlKVxuICAgICAgOiB7fSksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVN0ZXBFeGVjdXRpb24odHJhY2tpbmcuc3RlcEV4ZWN1dGlvbiksXG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/runtime/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,4BAA4B,EAIjC,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,4BAA4B,CAAC,CA8EvC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAoG1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CASrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/runtime/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,4BAA4B,EAIjC,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,4BAA4B,CAAC,CA8EvC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAmG1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CASrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
@@ -175,14 +175,13 @@ export async function wakeUpRun(world, runId, options) {
175
175
  try {
176
176
  const run = await world.runs.get(runId, { resolveData: 'none' });
177
177
  const compatMode = isLegacySpecVersion(run.specVersion);
178
- // Paginate through all events to ensure we don't miss any sleeps
179
- // in long-running workflows with more than 1000 events.
178
+ // Paginate through all events to ensure we don't miss any sleeps.
180
179
  const allEvents = [];
181
180
  let cursor = null;
182
181
  do {
183
182
  const eventsResult = await world.events.list({
184
183
  runId,
185
- pagination: { limit: 1000, ...(cursor ? { cursor } : {}) },
184
+ pagination: { sortOrder: 'asc', ...(cursor ? { cursor } : {}) },
186
185
  resolveData: 'none',
187
186
  });
188
187
  allEvents.push(...eventsResult.data);
@@ -271,4 +270,4 @@ export async function listStreams(world, runId) {
271
270
  throw new Error(`Failed to list streams for run ${runId}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
272
271
  }
273
272
  }
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3J1bnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUNMLHVCQUF1QixFQUl2QixtQkFBbUIsRUFDbkIsbUJBQW1CLEdBRXBCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4RG5DLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFhLEVBQWEsRUFBRTtJQUN6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQVksRUFDWixLQUFhLEVBQ2IsVUFBOEIsRUFBRTtJQUVoQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsTUFBTTtZQUMxQixDQUFDLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7WUFDcEMsQ0FBQyxD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Q0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUNvbmZsaWN0RXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7XG4gIEJVTEtfQ0FOQ0VMX01BWF9SVU5fSURTLFxuICB0eXBlIEJ1bGtDYW5jZWxXb3JrZmxvd1J1blJlc3VsdCxcbiAgdHlwZSBCdWxrQ2FuY2VsV29ya2Zsb3dSdW5zUmVzdWx0LFxuICB0eXBlIEV2ZW50LFxuICBpc0xlZ2FjeVNwZWNWZXJzaW9uLFxuICBTUEVDX1ZFUlNJT05fTEVHQUNZLFxuICB0eXBlIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZGVyaXZlUnVuUGF5bG9hZEtleXMgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93QXJndW1lbnRzIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1F1ZXVlTmFtZSB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBzdGFydCB9IGZyb20gJy4vc3RhcnQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3JlYXRlUnVuT3B0aW9ucyB7XG4gIGRlcGxveW1lbnRJZD86IHN0cmluZztcbiAgc3BlY1ZlcnNpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBRdWV1ZSBuYW1lc3BhY2Ugb2YgdGhlIHRhcmdldCBkZXBsb3ltZW50IChlLmcuIGAnZXZlJ2AgZm9yIHRvcGljcyBsaWtlXG4gICAqIGBfX2V2ZV93a2Zfd29ya2Zsb3dfKmApLiBGYWxscyBiYWNrIHRvIGBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0VgIGluXG4gICAqIHRoZSBjYWxsaW5nIHByb2Nlc3MuIENyb3NzLWNvbnRleHQgY2FsbGVycyAoZS5nLiB0aGUgb2JzZXJ2YWJpbGl0eVxuICAgKiBkYXNoYm9hcmQpIG11c3QgcGFzcyB0aGUgdGFyZ2V0IGRlcGxveW1lbnQncyBuYW1lc3BhY2UgZXhwbGljaXRseSDigJRcbiAgICogYSBydW4gZW5xdWV1ZWQgdG8gYSB0b3BpYyB0aGUgdGFyZ2V0IGRlcGxveW1lbnQgaGFzIG5vIGNvbnN1bWVyIGZvclxuICAgKiBpcyBuZXZlciBwaWNrZWQgdXAuXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcFNsZWVwUmVzdWx0IHtcbiAgLyoqIE51bWJlciBvZiBwZW5kaW5nIHNsZWVwcyB0aGF0IHdlcmUgc3RvcHBlZCAqL1xuICBzdG9wcGVkQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkU3RyZWFtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggdG8gc3RhcnQgcmVhZGluZyBmcm9tLiBEZWZhdWx0cyB0byAwLlxuICAgKiBOZWdhdGl2ZSB2YWx1ZXMgc3RhcnQgZnJvbSB0aGUgZW5kIChlLmcuIC0zIHJlYWRzIHRoZSBsYXN0IDMgY2h1bmtzKS5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcFNsZWVwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBsaXN0IG9mIHNwZWNpZmljIGNvcnJlbGF0aW9uIElEcyB0byB0YXJnZXQuXG4gICAqIElmIHByb3ZpZGVkLCBvbmx5IHRoZXNlIHNsZWVwIGNhbGxzIHdpbGwgYmUgaW50ZXJydXB0ZWQuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYWxsIHBlbmRpbmcgc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIGNvcnJlbGF0aW9uSWRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRdWV1ZSBuYW1lc3BhY2Ugb2YgdGhlIHJ1bidzIGRlcGxveW1lbnQgKGUuZy4gYCdldmUnYCksIHVzZWQgd2hlblxuICAgKiByZS1lbnF1ZXVlaW5nIHRoZSBydW4gYWZ0ZXIgY29tcGxldGluZyBpdHMgd2FpdHMuIEZhbGxzIGJhY2sgdG9cbiAgICogYFdPUktGTE9XX1FVRVVFX05BTUVTUEFDRWAgaW4gdGhlIGNhbGxpbmcgcHJvY2Vzcy4gQ3Jvc3MtY29udGV4dFxuICAgKiBjYWxsZXJzIChlLmcuIHRoZSBvYnNlcnZhYmlsaXR5IGRhc2hib2FyZCkgbXVzdCBwYXNzIGl0IGV4cGxpY2l0bHkuXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVlbnF1ZXVlUnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBRdWV1ZSBuYW1lc3BhY2Ugb2YgdGhlIHJ1bidzIGRlcGxveW1lbnQgKGUuZy4gYCdldmUnYCkuIEZhbGxzIGJhY2sgdG9cbiAgICogYFdPUktGTE9XX1FVRVVFX05BTUVTUEFDRWAgaW4gdGhlIGNhbGxpbmcgcHJvY2Vzcy4gQ3Jvc3MtY29udGV4dFxuICAgKiBjYWxsZXJzIChlLmcuIHRoZSBvYnNlcnZhYmlsaXR5IGRhc2hib2FyZCkgbXVzdCBwYXNzIGl0IGV4cGxpY2l0bHkuXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsUnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmcmVlLXRleHQgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChtYXggNTEyIGNoYXJzKSwgcmVjb3JkZWRcbiAgICogb24gdGhlIHJ1bl9jYW5jZWxsZWQgZXZlbnQgYW5kIHN1cmZhY2VkIGluIHRoZSBydW4gZGV0YWlsIHZpZXcuXG4gICAqL1xuICBjYW5jZWxSZWFzb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVdvcmtmbG93QXJncyA9IChhcmdzOiB1bmtub3duKTogdW5rbm93bltdID0+IHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdO1xufTtcblxuLyoqXG4gKiBTdGFydCBhIG5ldyB3b3JrZmxvdyBydW4gYmFzZWQgb24gYW4gZXhpc3RpbmcgcnVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjcmVhdGVSdW5Gcm9tRXhpc3RpbmcoXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjcmVhdGVSdW5PcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdhbGwnIH0pO1xuICAgIGNvbnN0IHJhd0tleSA9IGF3YWl0IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4/LihydW4pO1xuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSByYXdLZXlcbiAgICAgID8gYXdhaXQgZGVyaXZlUnVuUGF5bG9hZEtleXMocmF3S2V5KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dBcmdzID0gbm9ybWFsaXplV29ya2Zsb3dBcmdzKFxuICAgICAgYXdhaXQgaHlkcmF0ZVdvcmtmbG93QXJndW1lbnRzKFxuICAgICAgICBydW4uaW5wdXQsXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBnbG9iYWxUaGlzXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBzcGVjVmVyc2lvbiA9XG4gICAgICBvcHRpb25zLnNwZWNWZXJzaW9uID8/IHJ1bi5zcGVjVmVyc2lvbiA/PyBTUEVDX1ZFUlNJT05fTEVHQUNZO1xuICAgIGNvbnN0IGRlcGxveW1lbnRJZCA9IG9wdGlvbnMuZGVwbG95bWVudElkID8/IHJ1bi5kZXBsb3ltZW50SWQ7XG5cbiAgICBjb25zdCBuZXdSdW4gPSBhd2FpdCBzdGFydChcbiAgICAgIHsgd29ya2Zsb3dJZDogcnVuLndvcmtmbG93TmFtZSB9LFxuICAgICAgd29ya2Zsb3dBcmdzIGFzIHVua25vd25bXSxcbiAgICAgIHtcbiAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgICB3b3JsZCxcbiAgICAgICAgc3BlY1ZlcnNpb24sXG4gICAgICAgIHJlcGxheWVkRnJvbVJ1bklkOiBydW5JZCxcbiAgICAgICAgbmFtZXNwYWNlOiBvcHRpb25zLm5hbWVzcGFjZSxcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBuZXdSdW4ucnVuSWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gcmVjcmVhdGUgcnVuIGZyb20gJHtydW5JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBDYW5jZWwgYSB3b3JrZmxvdyBydW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjYW5jZWxsYXRpb24gc2V0dGluZ3MuIGBjYW5jZWxSZWFzb25gIHJlY29yZHMgYVxuICogICBmcmVlLXRleHQgcmVhc29uIChtYXggNTEyIGNoYXJzKSBvbiB0aGUgcnVuX2NhbmNlbGxlZCBldmVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbFJ1bihcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBvcHRpb25zPzogQ2FuY2VsUnVuT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KTtcbiAgICBjb25zdCBzcGVjVmVyc2lvbiA9IHJ1bi5zcGVjVmVyc2lvbiA/PyBTUEVDX1ZFUlNJT05fTEVHQUNZO1xuICAgIGNvbnN0IGNvbXBhdE1vZGUgPSBpc0xlZ2FjeVNwZWNWZXJzaW9uKHNwZWNWZXJzaW9uKTtcbiAgICBjb25zdCBldmVudFJlcXVlc3QgPSB7XG4gICAgICBldmVudFR5cGU6ICdydW5fY2FuY2VsbGVkJyBhcyBjb25zdCxcbiAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgLi4uKG9wdGlvbnM/LmNhbmNlbFJlYXNvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBldmVudERhdGE6IHsgY2FuY2VsUmVhc29uOiBvcHRpb25zLmNhbmNlbFJlYXNvbiB9IH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHJ1bklkLCBldmVudFJlcXVlc3QsIHsgdjFDb21wYXQ6IGNvbXBhdE1vZGUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gY2FuY2VsIHJ1biAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIE1heGltdW0gbnVtYmVyIG9mIHNpbmdsZS1ydW4gY2FuY2VsbGF0aW9ucyBpc3N1ZWQgY29uY3VycmVudGx5IGJ5IHRoZVxuICogZmFsbGJhY2sgcGF0aCAod29ybGRzIHdpdGhvdXQgYHJ1bnMuY2FuY2VsTWFueWApLlxuICovXG5jb25zdCBDQU5DRUxfUlVOU19GQUxMQkFDS19DT05DVVJSRU5DWSA9IDIwO1xuXG4vKipcbiAqIENhbmNlbCBtYW55IHJ1bnMgaW4gb25lIGNhbGwuXG4gKlxuICogRmFzdCBwYXRoOiBpZiB0aGUgd29ybGQgaW1wbGVtZW50cyBgcnVucy5jYW5jZWxNYW55YCwgdGhlIHdob2xlIGJhdGNoIGlzXG4gKiBkZWxlZ2F0ZWQgdG8gaXQgaW4gYSBzaW5nbGUgb3BlcmF0aW9uIChvbmUgYmFja2VuZCByb3VuZC10cmlwIG9uXG4gKiBgQHdvcmtmbG93L3dvcmxkLXZlcmNlbGApLlxuICpcbiAqIEZhbGxiYWNrOiBmb3Igd29ybGRzIHdpdGhvdXQgYGNhbmNlbE1hbnlgLCB0aGlzIGlzc3VlcyBzaW5nbGUtcnVuXG4gKiBgY2FuY2VsUnVuKClgIGNhbGxzIHdpdGggYXQgbW9zdCB7QGxpbmsgQ0FOQ0VMX1JVTlNfRkFMTEJBQ0tfQ09OQ1VSUkVOQ1l9XG4gKiBpbiBmbGlnaHQgYXQgYSB0aW1lLiBGYWxsYmFjayBzdWNjZXNzZXMgYXJlIHJlcG9ydGVkIGFzIGBjYW5jZWxsZWRgO1xuICogZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFzIGBmYWlsZWRgIHdpdGggYGNvZGU6ICdpbnRlcm5hbF9lcnJvcidgIGFuZFxuICogYHJldHJ5YWJsZTogdHJ1ZWAg4oCUIGRlbGliZXJhdGVseSB3aXRob3V0IHBlci13b3JsZCBlcnJvciBjbGFzc2lmaWNhdGlvbi5cbiAqXG4gKiBAdGhyb3dzIGlmIGBydW5JZHNgIGlzIGVtcHR5LCBjb250YWlucyBkdXBsaWNhdGVzLCBvciBleGNlZWRzXG4gKiAgIHtAbGluayBCVUxLX0NBTkNFTF9NQVhfUlVOX0lEU30uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYW5jZWxSdW5zKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkczogc3RyaW5nW10sXG4gIG9wdGlvbnM/OiBDYW5jZWxSdW5PcHRpb25zXG4pOiBQcm9taXNlPEJ1bGtDYW5jZWxXb3JrZmxvd1J1bnNSZXN1bHQ+IHtcbiAgaWYgKHJ1bklkcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbmNlbFJ1bnMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHJ1biBJRC4nKTtcbiAgfVxuICBpZiAocnVuSWRzLmxlbmd0aCA+IEJVTEtfQ0FOQ0VMX01BWF9SVU5fSURTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGNhbmNlbFJ1bnMgYWNjZXB0cyBhdCBtb3N0ICR7QlVMS19DQU5DRUxfTUFYX1JVTl9JRFN9IHJ1biBJRHMgKHJlY2VpdmVkICR7cnVuSWRzLmxlbmd0aH0pLmBcbiAgICApO1xuICB9XG4gIGlmIChuZXcgU2V0KHJ1bklkcykuc2l6ZSAhPT0gcnVuSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FuY2VsUnVucyByZXF1aXJlcyB1bmlxdWUgcnVuIElEcyAoZHVwbGljYXRlcyBmb3VuZCkuJyk7XG4gIH1cblxuICAvLyBGYXN0IHBhdGg6IGEgc2luZ2xlIGJhdGNoIG9wZXJhdGlvbiB3aGVuIHRoZSB3b3JsZCBzdXBwb3J0cyBpdC5cbiAgaWYgKHdvcmxkLnJ1bnMuY2FuY2VsTWFueSkge1xuICAgIHJldHVybiB3b3JsZC5ydW5zLmNhbmNlbE1hbnkoe1xuICAgICAgcnVuSWRzLFxuICAgICAgLi4uKG9wdGlvbnM/LmNhbmNlbFJlYXNvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBjYW5jZWxSZWFzb246IG9wdGlvbnMuY2FuY2VsUmVhc29uIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBGYWxsYmFjazogYm91bmRlZC1jb25jdXJyZW5jeSBzaW5nbGUtcnVuIGNhbmNlbGxhdGlvbi5cbiAgY29uc3QgcmVzdWx0czogQnVsa0NhbmNlbFdvcmtmbG93UnVuUmVzdWx0W10gPSBuZXcgQXJyYXkocnVuSWRzLmxlbmd0aCk7XG4gIGxldCBuZXh0SW5kZXggPSAwO1xuXG4gIGNvbnN0IHdvcmtlciA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgaW5kZXggPSBuZXh0SW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBydW5JZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICBjb25zdCBydW5JZCA9IHJ1bklkc1tpbmRleF07XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjYW5jZWxSdW4od29ybGQsIHJ1bklkLCBvcHRpb25zKTtcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB7IHJ1bklkLCBvdXRjb21lOiAnY2FuY2VsbGVkJyB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJlc3VsdHNbaW5kZXhdID0ge1xuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIG91dGNvbWU6ICdmYWlsZWQnLFxuICAgICAgICAgIGNvZGU6ICdpbnRlcm5hbF9lcnJvcicsXG4gICAgICAgICAgcmV0cnlhYmxlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCB3b3JrZXJDb3VudCA9IE1hdGgubWluKENBTkNFTF9SVU5TX0ZBTExCQUNLX0NPTkNVUlJFTkNZLCBydW5JZHMubGVuZ3RoKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbSh7IGxlbmd0aDogd29ya2VyQ291bnQgfSwgKCkgPT4gd29ya2VyKCkpKTtcblxuICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgIHJlcXVlc3RlZDogcnVuSWRzLmxlbmd0aCxcbiAgICBjYW5jZWxsZWQ6IDAsXG4gICAgYWxyZWFkeUNhbmNlbGxlZDogMCxcbiAgICBub3RDYW5jZWxsYWJsZTogMCxcbiAgICBub3RGb3VuZDogMCxcbiAgICBmYWlsZWQ6IDAsXG4gIH07XG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICBzd2l0Y2ggKHJlc3VsdC5vdXRjb21lKSB7XG4gICAgICBjYXNlICdjYW5jZWxsZWQnOlxuICAgICAgICBzdW1tYXJ5LmNhbmNlbGxlZCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FscmVhZHlfY2FuY2VsbGVkJzpcbiAgICAgICAgc3VtbWFyeS5hbHJlYWR5Q2FuY2VsbGVkKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm90X2NhbmNlbGxhYmxlJzpcbiAgICAgICAgc3VtbWFyeS5ub3RDYW5jZWxsYWJsZSsrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25vdF9mb3VuZCc6XG4gICAgICAgIHN1bW1hcnkubm90Rm91bmQrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICBzdW1tYXJ5LmZhaWxlZCsrO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzdW1tYXJ5LCByZXN1bHRzIH07XG59XG5cbi8qKlxuICogUmUtZW5xdWV1ZSBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZW5xdWV1ZVJ1bihcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBvcHRpb25zPzogUmVlbnF1ZXVlUnVuT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KTtcbiAgICBhd2FpdCB3b3JsZC5xdWV1ZShcbiAgICAgIGdldFdvcmtmbG93UXVldWVOYW1lKHJ1bi53b3JrZmxvd05hbWUsIG9wdGlvbnM/Lm5hbWVzcGFjZSksXG4gICAgICB7XG4gICAgICAgIHJ1bklkLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGVwbG95bWVudElkOiBydW4uZGVwbG95bWVudElkLFxuICAgICAgICBzcGVjVmVyc2lvbjogcnVuLnNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9MRUdBQ1ksXG4gICAgICB9XG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byByZS1lbnF1ZXVlIHJ1biAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdha2UgdXAgYSB3b3JrZmxvdyBydW4gYnkgaW50ZXJydXB0aW5nIHBlbmRpbmcgc2xlZXAoKSBjYWxscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdha2VVcFJ1bihcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBvcHRpb25zPzogU3RvcFNsZWVwT3B0aW9uc1xuKTogUHJvbWlzZTxTdG9wU2xlZXBSZXN1bHQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IGNvbXBhdE1vZGUgPSBpc0xlZ2FjeVNwZWNWZXJzaW9uKHJ1bi5zcGVjVmVyc2lvbik7XG5cbiAgICAvLyBQYWdpbmF0ZSB0aHJvdWdoIGFsbCBldmVudHMgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYW55IHNsZWVwc1xuICAgIC8vIGluIGxvbmctcnVubmluZyB3b3JrZmxvd3Mgd2l0aCBtb3JlIHRoYW4gMTAwMCBldmVudHMuXG4gICAgY29uc3QgYWxsRXZlbnRzOiBFdmVudFtdID0gW107XG4gICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgZG8ge1xuICAgICAgY29uc3QgZXZlbnRzUmVzdWx0ID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgICBydW5JZCxcbiAgICAgICAgcGFnaW5hdGlvbjogeyBsaW1pdDogMTAwMCwgLi4uKGN1cnNvciA/IHsgY3Vyc29yIH0gOiB7fSkgfSxcbiAgICAgICAgcmVzb2x2ZURhdGE6ICdub25lJyxcbiAgICAgIH0pO1xuICAgICAgYWxsRXZlbnRzLnB1c2goLi4uZXZlbnRzUmVzdWx0LmRhdGEpO1xuICAgICAgY3Vyc29yID0gZXZlbnRzUmVzdWx0Lmhhc01vcmUgPyBldmVudHNSZXN1bHQuY3Vyc29yIDogbnVsbDtcbiAgICB9IHdoaWxlIChjdXJzb3IpO1xuXG4gICAgY29uc3Qgd2FpdENyZWF0ZWRFdmVudHMgPSBhbGxFdmVudHMuZmlsdGVyKFxuICAgICAgKGV2ZW50OiBFdmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgY29uc3Qgd2FpdENvbXBsZXRlZENvcnJlbGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgIGFsbEV2ZW50c1xuICAgICAgICAuZmlsdGVyKChldmVudDogRXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJylcbiAgICAgICAgLm1hcCgoZXZlbnQ6IEV2ZW50KSA9PiBldmVudC5jb3JyZWxhdGlvbklkKVxuICAgICk7XG5cbiAgICBsZXQgcGVuZGluZ1dhaXRzID0gd2FpdENyZWF0ZWRFdmVudHMuZmlsdGVyKFxuICAgICAgKGV2ZW50OiBFdmVudCkgPT4gIXdhaXRDb21wbGV0ZWRDb3JyZWxhdGlvbklkcy5oYXMoZXZlbnQuY29ycmVsYXRpb25JZClcbiAgICApO1xuXG4gICAgaWYgKG9wdGlvbnM/LmNvcnJlbGF0aW9uSWRzICYmIG9wdGlvbnMuY29ycmVsYXRpb25JZHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFyZ2V0Q29ycmVsYXRpb25JZHMgPSBuZXcgU2V0KG9wdGlvbnMuY29ycmVsYXRpb25JZHMpO1xuICAgICAgcGVuZGluZ1dhaXRzID0gcGVuZGluZ1dhaXRzLmZpbHRlcihcbiAgICAgICAgKGV2ZW50OiBFdmVudCkgPT5cbiAgICAgICAgICBldmVudC5jb3JyZWxhdGlvbklkICYmIHRhcmdldENvcnJlbGF0aW9uSWRzLmhhcyhldmVudC5jb3JyZWxhdGlvbklkKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgICBsZXQgc3RvcHBlZENvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3Qgd2FpdEV2ZW50IG9mIHBlbmRpbmdXYWl0cykge1xuICAgICAgaWYgKCF3YWl0RXZlbnQuY29ycmVsYXRpb25JZCkgY29udGludWU7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBjb21wYXRNb2RlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnd2FpdF9jb21wbGV0ZWQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogd2FpdEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3dhaXRfY29tcGxldGVkJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHdhaXRFdmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IHJ1bi5zcGVjVmVyc2lvbixcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICByZXN1bWVBdDogd2FpdEV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUocnVuSWQsIGV2ZW50RGF0YSwgeyB2MUNvbXBhdDogY29tcGF0TW9kZSB9KTtcbiAgICAgICAgc3RvcHBlZENvdW50Kys7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICAgIHN0b3BwZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9ycy5wdXNoKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RvcHBlZENvdW50ID4gMCkge1xuICAgICAgYXdhaXQgd29ybGQucXVldWUoXG4gICAgICAgIGdldFdvcmtmbG93UXVldWVOYW1lKHJ1bi53b3JrZmxvd05hbWUsIG9wdGlvbnM/Lm5hbWVzcGFjZSksXG4gICAgICAgIHtcbiAgICAgICAgICBydW5JZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRlcGxveW1lbnRJZDogcnVuLmRlcGxveW1lbnRJZCxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogcnVuLnNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9MRUdBQ1ksXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgYEZhaWxlZCB0byBjb21wbGV0ZSAke2Vycm9ycy5sZW5ndGh9LyR7cGVuZGluZ1dhaXRzLmxlbmd0aH0gcGVuZGluZyB3YWl0KHMpIGZvciBydW4gJHtydW5JZH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0b3BwZWRDb3VudCB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byB3YWtlIHVwIHJ1biAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgZnJvbSBhIHN0cmVhbSBieSBzdHJlYW0gSUQuXG4gKiBSZXR1cm5zIGEgUmVhZGFibGVTdHJlYW0gb2YgVWludDhBcnJheSBjaHVua3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIHN0cmVhbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSZWFkU3RyZWFtT3B0aW9uc1xuKTogUHJvbWlzZTxSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pj4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldChydW5JZCwgc3RyZWFtSWQsIG9wdGlvbnM/LnN0YXJ0SW5kZXgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHJlYWQgc3RyZWFtICR7c3RyZWFtSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTGlzdCBhbGwgc3RyZWFtIElEcyBmb3IgYSB3b3JrZmxvdyBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U3RyZWFtcyhcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHdvcmxkLnN0cmVhbXMubGlzdChydW5JZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gbGlzdCBzdHJlYW1zIGZvciBydW4gJHtydW5JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3J1bnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUNMLHVCQUF1QixFQUl2QixtQkFBbUIsRUFDbkIsbUJBQW1CLEdBRXBCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4RG5DLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFhLEVBQWEsRUFBRTtJQUN6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQVksRUFDWixLQUFhLEVBQ2IsVUFBOEIsRUFBRTtJQUVoQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsTUFBTTtZQUMxQixDQUFDLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7WUFDcEMsQ0FBQyxD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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5Q29uZmxpY3RFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgQlVMS19DQU5DRUxfTUFYX1JVTl9JRFMsXG4gIHR5cGUgQnVsa0NhbmNlbFdvcmtmbG93UnVuUmVzdWx0LFxuICB0eXBlIEJ1bGtDYW5jZWxXb3JrZmxvd1J1bnNSZXN1bHQsXG4gIHR5cGUgRXZlbnQsXG4gIGlzTGVnYWN5U3BlY1ZlcnNpb24sXG4gIFNQRUNfVkVSU0lPTl9MRUdBQ1ksXG4gIHR5cGUgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBkZXJpdmVSdW5QYXlsb2FkS2V5cyB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dBcmd1bWVudHMgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVOYW1lIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnLi9zdGFydC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjcmVhdGVSdW5PcHRpb25zIHtcbiAgZGVwbG95bWVudElkPzogc3RyaW5nO1xuICBzcGVjVmVyc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFF1ZXVlIG5hbWVzcGFjZSBvZiB0aGUgdGFyZ2V0IGRlcGxveW1lbnQgKGUuZy4gYCdldmUnYCBmb3IgdG9waWNzIGxpa2VcbiAgICogYF9fZXZlX3drZl93b3JrZmxvd18qYCkuIEZhbGxzIGJhY2sgdG8gYFdPUktGTE9XX1FVRVVFX05BTUVTUEFDRWAgaW5cbiAgICogdGhlIGNhbGxpbmcgcHJvY2Vzcy4gQ3Jvc3MtY29udGV4dCBjYWxsZXJzIChlLmcuIHRoZSBvYnNlcnZhYmlsaXR5XG4gICAqIGRhc2hib2FyZCkgbXVzdCBwYXNzIHRoZSB0YXJnZXQgZGVwbG95bWVudCdzIG5hbWVzcGFjZSBleHBsaWNpdGx5IOKAlFxuICAgKiBhIHJ1biBlbnF1ZXVlZCB0byBhIHRvcGljIHRoZSB0YXJnZXQgZGVwbG95bWVudCBoYXMgbm8gY29uc3VtZXIgZm9yXG4gICAqIGlzIG5ldmVyIHBpY2tlZCB1cC5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wU2xlZXBSZXN1bHQge1xuICAvKiogTnVtYmVyIG9mIHBlbmRpbmcgc2xlZXBzIHRoYXQgd2VyZSBzdG9wcGVkICovXG4gIHN0b3BwZWRDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCB0byBzdGFydCByZWFkaW5nIGZyb20uIERlZmF1bHRzIHRvIDAuXG4gICAqIE5lZ2F0aXZlIHZhbHVlcyBzdGFydCBmcm9tIHRoZSBlbmQgKGUuZy4gLTMgcmVhZHMgdGhlIGxhc3QgMyBjaHVua3MpLlxuICAgKi9cbiAgc3RhcnRJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wU2xlZXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxpc3Qgb2Ygc3BlY2lmaWMgY29ycmVsYXRpb24gSURzIHRvIHRhcmdldC5cbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgdGhlc2Ugc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFF1ZXVlIG5hbWVzcGFjZSBvZiB0aGUgcnVuJ3MgZGVwbG95bWVudCAoZS5nLiBgJ2V2ZSdgKSwgdXNlZCB3aGVuXG4gICAqIHJlLWVucXVldWVpbmcgdGhlIHJ1biBhZnRlciBjb21wbGV0aW5nIGl0cyB3YWl0cy4gRmFsbHMgYmFjayB0b1xuICAgKiBgV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFYCBpbiB0aGUgY2FsbGluZyBwcm9jZXNzLiBDcm9zcy1jb250ZXh0XG4gICAqIGNhbGxlcnMgKGUuZy4gdGhlIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkKSBtdXN0IHBhc3MgaXQgZXhwbGljaXRseS5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWVucXVldWVSdW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFF1ZXVlIG5hbWVzcGFjZSBvZiB0aGUgcnVuJ3MgZGVwbG95bWVudCAoZS5nLiBgJ2V2ZSdgKS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFYCBpbiB0aGUgY2FsbGluZyBwcm9jZXNzLiBDcm9zcy1jb250ZXh0XG4gICAqIGNhbGxlcnMgKGUuZy4gdGhlIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkKSBtdXN0IHBhc3MgaXQgZXhwbGljaXRseS5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxSdW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZyZWUtdGV4dCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKG1heCA1MTIgY2hhcnMpLCByZWNvcmRlZFxuICAgKiBvbiB0aGUgcnVuX2NhbmNlbGxlZCBldmVudCBhbmQgc3VyZmFjZWQgaW4gdGhlIHJ1biBkZXRhaWwgdmlldy5cbiAgICovXG4gIGNhbmNlbFJlYXNvbj86IHN0cmluZztcbn1cblxuY29uc3Qgbm9ybWFsaXplV29ya2Zsb3dBcmdzID0gKGFyZ3M6IHVua25vd24pOiB1bmtub3duW10gPT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbYXJnc107XG59O1xuXG4vKipcbiAqIFN0YXJ0IGEgbmV3IHdvcmtmbG93IHJ1biBiYXNlZCBvbiBhbiBleGlzdGluZyBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNyZWF0ZVJ1bkZyb21FeGlzdGluZyhcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNyZWF0ZVJ1bk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ2FsbCcgfSk7XG4gICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHJhd0tleVxuICAgICAgPyBhd2FpdCBkZXJpdmVSdW5QYXlsb2FkS2V5cyhyYXdLZXkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3b3JrZmxvd0FyZ3MgPSBub3JtYWxpemVXb3JrZmxvd0FyZ3MoXG4gICAgICBhd2FpdCBoeWRyYXRlV29ya2Zsb3dBcmd1bWVudHMoXG4gICAgICAgIHJ1bi5pbnB1dCxcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGdsb2JhbFRoaXNcbiAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IHNwZWNWZXJzaW9uID1cbiAgICAgIG9wdGlvbnMuc3BlY1ZlcnNpb24gPz8gcnVuLnNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9MRUdBQ1k7XG4gICAgY29uc3QgZGVwbG95bWVudElkID0gb3B0aW9ucy5kZXBsb3ltZW50SWQgPz8gcnVuLmRlcGxveW1lbnRJZDtcblxuICAgIGNvbnN0IG5ld1J1biA9IGF3YWl0IHN0YXJ0KFxuICAgICAgeyB3b3JrZmxvd0lkOiBydW4ud29ya2Zsb3dOYW1lIH0sXG4gICAgICB3b3JrZmxvd0FyZ3MgYXMgdW5rbm93bltdLFxuICAgICAge1xuICAgICAgICBkZXBsb3ltZW50SWQsXG4gICAgICAgIHdvcmxkLFxuICAgICAgICBzcGVjVmVyc2lvbixcbiAgICAgICAgcmVwbGF5ZWRGcm9tUnVuSWQ6IHJ1bklkLFxuICAgICAgICBuYW1lc3BhY2U6IG9wdGlvbnMubmFtZXNwYWNlLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIG5ld1J1bi5ydW5JZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byByZWNyZWF0ZSBydW4gZnJvbSAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENhbmNlbCBhIHdvcmtmbG93IHJ1bi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNhbmNlbGxhdGlvbiBzZXR0aW5ncy4gYGNhbmNlbFJlYXNvbmAgcmVjb3JkcyBhXG4gKiAgIGZyZWUtdGV4dCByZWFzb24gKG1heCA1MTIgY2hhcnMpIG9uIHRoZSBydW5fY2FuY2VsbGVkIGV2ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FuY2VsUnVuKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBDYW5jZWxSdW5PcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IHNwZWNWZXJzaW9uID0gcnVuLnNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9MRUdBQ1k7XG4gICAgY29uc3QgY29tcGF0TW9kZSA9IGlzTGVnYWN5U3BlY1ZlcnNpb24oc3BlY1ZlcnNpb24pO1xuICAgIGNvbnN0IGV2ZW50UmVxdWVzdCA9IHtcbiAgICAgIGV2ZW50VHlwZTogJ3J1bl9jYW5jZWxsZWQnIGFzIGNvbnN0LFxuICAgICAgc3BlY1ZlcnNpb24sXG4gICAgICAuLi4ob3B0aW9ucz8uY2FuY2VsUmVhc29uICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IGV2ZW50RGF0YTogeyBjYW5jZWxSZWFzb246IG9wdGlvbnMuY2FuY2VsUmVhc29uIH0gfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUocnVuSWQsIGV2ZW50UmVxdWVzdCwgeyB2MUNvbXBhdDogY29tcGF0TW9kZSB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBjYW5jZWwgcnVuICR7cnVuSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWF4aW11bSBudW1iZXIgb2Ygc2luZ2xlLXJ1biBjYW5jZWxsYXRpb25zIGlzc3VlZCBjb25jdXJyZW50bHkgYnkgdGhlXG4gKiBmYWxsYmFjayBwYXRoICh3b3JsZHMgd2l0aG91dCBgcnVucy5jYW5jZWxNYW55YCkuXG4gKi9cbmNvbnN0IENBTkNFTF9SVU5TX0ZBTExCQUNLX0NPTkNVUlJFTkNZID0gMjA7XG5cbi8qKlxuICogQ2FuY2VsIG1hbnkgcnVucyBpbiBvbmUgY2FsbC5cbiAqXG4gKiBGYXN0IHBhdGg6IGlmIHRoZSB3b3JsZCBpbXBsZW1lbnRzIGBydW5zLmNhbmNlbE1hbnlgLCB0aGUgd2hvbGUgYmF0Y2ggaXNcbiAqIGRlbGVnYXRlZCB0byBpdCBpbiBhIHNpbmdsZSBvcGVyYXRpb24gKG9uZSBiYWNrZW5kIHJvdW5kLXRyaXAgb25cbiAqIGBAd29ya2Zsb3cvd29ybGQtdmVyY2VsYCkuXG4gKlxuICogRmFsbGJhY2s6IGZvciB3b3JsZHMgd2l0aG91dCBgY2FuY2VsTWFueWAsIHRoaXMgaXNzdWVzIHNpbmdsZS1ydW5cbiAqIGBjYW5jZWxSdW4oKWAgY2FsbHMgd2l0aCBhdCBtb3N0IHtAbGluayBDQU5DRUxfUlVOU19GQUxMQkFDS19DT05DVVJSRU5DWX1cbiAqIGluIGZsaWdodCBhdCBhIHRpbWUuIEZhbGxiYWNrIHN1Y2Nlc3NlcyBhcmUgcmVwb3J0ZWQgYXMgYGNhbmNlbGxlZGA7XG4gKiBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgYGZhaWxlZGAgd2l0aCBgY29kZTogJ2ludGVybmFsX2Vycm9yJ2AgYW5kXG4gKiBgcmV0cnlhYmxlOiB0cnVlYCDigJQgZGVsaWJlcmF0ZWx5IHdpdGhvdXQgcGVyLXdvcmxkIGVycm9yIGNsYXNzaWZpY2F0aW9uLlxuICpcbiAqIEB0aHJvd3MgaWYgYHJ1bklkc2AgaXMgZW1wdHksIGNvbnRhaW5zIGR1cGxpY2F0ZXMsIG9yIGV4Y2VlZHNcbiAqICAge0BsaW5rIEJVTEtfQ0FOQ0VMX01BWF9SVU5fSURTfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbFJ1bnMoXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWRzOiBzdHJpbmdbXSxcbiAgb3B0aW9ucz86IENhbmNlbFJ1bk9wdGlvbnNcbik6IFByb21pc2U8QnVsa0NhbmNlbFdvcmtmbG93UnVuc1Jlc3VsdD4ge1xuICBpZiAocnVuSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FuY2VsUnVucyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcnVuIElELicpO1xuICB9XG4gIGlmIChydW5JZHMubGVuZ3RoID4gQlVMS19DQU5DRUxfTUFYX1JVTl9JRFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgY2FuY2VsUnVucyBhY2NlcHRzIGF0IG1vc3QgJHtCVUxLX0NBTkNFTF9NQVhfUlVOX0lEU30gcnVuIElEcyAocmVjZWl2ZWQgJHtydW5JZHMubGVuZ3RofSkuYFxuICAgICk7XG4gIH1cbiAgaWYgKG5ldyBTZXQocnVuSWRzKS5zaXplICE9PSBydW5JZHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW5jZWxSdW5zIHJlcXVpcmVzIHVuaXF1ZSBydW4gSURzIChkdXBsaWNhdGVzIGZvdW5kKS4nKTtcbiAgfVxuXG4gIC8vIEZhc3QgcGF0aDogYSBzaW5nbGUgYmF0Y2ggb3BlcmF0aW9uIHdoZW4gdGhlIHdvcmxkIHN1cHBvcnRzIGl0LlxuICBpZiAod29ybGQucnVucy5jYW5jZWxNYW55KSB7XG4gICAgcmV0dXJuIHdvcmxkLnJ1bnMuY2FuY2VsTWFueSh7XG4gICAgICBydW5JZHMsXG4gICAgICAuLi4ob3B0aW9ucz8uY2FuY2VsUmVhc29uICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IGNhbmNlbFJlYXNvbjogb3B0aW9ucy5jYW5jZWxSZWFzb24gfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBib3VuZGVkLWNvbmN1cnJlbmN5IHNpbmdsZS1ydW4gY2FuY2VsbGF0aW9uLlxuICBjb25zdCByZXN1bHRzOiBCdWxrQ2FuY2VsV29ya2Zsb3dSdW5SZXN1bHRbXSA9IG5ldyBBcnJheShydW5JZHMubGVuZ3RoKTtcbiAgbGV0IG5leHRJbmRleCA9IDA7XG5cbiAgY29uc3Qgd29ya2VyID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpbmRleCA9IG5leHRJbmRleCsrO1xuICAgICAgaWYgKGluZGV4ID49IHJ1bklkcy5sZW5ndGgpIHJldHVybjtcbiAgICAgIGNvbnN0IHJ1bklkID0gcnVuSWRzW2luZGV4XTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbFJ1bih3b3JsZCwgcnVuSWQsIG9wdGlvbnMpO1xuICAgICAgICByZXN1bHRzW2luZGV4XSA9IHsgcnVuSWQsIG91dGNvbWU6ICdjYW5jZWxsZWQnIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgb3V0Y29tZTogJ2ZhaWxlZCcsXG4gICAgICAgICAgY29kZTogJ2ludGVybmFsX2Vycm9yJyxcbiAgICAgICAgICByZXRyeWFibGU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdvcmtlckNvdW50ID0gTWF0aC5taW4oQ0FOQ0VMX1JVTlNfRkFMTEJBQ0tfQ09OQ1VSUkVOQ1ksIHJ1bklkcy5sZW5ndGgpO1xuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHsgbGVuZ3RoOiB3b3JrZXJDb3VudCB9LCAoKSA9PiB3b3JrZXIoKSkpO1xuXG4gIGNvbnN0IHN1bW1hcnkgPSB7XG4gICAgcmVxdWVzdGVkOiBydW5JZHMubGVuZ3RoLFxuICAgIGNhbmNlbGxlZDogMCxcbiAgICBhbHJlYWR5Q2FuY2VsbGVkOiAwLFxuICAgIG5vdENhbmNlbGxhYmxlOiAwLFxuICAgIG5vdEZvdW5kOiAwLFxuICAgIGZhaWxlZDogMCxcbiAgfTtcbiAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgIHN3aXRjaCAocmVzdWx0Lm91dGNvbWUpIHtcbiAgICAgIGNhc2UgJ2NhbmNlbGxlZCc6XG4gICAgICAgIHN1bW1hcnkuY2FuY2VsbGVkKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWxyZWFkeV9jYW5jZWxsZWQnOlxuICAgICAgICBzdW1tYXJ5LmFscmVhZHlDYW5jZWxsZWQrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub3RfY2FuY2VsbGFibGUnOlxuICAgICAgICBzdW1tYXJ5Lm5vdENhbmNlbGxhYmxlKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm90X2ZvdW5kJzpcbiAgICAgICAgc3VtbWFyeS5ub3RGb3VuZCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHN1bW1hcnkuZmFpbGVkKys7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHN1bW1hcnksIHJlc3VsdHMgfTtcbn1cblxuLyoqXG4gKiBSZS1lbnF1ZXVlIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVlbnF1ZXVlUnVuKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSZWVucXVldWVSdW5PcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pO1xuICAgIGF3YWl0IHdvcmxkLnF1ZXVlKFxuICAgICAgZ2V0V29ya2Zsb3dRdWV1ZU5hbWUocnVuLndvcmtmbG93TmFtZSwgb3B0aW9ucz8ubmFtZXNwYWNlKSxcbiAgICAgIHtcbiAgICAgICAgcnVuSWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkZXBsb3ltZW50SWQ6IHJ1bi5kZXBsb3ltZW50SWQsXG4gICAgICAgIHNwZWNWZXJzaW9uOiBydW4uc3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0xFR0FDWSxcbiAgICAgIH1cbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHJlLWVucXVldWUgcnVuICR7cnVuSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogV2FrZSB1cCBhIHdvcmtmbG93IHJ1biBieSBpbnRlcnJ1cHRpbmcgcGVuZGluZyBzbGVlcCgpIGNhbGxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FrZVVwUnVuKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBTdG9wU2xlZXBPcHRpb25zXG4pOiBQcm9taXNlPFN0b3BTbGVlcFJlc3VsdD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHJ1bklkLCB7IHJlc29sdmVEYXRhOiAnbm9uZScgfSk7XG4gICAgY29uc3QgY29tcGF0TW9kZSA9IGlzTGVnYWN5U3BlY1ZlcnNpb24ocnVuLnNwZWNWZXJzaW9uKTtcblxuICAgIC8vIFBhZ2luYXRlIHRocm91Z2ggYWxsIGV2ZW50cyB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnkgc2xlZXBzLlxuICAgIGNvbnN0IGFsbEV2ZW50czogRXZlbnRbXSA9IFtdO1xuICAgIGxldCBjdXJzb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGV2ZW50c1Jlc3VsdCA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHBhZ2luYXRpb246IHsgc29ydE9yZGVyOiAnYXNjJywgLi4uKGN1cnNvciA/IHsgY3Vyc29yIH0gOiB7fSkgfSxcbiAgICAgICAgcmVzb2x2ZURhdGE6ICdub25lJyxcbiAgICAgIH0pO1xuICAgICAgYWxsRXZlbnRzLnB1c2goLi4uZXZlbnRzUmVzdWx0LmRhdGEpO1xuICAgICAgY3Vyc29yID0gZXZlbnRzUmVzdWx0Lmhhc01vcmUgPyBldmVudHNSZXN1bHQuY3Vyc29yIDogbnVsbDtcbiAgICB9IHdoaWxlIChjdXJzb3IpO1xuXG4gICAgY29uc3Qgd2FpdENyZWF0ZWRFdmVudHMgPSBhbGxFdmVudHMuZmlsdGVyKFxuICAgICAgKGV2ZW50OiBFdmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgY29uc3Qgd2FpdENvbXBsZXRlZENvcnJlbGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgIGFsbEV2ZW50c1xuICAgICAgICAuZmlsdGVyKChldmVudDogRXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJylcbiAgICAgICAgLm1hcCgoZXZlbnQ6IEV2ZW50KSA9PiBldmVudC5jb3JyZWxhdGlvbklkKVxuICAgICk7XG5cbiAgICBsZXQgcGVuZGluZ1dhaXRzID0gd2FpdENyZWF0ZWRFdmVudHMuZmlsdGVyKFxuICAgICAgKGV2ZW50OiBFdmVudCkgPT4gIXdhaXRDb21wbGV0ZWRDb3JyZWxhdGlvbklkcy5oYXMoZXZlbnQuY29ycmVsYXRpb25JZClcbiAgICApO1xuXG4gICAgaWYgKG9wdGlvbnM/LmNvcnJlbGF0aW9uSWRzICYmIG9wdGlvbnMuY29ycmVsYXRpb25JZHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFyZ2V0Q29ycmVsYXRpb25JZHMgPSBuZXcgU2V0KG9wdGlvbnMuY29ycmVsYXRpb25JZHMpO1xuICAgICAgcGVuZGluZ1dhaXRzID0gcGVuZGluZ1dhaXRzLmZpbHRlcihcbiAgICAgICAgKGV2ZW50OiBFdmVudCkgPT5cbiAgICAgICAgICBldmVudC5jb3JyZWxhdGlvbklkICYmIHRhcmdldENvcnJlbGF0aW9uSWRzLmhhcyhldmVudC5jb3JyZWxhdGlvbklkKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgICBsZXQgc3RvcHBlZENvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3Qgd2FpdEV2ZW50IG9mIHBlbmRpbmdXYWl0cykge1xuICAgICAgaWYgKCF3YWl0RXZlbnQuY29ycmVsYXRpb25JZCkgY29udGludWU7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBjb21wYXRNb2RlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnd2FpdF9jb21wbGV0ZWQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogd2FpdEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3dhaXRfY29tcGxldGVkJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHdhaXRFdmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IHJ1bi5zcGVjVmVyc2lvbixcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICByZXN1bWVBdDogd2FpdEV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUocnVuSWQsIGV2ZW50RGF0YSwgeyB2MUNvbXBhdDogY29tcGF0TW9kZSB9KTtcbiAgICAgICAgc3RvcHBlZENvdW50Kys7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICAgIHN0b3BwZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9ycy5wdXNoKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RvcHBlZENvdW50ID4gMCkge1xuICAgICAgYXdhaXQgd29ybGQucXVldWUoXG4gICAgICAgIGdldFdvcmtmbG93UXVldWVOYW1lKHJ1bi53b3JrZmxvd05hbWUsIG9wdGlvbnM/Lm5hbWVzcGFjZSksXG4gICAgICAgIHtcbiAgICAgICAgICBydW5JZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRlcGxveW1lbnRJZDogcnVuLmRlcGxveW1lbnRJZCxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogcnVuLnNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9MRUdBQ1ksXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgYEZhaWxlZCB0byBjb21wbGV0ZSAke2Vycm9ycy5sZW5ndGh9LyR7cGVuZGluZ1dhaXRzLmxlbmd0aH0gcGVuZGluZyB3YWl0KHMpIGZvciBydW4gJHtydW5JZH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0b3BwZWRDb3VudCB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byB3YWtlIHVwIHJ1biAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgZnJvbSBhIHN0cmVhbSBieSBzdHJlYW0gSUQuXG4gKiBSZXR1cm5zIGEgUmVhZGFibGVTdHJlYW0gb2YgVWludDhBcnJheSBjaHVua3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIHN0cmVhbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSZWFkU3RyZWFtT3B0aW9uc1xuKTogUHJvbWlzZTxSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pj4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldChydW5JZCwgc3RyZWFtSWQsIG9wdGlvbnM/LnN0YXJ0SW5kZXgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHJlYWQgc3RyZWFtICR7c3RyZWFtSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTGlzdCBhbGwgc3RyZWFtIElEcyBmb3IgYSB3b3JrZmxvdyBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U3RyZWFtcyhcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHdvcmxkLnN0cmVhbXMubGlzdChydW5JZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gbGlzdCBzdHJlYW1zIGZvciBydW4gJHtydW5JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==