@workflow/core 5.0.0-beta.42 → 5.0.0-beta.44
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.
- package/dist/capabilities.d.ts +4 -4
- package/dist/capabilities.js +5 -5
- package/dist/capture-stack.d.ts +1 -1
- package/dist/capture-stack.js +2 -2
- package/dist/class-serialization.d.ts +8 -8
- package/dist/class-serialization.js +9 -9
- package/dist/classify-error.js +5 -5
- package/dist/context-violation-error.d.ts +5 -5
- package/dist/context-violation-error.d.ts.map +1 -1
- package/dist/context-violation-error.js +5 -5
- package/dist/create-hook.d.ts +10 -6
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.js +2 -2
- package/dist/describe-error.d.ts +7 -7
- package/dist/describe-error.js +8 -8
- package/dist/encryption.d.ts +5 -5
- package/dist/encryption.js +7 -7
- package/dist/events-consumer.d.ts +19 -7
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +33 -12
- package/dist/flushable-stream.d.ts +4 -4
- package/dist/flushable-stream.js +12 -12
- package/dist/global.d.ts +1 -1
- package/dist/global.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/log-format.d.ts +2 -2
- package/dist/log-format.js +5 -5
- package/dist/logger.js +4 -4
- package/dist/private.d.ts +39 -64
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +294 -48
- package/dist/replay-payload-cache.d.ts +1 -1
- package/dist/replay-payload-cache.js +4 -4
- package/dist/runtime/compute-instance.d.ts +4 -3
- package/dist/runtime/compute-instance.d.ts.map +1 -1
- package/dist/runtime/compute-instance.js +5 -4
- package/dist/runtime/constants.d.ts +46 -19
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +76 -38
- package/dist/runtime/count-step-started-events.d.ts +7 -7
- package/dist/runtime/count-step-started-events.js +4 -4
- package/dist/runtime/deployment-guard.d.ts +7 -7
- package/dist/runtime/deployment-guard.js +8 -8
- package/dist/runtime/get-port-lazy.d.ts +2 -2
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +37 -30
- package/dist/runtime/get-world-lazy.d.ts +2 -2
- package/dist/runtime/get-world-lazy.js +3 -3
- package/dist/runtime/helpers.d.ts +18 -18
- package/dist/runtime/helpers.js +27 -27
- package/dist/runtime/quickjs-entrypoint.d.ts +23 -10
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +200 -81
- package/dist/runtime/quickjs-runtime.d.ts +31 -15
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
- package/dist/runtime/quickjs-runtime.js +126 -77
- package/dist/runtime/quickjs-serde.d.ts +10 -10
- package/dist/runtime/quickjs-serde.js +20 -20
- package/dist/runtime/replay-budget.d.ts +4 -4
- package/dist/runtime/replay-budget.js +5 -5
- package/dist/runtime/replay-recovery-reporter.d.ts +1 -1
- package/dist/runtime/replay-recovery-reporter.js +2 -2
- package/dist/runtime/resume-hook.d.ts +2 -2
- package/dist/runtime/resume-hook.js +27 -27
- package/dist/runtime/resume-latency.d.ts +25 -25
- package/dist/runtime/resume-latency.d.ts.map +1 -1
- package/dist/runtime/resume-latency.js +4 -4
- package/dist/runtime/run-id-time.d.ts +2 -2
- package/dist/runtime/run-id-time.js +5 -5
- package/dist/runtime/run.d.ts +21 -4
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +154 -35
- package/dist/runtime/runs.d.ts +4 -4
- package/dist/runtime/runs.js +2 -2
- package/dist/runtime/start.d.ts +3 -3
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +27 -23
- package/dist/runtime/step-executor.d.ts +59 -11
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +116 -42
- package/dist/runtime/step-latency.d.ts +20 -14
- package/dist/runtime/step-latency.d.ts.map +1 -1
- package/dist/runtime/step-latency.js +13 -11
- package/dist/runtime/step-ownership.d.ts +6 -6
- package/dist/runtime/step-ownership.js +8 -8
- package/dist/runtime/step-single-flight.d.ts +1 -1
- package/dist/runtime/step-single-flight.d.ts.map +1 -1
- package/dist/runtime/step-single-flight.js +17 -11
- package/dist/runtime/suspension-handler.d.ts +99 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +678 -57
- package/dist/runtime/unserializable-step.d.ts +34 -0
- package/dist/runtime/unserializable-step.d.ts.map +1 -0
- package/dist/runtime/unserializable-step.js +52 -0
- package/dist/runtime/vm-mode.d.ts +1 -1
- package/dist/runtime/vm-mode.js +2 -2
- package/dist/runtime/wait-continuation.d.ts +31 -9
- package/dist/runtime/wait-continuation.d.ts.map +1 -1
- package/dist/runtime/wait-continuation.js +44 -13
- package/dist/runtime/wait-until.d.ts +1 -1
- package/dist/runtime/wait-until.js +2 -2
- package/dist/runtime/world-compatibility.d.ts +20 -9
- package/dist/runtime/world-compatibility.d.ts.map +1 -1
- package/dist/runtime/world-compatibility.js +24 -13
- package/dist/runtime/world-init.d.ts +5 -5
- package/dist/runtime/world-init.js +6 -6
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +13 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +417 -213
- package/dist/sealed-box.d.ts +7 -7
- package/dist/sealed-box.js +15 -15
- package/dist/serialization/client.js +2 -2
- package/dist/serialization/codec-devalue-vm.d.ts +1 -1
- package/dist/serialization/codec-devalue-vm.js +4 -4
- package/dist/serialization/codec-devalue.d.ts +1 -1
- package/dist/serialization/codec-devalue.js +2 -2
- package/dist/serialization/codec.d.ts +4 -4
- package/dist/serialization/codec.js +2 -2
- package/dist/serialization/compression.d.ts +12 -11
- package/dist/serialization/compression.d.ts.map +1 -1
- package/dist/serialization/compression.js +16 -15
- package/dist/serialization/encryption.d.ts +7 -7
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +8 -8
- package/dist/serialization/errors.js +2 -2
- package/dist/serialization/format.d.ts +6 -6
- package/dist/serialization/format.js +7 -7
- package/dist/serialization/hardened.d.ts +18 -18
- package/dist/serialization/hardened.d.ts.map +1 -1
- package/dist/serialization/hardened.js +41 -32
- package/dist/serialization/index.d.ts +1 -1
- package/dist/serialization/index.js +2 -2
- package/dist/serialization/reducers/class-vm.d.ts +1 -1
- package/dist/serialization/reducers/class-vm.js +2 -2
- package/dist/serialization/reducers/class.js +2 -2
- package/dist/serialization/reducers/common-vm.js +12 -12
- package/dist/serialization/reducers/common.js +12 -12
- package/dist/serialization/reducers/step-function-vm.d.ts +1 -1
- package/dist/serialization/reducers/step-function-vm.js +2 -2
- package/dist/serialization/reducers/step-function.js +2 -2
- package/dist/serialization/step.js +2 -2
- package/dist/serialization/types.d.ts +5 -5
- package/dist/serialization/types.js +2 -2
- package/dist/serialization/workflow-vm.d.ts +1 -1
- package/dist/serialization/workflow-vm.d.ts.map +1 -1
- package/dist/serialization/workflow-vm.js +13 -10
- package/dist/serialization-format.d.ts +11 -11
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +29 -23
- package/dist/serialization.d.ts +20 -12
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +141 -99
- package/dist/set-attributes.js +2 -2
- package/dist/source-map.d.ts +1 -1
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +18 -12
- package/dist/step/context-storage.d.ts +5 -5
- package/dist/step/context-storage.js +1 -1
- package/dist/step/writable-stream.d.ts +3 -3
- package/dist/step/writable-stream.js +7 -7
- package/dist/step.js +12 -12
- package/dist/symbols.d.ts +2 -2
- package/dist/symbols.js +3 -3
- package/dist/telemetry/semantic-conventions.d.ts +21 -13
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +21 -15
- package/dist/telemetry.d.ts +9 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +40 -10
- package/dist/test-support/orchestrator-context.d.ts.map +1 -1
- package/dist/test-support/orchestrator-context.js +12 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.js +4 -4
- package/dist/vm/script-cache.d.ts.map +1 -1
- package/dist/vm/script-cache.js +23 -17
- package/dist/vm/uint8array-base64.js +1 -1
- package/dist/workflow/abort-controller.d.ts +1 -1
- package/dist/workflow/abort-controller.js +12 -12
- package/dist/workflow/create-hook.js +3 -3
- package/dist/workflow/get-workflow-metadata.js +2 -2
- package/dist/workflow/hook.js +18 -18
- package/dist/workflow/set-attributes.d.ts +1 -1
- package/dist/workflow/set-attributes.js +2 -2
- package/dist/workflow/sleep.js +2 -2
- package/dist/workflow/world-init-stub.d.ts +1 -1
- package/dist/workflow/world-init-stub.js +2 -2
- package/dist/workflow.d.ts +2 -2
- package/dist/workflow.js +36 -14
- package/docs/api-reference/create-hook.mdx +15 -15
- package/docs/api-reference/create-webhook.mdx +15 -15
- package/docs/api-reference/define-hook.mdx +10 -10
- package/docs/api-reference/fatal-error.mdx +2 -2
- package/docs/api-reference/fetch.mdx +7 -7
- package/docs/api-reference/get-step-metadata.mdx +2 -2
- package/docs/api-reference/get-workflow-metadata.mdx +3 -3
- package/docs/api-reference/get-writable.mdx +7 -7
- package/docs/api-reference/index.mdx +1 -1
- package/docs/api-reference/retryable-error.mdx +1 -1
- package/docs/api-reference/set-attributes.mdx +2 -2
- package/docs/api-reference/sleep.mdx +3 -3
- package/docs/foundations/cancellation.mdx +31 -31
- package/docs/foundations/errors-and-retries.mdx +42 -11
- package/docs/foundations/hooks.mdx +37 -37
- package/docs/foundations/idempotency.mdx +9 -9
- package/docs/foundations/serialization.mdx +21 -22
- package/docs/foundations/starting-workflows.mdx +36 -37
- package/docs/foundations/streaming.mdx +68 -39
- package/docs/foundations/versioning.mdx +3 -3
- package/docs/foundations/workflows-and-steps.mdx +9 -9
- package/docs/how-it-works/cancellation.mdx +62 -62
- package/docs/how-it-works/code-transform.mdx +66 -54
- package/docs/how-it-works/encryption.mdx +25 -21
- package/docs/how-it-works/event-sourcing.mdx +84 -28
- package/docs/how-it-works/framework-integrations.mdx +12 -12
- package/docs/how-it-works/understanding-directives.mdx +21 -21
- package/package.json +7 -7
package/dist/telemetry.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { once } from '@workflow/utils';
|
|
1
|
+
import { globalSingleton, once } from '@workflow/utils';
|
|
2
2
|
import { WorkflowSuspension } from './global.js';
|
|
3
3
|
import { runtimeLogger } from './logger.js';
|
|
4
4
|
import * as Attr from './telemetry/semantic-conventions.js';
|
|
5
|
-
/**
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Unrecognized `WORKFLOW_TRACE_MODE` values we already warned about. On
|
|
7
|
+
* `globalThis` (see `globalSingleton`) so the warning stays once per process
|
|
8
|
+
* rather than once per bundler layer.
|
|
9
|
+
*/
|
|
10
|
+
const traceModeWarnings = globalSingleton('@workflow/core//traceModeWarnings', 1, () => ({ unrecognized: new Set() }));
|
|
7
11
|
/**
|
|
8
12
|
* Resolves the active trace mode from the `WORKFLOW_TRACE_MODE` env var.
|
|
9
13
|
* Defaults to `'linked'`; any value other than `'continuous'` selects it.
|
|
@@ -14,8 +18,10 @@ export function getWorkflowTraceMode() {
|
|
|
14
18
|
const value = process.env.WORKFLOW_TRACE_MODE;
|
|
15
19
|
if (value === 'continuous')
|
|
16
20
|
return 'continuous';
|
|
17
|
-
if (value &&
|
|
18
|
-
|
|
21
|
+
if (value &&
|
|
22
|
+
value !== 'linked' &&
|
|
23
|
+
!traceModeWarnings.unrecognized.has(value)) {
|
|
24
|
+
traceModeWarnings.unrecognized.add(value);
|
|
19
25
|
runtimeLogger.warn(`Unrecognized WORKFLOW_TRACE_MODE value "${value}"; expected "linked" or "continuous". Falling back to "linked".`);
|
|
20
26
|
}
|
|
21
27
|
return 'linked';
|
|
@@ -24,7 +30,7 @@ export function getWorkflowTraceMode() {
|
|
|
24
30
|
* Returns whether a serialized trace carrier is usable, i.e. present and
|
|
25
31
|
* non-empty. `serializeTraceCarrier()` returns `{}` when no OTEL SDK is
|
|
26
32
|
* registered or no span is active, and `start()` always attaches the
|
|
27
|
-
* carrier to the first queue message
|
|
33
|
+
* carrier to the first queue message, so an empty carrier must be treated
|
|
28
34
|
* the same as an absent one wherever the trace-mode logic branches.
|
|
29
35
|
*/
|
|
30
36
|
export function isUsableTraceCarrier(carrier) {
|
|
@@ -34,7 +40,7 @@ export function isUsableTraceCarrier(carrier) {
|
|
|
34
40
|
* Returns the trace carrier to attach to messages the current invocation
|
|
35
41
|
* enqueues. In `linked` mode the ORIGINAL run-origin carrier is forwarded
|
|
36
42
|
* unchanged (when usable) so every future invocation links back to the same
|
|
37
|
-
* origin; otherwise
|
|
43
|
+
* origin; otherwise (`continuous` mode, or no usable incoming carrier)
|
|
38
44
|
* the current (active) context is serialized, so the trace keeps chaining
|
|
39
45
|
* (continuous) or the first instrumented invocation becomes the de-facto
|
|
40
46
|
* origin (linked).
|
|
@@ -50,7 +56,7 @@ export function getNextTraceCarrier(traceMode, incomingCarrier) {
|
|
|
50
56
|
*
|
|
51
57
|
* - In `linked` mode the invocation span is a CHILD of the local delivery
|
|
52
58
|
* (flow-route) context, so the only link is to the run-origin context
|
|
53
|
-
* from the message's trace carrier
|
|
59
|
+
* from the message's trace carrier, connecting this bounded per-invocation
|
|
54
60
|
* trace back to where the run was started. The run-origin context is a
|
|
55
61
|
* link, never a parent, and re-enqueues forward the original carrier
|
|
56
62
|
* unchanged, so the whole run is never stitched into one giant trace.
|
|
@@ -113,7 +119,7 @@ const OtelApi = once(async () => {
|
|
|
113
119
|
// is intentional: esbuild-bundled targets (the CLI's
|
|
114
120
|
// `vercel-build-output-api` build, Nitro, Astro) ship a self-contained
|
|
115
121
|
// bundle with no node_modules, so the package must be *inlined* at build
|
|
116
|
-
// time for spans to work at runtime
|
|
122
|
+
// time for spans to work at runtime; a runtime-built specifier is opaque to
|
|
117
123
|
// esbuild and would silently disable tracing there. Bundlers that reject an
|
|
118
124
|
// unresolvable static `import()` when the peer isn't installed (Rollup/Vite,
|
|
119
125
|
// e.g. SvelteKit) instead externalize `@opentelemetry/api` in the workflow
|
|
@@ -136,12 +142,27 @@ const Tracer = once(async () => {
|
|
|
136
142
|
logOtelDiagnosticOnce(api, tracer);
|
|
137
143
|
return tracer;
|
|
138
144
|
});
|
|
145
|
+
const StepExecutionDurationHistogram = once(async () => {
|
|
146
|
+
const otel = await OtelApi.value;
|
|
147
|
+
if (!otel)
|
|
148
|
+
return null;
|
|
149
|
+
// service.name is a resource attribute, applied by the configured provider.
|
|
150
|
+
return otel.metrics
|
|
151
|
+
.getMeter('workflow')
|
|
152
|
+
.createHistogram('workflow.step.execute.duration', {
|
|
153
|
+
description: 'Duration of user step execution',
|
|
154
|
+
unit: 'ms',
|
|
155
|
+
});
|
|
156
|
+
});
|
|
139
157
|
/**
|
|
140
158
|
* One-shot runtime diagnostic (DEBUG=workflow:* only), same shape as the one
|
|
141
159
|
* world-vercel emits tagged `world-vercel`: prints how this module instance
|
|
142
160
|
* of `@opentelemetry/api` sees the global registration, so a deployment's
|
|
143
161
|
* logs show the two packages' views side by side.
|
|
144
162
|
*/
|
|
163
|
+
// per-copy-ok: this diagnostic reports how THIS module instance sees the global
|
|
164
|
+
// OTel registration, which is the whole point of the log. With several copies
|
|
165
|
+
// in a process, each one's view is what is worth seeing.
|
|
145
166
|
let otelDiagLogged = false;
|
|
146
167
|
function logOtelDiagnosticOnce(otel, tracer) {
|
|
147
168
|
const debugEnabled = typeof process !== 'undefined' &&
|
|
@@ -216,6 +237,15 @@ export async function recordElapsedSpan(spanName, startEpochMs, opts) {
|
|
|
216
237
|
return;
|
|
217
238
|
tracer.startSpan(spanName, { ...opts, startTime: startEpochMs }).end();
|
|
218
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Records the same user-code interval as the inner `step.execute` span. The
|
|
242
|
+
* configured OpenTelemetry meter provider attaches resource dimensions such as
|
|
243
|
+
* service.name, so this avoids accepting a caller-controlled service tag.
|
|
244
|
+
*/
|
|
245
|
+
export async function recordStepExecutionDuration(durationMs, status) {
|
|
246
|
+
const histogram = await StepExecutionDurationHistogram.value;
|
|
247
|
+
histogram?.record(durationMs, { 'workflow.step.status': status });
|
|
248
|
+
}
|
|
219
249
|
/**
|
|
220
250
|
* Applies the workflow suspension algebraic effect to an active span.
|
|
221
251
|
*/
|
|
@@ -334,4 +364,4 @@ export async function getWorkflowBaggage() {
|
|
|
334
364
|
workflowName: name,
|
|
335
365
|
};
|
|
336
366
|
}
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxxQ0FBcUMsQ0FBQztBQW9CNUQseUVBQXlFO0FBQ3pFLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUM5QyxJQUFJLEtBQUssS0FBSyxZQUFZO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDaEQsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVFLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxhQUFhLENBQUMsSUFBSSxDQUNoQiwyQ0FBMkMsS0FBSyxpRUFBaUUsQ0FDbEgsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxPQUEyQztJQUUzQyxPQUFPLE9BQU8sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsU0FBNEIsRUFDNUIsZUFB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O1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFdEMsT0FBTztRQUNMLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBhcGkgZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbktpbmQsIFNwYW5PcHRpb25zIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IG9uY2UgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCAqIGFzIEF0dHIgZnJvbSAnLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYWNlIENvbnRleHQgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb250cm9scyBob3cgd29ya2Zsb3cvc3RlcCBxdWV1ZS1oYW5kbGVyIHNwYW5zIHJlbGF0ZSB0byB0aGUgcnVuLW9yaWdpblxuICogdHJhY2UgY29udGV4dCBjYXJyaWVkIGluIHF1ZXVlIG1lc3NhZ2VzOlxuICpcbiAqIC0gYCdsaW5rZWQnYCAoZGVmYXVsdCk6IGVhY2ggaW52b2NhdGlvbiBzdGFydHMgYSBORVcgcm9vdCB0cmFjZTsgdGhlXG4gKiAgIHJ1bi1vcmlnaW4gY29udGV4dCAoYW5kIHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0KSBhcmUgYXR0YWNoZWQgYXNcbiAqICAgc3BhbiBsaW5rcy4gVGhpcyBrZWVwcyB0cmFjZXMgYm91bmRlZCBwZXIgaW52b2NhdGlvbiBpbnN0ZWFkIG9mXG4gKiAgIHN0aXRjaGluZyBhIGxvbmctbGl2ZWQgcnVuIGludG8gb25lIGdpYW50IHRyYWNlLlxuICogLSBgJ2NvbnRpbnVvdXMnYDogdGhlIHJlc3RvcmVkIHJ1bi1vcmlnaW4gY29udGV4dCBiZWNvbWVzIHRoZSBwYXJlbnQgb2ZcbiAqICAgdGhlIGludm9jYXRpb24gc3BhbiAobGVnYWN5IGJlaGF2aW9yKSwgcHJvZHVjaW5nIGEgc2luZ2xlIHRyYWNlIHRoYXRcbiAqICAgc3BhbnMgdGhlIGVudGlyZSBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93VHJhY2VNb2RlID0gJ2xpbmtlZCcgfCAnY29udGludW91cyc7XG5cbi8qKiBVbnJlY29nbml6ZWQgYFdPUktGTE9XX1RSQUNFX01PREVgIHZhbHVlcyB3ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC4gKi9cbmNvbnN0IHdhcm5lZFVucmVjb2duaXplZFRyYWNlTW9kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYWN0aXZlIHRyYWNlIG1vZGUgZnJvbSB0aGUgYFdPUktGTE9XX1RSQUNFX01PREVgIGVudiB2YXIuXG4gKiBEZWZhdWx0cyB0byBgJ2xpbmtlZCdgOyBhbnkgdmFsdWUgb3RoZXIgdGhhbiBgJ2NvbnRpbnVvdXMnYCBzZWxlY3RzIGl0LlxuICogVW5yZWNvZ25pemVkIG5vbi1lbXB0eSB2YWx1ZXMgKGUuZy4gdHlwb3MgbGlrZSBgY29udGlub3VzYCkgZW1pdCBhXG4gKiBvbmUtdGltZSB3YXJuaW5nIHNvIHNpbGVudCBmYWxsYmFjayB0byBgbGlua2VkYCBpcyBhdCBsZWFzdCB2aXNpYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dUcmFjZU1vZGUoKTogV29ya2Zsb3dUcmFjZU1vZGUge1xuICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52LldPUktGTE9XX1RSQUNFX01PREU7XG4gIGlmICh2YWx1ZSA9PT0gJ2NvbnRpbnVvdXMnKSByZXR1cm4gJ2NvbnRpbnVvdXMnO1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICdsaW5rZWQnICYmICF3YXJuZWRVbnJlY29nbml6ZWRUcmFjZU1vZGVzLmhhcyh2YWx1ZSkpIHtcbiAgICB3YXJuZWRVbnJlY29nbml6ZWRUcmFjZU1vZGVzLmFkZCh2YWx1ZSk7XG4gICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgYFVucmVjb2duaXplZCBXT1JLRkxPV19UUkFDRV9NT0RFIHZhbHVlIFwiJHt2YWx1ZX1cIjsgZXhwZWN0ZWQgXCJsaW5rZWRcIiBvciBcImNvbnRpbnVvdXNcIi4gRmFsbGluZyBiYWNrIHRvIFwibGlua2VkXCIuYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuICdsaW5rZWQnO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIHNlcmlhbGl6ZWQgdHJhY2UgY2FycmllciBpcyB1c2FibGUsIGkuZS4gcHJlc2VudCBhbmRcbiAqIG5vbi1lbXB0eS4gYHNlcmlhbGl6ZVRyYWNlQ2FycmllcigpYCByZXR1cm5zIGB7fWAgd2hlbiBubyBPVEVMIFNESyBpc1xuICogcmVnaXN0ZXJlZCBvciBubyBzcGFuIGlzIGFjdGl2ZSwgYW5kIGBzdGFydCgpYCBhbHdheXMgYXR0YWNoZXMgdGhlXG4gKiBjYXJyaWVyIHRvIHRoZSBmaXJzdCBxdWV1ZSBtZXNzYWdlIOKAlCBzbyBhbiBlbXB0eSBjYXJyaWVyIG11c3QgYmUgdHJlYXRlZFxuICogdGhlIHNhbWUgYXMgYW4gYWJzZW50IG9uZSB3aGVyZXZlciB0aGUgdHJhY2UtbW9kZSBsb2dpYyBicmFuY2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXNhYmxlVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBjYXJyaWVyIGlzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gY2FycmllciAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKGNhcnJpZXIpLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhY2UgY2FycmllciB0byBhdHRhY2ggdG8gbWVzc2FnZXMgdGhlIGN1cnJlbnQgaW52b2NhdGlvblxuICogZW5xdWV1ZXMuIEluIGBsaW5rZWRgIG1vZGUgdGhlIE9SSUdJTkFMIHJ1bi1vcmlnaW4gY2FycmllciBpcyBmb3J3YXJkZWRcbiAqIHVuY2hhbmdlZCAod2hlbiB1c2FibGUpIHNvIGV2ZXJ5IGZ1dHVyZSBpbnZvY2F0aW9uIGxpbmtzIGJhY2sgdG8gdGhlIHNhbWVcbiAqIG9yaWdpbjsgb3RoZXJ3aXNlIOKAlCBgY29udGludW91c2AgbW9kZSwgb3Igbm8gdXNhYmxlIGluY29taW5nIGNhcnJpZXIg4oCUXG4gKiB0aGUgY3VycmVudCAoYWN0aXZlKSBjb250ZXh0IGlzIHNlcmlhbGl6ZWQsIHNvIHRoZSB0cmFjZSBrZWVwcyBjaGFpbmluZ1xuICogKGNvbnRpbnVvdXMpIG9yIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgaW52b2NhdGlvbiBiZWNvbWVzIHRoZSBkZS1mYWN0b1xuICogb3JpZ2luIChsaW5rZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFRyYWNlQ2FycmllcihcbiAgdHJhY2VNb2RlOiBXb3JrZmxvd1RyYWNlTW9kZSxcbiAgaW5jb21pbmdDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHRyYWNlTW9kZSA9PT0gJ2xpbmtlZCcgJiYgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKVxuICAgID8gUHJvbWlzZS5yZXNvbHZlKGluY29taW5nQ2FycmllcilcbiAgICA6IHNlcmlhbGl6ZVRyYWNlQ2FycmllcigpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc3BhbiBsaW5rcyBmb3IgYSBxdWV1ZS1kZWxpdmVyZWQgaW52b2NhdGlvbiBzcGFuXG4gKiAoYHdvcmtmbG93LmV4ZWN1dGVgIC8gYHN0ZXAuZXhlY3V0ZWApOlxuICpcbiAqIC0gSW4gYGxpbmtlZGAgbW9kZSB0aGUgaW52b2NhdGlvbiBzcGFuIGlzIGEgQ0hJTEQgb2YgdGhlIGxvY2FsIGRlbGl2ZXJ5XG4gKiAgIChmbG93LXJvdXRlKSBjb250ZXh0LCBzbyB0aGUgb25seSBsaW5rIGlzIHRvIHRoZSBydW4tb3JpZ2luIGNvbnRleHRcbiAqICAgZnJvbSB0aGUgbWVzc2FnZSdzIHRyYWNlIGNhcnJpZXIg4oCUIGNvbm5lY3RpbmcgdGhpcyBib3VuZGVkIHBlci1pbnZvY2F0aW9uXG4gKiAgIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhlIHJ1biB3YXMgc3RhcnRlZC4gVGhlIHJ1bi1vcmlnaW4gY29udGV4dCBpcyBhXG4gKiAgIGxpbmssIG5ldmVyIGEgcGFyZW50LCBhbmQgcmUtZW5xdWV1ZXMgZm9yd2FyZCB0aGUgb3JpZ2luYWwgY2FycmllclxuICogICB1bmNoYW5nZWQsIHNvIHRoZSB3aG9sZSBydW4gaXMgbmV2ZXIgc3RpdGNoZWQgaW50byBvbmUgZ2lhbnQgdHJhY2UuXG4gKiAgIFRoZSBsaW5rIGlzIHNraXBwZWQgd2hlbiB0aGUgY2FycmllciBpcyBhYnNlbnQsIGVtcHR5LCBvciBpbnZhbGlkLlxuICogLSBJbiBgY29udGludW91c2AgbW9kZSB0aGUgcnVuLW9yaWdpbiBjb250ZXh0IGlzIHJlc3RvcmVkIGFzIHRoZSBwYXJlbnRcbiAqICAgaW5zdGVhZCwgYW5kIHRoZSBsaW5rIHBvaW50cyBhdCB0aGUgaW5jb21pbmcgZGVsaXZlcnkgY29udGV4dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkSW52b2NhdGlvblNwYW5MaW5rcyhcbiAgdHJhY2VNb2RlOiBXb3JrZmxvd1RyYWNlTW9kZSxcbiAgaW5jb21pbmdDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPGFwaS5MaW5rW10gfCB1bmRlZmluZWQ+IHtcbiAgaWYgKHRyYWNlTW9kZSAhPT0gJ2xpbmtlZCcpIHJldHVybiBsaW5rVG9DdXJyZW50Q29udGV4dCgpO1xuICBjb25zdCBvcmlnaW5MaW5rID0gYXdhaXQgbGlua1RvVHJhY2VDYXJyaWVyKFxuICAgIGlzVXNhYmxlVHJhY2VDYXJyaWVyKGluY29taW5nQ2FycmllcikgPyBpbmNvbWluZ0NhcnJpZXIgOiB1bmRlZmluZWRcbiAgKTtcbiAgcmV0dXJuIG9yaWdpbkxpbmsgPyBbb3JpZ2luTGlua10gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgY3VycmVudCB0cmFjZSBjb250ZXh0IGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggcXVldWVzXG4gKiBAcmV0dXJucyBBIHJlY29yZCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdHJhY2UgY29udGV4dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4ge307XG4gIGNvbnN0IGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgLy8gSW5qZWN0IHRoZSBjdXJyZW50IGNvbnRleHQgaW50byB0aGUgY2FycmllclxuICBvdGVsLnByb3BhZ2F0aW9uLmluamVjdChvdGVsLmNvbnRleHQuYWN0aXZlKCksIGNhcnJpZXIpO1xuICByZXR1cm4gY2Fycmllcjtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgdHJhY2UgY29udGV4dCBhbmQgcmV0dXJucyBhIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSB0aGUgdHJhY2VcbiAqIEBwYXJhbSB0cmFjZUNhcnJpZXIgVGhlIHNlcmlhbGl6ZWQgdHJhY2UgY29udGV4dFxuICogQHJldHVybnMgT3BlblRlbGVtZXRyeSBjb250ZXh0IHdpdGggdGhlIHJlc3RvcmVkIHRyYWNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZVRyYWNlQ2FycmllcihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuO1xuICAvLyBFeHRyYWN0IHRoZSBjb250ZXh0IGZyb20gdGhlIGNhcnJpZXJcbiAgcmV0dXJuIG90ZWwucHJvcGFnYXRpb24uZXh0cmFjdChvdGVsLmNvbnRleHQuYWN0aXZlKCksIHRyYWNlQ2Fycmllcik7XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIGRlc2VyaWFsaXplZCB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIChvcHRpb25hbClcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgdHJhY2UgY29udGV4dFxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhUcmFjZUNvbnRleHQ8VD4oXG4gIHRyYWNlQ2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBpZiAoIXRyYWNlQ2Fycmllcikge1xuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIGZuKCk7XG5cbiAgY29uc3QgZXh0cmFjdGVkQ29udGV4dCA9IGF3YWl0IGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKHRyYWNlQ2Fycmllcik7XG4gIGlmICghZXh0cmFjdGVkQ29udGV4dCkge1xuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGV4dHJhY3RlZENvbnRleHQsIGFzeW5jICgpID0+IGF3YWl0IGZuKCkpO1xufVxuXG5jb25zdCBPdGVsQXBpID0gb25jZShhc3luYyAoKSA9PiB7XG4gIC8vIGBAb3BlbnRlbGVtZXRyeS9hcGlgIGlzIGFuIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeS4gVGhlIHN0YXRpYyBzcGVjaWZpZXJcbiAgLy8gaXMgaW50ZW50aW9uYWw6IGVzYnVpbGQtYnVuZGxlZCB0YXJnZXRzICh0aGUgQ0xJJ3NcbiAgLy8gYHZlcmNlbC1idWlsZC1vdXRwdXQtYXBpYCBidWlsZCwgTml0cm8sIEFzdHJvKSBzaGlwIGEgc2VsZi1jb250YWluZWRcbiAgLy8gYnVuZGxlIHdpdGggbm8gbm9kZV9tb2R1bGVzLCBzbyB0aGUgcGFja2FnZSBtdXN0IGJlICppbmxpbmVkKiBhdCBidWlsZFxuICAvLyB0aW1lIGZvciBzcGFucyB0byB3b3JrIGF0IHJ1bnRpbWUg4oCUIGEgcnVudGltZS1idWlsdCBzcGVjaWZpZXIgaXMgb3BhcXVlIHRvXG4gIC8vIGVzYnVpbGQgYW5kIHdvdWxkIHNpbGVudGx5IGRpc2FibGUgdHJhY2luZyB0aGVyZS4gQnVuZGxlcnMgdGhhdCByZWplY3QgYW5cbiAgLy8gdW5yZXNvbHZhYmxlIHN0YXRpYyBgaW1wb3J0KClgIHdoZW4gdGhlIHBlZXIgaXNuJ3QgaW5zdGFsbGVkIChSb2xsdXAvVml0ZSxcbiAgLy8gZS5nLiBTdmVsdGVLaXQpIGluc3RlYWQgZXh0ZXJuYWxpemUgYEBvcGVudGVsZW1ldHJ5L2FwaWAgaW4gdGhlIHdvcmtmbG93XG4gIC8vIGZyYW1ld29yayBpbnRlZ3JhdGlvbiwgd2hpY2gga2VlcHMgdGhlIGJ1aWxkIGdyZWVuIGFuZCBzdGlsbCBsb2FkcyByZWFsXG4gIC8vIE9UZWwgd2hlbiB0aGUgcGVlciBpcyBwcmVzZW50LiBSdW50aW1lIHNlbWFudGljczogcHJlc2VudCDihpIgbG9hZGVkLCBhYnNlbnRcbiAgLy8g4oaSIGNhdWdodCBhbmQgdHJhY2luZyBkaXNhYmxlZC5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgaW1wb3J0KCdAb3BlbnRlbGVtZXRyeS9hcGknKTtcbiAgfSBjYXRjaCB7XG4gICAgcnVudGltZUxvZ2dlci5pbmZvKCdPcGVuVGVsZW1ldHJ5IG5vdCBhdmFpbGFibGUsIHRyYWNpbmcgd2lsbCBiZSBkaXNhYmxlZCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59KTtcblxuY29uc3QgVHJhY2VyID0gb25jZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGFwaSA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghYXBpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdHJhY2VyID0gYXBpLnRyYWNlLmdldFRyYWNlcignd29ya2Zsb3cnKTtcbiAgbG9nT3RlbERpYWdub3N0aWNPbmNlKGFwaSwgdHJhY2VyKTtcbiAgcmV0dXJuIHRyYWNlcjtcbn0pO1xuXG4vKipcbiAqIE9uZS1zaG90IHJ1bnRpbWUgZGlhZ25vc3RpYyAoREVCVUc9d29ya2Zsb3c6KiBvbmx5KSwgc2FtZSBzaGFwZSBhcyB0aGUgb25lXG4gKiB3b3JsZC12ZXJjZWwgZW1pdHMgdGFnZ2VkIGB3b3JsZC12ZXJjZWxgOiBwcmludHMgaG93IHRoaXMgbW9kdWxlIGluc3RhbmNlXG4gKiBvZiBgQG9wZW50ZWxlbWV0cnkvYXBpYCBzZWVzIHRoZSBnbG9iYWwgcmVnaXN0cmF0aW9uLCBzbyBhIGRlcGxveW1lbnQnc1xuICogbG9ncyBzaG93IHRoZSB0d28gcGFja2FnZXMnIHZpZXdzIHNpZGUgYnkgc2lkZS5cbiAqL1xubGV0IG90ZWxEaWFnTG9nZ2VkID0gZmFsc2U7XG5mdW5jdGlvbiBsb2dPdGVsRGlhZ25vc3RpY09uY2Uob3RlbDogdHlwZW9mIGFwaSwgdHJhY2VyOiBhcGkuVHJhY2VyKTogdm9pZCB7XG4gIGNvbnN0IGRlYnVnRW5hYmxlZCA9XG4gICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MuZW52LkRFQlVHID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9jZXNzLmVudi5ERUJVRy5pbmNsdWRlcygnd29ya2Zsb3c6JykgfHwgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICcqJyk7XG4gIGlmIChvdGVsRGlhZ0xvZ2dlZCB8fCAhZGVidWdFbmFibGVkKSByZXR1cm47XG4gIG90ZWxEaWFnTG9nZ2VkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBnID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgU3ltYm9sLmZvcignb3BlbnRlbGVtZXRyeS5qcy5hcGkuMScpXG4gICAgXSBhcyB7IHZlcnNpb24/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm92aWRlciA9IG90ZWwudHJhY2UuZ2V0VHJhY2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9XG4gICAgICAocHJvdmlkZXIgYXMgeyBnZXREZWxlZ2F0ZT86ICgpID0+IHVua25vd24gfSkuZ2V0RGVsZWdhdGU/LigpID8/IHByb3ZpZGVyO1xuICAgIGNvbnN0IHByb2JlID0gdHJhY2VyLnN0YXJ0U3Bhbignd29ya2Zsb3cub3RlbC5wcm9iZS5jb3JlJyk7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1t3b3JrZmxvdzpvdGVsLWRpYWddIGNvcmUnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnbG9iYWxSZWdpc3RyYXRpb25WZXJzaW9uOiBnPy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgIHByb3ZpZGVyQ3RvcjogcHJvdmlkZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIGRlbGVnYXRlQ3RvcjogKGRlbGVnYXRlIGFzIG9iamVjdCB8IG51bGwpPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBudWxsLFxuICAgICAgICB0cmFjZXJDdG9yOiB0cmFjZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHByb2JlQ3RvcjogcHJvYmU/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHByb2JlUmVjb3JkaW5nOiBwcm9iZS5pc1JlY29yZGluZygpLFxuICAgICAgfSlcbiAgICApO1xuICAgIHByb2JlLmVuZCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdbd29ya2Zsb3c6b3RlbC1kaWFnXSBjb3JlIGZhaWxlZDonLFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWNlPFQ+KFxuICBzcGFuTmFtZTogc3RyaW5nLFxuICAuLi5hcmdzOlxuICAgIHwgW2ZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4gICAgfCBbb3B0czogU3Bhbk9wdGlvbnMsIGZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgW3RyYWNlciwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbVHJhY2VyLnZhbHVlLCBPdGVsQXBpLnZhbHVlXSk7XG4gIGNvbnN0IHsgZm4sIG9wdHMgfSA9XG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgID8geyBmbjogYXJnc1swXSwgb3B0czoge30gfVxuICAgICAgOiB7IGZuOiBhcmdzWzFdLCBvcHRzOiBhcmdzWzBdIH07XG4gIGlmICghZm4pIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gdG8gdHJhY2UgbXVzdCBiZSBwcm92aWRlZCcpO1xuXG4gIGlmICghdHJhY2VyIHx8ICFvdGVsKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cblxuICByZXR1cm4gdHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihzcGFuTmFtZSwgb3B0cywgYXN5bmMgKHNwYW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oc3Bhbik7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChXb3JrZmxvd1N1c3BlbnNpb24uaXMoZSkpIHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICBhcHBseVdvcmtmbG93U3VzcGVuc2lvblRvU3BhbihlLCBzcGFuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgIG1lc3NhZ2U6IChlIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBFbWl0IGEgc3BhbiB3aG9zZSBzdGFydCBpcyBiYWNrLWRhdGVkIHRvIGBzdGFydEVwb2NoTXNgIGFuZCB3aG9zZSBlbmQgaXMgbm93LFxuICogc28gaXRzIGR1cmF0aW9uIHJlZmxlY3RzIGFuIGludGVydmFsIG9ubHkgbWVhc3VyYWJsZSBhdCBpdHMgZW5kIChlLmcuXG4gKiB0aW1lLXRvLWZpcnN0LWNodW5rLCBrbm93biB3aGVuIHRoZSBmaXJzdCBjaHVuayBhcnJpdmVzKS4gVW5saWtlIGB0cmFjZSgpYCxcbiAqIHRoaXMgcmVjb3JkcyBhbiBhbHJlYWR5LWVsYXBzZWQgc3BhbiBpbiBvbmUgc2hvdCByYXRoZXIgdGhhbiB3cmFwcGluZyBhXG4gKiBjYWxsYmFjay4gTm8tb3Agd2hlbiBPcGVuVGVsZW1ldHJ5IGlzIG5vdCBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvcmRFbGFwc2VkU3BhbihcbiAgc3Bhbk5hbWU6IHN0cmluZyxcbiAgc3RhcnRFcG9jaE1zOiBudW1iZXIsXG4gIG9wdHM/OiBTcGFuT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYWNlciA9IGF3YWl0IFRyYWNlci52YWx1ZTtcbiAgaWYgKCF0cmFjZXIpIHJldHVybjtcbiAgdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgeyAuLi5vcHRzLCBzdGFydFRpbWU6IHN0YXJ0RXBvY2hNcyB9KS5lbmQoKTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIHRoZSB3b3JrZmxvdyBzdXNwZW5zaW9uIGFsZ2VicmFpYyBlZmZlY3QgdG8gYW4gYWN0aXZlIHNwYW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVdvcmtmbG93U3VzcGVuc2lvblRvU3BhbihcbiAgZXJyb3I6IFdvcmtmbG93U3VzcGVuc2lvbixcbiAgc3BhbjogYXBpLlNwYW5cbik6IHZvaWQge1xuICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uU3RhdGUoJ3N1c3BlbmRlZCcpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uU3RlcENvdW50KGVycm9yLnN0ZXBDb3VudCksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25Ib29rQ291bnQoZXJyb3IuaG9va0NvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbldhaXRDb3VudChlcnJvci53YWl0Q291bnQpLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNwYW5Db250ZXh0Rm9yVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgY29uc3QgW2Rlc2VyaWFsaXplZCwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIoY2FycmllciksXG4gICAgT3RlbEFwaS52YWx1ZSxcbiAgXSk7XG4gIGlmICghZGVzZXJpYWxpemVkIHx8ICFvdGVsKSByZXR1cm47XG4gIHJldHVybiBvdGVsLnRyYWNlLmdldFNwYW5Db250ZXh0KGRlc2VyaWFsaXplZCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICByZXR1cm4gYXdhaXQgd2l0aE90ZWwoKG90ZWwpID0+IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhbGwgbWV0aG9kcyBvZiBhbiBvYmplY3Qgd2l0aCB0cmFjaW5nIHNwYW5zLlxuICogQHBhcmFtIHByZWZpeCAtIFByZWZpeCBmb3Igc3BhbiBuYW1lcyAoZS5nLiwgXCJXT1JMRC5ydW5zXCIpXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB3aXRoIG1ldGhvZHMgdG8gaW5zdHJ1bWVudFxuICogQHJldHVybnMgSW5zdHJ1bWVudGVkIG9iamVjdCB3aXRoIHNhbWUgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0cnVtZW50T2JqZWN0PFQgZXh0ZW5kcyBvYmplY3Q+KHByZWZpeDogc3RyaW5nLCBvOiBUKTogVCB7XG4gIGNvbnN0IGhhbmRsZXJzID0ge30gYXMgVDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobykgYXMgKGtleW9mIFQpW10pIHtcbiAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlcnNba2V5XSA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZiA9IG9ba2V5XTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGhhbmRsZXJzW2tleV0gPSBhc3luYyAoLi4uYXJnczogYW55W10pID0+XG4gICAgICAgIHRyYWNlKGAke3ByZWZpeH0uJHtTdHJpbmcoa2V5KX1gLCB7fSwgKCkgPT4gZiguLi5hcmdzKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBoYW5kbGVycztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNwYW5LaW5kKGZpZWxkOiBrZXlvZiB0eXBlb2YgU3BhbktpbmQpIHtcbiAgcmV0dXJuIHdpdGhPdGVsKCh4KSA9PiB4LlNwYW5LaW5kW2ZpZWxkXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoT3RlbDxUPihcbiAgZm46IChvdGVsOiB0eXBlb2YgYXBpKSA9PiBUXG4pOiBQcm9taXNlPEF3YWl0ZWQ8VD4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGF3YWl0IGZuKG90ZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1RvQ3VycmVudENvbnRleHQoKTogUHJvbWlzZTxbYXBpLkxpbmtdIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB3aXRoT3RlbCgob3RlbCk6IFthcGkuTGlua10gfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBvdGVsLnRyYWNlLmdldEFjdGl2ZVNwYW4oKT8uc3BhbkNvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQpIHJldHVybjtcbiAgICByZXR1cm4gW3sgY29udGV4dCB9XTtcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc3BhbiBsaW5rIHBvaW50aW5nIGF0IHRoZSBzcGFuIGNvbnRleHQgZW1iZWRkZWQgaW4gYSBzZXJpYWxpemVkXG4gKiB0cmFjZSBjYXJyaWVyIChlLmcuIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgZmxvd2luZyB0aHJvdWdoIHF1ZXVlXG4gKiBtZXNzYWdlcykuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBPVEVMIGlzIHVuYXZhaWxhYmxlLCB0aGUgY2FycmllciBpc1xuICogYWJzZW50LCBvciBpdCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgc3BhbiBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlua1RvVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPGFwaS5MaW5rIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghY2FycmllcikgcmV0dXJuO1xuICBjb25zdCBbY29udGV4dCwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoY2FycmllciksXG4gICAgT3RlbEFwaS52YWx1ZSxcbiAgXSk7XG4gIGlmICghY29udGV4dCB8fCAhb3RlbCkgcmV0dXJuO1xuICBpZiAoIW90ZWwudHJhY2UuaXNTcGFuQ29udGV4dFZhbGlkKGNvbnRleHQpKSByZXR1cm47XG4gIHJldHVybiB7IGNvbnRleHQgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYWdnYWdlIFByb3BhZ2F0aW9uIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgY29udGV4dCB0byBwcm9wYWdhdGUgdmlhIGJhZ2dhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0IHtcbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nO1xuICB3b3JrZmxvd05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXRzIHdvcmtmbG93IGNvbnRleHQgYXMgT1RFTCBiYWdnYWdlIGZvciBhdXRvbWF0aWMgcHJvcGFnYXRpb24uXG4gKiBCYWdnYWdlIGlzIHByb3BhZ2F0ZWQgYWNyb3NzIHNlcnZpY2UgYm91bmRhcmllcyB2aWEgSFRUUCBoZWFkZXJzLlxuICogQHBhcmFtIGNvbnRleHQgLSBXb3JrZmxvdyBjb250ZXh0IHRvIHNldCBhcyBiYWdnYWdlXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHJ1biB3aXRoaW4gdGhlIGJhZ2dhZ2UgY29udGV4dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFdvcmtmbG93QmFnZ2FnZTxUPihcbiAgY29udGV4dDogV29ya2Zsb3dCYWdnYWdlQ29udGV4dCxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICAvLyBDcmVhdGUgYmFnZ2FnZSB3aXRoIHdvcmtmbG93IGNvbnRleHRcbiAgY29uc3QgYmFnZ2FnZSA9IG90ZWwucHJvcGFnYXRpb24uY3JlYXRlQmFnZ2FnZSh7XG4gICAgJ3dvcmtmbG93LnJ1bl9pZCc6IHsgdmFsdWU6IGNvbnRleHQud29ya2Zsb3dSdW5JZCB9LFxuICAgICd3b3JrZmxvdy5uYW1lJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd05hbWUgfSxcbiAgfSk7XG5cbiAgLy8gU2V0IGJhZ2dhZ2UgaW4gY29udGV4dCBhbmQgcnVuIGZ1bmN0aW9uXG4gIGNvbnN0IGNvbnRleHRXaXRoQmFnZ2FnZSA9IG90ZWwucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShcbiAgICBvdGVsLmNvbnRleHQuYWN0aXZlKCksXG4gICAgYmFnZ2FnZVxuICApO1xuXG4gIHJldHVybiBvdGVsLmNvbnRleHQud2l0aChjb250ZXh0V2l0aEJhZ2dhZ2UsICgpID0+IGZuKCkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3b3JrZmxvdyBjb250ZXh0IGZyb20gT1RFTCBiYWdnYWdlLlxuICogQHJldHVybnMgV29ya2Zsb3cgY29udGV4dCBpZiBwcmVzZW50IGluIGJhZ2dhZ2UsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtmbG93QmFnZ2FnZSgpOiBQcm9taXNlPFxuICBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0IHwgdW5kZWZpbmVkXG4+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5nZXRCYWdnYWdlKG90ZWwuY29udGV4dC5hY3RpdmUoKSk7XG4gIGlmICghYmFnZ2FnZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW5JZCA9IGJhZ2dhZ2UuZ2V0RW50cnkoJ3dvcmtmbG93LnJ1bl9pZCcpPy52YWx1ZTtcbiAgY29uc3QgbmFtZSA9IGJhZ2dhZ2UuZ2V0RW50cnkoJ3dvcmtmbG93Lm5hbWUnKT8udmFsdWU7XG5cbiAgaWYgKCFydW5JZCB8fCAhbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIHdvcmtmbG93UnVuSWQ6IHJ1bklkLFxuICAgIHdvcmtmbG93TmFtZTogbmFtZSxcbiAgfTtcbn1cbiJdfQ==
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0scUNBQXFDLENBQUM7QUFvQjVEOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FDdkMsbUNBQW1DLEVBQ25DLENBQUMsRUFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsQ0FBQyxDQUM1QyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFDOUMsSUFBSSxLQUFLLEtBQUssWUFBWTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ2hELElBQ0UsS0FBSztRQUNMLEtBQUssS0FBSyxRQUFRO1FBQ2xCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFDMUMsQ0FBQztRQUNELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsYUFBYSxDQUFDLElBQUksQ0FDaEIsMkNBQTJDLEtBQUssaUVBQWlFLENBQ2xILENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsT0FBMkM7SUFFM0MsT0FBTyxPQUFPLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxJ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Q2pELENBQUMsQ0FBQztJQUVILDBDQUEwQztJQUMxQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUNyQixPQUFPLENBQ1IsQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0I7SUFHdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUV0RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE9BQU87UUFDTCxhQUFhLEVBQUUsS0FBSztRQUNwQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5LaW5kLCBTcGFuT3B0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24sIG9uY2UgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCAqIGFzIEF0dHIgZnJvbSAnLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYWNlIENvbnRleHQgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb250cm9scyBob3cgd29ya2Zsb3cvc3RlcCBxdWV1ZS1oYW5kbGVyIHNwYW5zIHJlbGF0ZSB0byB0aGUgcnVuLW9yaWdpblxuICogdHJhY2UgY29udGV4dCBjYXJyaWVkIGluIHF1ZXVlIG1lc3NhZ2VzOlxuICpcbiAqIC0gYCdsaW5rZWQnYCAoZGVmYXVsdCk6IGVhY2ggaW52b2NhdGlvbiBzdGFydHMgYSBORVcgcm9vdCB0cmFjZTsgdGhlXG4gKiAgIHJ1bi1vcmlnaW4gY29udGV4dCAoYW5kIHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0KSBhcmUgYXR0YWNoZWQgYXNcbiAqICAgc3BhbiBsaW5rcy4gVGhpcyBrZWVwcyB0cmFjZXMgYm91bmRlZCBwZXIgaW52b2NhdGlvbiBpbnN0ZWFkIG9mXG4gKiAgIHN0aXRjaGluZyBhIGxvbmctbGl2ZWQgcnVuIGludG8gb25lIGdpYW50IHRyYWNlLlxuICogLSBgJ2NvbnRpbnVvdXMnYDogdGhlIHJlc3RvcmVkIHJ1bi1vcmlnaW4gY29udGV4dCBiZWNvbWVzIHRoZSBwYXJlbnQgb2ZcbiAqICAgdGhlIGludm9jYXRpb24gc3BhbiAobGVnYWN5IGJlaGF2aW9yKSwgcHJvZHVjaW5nIGEgc2luZ2xlIHRyYWNlIHRoYXRcbiAqICAgc3BhbnMgdGhlIGVudGlyZSBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93VHJhY2VNb2RlID0gJ2xpbmtlZCcgfCAnY29udGludW91cyc7XG5cbi8qKlxuICogVW5yZWNvZ25pemVkIGBXT1JLRkxPV19UUkFDRV9NT0RFYCB2YWx1ZXMgd2UgYWxyZWFkeSB3YXJuZWQgYWJvdXQuIE9uXG4gKiBgZ2xvYmFsVGhpc2AgKHNlZSBgZ2xvYmFsU2luZ2xldG9uYCkgc28gdGhlIHdhcm5pbmcgc3RheXMgb25jZSBwZXIgcHJvY2Vzc1xuICogcmF0aGVyIHRoYW4gb25jZSBwZXIgYnVuZGxlciBsYXllci5cbiAqL1xuY29uc3QgdHJhY2VNb2RlV2FybmluZ3MgPSBnbG9iYWxTaW5nbGV0b24oXG4gICdAd29ya2Zsb3cvY29yZS8vdHJhY2VNb2RlV2FybmluZ3MnLFxuICAxLFxuICAoKSA9PiAoeyB1bnJlY29nbml6ZWQ6IG5ldyBTZXQ8c3RyaW5nPigpIH0pXG4pO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBhY3RpdmUgdHJhY2UgbW9kZSBmcm9tIHRoZSBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgZW52IHZhci5cbiAqIERlZmF1bHRzIHRvIGAnbGlua2VkJ2A7IGFueSB2YWx1ZSBvdGhlciB0aGFuIGAnY29udGludW91cydgIHNlbGVjdHMgaXQuXG4gKiBVbnJlY29nbml6ZWQgbm9uLWVtcHR5IHZhbHVlcyAoZS5nLiB0eXBvcyBsaWtlIGBjb250aW5vdXNgKSBlbWl0IGFcbiAqIG9uZS10aW1lIHdhcm5pbmcgc28gc2lsZW50IGZhbGxiYWNrIHRvIGBsaW5rZWRgIGlzIGF0IGxlYXN0IHZpc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd1RyYWNlTW9kZSgpOiBXb3JrZmxvd1RyYWNlTW9kZSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVFJBQ0VfTU9ERTtcbiAgaWYgKHZhbHVlID09PSAnY29udGludW91cycpIHJldHVybiAnY29udGludW91cyc7XG4gIGlmIChcbiAgICB2YWx1ZSAmJlxuICAgIHZhbHVlICE9PSAnbGlua2VkJyAmJlxuICAgICF0cmFjZU1vZGVXYXJuaW5ncy51bnJlY29nbml6ZWQuaGFzKHZhbHVlKVxuICApIHtcbiAgICB0cmFjZU1vZGVXYXJuaW5ncy51bnJlY29nbml6ZWQuYWRkKHZhbHVlKTtcbiAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICBgVW5yZWNvZ25pemVkIFdPUktGTE9XX1RSQUNFX01PREUgdmFsdWUgXCIke3ZhbHVlfVwiOyBleHBlY3RlZCBcImxpbmtlZFwiIG9yIFwiY29udGludW91c1wiLiBGYWxsaW5nIGJhY2sgdG8gXCJsaW5rZWRcIi5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gJ2xpbmtlZCc7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIGlzIHVzYWJsZSwgaS5lLiBwcmVzZW50IGFuZFxuICogbm9uLWVtcHR5LiBgc2VyaWFsaXplVHJhY2VDYXJyaWVyKClgIHJldHVybnMgYHt9YCB3aGVuIG5vIE9URUwgU0RLIGlzXG4gKiByZWdpc3RlcmVkIG9yIG5vIHNwYW4gaXMgYWN0aXZlLCBhbmQgYHN0YXJ0KClgIGFsd2F5cyBhdHRhY2hlcyB0aGVcbiAqIGNhcnJpZXIgdG8gdGhlIGZpcnN0IHF1ZXVlIG1lc3NhZ2UsIHNvIGFuIGVtcHR5IGNhcnJpZXIgbXVzdCBiZSB0cmVhdGVkXG4gKiB0aGUgc2FtZSBhcyBhbiBhYnNlbnQgb25lIHdoZXJldmVyIHRoZSB0cmFjZS1tb2RlIGxvZ2ljIGJyYW5jaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVc2FibGVUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IGNhcnJpZXIgaXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBjYXJyaWVyICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoY2FycmllcikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFjZSBjYXJyaWVyIHRvIGF0dGFjaCB0byBtZXNzYWdlcyB0aGUgY3VycmVudCBpbnZvY2F0aW9uXG4gKiBlbnF1ZXVlcy4gSW4gYGxpbmtlZGAgbW9kZSB0aGUgT1JJR0lOQUwgcnVuLW9yaWdpbiBjYXJyaWVyIGlzIGZvcndhcmRlZFxuICogdW5jaGFuZ2VkICh3aGVuIHVzYWJsZSkgc28gZXZlcnkgZnV0dXJlIGludm9jYXRpb24gbGlua3MgYmFjayB0byB0aGUgc2FtZVxuICogb3JpZ2luOyBvdGhlcndpc2UgKGBjb250aW51b3VzYCBtb2RlLCBvciBubyB1c2FibGUgaW5jb21pbmcgY2FycmllcilcbiAqIHRoZSBjdXJyZW50IChhY3RpdmUpIGNvbnRleHQgaXMgc2VyaWFsaXplZCwgc28gdGhlIHRyYWNlIGtlZXBzIGNoYWluaW5nXG4gKiAoY29udGludW91cykgb3IgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBpbnZvY2F0aW9uIGJlY29tZXMgdGhlIGRlLWZhY3RvXG4gKiBvcmlnaW4gKGxpbmtlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VHJhY2VDYXJyaWVyKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gdHJhY2VNb2RlID09PSAnbGlua2VkJyAmJiBpc1VzYWJsZVRyYWNlQ2FycmllcihpbmNvbWluZ0NhcnJpZXIpXG4gICAgPyBQcm9taXNlLnJlc29sdmUoaW5jb21pbmdDYXJyaWVyKVxuICAgIDogc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzcGFuIGxpbmtzIGZvciBhIHF1ZXVlLWRlbGl2ZXJlZCBpbnZvY2F0aW9uIHNwYW5cbiAqIChgd29ya2Zsb3cuZXhlY3V0ZWAgLyBgc3RlcC5leGVjdXRlYCk6XG4gKlxuICogLSBJbiBgbGlua2VkYCBtb2RlIHRoZSBpbnZvY2F0aW9uIHNwYW4gaXMgYSBDSElMRCBvZiB0aGUgbG9jYWwgZGVsaXZlcnlcbiAqICAgKGZsb3ctcm91dGUpIGNvbnRleHQsIHNvIHRoZSBvbmx5IGxpbmsgaXMgdG8gdGhlIHJ1bi1vcmlnaW4gY29udGV4dFxuICogICBmcm9tIHRoZSBtZXNzYWdlJ3MgdHJhY2UgY2FycmllciwgY29ubmVjdGluZyB0aGlzIGJvdW5kZWQgcGVyLWludm9jYXRpb25cbiAqICAgdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgcnVuIHdhcyBzdGFydGVkLiBUaGUgcnVuLW9yaWdpbiBjb250ZXh0IGlzIGFcbiAqICAgbGluaywgbmV2ZXIgYSBwYXJlbnQsIGFuZCByZS1lbnF1ZXVlcyBmb3J3YXJkIHRoZSBvcmlnaW5hbCBjYXJyaWVyXG4gKiAgIHVuY2hhbmdlZCwgc28gdGhlIHdob2xlIHJ1biBpcyBuZXZlciBzdGl0Y2hlZCBpbnRvIG9uZSBnaWFudCB0cmFjZS5cbiAqICAgVGhlIGxpbmsgaXMgc2tpcHBlZCB3aGVuIHRoZSBjYXJyaWVyIGlzIGFic2VudCwgZW1wdHksIG9yIGludmFsaWQuXG4gKiAtIEluIGBjb250aW51b3VzYCBtb2RlIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgaXMgcmVzdG9yZWQgYXMgdGhlIHBhcmVudFxuICogICBpbnN0ZWFkLCBhbmQgdGhlIGxpbmsgcG9pbnRzIGF0IHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnZvY2F0aW9uU3BhbkxpbmtzKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmtbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhY2VNb2RlICE9PSAnbGlua2VkJykgcmV0dXJuIGxpbmtUb0N1cnJlbnRDb250ZXh0KCk7XG4gIGNvbnN0IG9yaWdpbkxpbmsgPSBhd2FpdCBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gICAgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKSA/IGluY29taW5nQ2FycmllciA6IHVuZGVmaW5lZFxuICApO1xuICByZXR1cm4gb3JpZ2luTGluayA/IFtvcmlnaW5MaW5rXSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgaW50byBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBxdWV1ZXNcbiAqIEByZXR1cm5zIEEgcmVjb3JkIG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0cmFjZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVUcmFjZUNhcnJpZXIoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiB7fTtcbiAgY29uc3QgY2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAvLyBJbmplY3QgdGhlIGN1cnJlbnQgY29udGV4dCBpbnRvIHRoZSBjYXJyaWVyXG4gIG90ZWwucHJvcGFnYXRpb24uaW5qZWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgY2Fycmllcik7XG4gIHJldHVybiBjYXJyaWVyO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplcyB0cmFjZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBPcGVuVGVsZW1ldHJ5IGNvbnRleHQgd2l0aCB0aGUgcmVzdG9yZWQgdHJhY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKFxuICB0cmFjZUNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm47XG4gIC8vIEV4dHJhY3QgdGhlIGNvbnRleHQgZnJvbSB0aGUgY2FycmllclxuICByZXR1cm4gb3RlbC5wcm9wYWdhdGlvbi5leHRyYWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgdHJhY2VDYXJyaWVyKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZGVzZXJpYWxpemVkIHRyYWNlXG4gKiBAcGFyYW0gdHJhY2VDYXJyaWVyIFRoZSBzZXJpYWxpemVkIHRyYWNlIGNhcnJpZXIgKG9wdGlvbmFsKVxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBydW4gd2l0aGluIHRoZSB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRyYWNlQ29udGV4dDxUPihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGlmICghdHJhY2VDYXJyaWVyKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICBjb25zdCBleHRyYWN0ZWRDb250ZXh0ID0gYXdhaXQgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIodHJhY2VDYXJyaWVyKTtcbiAgaWYgKCFleHRyYWN0ZWRDb250ZXh0KSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICByZXR1cm4gb3RlbC5jb250ZXh0LndpdGgoZXh0cmFjdGVkQ29udGV4dCwgYXN5bmMgKCkgPT4gYXdhaXQgZm4oKSk7XG59XG5cbmNvbnN0IE90ZWxBcGkgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgLy8gYEBvcGVudGVsZW1ldHJ5L2FwaWAgaXMgYW4gb3B0aW9uYWwgcGVlciBkZXBlbmRlbmN5LiBUaGUgc3RhdGljIHNwZWNpZmllclxuICAvLyBpcyBpbnRlbnRpb25hbDogZXNidWlsZC1idW5kbGVkIHRhcmdldHMgKHRoZSBDTEknc1xuICAvLyBgdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGlgIGJ1aWxkLCBOaXRybywgQXN0cm8pIHNoaXAgYSBzZWxmLWNvbnRhaW5lZFxuICAvLyBidW5kbGUgd2l0aCBubyBub2RlX21vZHVsZXMsIHNvIHRoZSBwYWNrYWdlIG11c3QgYmUgKmlubGluZWQqIGF0IGJ1aWxkXG4gIC8vIHRpbWUgZm9yIHNwYW5zIHRvIHdvcmsgYXQgcnVudGltZTsgYSBydW50aW1lLWJ1aWx0IHNwZWNpZmllciBpcyBvcGFxdWUgdG9cbiAgLy8gZXNidWlsZCBhbmQgd291bGQgc2lsZW50bHkgZGlzYWJsZSB0cmFjaW5nIHRoZXJlLiBCdW5kbGVycyB0aGF0IHJlamVjdCBhblxuICAvLyB1bnJlc29sdmFibGUgc3RhdGljIGBpbXBvcnQoKWAgd2hlbiB0aGUgcGVlciBpc24ndCBpbnN0YWxsZWQgKFJvbGx1cC9WaXRlLFxuICAvLyBlLmcuIFN2ZWx0ZUtpdCkgaW5zdGVhZCBleHRlcm5hbGl6ZSBgQG9wZW50ZWxlbWV0cnkvYXBpYCBpbiB0aGUgd29ya2Zsb3dcbiAgLy8gZnJhbWV3b3JrIGludGVncmF0aW9uLCB3aGljaCBrZWVwcyB0aGUgYnVpbGQgZ3JlZW4gYW5kIHN0aWxsIGxvYWRzIHJlYWxcbiAgLy8gT1RlbCB3aGVuIHRoZSBwZWVyIGlzIHByZXNlbnQuIFJ1bnRpbWUgc2VtYW50aWNzOiBwcmVzZW50IOKGkiBsb2FkZWQsIGFic2VudFxuICAvLyDihpIgY2F1Z2h0IGFuZCB0cmFjaW5nIGRpc2FibGVkLlxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBpbXBvcnQoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICB9IGNhdGNoIHtcbiAgICBydW50aW1lTG9nZ2VyLmluZm8oJ09wZW5UZWxlbWV0cnkgbm90IGF2YWlsYWJsZSwgdHJhY2luZyB3aWxsIGJlIGRpc2FibGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBUcmFjZXIgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgY29uc3QgYXBpID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFhcGkpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmFjZXIgPSBhcGkudHJhY2UuZ2V0VHJhY2VyKCd3b3JrZmxvdycpO1xuICBsb2dPdGVsRGlhZ25vc3RpY09uY2UoYXBpLCB0cmFjZXIpO1xuICByZXR1cm4gdHJhY2VyO1xufSk7XG5cbmNvbnN0IFN0ZXBFeGVjdXRpb25EdXJhdGlvbkhpc3RvZ3JhbSA9IG9uY2UoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gbnVsbDtcbiAgLy8gc2VydmljZS5uYW1lIGlzIGEgcmVzb3VyY2UgYXR0cmlidXRlLCBhcHBsaWVkIGJ5IHRoZSBjb25maWd1cmVkIHByb3ZpZGVyLlxuICByZXR1cm4gb3RlbC5tZXRyaWNzXG4gICAgLmdldE1ldGVyKCd3b3JrZmxvdycpXG4gICAgLmNyZWF0ZUhpc3RvZ3JhbSgnd29ya2Zsb3cuc3RlcC5leGVjdXRlLmR1cmF0aW9uJywge1xuICAgICAgZGVzY3JpcHRpb246ICdEdXJhdGlvbiBvZiB1c2VyIHN0ZXAgZXhlY3V0aW9uJyxcbiAgICAgIHVuaXQ6ICdtcycsXG4gICAgfSk7XG59KTtcblxuLyoqXG4gKiBPbmUtc2hvdCBydW50aW1lIGRpYWdub3N0aWMgKERFQlVHPXdvcmtmbG93Oiogb25seSksIHNhbWUgc2hhcGUgYXMgdGhlIG9uZVxuICogd29ybGQtdmVyY2VsIGVtaXRzIHRhZ2dlZCBgd29ybGQtdmVyY2VsYDogcHJpbnRzIGhvdyB0aGlzIG1vZHVsZSBpbnN0YW5jZVxuICogb2YgYEBvcGVudGVsZW1ldHJ5L2FwaWAgc2VlcyB0aGUgZ2xvYmFsIHJlZ2lzdHJhdGlvbiwgc28gYSBkZXBsb3ltZW50J3NcbiAqIGxvZ3Mgc2hvdyB0aGUgdHdvIHBhY2thZ2VzJyB2aWV3cyBzaWRlIGJ5IHNpZGUuXG4gKi9cbi8vIHBlci1jb3B5LW9rOiB0aGlzIGRpYWdub3N0aWMgcmVwb3J0cyBob3cgVEhJUyBtb2R1bGUgaW5zdGFuY2Ugc2VlcyB0aGUgZ2xvYmFsXG4vLyBPVGVsIHJlZ2lzdHJhdGlvbiwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoZSBsb2cuIFdpdGggc2V2ZXJhbCBjb3BpZXNcbi8vIGluIGEgcHJvY2VzcywgZWFjaCBvbmUncyB2aWV3IGlzIHdoYXQgaXMgd29ydGggc2VlaW5nLlxubGV0IG90ZWxEaWFnTG9nZ2VkID0gZmFsc2U7XG5mdW5jdGlvbiBsb2dPdGVsRGlhZ25vc3RpY09uY2Uob3RlbDogdHlwZW9mIGFwaSwgdHJhY2VyOiBhcGkuVHJhY2VyKTogdm9pZCB7XG4gIGNvbnN0IGRlYnVnRW5hYmxlZCA9XG4gICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MuZW52LkRFQlVHID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9jZXNzLmVudi5ERUJVRy5pbmNsdWRlcygnd29ya2Zsb3c6JykgfHwgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICcqJyk7XG4gIGlmIChvdGVsRGlhZ0xvZ2dlZCB8fCAhZGVidWdFbmFibGVkKSByZXR1cm47XG4gIG90ZWxEaWFnTG9nZ2VkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBnID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgU3ltYm9sLmZvcignb3BlbnRlbGVtZXRyeS5qcy5hcGkuMScpXG4gICAgXSBhcyB7IHZlcnNpb24/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm92aWRlciA9IG90ZWwudHJhY2UuZ2V0VHJhY2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9XG4gICAgICAocHJvdmlkZXIgYXMgeyBnZXREZWxlZ2F0ZT86ICgpID0+IHVua25vd24gfSkuZ2V0RGVsZWdhdGU/LigpID8/IHByb3ZpZGVyO1xuICAgIGNvbnN0IHByb2JlID0gdHJhY2VyLnN0YXJ0U3Bhbignd29ya2Zsb3cub3RlbC5wcm9iZS5jb3JlJyk7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1t3b3JrZmxvdzpvdGVsLWRpYWddIGNvcmUnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnbG9iYWxSZWdpc3RyYXRpb25WZXJzaW9uOiBnPy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgIHByb3ZpZGVyQ3RvcjogcHJvdmlkZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIGRlbGVnYXRlQ3RvcjogKGRlbGVnYXRlIGFzIG9iamVjdCB8IG51bGwpPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBudWxsLFxuICAgICAgICB0cmFjZXJDdG9yOiB0cmFjZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHByb2JlQ3RvcjogcHJvYmU/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHByb2JlUmVjb3JkaW5nOiBwcm9iZS5pc1JlY29yZGluZygpLFxuICAgICAgfSlcbiAgICApO1xuICAgIHByb2JlLmVuZCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdbd29ya2Zsb3c6b3RlbC1kaWFnXSBjb3JlIGZhaWxlZDonLFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWNlPFQ+KFxuICBzcGFuTmFtZTogc3RyaW5nLFxuICAuLi5hcmdzOlxuICAgIHwgW2ZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4gICAgfCBbb3B0czogU3Bhbk9wdGlvbnMsIGZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgW3RyYWNlciwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbVHJhY2VyLnZhbHVlLCBPdGVsQXBpLnZhbHVlXSk7XG4gIGNvbnN0IHsgZm4sIG9wdHMgfSA9XG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgID8geyBmbjogYXJnc1swXSwgb3B0czoge30gfVxuICAgICAgOiB7IGZuOiBhcmdzWzFdLCBvcHRzOiBhcmdzWzBdIH07XG4gIGlmICghZm4pIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gdG8gdHJhY2UgbXVzdCBiZSBwcm92aWRlZCcpO1xuXG4gIGlmICghdHJhY2VyIHx8ICFvdGVsKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cblxuICByZXR1cm4gdHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihzcGFuTmFtZSwgb3B0cywgYXN5bmMgKHNwYW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oc3Bhbik7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChXb3JrZmxvd1N1c3BlbnNpb24uaXMoZSkpIHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICBhcHBseVdvcmtmbG93U3VzcGVuc2lvblRvU3BhbihlLCBzcGFuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgIG1lc3NhZ2U6IChlIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBFbWl0IGEgc3BhbiB3aG9zZSBzdGFydCBpcyBiYWNrLWRhdGVkIHRvIGBzdGFydEVwb2NoTXNgIGFuZCB3aG9zZSBlbmQgaXMgbm93LFxuICogc28gaXRzIGR1cmF0aW9uIHJlZmxlY3RzIGFuIGludGVydmFsIG9ubHkgbWVhc3VyYWJsZSBhdCBpdHMgZW5kIChlLmcuXG4gKiB0aW1lLXRvLWZpcnN0LWNodW5rLCBrbm93biB3aGVuIHRoZSBmaXJzdCBjaHVuayBhcnJpdmVzKS4gVW5saWtlIGB0cmFjZSgpYCxcbiAqIHRoaXMgcmVjb3JkcyBhbiBhbHJlYWR5LWVsYXBzZWQgc3BhbiBpbiBvbmUgc2hvdCByYXRoZXIgdGhhbiB3cmFwcGluZyBhXG4gKiBjYWxsYmFjay4gTm8tb3Agd2hlbiBPcGVuVGVsZW1ldHJ5IGlzIG5vdCBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvcmRFbGFwc2VkU3BhbihcbiAgc3Bhbk5hbWU6IHN0cmluZyxcbiAgc3RhcnRFcG9jaE1zOiBudW1iZXIsXG4gIG9wdHM/OiBTcGFuT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYWNlciA9IGF3YWl0IFRyYWNlci52YWx1ZTtcbiAgaWYgKCF0cmFjZXIpIHJldHVybjtcbiAgdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgeyAuLi5vcHRzLCBzdGFydFRpbWU6IHN0YXJ0RXBvY2hNcyB9KS5lbmQoKTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIHRoZSBzYW1lIHVzZXItY29kZSBpbnRlcnZhbCBhcyB0aGUgaW5uZXIgYHN0ZXAuZXhlY3V0ZWAgc3Bhbi4gVGhlXG4gKiBjb25maWd1cmVkIE9wZW5UZWxlbWV0cnkgbWV0ZXIgcHJvdmlkZXIgYXR0YWNoZXMgcmVzb3VyY2UgZGltZW5zaW9ucyBzdWNoIGFzXG4gKiBzZXJ2aWNlLm5hbWUsIHNvIHRoaXMgYXZvaWRzIGFjY2VwdGluZyBhIGNhbGxlci1jb250cm9sbGVkIHNlcnZpY2UgdGFnLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkU3RlcEV4ZWN1dGlvbkR1cmF0aW9uKFxuICBkdXJhdGlvbk1zOiBudW1iZXIsXG4gIHN0YXR1czogJ29rJyB8ICdlcnJvcidcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBoaXN0b2dyYW0gPSBhd2FpdCBTdGVwRXhlY3V0aW9uRHVyYXRpb25IaXN0b2dyYW0udmFsdWU7XG4gIGhpc3RvZ3JhbT8ucmVjb3JkKGR1cmF0aW9uTXMsIHsgJ3dvcmtmbG93LnN0ZXAuc3RhdHVzJzogc3RhdHVzIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIHdvcmtmbG93IHN1c3BlbnNpb24gYWxnZWJyYWljIGVmZmVjdCB0byBhbiBhY3RpdmUgc3Bhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKFxuICBlcnJvcjogV29ya2Zsb3dTdXNwZW5zaW9uLFxuICBzcGFuOiBhcGkuU3BhblxuKTogdm9pZCB7XG4gIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGF0ZSgnc3VzcGVuZGVkJyksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGVwQ291bnQoZXJyb3Iuc3RlcENvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbkhvb2tDb3VudChlcnJvci5ob29rQ291bnQpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uV2FpdENvdW50KGVycm9yLndhaXRDb3VudCksXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBbZGVzZXJpYWxpemVkLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBkZXNlcmlhbGl6ZVRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFkZXNlcmlhbGl6ZWQgfHwgIW90ZWwpIHJldHVybjtcbiAgcmV0dXJuIG90ZWwudHJhY2UuZ2V0U3BhbkNvbnRleHQoZGVzZXJpYWxpemVkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gIHJldHVybiBhd2FpdCB3aXRoT3RlbCgob3RlbCkgPT4gb3RlbC50cmFjZS5nZXRBY3RpdmVTcGFuKCkpO1xufVxuXG4vKipcbiAqIFdyYXBzIGFsbCBtZXRob2RzIG9mIGFuIG9iamVjdCB3aXRoIHRyYWNpbmcgc3BhbnMuXG4gKiBAcGFyYW0gcHJlZml4IC0gUHJlZml4IGZvciBzcGFuIG5hbWVzIChlLmcuLCBcIldPUkxELnJ1bnNcIilcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHdpdGggbWV0aG9kcyB0byBpbnN0cnVtZW50XG4gKiBAcmV0dXJucyBJbnN0cnVtZW50ZWQgb2JqZWN0IHdpdGggc2FtZSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRPYmplY3Q8VCBleHRlbmRzIG9iamVjdD4ocHJlZml4OiBzdHJpbmcsIG86IFQpOiBUIHtcbiAgY29uc3QgaGFuZGxlcnMgPSB7fSBhcyBUO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvKSBhcyAoa2V5b2YgVClbXSkge1xuICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyc1trZXldID0gb1trZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmID0gb1trZXldO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaGFuZGxlcnNba2V5XSA9IGFzeW5jICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAgICAgdHJhY2UoYCR7cHJlZml4fS4ke1N0cmluZyhrZXkpfWAsIHt9LCAoKSA9PiBmKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbktpbmQoZmllbGQ6IGtleW9mIHR5cGVvZiBTcGFuS2luZCkge1xuICByZXR1cm4gd2l0aE90ZWwoKHgpID0+IHguU3BhbktpbmRbZmllbGRdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhPdGVsPFQ+KFxuICBmbjogKG90ZWw6IHR5cGVvZiBhcGkpID0+IFRcbik6IFByb21pc2U8QXdhaXRlZDxUPiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXdhaXQgZm4ob3RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVG9DdXJyZW50Q29udGV4dCgpOiBQcm9taXNlPFthcGkuTGlua10gfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIHdpdGhPdGVsKChvdGVsKTogW2FwaS5MaW5rXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuO1xuICAgIHJldHVybiBbeyBjb250ZXh0IH1dO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzcGFuIGxpbmsgcG9pbnRpbmcgYXQgdGhlIHNwYW4gY29udGV4dCBlbWJlZGRlZCBpbiBhIHNlcmlhbGl6ZWRcbiAqIHRyYWNlIGNhcnJpZXIgKGUuZy4gdGhlIHJ1bi1vcmlnaW4gY29udGV4dCBmbG93aW5nIHRocm91Z2ggcXVldWVcbiAqIG1lc3NhZ2VzKS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIE9URUwgaXMgdW5hdmFpbGFibGUsIHRoZSBjYXJyaWVyIGlzXG4gKiBhYnNlbnQsIG9yIGl0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBzcGFuIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmsgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFjYXJyaWVyKSByZXR1cm47XG4gIGNvbnN0IFtjb250ZXh0LCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRTcGFuQ29udGV4dEZvclRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFjb250ZXh0IHx8ICFvdGVsKSByZXR1cm47XG4gIGlmICghb3RlbC50cmFjZS5pc1NwYW5Db250ZXh0VmFsaWQoY29udGV4dCkpIHJldHVybjtcbiAgcmV0dXJuIHsgY29udGV4dCB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhZ2dhZ2UgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBjb250ZXh0IHRvIHByb3BhZ2F0ZSB2aWEgYmFnZ2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQge1xuICB3b3JrZmxvd1J1bklkOiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHMgd29ya2Zsb3cgY29udGV4dCBhcyBPVEVMIGJhZ2dhZ2UgZm9yIGF1dG9tYXRpYyBwcm9wYWdhdGlvbi5cbiAqIEJhZ2dhZ2UgaXMgcHJvcGFnYXRlZCBhY3Jvc3Mgc2VydmljZSBib3VuZGFyaWVzIHZpYSBIVFRQIGhlYWRlcnMuXG4gKiBAcGFyYW0gY29udGV4dCAtIFdvcmtmbG93IGNvbnRleHQgdG8gc2V0IGFzIGJhZ2dhZ2VcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgYmFnZ2FnZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoV29ya2Zsb3dCYWdnYWdlPFQ+KFxuICBjb250ZXh0OiBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiBmbigpO1xuXG4gIC8vIENyZWF0ZSBiYWdnYWdlIHdpdGggd29ya2Zsb3cgY29udGV4dFxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKHtcbiAgICAnd29ya2Zsb3cucnVuX2lkJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd1J1bklkIH0sXG4gICAgJ3dvcmtmbG93Lm5hbWUnOiB7IHZhbHVlOiBjb250ZXh0LndvcmtmbG93TmFtZSB9LFxuICB9KTtcblxuICAvLyBTZXQgYmFnZ2FnZSBpbiBjb250ZXh0IGFuZCBydW4gZnVuY3Rpb25cbiAgY29uc3QgY29udGV4dFdpdGhCYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5zZXRCYWdnYWdlKFxuICAgIG90ZWwuY29udGV4dC5hY3RpdmUoKSxcbiAgICBiYWdnYWdlXG4gICk7XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGNvbnRleHRXaXRoQmFnZ2FnZSwgKCkgPT4gZm4oKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdvcmtmbG93IGNvbnRleHQgZnJvbSBPVEVMIGJhZ2dhZ2UuXG4gKiBAcmV0dXJucyBXb3JrZmxvdyBjb250ZXh0IGlmIHByZXNlbnQgaW4gYmFnZ2FnZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2Zsb3dCYWdnYWdlKCk6IFByb21pc2U8XG4gIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJhZ2dhZ2UgPSBvdGVsLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2Uob3RlbC5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgaWYgKCFiYWdnYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJ1bklkID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cucnVuX2lkJyk/LnZhbHVlO1xuICBjb25zdCBuYW1lID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cubmFtZScpPy52YWx1ZTtcblxuICBpZiAoIXJ1bklkIHx8ICFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgd29ya2Zsb3dOYW1lOiBuYW1lLFxuICB9O1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-context.d.ts","sourceRoot":"","sources":["../../src/test-support/orchestrator-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAIjE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAAO,GAC1D,2BAA2B,
|
|
1
|
+
{"version":3,"file":"orchestrator-context.d.ts","sourceRoot":"","sources":["../../src/test-support/orchestrator-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAIjE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAAO,GAC1D,2BAA2B,CA2D7B;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,UAOpB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,2BAA2B,EAChC,UAAU,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAC7B,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAexC"}
|
|
@@ -17,6 +17,10 @@ export function setupWorkflowContext(events, options = {}) {
|
|
|
17
17
|
fixedTimestamp: 1753481739458,
|
|
18
18
|
});
|
|
19
19
|
const ulid = monotonicFactory(() => context.globalThis.Math.random());
|
|
20
|
+
// Real-session parity: the log-order-draws quiescence fixpoint keys its
|
|
21
|
+
// progress metric on `mintCount`. Without it the loop degrades to a single
|
|
22
|
+
// turn and these suites would only exercise a degraded variant.
|
|
23
|
+
let mintCount = 0;
|
|
20
24
|
const workflowStartedAt = context.globalThis.Date.now();
|
|
21
25
|
const promiseQueueHolder = { current: Promise.resolve() };
|
|
22
26
|
// Forward onUnconsumedEvent through ctx.onWorkflowError so tests that wire
|
|
@@ -40,7 +44,13 @@ export function setupWorkflowContext(events, options = {}) {
|
|
|
40
44
|
getPromiseQueue: () => promiseQueueHolder.current,
|
|
41
45
|
}),
|
|
42
46
|
invocationsQueue: new Map(),
|
|
43
|
-
generateUlid: () =>
|
|
47
|
+
generateUlid: () => {
|
|
48
|
+
mintCount += 1;
|
|
49
|
+
return ulid(workflowStartedAt);
|
|
50
|
+
},
|
|
51
|
+
get mintCount() {
|
|
52
|
+
return mintCount;
|
|
53
|
+
},
|
|
44
54
|
generateNanoid: nanoid.customRandom(nanoid.urlAlphabet, 21, (size) => new Uint8Array(size).map(() => 256 * context.globalThis.Math.random())),
|
|
45
55
|
onWorkflowError: vi.fn(),
|
|
46
56
|
get promiseQueue() {
|
|
@@ -88,4 +98,4 @@ export async function runWithDiscontinuation(ctx, workflowFn) {
|
|
|
88
98
|
}
|
|
89
99
|
return { result, error };
|
|
90
100
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1zdXBwb3J0L29yY2hlc3RyYXRvci1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQWUsRUFDZixVQUF5RCxFQUFFO0lBRTNELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUM1QixJQUFJLEVBQUUsTUFBTTtRQUNaLGNBQWMsRUFBRSxhQUFhO0tBQzlCLENBQUMsQ0FBQztJQUNILE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEUsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSxnRUFBZ0U7SUFDaEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLE9B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TyxHQUFHLEVBQUUsQ0FBQztRQUNiLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgKiBhcyBuYW5vaWQgZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IHZpIH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEV2ZW50c0NvbnN1bWVyIH0gZnJvbSAnLi4vZXZlbnRzLWNvbnN1bWVyLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0IH0gZnJvbSAnLi4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgeyBSZXBsYXlQYXlsb2FkQ2FjaGUgfSBmcm9tICcuLi9yZXBsYXktcGF5bG9hZC1jYWNoZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi4vdm0vaW5kZXguanMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhbiBvcmNoZXN0cmF0b3IgY29udGV4dCB0aGF0IHJlcGxheXMgYSBoYW5kLXdyaXR0ZW4gZXZlbnQgbG9nIHRocm91Z2hcbiAqIHRoZSByZWFsIHdvcmtmbG93IHByaW1pdGl2ZXMgKGBjcmVhdGVVc2VTdGVwYCwgYGNyZWF0ZVNsZWVwYCxcbiAqIGBjcmVhdGVDcmVhdGVIb29rYCksIHdpdGhvdXQgYSBXb3JsZCBvciBhIFZNIGVudHJ5cG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFdvcmtmbG93Q29udGV4dChcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBvcHRpb25zOiB7IG9uRHVwbGljYXRlRXZlbnQ/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIH0gPSB7fVxuKTogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0IHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIHNlZWQ6ICd0ZXN0JyxcbiAgICBmaXhlZFRpbWVzdGFtcDogMTc1MzQ4MTczOTQ1OCxcbiAgfSk7XG4gIGNvbnN0IHVsaWQgPSBtb25vdG9uaWNGYWN0b3J5KCgpID0+IGNvbnRleHQuZ2xvYmFsVGhpcy5NYXRoLnJhbmRvbSgpKTtcbiAgLy8gUmVhbC1zZXNzaW9uIHBhcml0eTogdGhlIGxvZy1vcmRlci1kcmF3cyBxdWllc2NlbmNlIGZpeHBvaW50IGtleXMgaXRzXG4gIC8vIHByb2dyZXNzIG1ldHJpYyBvbiBgbWludENvdW50YC4gV2l0aG91dCBpdCB0aGUgbG9vcCBkZWdyYWRlcyB0byBhIHNpbmdsZVxuICAvLyB0dXJuIGFuZCB0aGVzZSBzdWl0ZXMgd291bGQgb25seSBleGVyY2lzZSBhIGRlZ3JhZGVkIHZhcmlhbnQuXG4gIGxldCBtaW50Q291bnQgPSAwO1xuICBjb25zdCB3b3JrZmxvd1N0YXJ0ZWRBdCA9IGNvbnRleHQuZ2xvYmFsVGhpcy5EYXRlLm5vdygpO1xuICBjb25zdCBwcm9taXNlUXVldWVIb2xkZXIgPSB7IGN1cnJlbnQ6IFByb21pc2UucmVzb2x2ZSgpIH07XG4gIC8vIEZvcndhcmQgb25VbmNvbnN1bWVkRXZlbnQgdGhyb3VnaCBjdHgub25Xb3JrZmxvd0Vycm9yIHNvIHRlc3RzIHRoYXQgd2lyZVxuICAvLyBvbldvcmtmbG93RXJyb3IgdG8gYSBkaXNjb250aW51YXRpb24gcHJvbWlzZSAoc2VlIHJ1bldpdGhEaXNjb250aW51YXRpb24pXG4gIC8vIGFjdHVhbGx5IG9ic2VydmUgZmFsc2UtcG9zaXRpdmUgdW5jb25zdW1lZC1ldmVudCBkZXRlY3Rpb25zIGluc3RlYWQgb2ZcbiAgLy8gc2lsZW50bHkgZHJvcHBpbmcgdGhlbS5cbiAgY29uc3QgY3R4UmVmOiB7IGN1cnJlbnQ/OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQgfSA9IHt9O1xuICBjb25zdCBjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCA9IHtcbiAgICBzdXNwZW5zaW9uR2VuZXJhdGlvbjogMCxcbiAgICBydW5JZDogJ3dydW5fdGVzdCcsXG4gICAgZW5jcnlwdGlvbktleTogdW5kZWZpbmVkLFxuICAgIHJlcGxheVBheWxvYWRDYWNoZTogbmV3IFJlcGxheVBheWxvYWRDYWNoZSh1bmRlZmluZWQpLFxuICAgIGdsb2JhbFRoaXM6IGNvbnRleHQuZ2xvYmFsVGhpcyxcbiAgICBldmVudHNDb25zdW1lcjogbmV3IEV2ZW50c0NvbnN1bWVyKGV2ZW50cywge1xuICAgICAgLy8gRmFrZSBjb250ZXh0OiBubyBkZWxpdmVyaWVzIGFyZSBtb2RlbGVkLCBzbyB0aGUgZ2F0ZSBpcyBhIG5vLW9wIGhlcmUuXG4gICAgICBpc0RlbGl2ZXJ5SWRsZTogKCkgPT4gdHJ1ZSxcbiAgICAgIG9uVW5jb25zdW1lZEV2ZW50OiAoZXZlbnQpID0+IHtcbiAgICAgICAgY3R4UmVmLmN1cnJlbnQ/Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBgVW5jb25zdW1lZCBldmVudCBpbiBldmVudCBsb2c6IGV2ZW50VHlwZT0ke2V2ZW50LmV2ZW50VHlwZX0sIGNvcnJlbGF0aW9uSWQ9JHtldmVudC5jb3JyZWxhdGlvbklkfSwgZXZlbnRJZD0ke2V2ZW50LmV2ZW50SWR9LiBUaGlzIGluZGljYXRlcyBhIGNvcnJ1cHRlZCBvciBpbnZhbGlkIGV2ZW50IGxvZy5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uRHVwbGljYXRlRXZlbnQ6IG9wdGlvbnMub25EdXBsaWNhdGVFdmVudCxcbiAgICAgIGdldFByb21pc2VRdWV1ZTogKCkgPT4gcHJvbWlzZVF1ZXVlSG9sZGVyLmN1cnJlbnQsXG4gICAgfSksXG4gICAgaW52b2NhdGlvbnNRdWV1ZTogbmV3IE1hcCgpLFxuICAgIGdlbmVyYXRlVWxpZDogKCkgPT4ge1xuICAgICAgbWludENvdW50ICs9IDE7XG4gICAgICByZXR1cm4gdWxpZCh3b3JrZmxvd1N0YXJ0ZWRBdCk7XG4gICAgfSxcbiAgICBnZXQgbWludENvdW50KCkge1xuICAgICAgcmV0dXJuIG1pbnRDb3VudDtcbiAgICB9LFxuICAgIGdlbmVyYXRlTmFub2lkOiBuYW5vaWQuY3VzdG9tUmFuZG9tKG5hbm9pZC51cmxBbHBoYWJldCwgMjEsIChzaXplKSA9PlxuICAgICAgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkubWFwKCgpID0+IDI1NiAqIGNvbnRleHQuZ2xvYmFsVGhpcy5NYXRoLnJhbmRvbSgpKVxuICAgICksXG4gICAgb25Xb3JrZmxvd0Vycm9yOiB2aS5mbigpLFxuICAgIGdldCBwcm9taXNlUXVldWUoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVF1ZXVlSG9sZGVyLmN1cnJlbnQ7XG4gICAgfSxcbiAgICBzZXQgcHJvbWlzZVF1ZXVlKHZhbHVlOiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICBwcm9taXNlUXVldWVIb2xkZXIuY3VycmVudCA9IHZhbHVlO1xuICAgIH0sXG4gICAgcGVuZGluZ0RlbGl2ZXJpZXM6IDAsXG4gICAgcGVuZGluZ0RlbGl2ZXJ5QmFycmllcnM6IG5ldyBNYXAoKSxcbiAgfTtcbiAgY3R4UmVmLmN1cnJlbnQgPSBjdHg7XG4gIHJldHVybiBjdHg7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyBjb3JyZWxhdGlvbiBJRHMgZnJvbSB0aGUgVUxJRCBnZW5lcmF0b3Igd2l0aCBzZWVkICd0ZXN0JywgaW5cbiAqIHRoZSBvcmRlciB7QGxpbmsgc2V0dXBXb3JrZmxvd0NvbnRleHR9J3MgZ2VuZXJhdG9yIG1pbnRzIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBDT1JSX0lEUyA9IFtcbiAgJzAxSzExVEZaNjJZUzBZWUZEUTNFOEI5WUNWJyxcbiAgJzAxSzExVEZaNjJZUzBZWUZEUTNFOEI5WUNXJyxcbiAgJzAxSzExVEZaNjJZUzBZWUZEUTNFOEI5WUNYJyxcbiAgJzAxSzExVEZaNjJZUzBZWUZEUTNFOEI5WUNZJyxcbiAgJzAxSzExVEZaNjJZUzBZWUZEUTNFOEI5WUNaJyxcbiAgJzAxSzExVEZaNjJZUzBZWUZEUTNFOEI5WUQwJyxcbl07XG5cbi8qKlxuICogUnVucyBgd29ya2Zsb3dGbmAgYWdhaW5zdCBgY3R4YCwgcmFjaW5nIGl0IGFnYWluc3QgdGhlIGNvbnRleHQncyBlcnJvclxuICogY2hhbm5lbCBzbyBhIGBXb3JrZmxvd1N1c3BlbnNpb25gIG9yIGEgZGV0ZWN0ZWQgZGl2ZXJnZW5jZSBzdXJmYWNlcyBhc1xuICogYGVycm9yYCByYXRoZXIgdGhhbiBoYW5naW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aERpc2NvbnRpbnVhdGlvbihcbiAgY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG4gIHdvcmtmbG93Rm46ICgpID0+IFByb21pc2U8YW55PlxuKTogUHJvbWlzZTx7IHJlc3VsdD86IGFueTsgZXJyb3I/OiBhbnkgfT4ge1xuICBjb25zdCB3b3JrZmxvd0Rpc2NvbnRpbnVhdGlvbiA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgY3R4Lm9uV29ya2Zsb3dFcnJvciA9IHdvcmtmbG93RGlzY29udGludWF0aW9uLnJlamVjdDtcblxuICBsZXQgcmVzdWx0OiBhbnk7XG4gIGxldCBlcnJvcjogYW55O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICB3b3JrZmxvd0ZuKCksXG4gICAgICB3b3JrZmxvd0Rpc2NvbnRpbnVhdGlvbi5wcm9taXNlLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVycjtcbiAgfVxuICByZXR1cm4geyByZXN1bHQsIGVycm9yIH07XG59XG4iXX0=
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.0.0-beta.
|
|
1
|
+
export declare const version = "5.0.0-beta.44";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '5.0.0-beta.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const version = '5.0.0-beta.44';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjQ0J1xuIl19
|
package/dist/vm/index.js
CHANGED
|
@@ -15,7 +15,7 @@ const DIGEST_ALGORITHMS = {
|
|
|
15
15
|
// WebCrypto BufferSource conversion. The `util.types` brand checks work
|
|
16
16
|
// across vm realms, and node:crypto's `hash.update()` reads view ranges from
|
|
17
17
|
// internal slots (own properties shadowing `byteOffset`/`byteLength` are
|
|
18
|
-
// ignored)
|
|
18
|
+
// ignored), matching WebCrypto, which also reads internal slots.
|
|
19
19
|
function toDigestInput(data) {
|
|
20
20
|
if (types.isTypedArray(data) || types.isDataView(data)) {
|
|
21
21
|
// WebCrypto's BufferSource excludes SharedArrayBuffer-backed views.
|
|
@@ -84,7 +84,7 @@ export function createContext(options) {
|
|
|
84
84
|
// - Dynamic `import()` settles within a microtask (rejected: no
|
|
85
85
|
// `importModuleDynamically`), so it needs no handling.
|
|
86
86
|
// - All `crypto.subtle` methods except the deterministic `digest` override
|
|
87
|
-
// below throw explicitly (see the subtle proxy)
|
|
87
|
+
// below throw explicitly (see the subtle proxy); binding them to the
|
|
88
88
|
// host subtle would hand workflows a host-timing promise.
|
|
89
89
|
const intrinsics = g;
|
|
90
90
|
delete intrinsics.Atomics.waitAsync;
|
|
@@ -96,7 +96,7 @@ export function createContext(options) {
|
|
|
96
96
|
delete intrinsics.FinalizationRegistry;
|
|
97
97
|
// `crypto.subtle.digest` computes synchronously via node:crypto, so its
|
|
98
98
|
// promise settles on a deterministic microtask instead of host threadpool
|
|
99
|
-
// timing
|
|
99
|
+
// timing: a digest can never advance a suspended workflow, and
|
|
100
100
|
// digest-using VMs stay retainable. Values are byte-identical to WebCrypto.
|
|
101
101
|
const digest = async (algorithm, data) => {
|
|
102
102
|
const name = typeof algorithm === 'string' ? algorithm : algorithm.name;
|
|
@@ -170,4 +170,4 @@ export function createContext(options) {
|
|
|
170
170
|
},
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxJQUFJLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTdDLGtFQUFrRTtBQUNsRSxNQUFNLGlCQUFpQixHQUEyQjtJQUNoRCxPQUFPLEVBQUUsTUFBTTtJQUNmLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxRQUFRO0NBQ3BCLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSxrRUFBa0U7QUFDbEUsU0FBUyxhQUFhLENBQ3BCLElBQW1DO0lBRW5DLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkQsb0VBQW9FO1FBQ3BFLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxD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QyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUMvQyxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUV6QixvRUFBb0U7SUFDcEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGlFQUFpRTtJQUNoRSxDQUFDLENBQUMsTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQWMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNDLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLENBQUM7UUFDYixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgcnVuSW5Db250ZXh0LCBjcmVhdGVDb250ZXh0IGFzIHZtQ3JlYXRlQ29udGV4dCB9IGZyb20gJ25vZGU6dm0nO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCBzZWVkcmFuZG9tIGZyb20gJ3NlZWRyYW5kb20nO1xuaW1wb3J0IHsgaW5zdGFsbFVpbnQ4QXJyYXlCYXNlNjQgfSBmcm9tICcuL3VpbnQ4YXJyYXktYmFzZTY0LmpzJztcbmltcG9ydCB7IGNyZWF0ZVJhbmRvbVVVSUQgfSBmcm9tICcuL3V1aWQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbnRleHRPcHRpb25zIHtcbiAgc2VlZDogc3RyaW5nO1xuICAvLyBGaXhlZCB0aW1lc3RhbXAgZm9yIGRldGVybWluaXN0aWMgRGF0ZSBvcGVyYXRpb25zXG4gIGZpeGVkVGltZXN0YW1wOiBudW1iZXI7XG59XG5cbi8vIFdlYkNyeXB0byBkaWdlc3QgYWxnb3JpdGhtIG5hbWVzIOKGkiBub2RlOmNyeXB0byAoT3BlblNTTCkgbmFtZXMuXG5jb25zdCBESUdFU1RfQUxHT1JJVEhNUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ1NIQS0xJzogJ3NoYTEnLFxuICAnU0hBLTI1Nic6ICdzaGEyNTYnLFxuICAnU0hBLTM4NCc6ICdzaGEzODQnLFxuICAnU0hBLTUxMic6ICdzaGE1MTInLFxufTtcblxuLy8gV2ViQ3J5cHRvIEJ1ZmZlclNvdXJjZSBjb252ZXJzaW9uLiBUaGUgYHV0aWwudHlwZXNgIGJyYW5kIGNoZWNrcyB3b3JrXG4vLyBhY3Jvc3Mgdm0gcmVhbG1zLCBhbmQgbm9kZTpjcnlwdG8ncyBgaGFzaC51cGRhdGUoKWAgcmVhZHMgdmlldyByYW5nZXMgZnJvbVxuLy8gaW50ZXJuYWwgc2xvdHMgKG93biBwcm9wZXJ0aWVzIHNoYWRvd2luZyBgYnl0ZU9mZnNldGAvYGJ5dGVMZW5ndGhgIGFyZVxuLy8gaWdub3JlZCkg4oCUIG1hdGNoaW5nIFdlYkNyeXB0bywgd2hpY2ggYWxzbyByZWFkcyBpbnRlcm5hbCBzbG90cy5cbmZ1bmN0aW9uIHRvRGlnZXN0SW5wdXQoXG4gIGRhdGE6IEFycmF5QnVmZmVyIHwgQXJyYXlCdWZmZXJWaWV3XG4pOiBOb2RlSlMuQXJyYXlCdWZmZXJWaWV3IHtcbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShkYXRhKSB8fCB0eXBlcy5pc0RhdGFWaWV3KGRhdGEpKSB7XG4gICAgLy8gV2ViQ3J5cHRvJ3MgQnVmZmVyU291cmNlIGV4Y2x1ZGVzIFNoYXJlZEFycmF5QnVmZmVyLWJhY2tlZCB2aWV3cy5cbiAgICBpZiAodHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihkYXRhLmJ1ZmZlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdjcnlwdG8uc3VidGxlLmRpZ2VzdCBkb2VzIG5vdCBhY2NlcHQgU2hhcmVkQXJyYXlCdWZmZXItYmFja2VkIHZpZXdzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKCF0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldycpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTm9kZS5qcyBgdm0uQ29udGV4dGAgY29uZmlndXJlZCB0byBiZSB1c2FibGUgZm9yXG4gKiBleGVjdXRpbmcgd29ya2Zsb3cgbG9naWMgaW4gYSBkZXRlcm1pbmlzdGljIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KG9wdGlvbnM6IENyZWF0ZUNvbnRleHRPcHRpb25zKSB7XG4gIGxldCB7IGZpeGVkVGltZXN0YW1wIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHNlZWQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJuZyA9IHNlZWRyYW5kb20oc2VlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSB2bUNyZWF0ZUNvbnRleHQoKTtcblxuICBjb25zdCBnOiB0eXBlb2YgZ2xvYmFsVGhpcyA9IHJ1bkluQ29udGV4dCgnZ2xvYmFsVGhpcycsIGNvbnRleHQpO1xuXG4gIC8vIERldGVybWluaXN0aWMgYE1hdGgucmFuZG9tKClgXG4gIGcuTWF0aC5yYW5kb20gPSBybmc7XG5cbiAgLy8gT3ZlcnJpZGUgYERhdGVgIGNvbnN0cnVjdG9yIHRvIHJldHVybiBmaXhlZCB0aW1lIHdoZW4gY2FsbGVkIHdpdGhvdXRcbiAgLy8gYXJndW1lbnRzLiBDb25zdHJ1Y3RpbmcgdGhyb3VnaCBgUmVmbGVjdC5jb25zdHJ1Y3RgIHdpdGggYG5ldy50YXJnZXRgXG4gIC8vIGtlZXBzIHN1YmNsYXNzaW5nIGludGFjdCAoZS5nLiBgVFpEYXRlYCBmcm9tIGBAZGF0ZS1mbnMvdHpgKSwgd2hpbGUgYVxuICAvLyBwbGFpbiBmdW5jdGlvbiAocmF0aGVyIHRoYW4gYSBgY2xhc3NgKSBrZWVwcyBgRGF0ZSgpYCBjYWxsYWJsZSB3aXRob3V0XG4gIC8vIGBuZXdgLCB3aGljaCBwZXIgc3BlYyBpZ25vcmVzIGl0cyBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIHRpbWUgc3RyaW5nLlxuICBjb25zdCBEYXRlXyA9IGcuRGF0ZTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1NoYWRvd1Jlc3RyaWN0ZWROYW1lczogV2UncmUgc2hhZG93aW5nIHRoZSBnbG9iYWwgYERhdGVgIHByb3BlcnR5IHRvIG1ha2UgaXQgZGV0ZXJtaW5pc3RpYy5cbiAgKGcgYXMgYW55KS5EYXRlID0gZnVuY3Rpb24gRGF0ZSguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmIChuZXcudGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZV8oZml4ZWRUaW1lc3RhbXApLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0LmNvbnN0cnVjdChcbiAgICAgIERhdGVfLFxuICAgICAgYXJncy5sZW5ndGggPT09IDAgPyBbZml4ZWRUaW1lc3RhbXBdIDogYXJncyxcbiAgICAgIG5ldy50YXJnZXRcbiAgICApO1xuICB9O1xuICAoZyBhcyBhbnkpLkRhdGUucHJvdG90eXBlID0gRGF0ZV8ucHJvdG90eXBlO1xuICAvLyBQcmVzZXJ2ZSBzdGF0aWMgbWV0aG9kc1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZy5EYXRlLCBEYXRlXyk7XG4gIGcuRGF0ZS5ub3cgPSAoKSA9PiBmaXhlZFRpbWVzdGFtcDtcblxuICAvLyBEZXRlcm1pbmlzdGljIGBjcnlwdG9gIHVzaW5nIFByb3h5IHRvIGF2b2lkIG11dGF0aW5nIGdsb2JhbCBvYmplY3RzXG4gIGNvbnN0IG9yaWdpbmFsQ3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIGNvbnN0IG9yaWdpbmFsU3VidGxlID0gb3JpZ2luYWxDcnlwdG8uc3VidGxlO1xuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVZhbHVlcyhhcnJheTogVWludDhBcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gTWF0aC5mbG9vcihybmcoKSAqIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGNvbnN0IHJhbmRvbVVVSUQgPSBjcmVhdGVSYW5kb21VVUlEKHJuZyk7XG5cbiAgLy8gVGhlIHNhbmRib3ggbXVzdCBub3QgaGFuZCB3b3JrZmxvdyBjb2RlIGEgcHJvbWlzZSB0aGF0IHNldHRsZXMgb24gaG9zdFxuICAvLyB0aW1pbmcgb3IgYSB3YXkgdG8gb2JzZXJ2ZSBob3N0IHN0YXRlIChiZXN0LWVmZm9ydCwgZm9yIG5vbi1hZHZlcnNhcmlhbFxuICAvLyBjb2RlKTogZXZlcnkgcHJvbWlzZSBhIHdvcmtmbG93IGNyZWF0ZXMgc2V0dGxlcyBlaXRoZXIgZnJvbSB0aGUgZXZlbnQgbG9nXG4gIC8vIG9yIHdpdGhpbiBpdHMgb3duIG1pY3JvdGFzayBjYXNjYWRlLCBzbyBhIHN1c3BlbmRlZCBWTSBpcyBmdWxseSBxdWllc2NlbnRcbiAgLy8gYW5kIGNhbiBiZSByZXRhaW5lZCBhY3Jvc3MgaW5saW5lIHN0ZXBzLlxuICAvL1xuICAvLyAtIGBBdG9taWNzLndhaXRBc3luY2AgaXMgYSB3YWxsLWNsb2NrIHRpbWVyICh2aWEgU2hhcmVkQXJyYXlCdWZmZXIpLlxuICAvLyAtIFRoZSBhc3luYyBgV2ViQXNzZW1ibHlgIGVudHJ5IHBvaW50cyByZXNvbHZlIG9uIGNvbXBpbGUtdGhyZWFkIHRpbWluZztcbiAgLy8gICB0aGUgc3luY2hyb25vdXMgYG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoKWAgLyBgSW5zdGFuY2UoKWAgcmVtYWluLlxuICAvLyAtIGBXZWFrUmVmLmRlcmVmKClgIGFuZCBmaW5hbGl6ZXIgY2FsbGJhY2tzIG9ic2VydmUgR0MgdGltaW5nLlxuICAvLyAtIER5bmFtaWMgYGltcG9ydCgpYCBzZXR0bGVzIHdpdGhpbiBhIG1pY3JvdGFzayAocmVqZWN0ZWQ6IG5vXG4gIC8vICAgYGltcG9ydE1vZHVsZUR5bmFtaWNhbGx5YCksIHNvIGl0IG5lZWRzIG5vIGhhbmRsaW5nLlxuICAvLyAtIEFsbCBgY3J5cHRvLnN1YnRsZWAgbWV0aG9kcyBleGNlcHQgdGhlIGRldGVybWluaXN0aWMgYGRpZ2VzdGAgb3ZlcnJpZGVcbiAgLy8gICBiZWxvdyB0aHJvdyBleHBsaWNpdGx5IChzZWUgdGhlIHN1YnRsZSBwcm94eSkg4oCUIGJpbmRpbmcgdGhlbSB0byB0aGVcbiAgLy8gICBob3N0IHN1YnRsZSB3b3VsZCBoYW5kIHdvcmtmbG93cyBhIGhvc3QtdGltaW5nIHByb21pc2UuXG4gIGNvbnN0IGludHJpbnNpY3MgPSBnIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBkZWxldGUgaW50cmluc2ljcy5BdG9taWNzLndhaXRBc3luYztcbiAgZGVsZXRlIGludHJpbnNpY3MuV2ViQXNzZW1ibHkuY29tcGlsZTtcbiAgZGVsZXRlIGludHJpbnNpY3MuV2ViQXNzZW1ibHkuaW5zdGFudGlhdGU7XG4gIGRlbGV0ZSBpbnRyaW5zaWNzLldlYkFzc2VtYmx5LmNvbXBpbGVTdHJlYW1pbmc7XG4gIGRlbGV0ZSBpbnRyaW5zaWNzLldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nO1xuICBkZWxldGUgaW50cmluc2ljcy5XZWFrUmVmO1xuICBkZWxldGUgaW50cmluc2ljcy5GaW5hbGl6YXRpb25SZWdpc3RyeTtcblxuICAvLyBgY3J5cHRvLnN1YnRsZS5kaWdlc3RgIGNvbXB1dGVzIHN5bmNocm9ub3VzbHkgdmlhIG5vZGU6Y3J5cHRvLCBzbyBpdHNcbiAgLy8gcHJvbWlzZSBzZXR0bGVzIG9uIGEgZGV0ZXJtaW5pc3RpYyBtaWNyb3Rhc2sgaW5zdGVhZCBvZiBob3N0IHRocmVhZHBvb2xcbiAgLy8gdGltaW5nIOKAlCBhIGRpZ2VzdCBjYW4gbmV2ZXIgYWR2YW5jZSBhIHN1c3BlbmRlZCB3b3JrZmxvdywgYW5kXG4gIC8vIGRpZ2VzdC11c2luZyBWTXMgc3RheSByZXRhaW5hYmxlLiBWYWx1ZXMgYXJlIGJ5dGUtaWRlbnRpY2FsIHRvIFdlYkNyeXB0by5cbiAgY29uc3QgZGlnZXN0ID0gYXN5bmMgKFxuICAgIGFsZ29yaXRobTogc3RyaW5nIHwgeyBuYW1lOiBzdHJpbmcgfSxcbiAgICBkYXRhOiBBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlld1xuICApOiBQcm9taXNlPEFycmF5QnVmZmVyPiA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBhbGdvcml0aG0gPT09ICdzdHJpbmcnID8gYWxnb3JpdGhtIDogYWxnb3JpdGhtLm5hbWU7XG4gICAgY29uc3Qgb3NzbCA9IERJR0VTVF9BTEdPUklUSE1TW25hbWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKCFvc3NsKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBgVW5yZWNvZ25pemVkIGFsZ29yaXRobSBuYW1lOiAke25hbWV9YCxcbiAgICAgICAgJ05vdFN1cHBvcnRlZEVycm9yJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2gob3NzbCkudXBkYXRlKHRvRGlnZXN0SW5wdXQoZGF0YSkpLmRpZ2VzdCgpO1xuICAgIC8vIENvcHkgb3V0OiBzbWFsbCBCdWZmZXJzIHNoYXJlIHRoZSBpbnRlcm5hbCBwb29sIGFsbG9jYXRpb24uXG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5QnVmZmVyKGhhc2guYnl0ZUxlbmd0aCk7XG4gICAgbmV3IFVpbnQ4QXJyYXkob3V0KS5zZXQoaGFzaCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICBnLmNyeXB0byA9IG5ldyBQcm94eShvcmlnaW5hbENyeXB0bywge1xuICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIGlmIChwcm9wID09PSAnZ2V0UmFuZG9tVmFsdWVzJykge1xuICAgICAgICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3AgPT09ICdyYW5kb21VVUlEJykge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSAnc3VidGxlJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG9yaWdpbmFsU3VidGxlLCB7XG4gICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdkaWdlc3QnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaWdlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wIGFzIGtleW9mIHR5cGVvZiBvcmlnaW5hbFN1YnRsZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV2ZXJ5IG90aGVyIHN1YnRsZSBtZXRob2QgKGBlbmNyeXB0YCwgYHNpZ25gLCBgaW1wb3J0S2V5YCwg4oCmKVxuICAgICAgICAgICAgLy8gc2V0dGxlcyBvbiBob3N0IHRocmVhZHBvb2wgdGltaW5nLCB3aGljaCBjYW5ub3QgYmUgcmVwbGF5ZWQuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICAgICAgYFxcYGNyeXB0by5zdWJ0bGUuJHtTdHJpbmcocHJvcCl9KClcXGAgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbi4gTW92ZSBpdCB0byBhIHN0ZXAgZnVuY3Rpb24gd2hlcmUgZnVsbCBOb2RlLmpzIGNyeXB0byBpcyBhdmFpbGFibGUuYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2Ygb3JpZ2luYWxDcnlwdG9dO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFByb3BhZ2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgKGcgYXMgYW55KS5wcm9jZXNzID0ge1xuICAgIGVudjogT2JqZWN0LmZyZWV6ZSh7IC4uLnByb2Nlc3MuZW52IH0pLFxuICB9O1xuXG4gIC8vIFN0YXRlbGVzcyArIHN5bmNocm9ub3VzIFdlYiBBUElzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIGluc2lkZSB0aGUgc2FuZGJveFxuICBnLkRPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uO1xuICBnLkhlYWRlcnMgPSBnbG9iYWxUaGlzLkhlYWRlcnM7XG4gIGcuVGV4dEVuY29kZXIgPSBnbG9iYWxUaGlzLlRleHRFbmNvZGVyO1xuICBnLlRleHREZWNvZGVyID0gZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcjtcbiAgZy5jb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBnLlVSTCA9IGdsb2JhbFRoaXMuVVJMO1xuICBnLlVSTFNlYXJjaFBhcmFtcyA9IGdsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zO1xuICBnLnN0cnVjdHVyZWRDbG9uZSA9IGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lO1xuICBnLmF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG4gIGcuYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTtcblxuICAvLyBUQzM5IFVpbnQ4QXJyYXkgYmFzZTY0L2hleCBwb2x5ZmlsbCAocHJvcG9zYWwtYXJyYXlidWZmZXItYmFzZTY0KVxuICBpbnN0YWxsVWludDhBcnJheUJhc2U2NChnLlVpbnQ4QXJyYXkpO1xuXG4gIC8vIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwb2x5ZmlsbCBmb3IgYHVzaW5nYCBrZXl3b3JkXG4gIChnLlN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPz89IFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG4gIChnLlN5bWJvbCBhcyBhbnkpLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuXG4gIC8vIEhBQ0s6IFNoaW0gYGV4cG9ydHNgIGZvciB0aGUgYnVuZGxlXG4gIGcuZXhwb3J0cyA9IHt9O1xuICAoZyBhcyBhbnkpLm1vZHVsZSA9IHsgZXhwb3J0czogZy5leHBvcnRzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIGdsb2JhbFRoaXM6IGcsXG4gICAgdXBkYXRlVGltZXN0YW1wOiAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgIGZpeGVkVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxJQUFJLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTdDLGtFQUFrRTtBQUNsRSxNQUFNLGlCQUFpQixHQUEyQjtJQUNoRCxPQUFPLEVBQUUsTUFBTTtJQUNmLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxRQUFRO0NBQ3BCLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSxpRUFBaUU7QUFDakUsU0FBUyxhQUFhLENBQ3BCLElBQW1DO0lBRW5DLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkQsb0VBQW9FO1FBQ3BFLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQTZCO0lBQ3pELElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDakMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUN6QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsTUFBTSxPQUFPLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFFbEMsTUFBTSxDQUFDLEdBQXNCLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFakUsZ0NBQWdDO0lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUVwQix1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsMkVBQTJFO0lBQzNFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckIsNkhBQTZIO0lBQzVILENBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsR0FBRyxJQUFXO1FBQzVDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQ3RCLEtBQUssRUFDTCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUMzQyxHQUFHLENBQUMsTUFBTSxDQUNYLENBQUM7SUFDSixDQUFDLENBQUM7SUFDRCxDQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQzVDLDBCQUEwQjtJQUMxQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBRWxDLHNFQUFzRTtJQUN0RSxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFFN0MsU0FBUyxlQUFlLENBQUMsS0FBaUI7UUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekMseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDJDQUEyQztJQUMzQyxFQUFFO0lBQ0YsdUVBQXVFO0lBQ3ZFLDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUsaUVBQWlFO0lBQ2pFLGdFQUFnRTtJQUNoRSx5REFBeUQ7SUFDekQsMkVBQTJFO0lBQzNFLHVFQUF1RTtJQUN2RSw0REFBNEQ7SUFDNUQsTUFBTSxVQUFVLEdBQUcsQ0FBdUQsQ0FBQztJQUMzRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3BDLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDdEMsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUMxQyxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDL0MsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO0lBQ25ELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUMxQixPQUFPLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztJQUV2Qyx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLCtEQUErRDtJQUMvRCw0RUFBNEU7SUFDNUUsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUNsQixTQUFvQyxFQUNwQyxJQUFtQyxFQUNiLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEUsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLFlBQVksQ0FDcEIsZ0NBQWdDLElBQUksRUFBRSxFQUN0QyxtQkFBbUIsQ0FDcEIsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25FLDhEQUE4RDtRQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBRUYsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7UUFDbkMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJO1lBQ2QsSUFBSSxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxlQUFlLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUMxQixPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO29CQUMvQixHQUFHLENBQUMsTUFBTSxFQUFFLElBQUk7d0JBQ2QsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7NEJBQ3RCLE9BQU8sTUFBTSxDQUFDO3dCQUNoQixDQUFDO3dCQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFtQyxDQUFDLENBQUM7d0JBQzFELElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7NEJBQ2hDLE9BQU8sS0FBSyxDQUFDO3dCQUNmLENBQUM7d0JBQ0QsZ0VBQWdFO3dCQUNoRSwrREFBK0Q7d0JBQy9ELE9BQU8sR0FBRyxFQUFFOzRCQUNWLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsbUJBQW1CLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0hBQXNILENBQ3RKLENBQUM7d0JBQ0osQ0FBQyxDQUFDO29CQUNKLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLElBQW1DLENBQUMsQ0FBQztRQUNyRCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsa0NBQWtDO0lBQ2pDLENBQVMsQ0FBQyxPQUFPLEdBQUc7UUFDbkIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN2QyxDQUFDO0lBRUYsOEVBQThFO0lBQzlFLENBQUMsQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUMvQyxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUV6QixvRUFBb0U7SUFDcEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGlFQUFpRTtJQUNoRSxDQUFDLENBQUMsTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQWMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNDLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLENBQUM7UUFDYixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgcnVuSW5Db250ZXh0LCBjcmVhdGVDb250ZXh0IGFzIHZtQ3JlYXRlQ29udGV4dCB9IGZyb20gJ25vZGU6dm0nO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCBzZWVkcmFuZG9tIGZyb20gJ3NlZWRyYW5kb20nO1xuaW1wb3J0IHsgaW5zdGFsbFVpbnQ4QXJyYXlCYXNlNjQgfSBmcm9tICcuL3VpbnQ4YXJyYXktYmFzZTY0LmpzJztcbmltcG9ydCB7IGNyZWF0ZVJhbmRvbVVVSUQgfSBmcm9tICcuL3V1aWQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbnRleHRPcHRpb25zIHtcbiAgc2VlZDogc3RyaW5nO1xuICAvLyBGaXhlZCB0aW1lc3RhbXAgZm9yIGRldGVybWluaXN0aWMgRGF0ZSBvcGVyYXRpb25zXG4gIGZpeGVkVGltZXN0YW1wOiBudW1iZXI7XG59XG5cbi8vIFdlYkNyeXB0byBkaWdlc3QgYWxnb3JpdGhtIG5hbWVzIOKGkiBub2RlOmNyeXB0byAoT3BlblNTTCkgbmFtZXMuXG5jb25zdCBESUdFU1RfQUxHT1JJVEhNUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ1NIQS0xJzogJ3NoYTEnLFxuICAnU0hBLTI1Nic6ICdzaGEyNTYnLFxuICAnU0hBLTM4NCc6ICdzaGEzODQnLFxuICAnU0hBLTUxMic6ICdzaGE1MTInLFxufTtcblxuLy8gV2ViQ3J5cHRvIEJ1ZmZlclNvdXJjZSBjb252ZXJzaW9uLiBUaGUgYHV0aWwudHlwZXNgIGJyYW5kIGNoZWNrcyB3b3JrXG4vLyBhY3Jvc3Mgdm0gcmVhbG1zLCBhbmQgbm9kZTpjcnlwdG8ncyBgaGFzaC51cGRhdGUoKWAgcmVhZHMgdmlldyByYW5nZXMgZnJvbVxuLy8gaW50ZXJuYWwgc2xvdHMgKG93biBwcm9wZXJ0aWVzIHNoYWRvd2luZyBgYnl0ZU9mZnNldGAvYGJ5dGVMZW5ndGhgIGFyZVxuLy8gaWdub3JlZCksIG1hdGNoaW5nIFdlYkNyeXB0bywgd2hpY2ggYWxzbyByZWFkcyBpbnRlcm5hbCBzbG90cy5cbmZ1bmN0aW9uIHRvRGlnZXN0SW5wdXQoXG4gIGRhdGE6IEFycmF5QnVmZmVyIHwgQXJyYXlCdWZmZXJWaWV3XG4pOiBOb2RlSlMuQXJyYXlCdWZmZXJWaWV3IHtcbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShkYXRhKSB8fCB0eXBlcy5pc0RhdGFWaWV3KGRhdGEpKSB7XG4gICAgLy8gV2ViQ3J5cHRvJ3MgQnVmZmVyU291cmNlIGV4Y2x1ZGVzIFNoYXJlZEFycmF5QnVmZmVyLWJhY2tlZCB2aWV3cy5cbiAgICBpZiAodHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihkYXRhLmJ1ZmZlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdjcnlwdG8uc3VidGxlLmRpZ2VzdCBkb2VzIG5vdCBhY2NlcHQgU2hhcmVkQXJyYXlCdWZmZXItYmFja2VkIHZpZXdzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKCF0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldycpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTm9kZS5qcyBgdm0uQ29udGV4dGAgY29uZmlndXJlZCB0byBiZSB1c2FibGUgZm9yXG4gKiBleGVjdXRpbmcgd29ya2Zsb3cgbG9naWMgaW4gYSBkZXRlcm1pbmlzdGljIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KG9wdGlvbnM6IENyZWF0ZUNvbnRleHRPcHRpb25zKSB7XG4gIGxldCB7IGZpeGVkVGltZXN0YW1wIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHNlZWQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJuZyA9IHNlZWRyYW5kb20oc2VlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSB2bUNyZWF0ZUNvbnRleHQoKTtcblxuICBjb25zdCBnOiB0eXBlb2YgZ2xvYmFsVGhpcyA9IHJ1bkluQ29udGV4dCgnZ2xvYmFsVGhpcycsIGNvbnRleHQpO1xuXG4gIC8vIERldGVybWluaXN0aWMgYE1hdGgucmFuZG9tKClgXG4gIGcuTWF0aC5yYW5kb20gPSBybmc7XG5cbiAgLy8gT3ZlcnJpZGUgYERhdGVgIGNvbnN0cnVjdG9yIHRvIHJldHVybiBmaXhlZCB0aW1lIHdoZW4gY2FsbGVkIHdpdGhvdXRcbiAgLy8gYXJndW1lbnRzLiBDb25zdHJ1Y3RpbmcgdGhyb3VnaCBgUmVmbGVjdC5jb25zdHJ1Y3RgIHdpdGggYG5ldy50YXJnZXRgXG4gIC8vIGtlZXBzIHN1YmNsYXNzaW5nIGludGFjdCAoZS5nLiBgVFpEYXRlYCBmcm9tIGBAZGF0ZS1mbnMvdHpgKSwgd2hpbGUgYVxuICAvLyBwbGFpbiBmdW5jdGlvbiAocmF0aGVyIHRoYW4gYSBgY2xhc3NgKSBrZWVwcyBgRGF0ZSgpYCBjYWxsYWJsZSB3aXRob3V0XG4gIC8vIGBuZXdgLCB3aGljaCBwZXIgc3BlYyBpZ25vcmVzIGl0cyBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIHRpbWUgc3RyaW5nLlxuICBjb25zdCBEYXRlXyA9IGcuRGF0ZTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1NoYWRvd1Jlc3RyaWN0ZWROYW1lczogV2UncmUgc2hhZG93aW5nIHRoZSBnbG9iYWwgYERhdGVgIHByb3BlcnR5IHRvIG1ha2UgaXQgZGV0ZXJtaW5pc3RpYy5cbiAgKGcgYXMgYW55KS5EYXRlID0gZnVuY3Rpb24gRGF0ZSguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmIChuZXcudGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZV8oZml4ZWRUaW1lc3RhbXApLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0LmNvbnN0cnVjdChcbiAgICAgIERhdGVfLFxuICAgICAgYXJncy5sZW5ndGggPT09IDAgPyBbZml4ZWRUaW1lc3RhbXBdIDogYXJncyxcbiAgICAgIG5ldy50YXJnZXRcbiAgICApO1xuICB9O1xuICAoZyBhcyBhbnkpLkRhdGUucHJvdG90eXBlID0gRGF0ZV8ucHJvdG90eXBlO1xuICAvLyBQcmVzZXJ2ZSBzdGF0aWMgbWV0aG9kc1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZy5EYXRlLCBEYXRlXyk7XG4gIGcuRGF0ZS5ub3cgPSAoKSA9PiBmaXhlZFRpbWVzdGFtcDtcblxuICAvLyBEZXRlcm1pbmlzdGljIGBjcnlwdG9gIHVzaW5nIFByb3h5IHRvIGF2b2lkIG11dGF0aW5nIGdsb2JhbCBvYmplY3RzXG4gIGNvbnN0IG9yaWdpbmFsQ3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIGNvbnN0IG9yaWdpbmFsU3VidGxlID0gb3JpZ2luYWxDcnlwdG8uc3VidGxlO1xuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVZhbHVlcyhhcnJheTogVWludDhBcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gTWF0aC5mbG9vcihybmcoKSAqIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGNvbnN0IHJhbmRvbVVVSUQgPSBjcmVhdGVSYW5kb21VVUlEKHJuZyk7XG5cbiAgLy8gVGhlIHNhbmRib3ggbXVzdCBub3QgaGFuZCB3b3JrZmxvdyBjb2RlIGEgcHJvbWlzZSB0aGF0IHNldHRsZXMgb24gaG9zdFxuICAvLyB0aW1pbmcgb3IgYSB3YXkgdG8gb2JzZXJ2ZSBob3N0IHN0YXRlIChiZXN0LWVmZm9ydCwgZm9yIG5vbi1hZHZlcnNhcmlhbFxuICAvLyBjb2RlKTogZXZlcnkgcHJvbWlzZSBhIHdvcmtmbG93IGNyZWF0ZXMgc2V0dGxlcyBlaXRoZXIgZnJvbSB0aGUgZXZlbnQgbG9nXG4gIC8vIG9yIHdpdGhpbiBpdHMgb3duIG1pY3JvdGFzayBjYXNjYWRlLCBzbyBhIHN1c3BlbmRlZCBWTSBpcyBmdWxseSBxdWllc2NlbnRcbiAgLy8gYW5kIGNhbiBiZSByZXRhaW5lZCBhY3Jvc3MgaW5saW5lIHN0ZXBzLlxuICAvL1xuICAvLyAtIGBBdG9taWNzLndhaXRBc3luY2AgaXMgYSB3YWxsLWNsb2NrIHRpbWVyICh2aWEgU2hhcmVkQXJyYXlCdWZmZXIpLlxuICAvLyAtIFRoZSBhc3luYyBgV2ViQXNzZW1ibHlgIGVudHJ5IHBvaW50cyByZXNvbHZlIG9uIGNvbXBpbGUtdGhyZWFkIHRpbWluZztcbiAgLy8gICB0aGUgc3luY2hyb25vdXMgYG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoKWAgLyBgSW5zdGFuY2UoKWAgcmVtYWluLlxuICAvLyAtIGBXZWFrUmVmLmRlcmVmKClgIGFuZCBmaW5hbGl6ZXIgY2FsbGJhY2tzIG9ic2VydmUgR0MgdGltaW5nLlxuICAvLyAtIER5bmFtaWMgYGltcG9ydCgpYCBzZXR0bGVzIHdpdGhpbiBhIG1pY3JvdGFzayAocmVqZWN0ZWQ6IG5vXG4gIC8vICAgYGltcG9ydE1vZHVsZUR5bmFtaWNhbGx5YCksIHNvIGl0IG5lZWRzIG5vIGhhbmRsaW5nLlxuICAvLyAtIEFsbCBgY3J5cHRvLnN1YnRsZWAgbWV0aG9kcyBleGNlcHQgdGhlIGRldGVybWluaXN0aWMgYGRpZ2VzdGAgb3ZlcnJpZGVcbiAgLy8gICBiZWxvdyB0aHJvdyBleHBsaWNpdGx5IChzZWUgdGhlIHN1YnRsZSBwcm94eSk7IGJpbmRpbmcgdGhlbSB0byB0aGVcbiAgLy8gICBob3N0IHN1YnRsZSB3b3VsZCBoYW5kIHdvcmtmbG93cyBhIGhvc3QtdGltaW5nIHByb21pc2UuXG4gIGNvbnN0IGludHJpbnNpY3MgPSBnIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBkZWxldGUgaW50cmluc2ljcy5BdG9taWNzLndhaXRBc3luYztcbiAgZGVsZXRlIGludHJpbnNpY3MuV2ViQXNzZW1ibHkuY29tcGlsZTtcbiAgZGVsZXRlIGludHJpbnNpY3MuV2ViQXNzZW1ibHkuaW5zdGFudGlhdGU7XG4gIGRlbGV0ZSBpbnRyaW5zaWNzLldlYkFzc2VtYmx5LmNvbXBpbGVTdHJlYW1pbmc7XG4gIGRlbGV0ZSBpbnRyaW5zaWNzLldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nO1xuICBkZWxldGUgaW50cmluc2ljcy5XZWFrUmVmO1xuICBkZWxldGUgaW50cmluc2ljcy5GaW5hbGl6YXRpb25SZWdpc3RyeTtcblxuICAvLyBgY3J5cHRvLnN1YnRsZS5kaWdlc3RgIGNvbXB1dGVzIHN5bmNocm9ub3VzbHkgdmlhIG5vZGU6Y3J5cHRvLCBzbyBpdHNcbiAgLy8gcHJvbWlzZSBzZXR0bGVzIG9uIGEgZGV0ZXJtaW5pc3RpYyBtaWNyb3Rhc2sgaW5zdGVhZCBvZiBob3N0IHRocmVhZHBvb2xcbiAgLy8gdGltaW5nOiBhIGRpZ2VzdCBjYW4gbmV2ZXIgYWR2YW5jZSBhIHN1c3BlbmRlZCB3b3JrZmxvdywgYW5kXG4gIC8vIGRpZ2VzdC11c2luZyBWTXMgc3RheSByZXRhaW5hYmxlLiBWYWx1ZXMgYXJlIGJ5dGUtaWRlbnRpY2FsIHRvIFdlYkNyeXB0by5cbiAgY29uc3QgZGlnZXN0ID0gYXN5bmMgKFxuICAgIGFsZ29yaXRobTogc3RyaW5nIHwgeyBuYW1lOiBzdHJpbmcgfSxcbiAgICBkYXRhOiBBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlld1xuICApOiBQcm9taXNlPEFycmF5QnVmZmVyPiA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBhbGdvcml0aG0gPT09ICdzdHJpbmcnID8gYWxnb3JpdGhtIDogYWxnb3JpdGhtLm5hbWU7XG4gICAgY29uc3Qgb3NzbCA9IERJR0VTVF9BTEdPUklUSE1TW25hbWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKCFvc3NsKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBgVW5yZWNvZ25pemVkIGFsZ29yaXRobSBuYW1lOiAke25hbWV9YCxcbiAgICAgICAgJ05vdFN1cHBvcnRlZEVycm9yJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2gob3NzbCkudXBkYXRlKHRvRGlnZXN0SW5wdXQoZGF0YSkpLmRpZ2VzdCgpO1xuICAgIC8vIENvcHkgb3V0OiBzbWFsbCBCdWZmZXJzIHNoYXJlIHRoZSBpbnRlcm5hbCBwb29sIGFsbG9jYXRpb24uXG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5QnVmZmVyKGhhc2guYnl0ZUxlbmd0aCk7XG4gICAgbmV3IFVpbnQ4QXJyYXkob3V0KS5zZXQoaGFzaCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICBnLmNyeXB0byA9IG5ldyBQcm94eShvcmlnaW5hbENyeXB0bywge1xuICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIGlmIChwcm9wID09PSAnZ2V0UmFuZG9tVmFsdWVzJykge1xuICAgICAgICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3AgPT09ICdyYW5kb21VVUlEJykge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSAnc3VidGxlJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG9yaWdpbmFsU3VidGxlLCB7XG4gICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdkaWdlc3QnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaWdlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wIGFzIGtleW9mIHR5cGVvZiBvcmlnaW5hbFN1YnRsZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV2ZXJ5IG90aGVyIHN1YnRsZSBtZXRob2QgKGBlbmNyeXB0YCwgYHNpZ25gLCBgaW1wb3J0S2V5YCwg4oCmKVxuICAgICAgICAgICAgLy8gc2V0dGxlcyBvbiBob3N0IHRocmVhZHBvb2wgdGltaW5nLCB3aGljaCBjYW5ub3QgYmUgcmVwbGF5ZWQuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICAgICAgYFxcYGNyeXB0by5zdWJ0bGUuJHtTdHJpbmcocHJvcCl9KClcXGAgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbi4gTW92ZSBpdCB0byBhIHN0ZXAgZnVuY3Rpb24gd2hlcmUgZnVsbCBOb2RlLmpzIGNyeXB0byBpcyBhdmFpbGFibGUuYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2Ygb3JpZ2luYWxDcnlwdG9dO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFByb3BhZ2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgKGcgYXMgYW55KS5wcm9jZXNzID0ge1xuICAgIGVudjogT2JqZWN0LmZyZWV6ZSh7IC4uLnByb2Nlc3MuZW52IH0pLFxuICB9O1xuXG4gIC8vIFN0YXRlbGVzcyArIHN5bmNocm9ub3VzIFdlYiBBUElzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIGluc2lkZSB0aGUgc2FuZGJveFxuICBnLkRPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uO1xuICBnLkhlYWRlcnMgPSBnbG9iYWxUaGlzLkhlYWRlcnM7XG4gIGcuVGV4dEVuY29kZXIgPSBnbG9iYWxUaGlzLlRleHRFbmNvZGVyO1xuICBnLlRleHREZWNvZGVyID0gZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcjtcbiAgZy5jb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBnLlVSTCA9IGdsb2JhbFRoaXMuVVJMO1xuICBnLlVSTFNlYXJjaFBhcmFtcyA9IGdsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zO1xuICBnLnN0cnVjdHVyZWRDbG9uZSA9IGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lO1xuICBnLmF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG4gIGcuYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTtcblxuICAvLyBUQzM5IFVpbnQ4QXJyYXkgYmFzZTY0L2hleCBwb2x5ZmlsbCAocHJvcG9zYWwtYXJyYXlidWZmZXItYmFzZTY0KVxuICBpbnN0YWxsVWludDhBcnJheUJhc2U2NChnLlVpbnQ4QXJyYXkpO1xuXG4gIC8vIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwb2x5ZmlsbCBmb3IgYHVzaW5nYCBrZXl3b3JkXG4gIChnLlN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPz89IFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG4gIChnLlN5bWJvbCBhcyBhbnkpLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuXG4gIC8vIEhBQ0s6IFNoaW0gYGV4cG9ydHNgIGZvciB0aGUgYnVuZGxlXG4gIGcuZXhwb3J0cyA9IHt9O1xuICAoZyBhcyBhbnkpLm1vZHVsZSA9IHsgZXhwb3J0czogZy5leHBvcnRzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIGdsb2JhbFRoaXM6IGcsXG4gICAgdXBkYXRlVGltZXN0YW1wOiAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgIGZpeGVkVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-cache.d.ts","sourceRoot":"","sources":["../../src/vm/script-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"script-cache.d.ts","sourceRoot":"","sources":["../../src/vm/script-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAgG/C;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAET;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|