@workflow/core 5.0.0-beta.41 → 5.0.0-beta.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/create-hook.d.ts +9 -5
  2. package/dist/create-hook.d.ts.map +1 -1
  3. package/dist/create-hook.js +1 -1
  4. package/dist/events-consumer.d.ts +97 -0
  5. package/dist/events-consumer.d.ts.map +1 -1
  6. package/dist/events-consumer.js +147 -14
  7. package/dist/private.d.ts +31 -12
  8. package/dist/private.d.ts.map +1 -1
  9. package/dist/private.js +149 -26
  10. package/dist/runtime/constants.d.ts +62 -0
  11. package/dist/runtime/constants.d.ts.map +1 -1
  12. package/dist/runtime/constants.js +70 -1
  13. package/dist/runtime/helpers.d.ts +127 -93
  14. package/dist/runtime/helpers.d.ts.map +1 -1
  15. package/dist/runtime/helpers.js +149 -132
  16. package/dist/runtime/quickjs-entrypoint.d.ts +10 -9
  17. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
  18. package/dist/runtime/quickjs-entrypoint.js +162 -38
  19. package/dist/runtime/replay-budget.d.ts +8 -0
  20. package/dist/runtime/replay-budget.d.ts.map +1 -1
  21. package/dist/runtime/replay-budget.js +3 -3
  22. package/dist/runtime/resume-hook.d.ts.map +1 -1
  23. package/dist/runtime/resume-hook.js +53 -13
  24. package/dist/runtime/resume-latency.d.ts +143 -0
  25. package/dist/runtime/resume-latency.d.ts.map +1 -0
  26. package/dist/runtime/resume-latency.js +153 -0
  27. package/dist/runtime/run.d.ts.map +1 -1
  28. package/dist/runtime/run.js +54 -29
  29. package/dist/runtime/step-executor.d.ts +76 -13
  30. package/dist/runtime/step-executor.d.ts.map +1 -1
  31. package/dist/runtime/step-executor.js +171 -19
  32. package/dist/runtime/step-latency.d.ts +6 -0
  33. package/dist/runtime/step-latency.d.ts.map +1 -1
  34. package/dist/runtime/step-latency.js +3 -1
  35. package/dist/runtime/suspension-handler.d.ts +119 -8
  36. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  37. package/dist/runtime/suspension-handler.js +643 -46
  38. package/dist/runtime/world-compatibility.d.ts +6 -5
  39. package/dist/runtime/world-compatibility.d.ts.map +1 -1
  40. package/dist/runtime/world-compatibility.js +7 -6
  41. package/dist/runtime.d.ts.map +1 -1
  42. package/dist/runtime.js +583 -142
  43. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  44. package/dist/serialization/codec-devalue.js +15 -4
  45. package/dist/serialization.d.ts +10 -2
  46. package/dist/serialization.d.ts.map +1 -1
  47. package/dist/serialization.js +55 -8
  48. package/dist/telemetry/semantic-conventions.d.ts +81 -0
  49. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  50. package/dist/telemetry/semantic-conventions.js +67 -1
  51. package/dist/telemetry.d.ts +6 -0
  52. package/dist/telemetry.d.ts.map +1 -1
  53. package/dist/telemetry.js +22 -1
  54. package/dist/test-support/orchestrator-context.d.ts +25 -0
  55. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  56. package/dist/test-support/orchestrator-context.js +91 -0
  57. package/dist/version.d.ts +1 -1
  58. package/dist/version.js +2 -2
  59. package/dist/workflow/create-hook.js +2 -2
  60. package/dist/workflow/hook.js +3 -3
  61. package/dist/workflow.js +43 -2
  62. package/docs/foundations/hooks.mdx +2 -2
  63. package/docs/foundations/streaming.mdx +24 -0
  64. package/docs/how-it-works/event-sourcing.mdx +39 -1
  65. package/package.json +5 -5
@@ -417,6 +417,87 @@ export declare const HookResilientResumeMaterialized: (value: boolean) => {
417
417
  export declare const HookResumeSetupSource: (value: string) => {
418
418
  [k: string]: string;
419
419
  };
420
+ /**
421
+ * Producer-side signal (on the suspension span) counting steps whose direct
422
+ * `step_created` write failed transiently while their `stepInput`-carrying
423
+ * queue publish succeeded, so step creation is recovered via the consumer's
424
+ * re-ensure. Mirrors {@link HookResilientResume}.
425
+ */
426
+ export declare const StepResilientDispatchRecovered: (value: number) => {
427
+ [k: string]: number;
428
+ };
429
+ /**
430
+ * Consumer-side signal (on the workflow execution span) that this delivery
431
+ * materialized the `step_created` event from the queue message's `stepInput`
432
+ * because the producer's direct write had not landed — the completion of the
433
+ * recovery path {@link StepResilientDispatchRecovered} began.
434
+ */
435
+ export declare const StepResilientDispatchMaterialized: (value: boolean) => {
436
+ [k: string]: boolean;
437
+ };
438
+ /** Total TTR: entry into `resumeHook()` → immediately before `stepFn.apply()`. */
439
+ export declare const ResumeTotalMs: (value: number) => {
440
+ [k: string]: number;
441
+ };
442
+ /** Phase: `resumeHook()` entry → the queue publish being requested. */
443
+ export declare const ResumeProducerPrepMs: (value: number) => {
444
+ [k: string]: number;
445
+ };
446
+ /** Phase: queue publish requested → the final consumer's handler being entered. */
447
+ export declare const ResumeQueueDeliveryMs: (value: number) => {
448
+ [k: string]: number;
449
+ };
450
+ /** Phase: consumer entry → replay beginning. */
451
+ export declare const ResumeSetupMs: (value: number) => {
452
+ [k: string]: number;
453
+ };
454
+ /** Phase: replay beginning → the next durable step being encountered. */
455
+ export declare const ResumeReplayMs: (value: number) => {
456
+ [k: string]: number;
457
+ };
458
+ /** Phase: step encountered → the `step_started` request beginning. */
459
+ export declare const ResumeStepDispatchMs: (value: number) => {
460
+ [k: string]: number;
461
+ };
462
+ /**
463
+ * Phase: `step_started` request beginning → its response returning. Omitted
464
+ * under optimistic inline start, where the claim is not awaited before the
465
+ * body runs and therefore has no completion instant at that point; the time
466
+ * is then reported entirely as {@link ResumeStepPrepareMs}.
467
+ */
468
+ export declare const ResumeStepClaimMs: (value: number) => {
469
+ [k: string]: number;
470
+ };
471
+ /**
472
+ * Phase: claim returning → immediately before `stepFn.apply()`. Deliberately
473
+ * includes encryption-key resolution, argument hydration, and step-context
474
+ * setup; `workflow.queue.deserialize_time_ms` still isolates hydration.
475
+ */
476
+ export declare const ResumeStepPrepareMs: (value: number) => {
477
+ [k: string]: number;
478
+ };
479
+ /** What triggered the measured resumption. */
480
+ export declare const ResumeTrigger: (value: "hook") => {
481
+ [k: string]: "hook";
482
+ };
483
+ /** Which `resumeHook()` dispatch path produced this resume. */
484
+ export declare const ResumeStrategy: (value: "parallel" | "sequential") => {
485
+ [k: string]: "parallel" | "sequential";
486
+ };
487
+ /**
488
+ * How the consuming invocation initialized replay state. Distinct from the
489
+ * pre-existing {@link HookResumeSetupSource} (`workflow.resume_setup_source`,
490
+ * on the workflow execution span), which reports the finer-grained
491
+ * hoisted-write outcome; this one is the TTR dimension and shares the metric's
492
+ * three-value vocabulary.
493
+ */
494
+ export declare const ResumeSetupSource: (value: "hook_preload" | "run_started" | "event_load") => {
495
+ [k: string]: "hook_preload" | "run_started" | "event_load";
496
+ };
497
+ /** Whether the measured step ran in the resuming invocation or a queued one. */
498
+ export declare const ResumeStepExecution: (value: "inline" | "dispatched") => {
499
+ [k: string]: "inline" | "dispatched";
500
+ };
420
501
  /** Number of webhook handlers triggered */
421
502
  export declare const WebhookHandlersTriggered: (value: number) => {
422
503
  [k: string]: number;
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-conventions.d.ts","sourceRoot":"","sources":["../../src/telemetry/semantic-conventions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-conventions.d.ts","sourceRoot":"","sources":["../../src/telemetry/semantic-conventions.ts"],"names":[],"mappings":"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"}
@@ -289,6 +289,72 @@ export const HookResilientResumeMaterialized = SemanticConvention('workflow.hook
289
289
  * {@link HookResilientResumeMaterialized}).
290
290
  */
291
291
  export const HookResumeSetupSource = SemanticConvention('workflow.resume_setup_source');
292
+ /**
293
+ * Producer-side signal (on the suspension span) counting steps whose direct
294
+ * `step_created` write failed transiently while their `stepInput`-carrying
295
+ * queue publish succeeded, so step creation is recovered via the consumer's
296
+ * re-ensure. Mirrors {@link HookResilientResume}.
297
+ */
298
+ export const StepResilientDispatchRecovered = SemanticConvention('workflow.step.resilient_dispatch_recovered');
299
+ /**
300
+ * Consumer-side signal (on the workflow execution span) that this delivery
301
+ * materialized the `step_created` event from the queue message's `stepInput`
302
+ * because the producer's direct write had not landed — the completion of the
303
+ * recovery path {@link StepResilientDispatchRecovered} began.
304
+ */
305
+ export const StepResilientDispatchMaterialized = SemanticConvention('workflow.step.resilient_dispatch_materialized');
306
+ // Hook-triggered time-to-resume (TTR) attributes
307
+ //
308
+ // Set on the `step.execute <name>` span of the FIRST durable step following a
309
+ // hook resume, and only there: one resumption produces exactly one sample, so
310
+ // a later step in the same invocation, a retry, or a redelivery never
311
+ // re-reports it. The phases are non-overlapping and sum exactly to
312
+ // {@link ResumeTotalMs} — see runtime/resume-latency.ts for the boundary
313
+ // definitions and the emission gate.
314
+ //
315
+ // Deliberately carries no `resumeId`, run ID, or token: the metric is meant to
316
+ // be aggregated across every resume, and high-cardinality keys would make that
317
+ // prohibitive. Existing trace-correlation fields on the same span are
318
+ // unchanged and still identify the individual run.
319
+ /** Total TTR: entry into `resumeHook()` → immediately before `stepFn.apply()`. */
320
+ export const ResumeTotalMs = SemanticConvention('workflow.resume.total_ms');
321
+ /** Phase: `resumeHook()` entry → the queue publish being requested. */
322
+ export const ResumeProducerPrepMs = SemanticConvention('workflow.resume.phase.producer_prep_ms');
323
+ /** Phase: queue publish requested → the final consumer's handler being entered. */
324
+ export const ResumeQueueDeliveryMs = SemanticConvention('workflow.resume.phase.queue_delivery_ms');
325
+ /** Phase: consumer entry → replay beginning. */
326
+ export const ResumeSetupMs = SemanticConvention('workflow.resume.phase.resume_setup_ms');
327
+ /** Phase: replay beginning → the next durable step being encountered. */
328
+ export const ResumeReplayMs = SemanticConvention('workflow.resume.phase.replay_ms');
329
+ /** Phase: step encountered → the `step_started` request beginning. */
330
+ export const ResumeStepDispatchMs = SemanticConvention('workflow.resume.phase.step_dispatch_ms');
331
+ /**
332
+ * Phase: `step_started` request beginning → its response returning. Omitted
333
+ * under optimistic inline start, where the claim is not awaited before the
334
+ * body runs and therefore has no completion instant at that point; the time
335
+ * is then reported entirely as {@link ResumeStepPrepareMs}.
336
+ */
337
+ export const ResumeStepClaimMs = SemanticConvention('workflow.resume.phase.step_claim_ms');
338
+ /**
339
+ * Phase: claim returning → immediately before `stepFn.apply()`. Deliberately
340
+ * includes encryption-key resolution, argument hydration, and step-context
341
+ * setup; `workflow.queue.deserialize_time_ms` still isolates hydration.
342
+ */
343
+ export const ResumeStepPrepareMs = SemanticConvention('workflow.resume.phase.step_prepare_ms');
344
+ /** What triggered the measured resumption. */
345
+ export const ResumeTrigger = SemanticConvention('workflow.resume.trigger');
346
+ /** Which `resumeHook()` dispatch path produced this resume. */
347
+ export const ResumeStrategy = SemanticConvention('workflow.resume.strategy');
348
+ /**
349
+ * How the consuming invocation initialized replay state. Distinct from the
350
+ * pre-existing {@link HookResumeSetupSource} (`workflow.resume_setup_source`,
351
+ * on the workflow execution span), which reports the finer-grained
352
+ * hoisted-write outcome; this one is the TTR dimension and shares the metric's
353
+ * three-value vocabulary.
354
+ */
355
+ export const ResumeSetupSource = SemanticConvention('workflow.resume.setup_source');
356
+ /** Whether the measured step ran in the resuming invocation or a queued one. */
357
+ export const ResumeStepExecution = SemanticConvention('workflow.resume.step_execution');
292
358
  // Webhook attributes
293
359
  /** Number of webhook handlers triggered */
294
360
  export const WebhookHandlersTriggered = SemanticConvention('webhook.handlers.triggered');
@@ -370,4 +436,4 @@ export const RpcMethod = SemanticConvention('rpc.method');
370
436
  export const ErrorRetryable = SemanticConvention('error.retryable');
371
437
  /** Error category (workflow-specific: fatal, retryable, transient) */
372
438
  export const ErrorCategory = SemanticConvention('error.category');
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELHlCQUF5QixDQUMxQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FDekQsOEJBQThCLENBQy9CLENBQUM7QUFFRixpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELGlDQUFpQyxDQUNsQyxDQUFDO0FBRUYsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUN2RCxtQ0FBbUMsQ0FDcEMsQ0FBQztBQUVGLGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsMEJBQTBCLENBQzNCLENBQUM7QUFFRixrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUN2RCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUVGLCtCQUErQjtBQUUvQix3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFxQixhQUFhLENBQUMsQ0FBQztBQUVoRixrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUU5QyxxQkFBcUIsQ0FBQyxDQUFDO0FBRXpCLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsOEJBQThCLENBQy9CLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQ3pELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLGtCQUFrQixDQUN6RCxrQ0FBa0MsQ0FDbkMsQ0FBQztBQUVGLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsK0JBQStCLENBQ2hDLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsK0VBQStFO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVUsZ0JBQWdCLENBQUMsQ0FBQztBQUUzRSxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQ2pELHFCQUFxQixDQUN0QixDQUFDO0FBRUYsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUNwRCx3QkFBd0IsQ0FDekIsQ0FBQztBQUVGLGtFQUFrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FDakQscUJBQXFCLENBQ3RCLENBQUM7QUFFRix3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQ3BELHdCQUF3QixDQUN6QixDQUFDO0FBRUYsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUNwRCx3QkFBd0IsQ0FDekIsQ0FBQztBQUVGLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FDcEQsd0JBQXdCLENBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsa0JBQWtCLENBQzFELGdEQUFnRCxDQUNqRCxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGtCQUFrQixDQUMxRCxnREFBZ0QsQ0FDakQsQ0FBQztBQUVGLG1CQUFtQjtBQUVuQiwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQ2pELHFCQUFxQixDQUN0QixDQUFDO0FBRUYsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGtCQUFrQixDQUMxRCwrQkFBK0IsQ0FDaEMsQ0FBQztBQUVGLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxrQkFBa0IsQ0FDNUQsaUNBQWlDLENBQ2xDLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsa0JBQWtCLENBQzVELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsMkZBQTJGO0FBQzNGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCxvQ0FBb0MsQ0FDckMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFTLGVBQWUsQ0FBQyxDQUFDO0FBRXhFLGtCQUFrQjtBQUVsQiwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFTLFdBQVcsQ0FBQyxDQUFDO0FBRWhFLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQVMsU0FBUyxDQUFDLENBQUM7QUFFNUQsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUV0RSxpQ0FBaUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFpQixhQUFhLENBQUMsQ0FBQztBQUU1RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFTLGtCQUFrQixDQUFDLENBQUM7QUFFN0Usa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUNuRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFTLGNBQWMsQ0FBQyxDQUFDO0FBRXJFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQVMsY0FBYyxDQUFDLENBQUM7QUFFckU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsa0JBQWtCLENBQzNELGlDQUFpQyxDQUNsQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQ3hELDRCQUE0QixDQUM3QixDQUFDO0FBRUYsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBVSxjQUFjLENBQUMsQ0FBQztBQUV2RSxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN6QixrQkFBa0IsQ0FBaUIsa0JBQWtCLENBQUMsQ0FBQztBQUV6RCxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsOEJBQThCO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdFLGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSxvQ0FBb0M7QUFDcEMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQzNCLGtCQUFrQixDQUFTLG9CQUFvQixDQUFDLENBQUM7QUFFbkQsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBVSxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlFLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FDbEQsc0JBQXNCLENBQ3ZCLENBQUM7QUFFRiwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQ3ZELDRCQUE0QixDQUM3QixDQUFDO0FBRUYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUNsRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQUVGLG1FQUFtRTtBQUNuRSw4RUFBOEU7QUFFOUUsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlFLDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FDeEQsNEJBQTRCLENBQzdCLENBQUM7QUFFRix5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUV0RCwwQkFBMEIsQ0FBQyxDQUFDO0FBRTlCLDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQy9DLDRCQUE0QixDQUM3QixDQUFDO0FBRUYsd0JBQXdCO0FBRXhCLHVEQUF1RDtBQUN2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCwrQkFBK0IsQ0FDaEMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRyxrQkFBa0IsQ0FDcEUsMENBQTBDLENBQzNDLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsa0JBQWtCLENBQ25FLHdDQUF3QyxDQUN6QyxDQUFDO0FBRUYsa0JBQWtCO0FBRWxCLHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQVMscUJBQXFCLENBQUMsQ0FBQztBQUUzRSw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFTLGtCQUFrQixDQUFDLENBQUM7QUFFckUsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBVSxxQkFBcUIsQ0FBQyxDQUFDO0FBRTVFOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQ25ELGdDQUFnQyxDQUNqQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxrQkFBa0IsQ0FDL0QsNkNBQTZDLENBQzlDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELDhCQUE4QixDQUMvQixDQUFDO0FBRUYscUJBQXFCO0FBRXJCLDJDQUEyQztBQUMzQyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FDeEQsNEJBQTRCLENBQzdCLENBQUM7QUFFRix3QkFBd0I7QUFFeEIsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQ3ZELDJCQUEyQixDQUM1QixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsa0JBQWtCLENBQzNELGdDQUFnQyxDQUNqQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsa0JBQWtCLENBQzNELGdDQUFnQyxDQUNqQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsa0JBQWtCLENBQzNELGdDQUFnQyxDQUNqQyxDQUFDO0FBRUYsNERBQTREO0FBQzVELG9FQUFvRTtBQUVwRSwrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQ2pELHFCQUFxQixDQUN0QixDQUFDO0FBRUYsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUVsRSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFTLFVBQVUsQ0FBQyxDQUFDO0FBRTlELHNEQUFzRDtBQUN0RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsZ0JBQWdCLENBQUMsQ0FBQztBQUUxRSwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFTLGFBQWEsQ0FBQyxDQUFDO0FBRXBFLDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsMkJBQTJCLENBQzVCLENBQUM7QUFFRixnRUFBZ0U7QUFDaEUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFTLFlBQVksQ0FBQyxDQUFDO0FBRWxFLG1FQUFtRTtBQUVuRSwyREFBMkQ7QUFDM0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQ2hELDZCQUE2QixDQUM5QixDQUFDO0FBRUYsMkJBQTJCO0FBRTNCLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FDekQsOEJBQThCLENBQy9CLENBQUM7QUFFRix3REFBd0Q7QUFFeEQsaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUN0RCxvQ0FBb0MsQ0FDckMsQ0FBQztBQUVGLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FDcEQsa0NBQWtDLENBQ25DLENBQUM7QUFFRiwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQ3BELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsbUZBQW1GO0FBQ25GLEVBQUU7QUFDRiwyRUFBMkU7QUFDM0UsMkVBQTJFO0FBQzNFLHNFQUFzRTtBQUN0RSxxRUFBcUU7QUFFckUsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUV0RCxrQ0FBa0MsQ0FBQyxDQUFDO0FBRXRDLHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FDdkQsbUNBQW1DLENBQ3BDLENBQUM7QUFFRixpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELDhCQUE4QixDQUMvQixDQUFDO0FBRUYsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLGtCQUFrQixDQUM5RCwyQ0FBMkMsQ0FDNUMsQ0FBQztBQUVGLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FDeEQscUNBQXFDLENBQ3RDLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsa0JBQWtCLENBQzdELDBDQUEwQyxDQUMzQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsa0JBQWtCLENBQ2hFLDhDQUE4QyxDQUMvQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsa0JBQWtCLENBQzdELDJDQUEyQyxDQUM1QyxDQUFDO0FBRUYseUVBQXlFO0FBQ3pFLGtFQUFrRTtBQUVsRSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFTLGNBQWMsQ0FBQyxDQUFDO0FBRXRFLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQVMsWUFBWSxDQUFDLENBQUM7QUFFbEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBUyxhQUFhLENBQUMsQ0FBQztBQUVwRSxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFTLFlBQVksQ0FBQyxDQUFDO0FBRWxFLHFEQUFxRDtBQUNyRCxnRkFBZ0Y7QUFFaEYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBVSxpQkFBaUIsQ0FBQyxDQUFDO0FBRTdFLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBRTdDLGdCQUFnQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnMgZm9yIFZlcmNlbCBXb3JrZmxvdyB0ZWxlbWV0cnkuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3RhbmRhcmRpemVkIHRlbGVtZXRyeSBhdHRyaWJ1dGVzIGZvbGxvd2luZyBPcGVuVGVsZW1ldHJ5IHNlbWFudGljIGNvbnZlbnRpb25zXG4gKiBmb3IgaW5zdHJ1bWVudGluZyB3b3JrZmxvdyBleGVjdXRpb24sIHN0ZXAgcHJvY2Vzc2luZywgYW5kIHJlbGF0ZWQgb3BlcmF0aW9ucy4gRWFjaCBleHBvcnRlZCBmdW5jdGlvblxuICogY3JlYXRlcyBhIHByb3Blcmx5IGZvcm1hdHRlZCBhdHRyaWJ1dGUgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBPcGVuVGVsZW1ldHJ5IHNwYW5zLlxuICpcbiAqIFRoZSBzZW1hbnRpYyBjb252ZW50aW9ucyBhcmUgb3JnYW5pemVkIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzOlxuICogLSAqKldvcmtmbG93IGF0dHJpYnV0ZXMqKjogVHJhY2sgd29ya2Zsb3cgbGlmZWN5Y2xlLCBzdGF0dXMsIGFuZCBtZXRhZGF0YVxuICogLSAqKlN0ZXAgYXR0cmlidXRlcyoqOiBNb25pdG9yIGluZGl2aWR1YWwgc3RlcCBleGVjdXRpb24sIHJldHJpZXMsIGFuZCByZXN1bHRzXG4gKiAtICoqUXVldWUgYXR0cmlidXRlcyoqOiBJbnN0cnVtZW50IG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9uc1xuICogLSAqKkRlcGxveW1lbnQgYXR0cmlidXRlcyoqOiBDYXB0dXJlIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAqXG4gKiBBbGwgYXR0cmlidXRlIGZ1bmN0aW9ucyBhcmUgdHlwZS1zYWZlIGFuZCBsZXZlcmFnZSBleGlzdGluZyBiYWNrZW5kIHR5cGVzIHRvIGVuc3VyZVxuICogY29uc2lzdGVuY3kgYmV0d2VlbiB0ZWxlbWV0cnkgZGF0YSBhbmQgYWN0dWFsIHN5c3RlbSBzdGF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcbiAqXG4gKiAvLyBTZXQgd29ya2Zsb3cgYXR0cmlidXRlcyBvbiBhIHNwYW5cbiAqIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUoJ215LXdvcmtmbG93JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd09wZXJhdGlvbignc3RhcnQnKSxcbiAqICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuU3RhdHVzKCdydW5uaW5nJyksXG4gKiB9KTtcbiAqXG4gKiAvLyBTZXQgc3RlcCBhdHRyaWJ1dGVzXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuU3RlcE5hbWUoJ3Byb2Nlc3MtZGF0YScpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnY29tcGxldGVkJyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5TdGVwQXR0ZW1wdCgxKSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi99IE9wZW5UZWxlbWV0cnkgU2VtYW50aWMgQ29udmVudGlvbnNcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmltcG9ydCB0eXBlIHsgTWVzc2FnZUlkLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlbWFudGljIGNvbnZlbnRpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYW4gYXR0cmlidXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBTZW1hbnRpY0NvbnZlbnRpb248VD4oLi4ubmFtZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiAodmFsdWU6IFQpID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKG5hbWVzLm1hcCgobmFtZSkgPT4gW25hbWUsIHZhbHVlXSBhcyBjb25zdCkpO1xufVxuXG4vLyBXb3JrZmxvdyBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cgYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd05hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cubmFtZScpO1xuXG4vKiogVGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgb24gdGhlIHdvcmtmbG93ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dPcGVyYXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdzdGFydCcgfCAnZXhlY3V0ZScgfCAnZXhlY3V0ZV92MicgfCAncnVuJ1xuPignd29ya2Zsb3cub3BlcmF0aW9uJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgYSBzcGVjaWZpYyB3b3JrZmxvdyBydW4gaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1bklkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93LnJ1bi5pZCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1biAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFxuICBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCAnd29ya2Zsb3dfc3VzcGVuZGVkJ1xuPignd29ya2Zsb3cucnVuLnN0YXR1cycpO1xuXG4vKiogVGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGFydGVkIChVbml4IHRpbWVzdGFtcCkgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N0YXJ0ZWRBdCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3RhcnRlZF9hdCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgZXZlbnRzIHByb2Nlc3NlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLmNvdW50J1xuKTtcblxuLyoqIFdoZXRoZXIgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXJ0cyB3aXRoIHJlcGxheSBvciByZXN1bWVzIGEgcmV0YWluZWQgVk0gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V4ZWN1dGlvbk1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3JlcGxheScgfCAncmV0YWluZWQnPihcbiAgJ3dvcmtmbG93LmV4ZWN1dGlvbi5tb2RlJ1xuKTtcblxuLyoqXG4gKiBFdmVudHMgdGhlIHJlcGxheSB3YWxrZWQgcGFzdCB0aGF0IG5vIGNvbnN1bWVyIGNsYWltZWQsIHN0aWxsIGhlbGQgd2hlbiB0aGVcbiAqIHJlcGxheSBzdG9wcGVkLlxuICpcbiAqIEEgbm9uLXplcm8gY291bnQgb24gYSBzdXNwZW5zaW9uIGlzIG9yZGluYXJ5OiBhbiBvdXQtb2YtYmFuZCBkZWxpdmVyeSB0aGF0XG4gKiBsYW5kZWQgYWhlYWQgb2YgdGhlIGNvZGUgdGhhdCByZWFkcyBpdCB3YWl0cyBmb3IgdGhlIHJlcGxheSB0aGF0IGdldHMgdGhlcmUuXG4gKiBGcm9tIGluc2lkZSBvbmUgcmVwbGF5IHRoYXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBldmVudCBubyByZXBsYXkgd2lsbFxuICogZXZlciBjbGFpbSwgYmVjYXVzZSB0aGUgdHdvIGRpZmZlciBvbmx5IGluIHdoYXQgdGhlIG5leHQgcmVwbGF5IGRvZXMuIFNvIHRoZVxuICogY291bnQgZ29lcyBvbiB0aGUgc3BhbiBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHJ1biwgYW5kIHRoZSBjYXNlIHdvcnRoIGFjdGluZ1xuICogb24gaXMgYSBxdWVyeSBhY3Jvc3MgYSBydW4ncyBzcGFuczogdGhlIHNhbWVcbiAqIHtAbGluayBXb3JrZmxvd1BhcmtlZEV2ZW50SWR9IGhlbGQgb24gc3VzcGVuc2lvbiBhZnRlciBzdXNwZW5zaW9uLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5jb3VudCdcbik7XG5cbi8qKiBPbGRlc3QgZXZlbnQgc3RpbGwgaGVsZCB1bmNsYWltZWQgd2hlbiB0aGUgcmVwbGF5IHN0b3BwZWQuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFya2VkLmV2ZW50X2lkJ1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIG9sZGVzdCBldmVudCBzdGlsbCBoZWxkIHVuY2xhaW1lZCB3aGVuIHRoZSByZXBsYXkgc3RvcHBlZC4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1BhcmtlZEV2ZW50VHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5ldmVudF90eXBlJ1xuKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSB3b3JrZmxvdyByZXN1bHQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1Jlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LnJlc3VsdC50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdHJhY2UgY29udGV4dCB3YXMgcHJvcGFnYXRlZCB0byB0aGlzIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudHJhY2UucHJvcGFnYXRlZCdcbik7XG5cbi8vIFF1aWNrSlMgVk0gZW5naW5lIGF0dHJpYnV0ZXNcblxuLyoqIFRoZSBWTSBlbmdpbmUgZXhlY3V0aW5nIHRoZSB3b3JrZmxvdyBmdW5jdGlvbiBmb3IgdGhpcyBpbnZvY2F0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dWbSA9IFNlbWFudGljQ29udmVudGlvbjwnbm9kZScgfCAncXVpY2tqcyc+KCd3b3JrZmxvdy52bScpO1xuXG4vKiogT3V0Y29tZSBvZiBhIFF1aWNrSlMgVk0gd29ya2Zsb3cgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNPdXRjb21lID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnY29tcGxldGVkJyB8ICdzdXNwZW5kZWQnIHwgJ2ZhaWxlZCdcbj4oJ3dvcmtmbG93LnZtLm91dGNvbWUnKTtcblxuLyoqIFdoZXRoZXIgcHJlbG9hZGVkIGV2ZW50cyBmcm9tIGBldmVudHMuY3JlYXRlKCdydW5fc3RhcnRlZCcpYCB3ZXJlIHVzZWQgKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTRXZlbnRzUHJlbG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLnByZWxvYWRlZCdcbik7XG5cbi8qKiBUb3RhbCBudW1iZXIgb2YgZXZlbnRzIGZldGNoZWQgZnJvbSB0aGUgd29ybGQgZm9yIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNFdmVudHNGZXRjaGVkQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5mZXRjaGVkX2NvdW50J1xuKTtcblxuLyoqIE51bWJlciBvZiBwYWdlcyByZXF1aXJlZCB0byBmZXRjaCBhbGwgZXZlbnRzICovXG5leHBvcnQgY29uc3QgUXVpY2tKU0V2ZW50c0ZldGNoZWRQYWdlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLmZldGNoZWRfcGFnZXMnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHBlbmRpbmcgVk0gb3BlcmF0aW9ucyBjYXB0dXJlZCBhdCBzdXNwZW5zaW9uICovXG5leHBvcnQgY29uc3QgUXVpY2tKU1BlbmRpbmdPcHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0ucGVuZGluZ19vcHNfY291bnQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGV4ZWN1dGVkIGlubGluZSAobGl2ZS1WTSBjb250aW51YXRpb24pIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNJbmxpbmVTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAncXVpY2tqcy5pbmxpbmVfc3RlcHMnXG4pO1xuXG4vKiogQWN0aXZlIHRyYWNlLWNvcnJlbGF0aW9uIG1vZGUgZm9yIHRoaXMgaW52b2NhdGlvbiAobGlua2VkIG9yIGNvbnRpbnVvdXMpICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dUcmFjZU1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J2xpbmtlZCcgfCAnY29udGludW91cyc+KFxuICAnd29ya2Zsb3cudHJhY2UubW9kZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRoaXMgd29ya2Zsb3cgaW52b2NhdGlvbiBpcyB1c2luZyB0aGUgdHVyYm8gZmlyc3QtZGVsaXZlcnkgcGF0aCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHVyYm8gPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3dvcmtmbG93LnR1cmJvJyk7XG5cbi8qKiBOYW1lIG9mIHRoZSBlcnJvciB0aGF0IGNhdXNlZCB3b3JrZmxvdyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm5hbWUnXG4pO1xuXG4vKiogRXJyb3IgbWVzc2FnZSB3aGVuIHdvcmtmbG93IGZhaWxzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck1lc3NhZ2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm1lc3NhZ2UnXG4pO1xuXG4vKiogRXJyb3IgY2xhc3NpZmljYXRpb24gY29kZSAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0Vycm9yQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXJyb3IuY29kZSdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc3RlcHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGVwc0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXBzLmNyZWF0ZWQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGhvb2tzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93SG9va3NDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ob29rcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiB3YWl0cyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1dhaXRzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cud2FpdHMuY3JlYXRlZCdcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIGlubGluZS1vd25lZCBzdGVwcyB0aGlzIGludm9jYXRpb24gcmUtZXhlY3V0ZWQgYmVjYXVzZSBpdCBpcyBhXG4gKiByZWRlbGl2ZXJ5IG9mIHRoZWlyIG93bmluZyBxdWV1ZSBtZXNzYWdlIChjcmFzaCByZWNvdmVyeSBmb3IgaW5saW5lXG4gKiBzdGVwcyDigJQgc2VlIHRoZSBpbmxpbmUgc3RlcCBvd25lcnNoaXAgY2hhbmdlbG9nLCB3b3JrZmxvdyMyNzgwKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93T3duZWRSZWNvdmVyeVN0ZXBzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5pbmxpbmVfb3duZXJzaGlwLm93bmVkX3JlY292ZXJ5X3N0ZXBzJ1xuKTtcblxuLyoqXG4gKiBOdW1iZXIgb2YgcGVuZGluZyBzdGVwcyBmb3Igd2hpY2ggdGhpcyByZXBsYXkgc3VwcHJlc3NlZCB0aGUgaW1tZWRpYXRlXG4gKiByZXF1ZXVlIChhbm90aGVyIGludm9jYXRpb24gaW5saW5lLW93bnMgdGhlbSB1bmRlciBhIGxpdmUgbGVhc2UpIGFuZFxuICogZW5zdXJlZCBhIGRlbGF5ZWQgYmFja3N0b3Agd2FrZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dCYWNrc3RvcFdha2VzQXJtZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmlubGluZV9vd25lcnNoaXAuYmFja3N0b3Bfd2FrZXNfYXJtZWQnXG4pO1xuXG4vLyBSb3V0ZSBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgd29ya2Zsb3cgcnVudGltZSByb3V0ZSBiZWluZyBoYW5kbGVkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZVR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J2Zsb3cnPihcbiAgJ3dvcmtmbG93LnJvdXRlLnR5cGUnXG4pO1xuXG4vKiogV2hldGhlciB0aGlzIHJvdXRlIGludm9jYXRpb24gcmV1c2VkIGFuIGFscmVhZHktY3JlYXRlZCByZXF1ZXN0IGhhbmRsZXIgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1JvdXRlSGFuZGxlckNhY2hlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnJvdXRlLmhhbmRsZXJfY2FjaGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiB0aW1lcyB0aGlzIGluLW1lbW9yeSByb3V0ZSBoYW5kbGVyIGhhcyBiZWVuIGludm9rZWQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1JvdXRlSW52b2NhdGlvbkNvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5pbnZvY2F0aW9uX2NvdW50J1xuKTtcblxuLyoqIFRpbWUgc2luY2UgdGhpcyByb3V0ZSBlbnRyeXBvaW50IHdhcyBjb25zdHJ1Y3RlZCwgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUVudHJ5cG9pbnRBZ2VNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucm91dGUuZW50cnlwb2ludF9hZ2VfbXMnXG4pO1xuXG4vKiogVGltZSBzcGVudCBldmFsdWF0aW5nIHRoZSBnZW5lcmF0ZWQgcm91dGUgbW9kdWxlIGJvZHkgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbnRyeXBvaW50ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZU1vZHVsZUJvZHlJbml0TXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJvdXRlLm1vZHVsZV9ib2R5X2luaXRfbXMnXG4pO1xuXG4vKipcbiAqIENvbXB1dGUgaW5zdGFuY2UgaGFuZGxpbmcgdGhpcyByb3V0ZSDigJQgdGhlIHN5bnRoZXNpemVkIGBDT01QVVRFX0lOU1RBTkNFX0lEYC5cbiAqIFVzZXMgT1RFTCBgZmFhcy5pbnN0YW5jZWAgKGV4ZWN1dGlvbi1lbnZpcm9ubWVudCBpZCwgcmV1c2VkIGFjcm9zc1xuICogaW52b2NhdGlvbnMgdG8gdGhlIHNhbWUgZnVuY3Rpb24pOlxuICogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9hdHRyaWJ1dGVzLXJlZ2lzdHJ5L2ZhYXMvXG4gKi9cbmV4cG9ydCBjb25zdCBGYWFzSW5zdGFuY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignZmFhcy5pbnN0YW5jZScpO1xuXG4vLyBTdGVwIGF0dHJpYnV0ZXNcblxuLyoqIE5hbWUgb2YgdGhlIHN0ZXAgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwTmFtZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLm5hbWUnKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcCBpbnN0YW5jZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmlkJyk7XG5cbi8qKiBDdXJyZW50IGF0dGVtcHQgbnVtYmVyIGZvciBzdGVwIGV4ZWN1dGlvbiAoc3RhcnRzIGF0IDEpICovXG5leHBvcnQgY29uc3QgU3RlcEF0dGVtcHQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5hdHRlbXB0Jyk7XG5cbi8qKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgc3RlcCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdGF0dXMgPSBTZW1hbnRpY0NvbnZlbnRpb248U3RlcFsnc3RhdHVzJ10+KCdzdGVwLnN0YXR1cycpO1xuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBhbGxvd2VkIGZvciB0aGlzIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwTWF4UmV0cmllcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLm1heF9yZXRyaWVzJyk7XG5cbi8qKiBXaGV0aGVyIHRyYWNlIGNvbnRleHQgd2FzIHByb3BhZ2F0ZWQgdG8gdGhpcyBzdGVwIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBUcmFjZVByb3BhZ2F0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnRyYWNlLnByb3BhZ2F0ZWQnXG4pO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCB0aW1lLXRvLWZpcnN0LXN0ZXAgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHM6IHJ1biBjcmVhdGlvbiDihpJcbiAqIHRoaXMgc3RlcCdzIGJvZHkgYmVnaW5uaW5nIHRvIGV4ZWN1dGUsIG1pbnVzIHByZS1zdGVwIGhvb2stY3JlYXRpb24gdGltZS5cbiAqIE9ubHkgcHJlc2VudCBvbiB0aGUgcnVuJ3MgZmlyc3Qgc3RlcCBleGVjdXRpb24gd2hlbiBpdCBxdWFsaWZpZWQgZm9yXG4gKiBtZWFzdXJlbWVudCAoc2VlIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBUdGZzTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC50dGZzX21zJyk7XG5cbi8qKlxuICogQ2xpZW50LW1lYXN1cmVkIHN0ZXAtdG8tc3RlcCBvdmVyaGVhZCBpbiBtaWxsaXNlY29uZHM6IHRoZSBwcmV2aW91cyBzdGVwJ3NcbiAqIHRlcm1pbmFsIGV2ZW50IOKGkiB0aGlzIHN0ZXAncyBib2R5IGJlZ2lubmluZyB0byBleGVjdXRlLiBPbmx5IHByZXNlbnQgd2hlblxuICogdGhlIHR3byBzdGVwcyByYW4gYmFjay10by1iYWNrLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFN0c29NcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLnN0c29fbXMnKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgcnVuX3N0YXJ0ZWQtdG8tZmlyc3Qtc3RlcCBsYXRlbmN5IGluIG1pbGxpc2Vjb25kczogdGhlXG4gKiBgcnVuX3N0YXJ0ZWRgIHJlc3BvbnNlIGxhbmRpbmcgKG9yLCB1bmRlciB0dXJibywgdGhlIGxvY2FsIHJ1biBzeW50aGVzaXNcbiAqIGluc3RhbnQpIOKGkiB0aGlzIHN0ZXAncyBzdGFydCBQT1NUIGJlaW5nIGlzc3VlZC4gQSBzdWItd2luZG93IG9mIHR0ZnMgdGhhdFxuICogaXNvbGF0ZXMgcmVwbGF5IG92ZXJoZWFkIGZyb20gdGhlIHJ1bi1jcmVhdGlvbiBxdWV1ZSBob3AuIE9ubHkgcHJlc2VudCBvblxuICogdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uIHdoZW4gaXQgcXVhbGlmaWVkIGZvciBtZWFzdXJlbWVudCAoc2VlXG4gKiBydW50aW1lL3N0ZXAtbGF0ZW5jeS50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwUnNmc01zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAucnNmc19tcycpO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCBzeW5jaHJvbm91cyB3b3JrZmxvdy1mdW5jdGlvbiByZXBsYXkgZHVyYXRpb24gaW5cbiAqIG1pbGxpc2Vjb25kcywgZXhjbHVkaW5nIGF3YWl0ZWQgbmV0d29yayBJL08sIG9mIG9ubHkgdGhlIEZJTkFMIHJlcGxheSBwYXNzXG4gKiB3aXRoaW4gdGhlIHJzZnMgd2luZG93IOKAlCB0aGUgcGFzcyB0aGF0IHJlYWNoZWQgYW5kIHNjaGVkdWxlZCB0aGUgZmlyc3RcbiAqIHN0ZXAuIE5vdCBhY2N1bXVsYXRlZCBhY3Jvc3MgZWFybGllciBwcmUtZmlyc3Qtc3RlcCBwYXNzZXMgKGUuZy4gYVxuICogd29ya2Zsb3ctYm9keSBgc2V0QXR0cmlidXRlcygpYCBkZXRvdXIgcmVwbGF5cyBtb3JlIHRoYW4gb25jZSwgYW5kIGFcbiAqIHJlZGVsaXZlcnkgb21pdHMgZWFybGllciBpbnZvY2F0aW9ucycgd29yayBlbnRpcmVseSksIHNvIHRoaXMgbXVzdCBub3QgYmVcbiAqIHJlYWQgYXMgXCJ0aGUgcmVwbGF5IHBvcnRpb24gb2YgcnNmc1wiIOKAlCBzdGVwLnJzZnNfbXMgY292ZXJzIHRoZSB3aG9sZVxuICogd2luZG93LiBPbmx5IHByZXNlbnQgYWxvbmdzaWRlIHN0ZXAucnNmc19tcyBhbmQgb25seSBmb3IgdGhlIHJ1bidzIGZpcnN0XG4gKiBzdGVwIChzZWUgcnVudGltZS9zdGVwLWxhdGVuY3kudHMpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcEZpbmFsU2NoZWR1bGluZ1JlcGxheU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLmZpbmFsX3NjaGVkdWxpbmdfcmVwbGF5X21zJ1xuKTtcblxuLyoqXG4gKiBSdW50aW1lIHN0YXJ0dXAtbGF0ZW5jeSBvcHRpbWl6YXRpb25zIGFjdGl2ZSBmb3IgdGhlIHR0ZnMvc3RzbyBtZWFzdXJlbWVudFxuICogKGUuZy4gJ3R1cmJvJywgJ2xhenlTdGVwU3RhcnQnLCAnb3B0aW1pc3RpY1N0YXJ0JykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwTGF0ZW5jeU9wdGltaXphdGlvbnMgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nW10+KFxuICAnc3RlcC5sYXRlbmN5X29wdGltaXphdGlvbnMnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3YXMgc2tpcHBlZCBkdXJpbmcgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcFNraXBwZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuc2tpcHBlZCcpO1xuXG4vKiogUmVhc29uIHdoeSB0aGUgc3RlcCB3YXMgc2tpcHBlZCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwUmVhc29uID1cbiAgU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5za2lwX3JlYXNvbicpO1xuXG4vKiogTnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHN0ZXAgZnVuY3Rpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwQXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3N0ZXAuYXJndW1lbnRzLmNvdW50J1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIHN0ZXAgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgU3RlcFJlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5yZXN1bHQudHlwZScpO1xuXG4vKiogTmFtZSBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgc3RlcCBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcEVycm9yTmFtZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmVycm9yLm5hbWUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2Ugd2hlbiBzdGVwIGZhaWxzICovXG5leHBvcnQgY29uc3QgU3RlcEVycm9yTWVzc2FnZSA9XG4gIFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmVycm9yLm1lc3NhZ2UnKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgZmFpbGVkIHdpdGggYSBmYXRhbCBlcnJvciAobm8gcmV0cmllcykgKi9cbmV4cG9ydCBjb25zdCBTdGVwRmF0YWxFcnJvciA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignc3RlcC5mYXRhbF9lcnJvcicpO1xuXG4vKiogV2hldGhlciBhbGwgcmV0cnkgYXR0ZW1wdHMgaGF2ZSBiZWVuIGV4aGF1c3RlZCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXRyeUV4aGF1c3RlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3N0ZXAucmV0cnkuZXhoYXVzdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIG5leHQgcmV0cnkgYXR0ZW1wdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXRyeVRpbWVvdXRTZWNvbmRzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLnJldHJ5LnRpbWVvdXRfc2Vjb25kcydcbik7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIHdpbGwgYmUgcmV0cmllZCBhZnRlciB0aGlzIGZhaWx1cmUgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlXaWxsUmV0cnkgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LndpbGxfcmV0cnknXG4pO1xuXG4vLyBRdWV1ZS9NZXNzYWdpbmcgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgbWVzc2FnaW5nIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvbWVzc2FnaW5nL21lc3NhZ2luZy1zcGFucy9cblxuLyoqIE1lc3NhZ2luZyBzeXN0ZW0gaWRlbnRpZmllciAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLnN5c3RlbSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdTeXN0ZW0gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignbWVzc2FnaW5nLnN5c3RlbScpO1xuXG4vKiogRGVzdGluYXRpb24gbmFtZS9xdWV1ZSBuYW1lIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdEZXN0aW5hdGlvbk5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ21lc3NhZ2luZy5kZXN0aW5hdGlvbi5uYW1lJ1xuKTtcblxuLyoqIFRoZSBtZXNzYWdlIGlkIGJlaW5nIGhhbmRsZWQgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5tZXNzYWdlLmlkKSAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2luZ01lc3NhZ2VJZCA9IFNlbWFudGljQ29udmVudGlvbjxNZXNzYWdlSWQ+KFxuICAnbWVzc2FnaW5nLm1lc3NhZ2UuaWQnXG4pO1xuXG4vKiogT3BlcmF0aW9uIHR5cGUgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdPcGVyYXRpb25UeXBlID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAncHVibGlzaCcgfCAncmVjZWl2ZScgfCAncHJvY2Vzcydcbj4oJ21lc3NhZ2luZy5vcGVyYXRpb24udHlwZScpO1xuXG4vKiogVGltZSB0YWtlbiB0byBlbnF1ZXVlIHRoZSBtZXNzYWdlIGluIG1pbGxpc2Vjb25kcyAod29ya2Zsb3ctc3BlY2lmaWMpICovXG5leHBvcnQgY29uc3QgUXVldWVPdmVyaGVhZE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5vdmVyaGVhZF9tcydcbik7XG5cbi8vIERlcGxveW1lbnQgYXR0cmlidXRlc1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBkZXBsb3ltZW50IGVudmlyb25tZW50ICovXG5leHBvcnQgY29uc3QgRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2RlcGxveW1lbnQuaWQnKTtcblxuLyoqIFRoZSBkZXBsb3ltZW50IGEgcnVuIGlzIHBpbm5lZCB0bywgc2V0IG9ubHkgb24gYSBtaXNyb3V0ZWQgZGVsaXZlcnkuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSdW5QaW5uZWREZXBsb3ltZW50SWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnQucGlubmVkX2lkJ1xuKTtcblxuLyoqIFJlLXJvdXRlIGF0dGVtcHRzIGZvciB0aGlzIG1pc3JvdXRlZCBkZWxpdmVyeSwgaW5jbHVkaW5nIHRoaXMgb25lLiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RGVwbG95bWVudE1pc21hdGNoUmV0cnlDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZGVwbG95bWVudF9taXNtYXRjaC5yZXRyeV9jb3VudCdcbik7XG5cbi8qKiBXaGV0aGVyIHRoZSBtaXNyb3V0ZWQgZGVsaXZlcnkgd2FzIHJlLXJvdXRlZCBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHJ1bi4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaFJlY292ZXJlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnRfbWlzbWF0Y2gucmVjb3ZlcmVkJ1xuKTtcblxuLy8gSG9vayBhdHRyaWJ1dGVzXG5cbi8qKiBUb2tlbiBpZGVudGlmeWluZyBhIHNwZWNpZmljIGhvb2sgKi9cbmV4cG9ydCBjb25zdCBIb29rVG9rZW4gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay50b2tlbicpO1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgaG9vayBpbnN0YW5jZSAqL1xuZXhwb3J0IGNvbnN0IEhvb2tJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd3b3JrZmxvdy5ob29rLmlkJyk7XG5cbi8qKiBXaGV0aGVyIGEgaG9vayB3YXMgZm91bmQgYnkgaXRzIHRva2VuICovXG5leHBvcnQgY29uc3QgSG9va0ZvdW5kID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCd3b3JrZmxvdy5ob29rLmZvdW5kJyk7XG5cbi8qKlxuICogUHJvZHVjZXItc2lkZSBzaWduYWwgKG9uIHRoZSBgaG9vay5yZXN1bWVgIHNwYW4pIHRoYXQgdGhlIGRpcmVjdFxuICogYGhvb2tfcmVjZWl2ZWRgIHdyaXRlIGZhaWxlZCB0cmFuc2llbnRseSBidXQgdGhlIHF1ZXVlIGRpc3BhdGNoIHN1Y2NlZWRlZCwgc29cbiAqIHRoZSByZXN1bWUgaXMgcmVjb3ZlcmVkIHZpYSB0aGUgY29uc3VtZXIncyByZS1lbnN1cmUuIENvcnJlc3BvbmRzIHRvXG4gKiBgUmVzdW1lZEhvb2sucmVzaWxpZW50UmVzdW1lID09PSB0cnVlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXNpbGllbnRSZXN1bWUgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc2lsaWVudF9yZXN1bWUnXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXNpZGUgc2lnbmFsIChvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pIHRoYXQgdGhpcyByZXBsYXlcbiAqIG1hdGVyaWFsaXplZCB0aGUgYGhvb2tfcmVjZWl2ZWRgIGV2ZW50IGZyb20gdGhlIHF1ZXVlIG1lc3NhZ2UncyBgaG9va0lucHV0YFxuICogYmVjYXVzZSB0aGUgcHJvZHVjZXIncyBkaXJlY3Qgd3JpdGUgaGFkIG5vdCBsYW5kZWQg4oCUIHRoZSBjb21wbGV0aW9uIG9mIHRoZVxuICogcmVjb3ZlcnkgcGF0aCB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0gYmVnYW4uXG4gKlxuICogTGVnYWN5IC8gbm9uLWF0b21pYyByZS1lbnN1cmUgc2lnbmFsIG9ubHkuIEF0b21pYyBsYXp5IHJlc3VtZXNcbiAqIChyZXN1bWVJZCArIGRpZ2VzdCkgZ28gdGhyb3VnaCB0aGUgaG9pc3RlZCBwcmVsb2FkIHdyaXRlIGluc3RlYWQsIHdob3NlXG4gKiByZXNwb25zZSBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSBwcm9kdWNlciBvciB0aGUgY29uc3VtZXIgd29uIHRoZVxuICogYChydW5JZCwgcmVzdW1lSWQpYCBjbGFpbSDigJQgc28gdGhpcyBhdHRyaWJ1dGUgaXMgZGVsaWJlcmF0ZWx5IE5PVCBlbWl0dGVkXG4gKiBmb3IgdGhlbSAoZW1pdHRpbmcgYHRydWVgIHVuY29uZGl0aW9uYWxseSB3b3VsZCBjb3VudCBldmVyeSBwcm9kdWNlci13b25cbiAqIHJlc3VtZSBhcyBhIHJlY292ZXJ5KS4gVGhlIHByb2R1Y2VyLWJlZ2luICh7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0pIC9cbiAqIGNvbnN1bWVyLW1hdGVyaWFsaXplZCBwYWlyaW5nIGlzIHRoZXJlZm9yZSBubyBsb25nZXIgY29tcGxldGUgZm9yIGF0b21pY1xuICogbGF6eSByZXN1bXB0aW9uczsgdXNlIHtAbGluayBIb29rUmVzdW1lU2V0dXBTb3VyY2V9IHRvIG9ic2VydmUgdGhhdCBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgSG9va1Jlc2lsaWVudFJlc3VtZU1hdGVyaWFsaXplZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93Lmhvb2sucmVzaWxpZW50X3Jlc3VtZV9tYXRlcmlhbGl6ZWQnXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXNpZGUgc2lnbmFsIChvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pIG9mIGhvdyBhIGxhenkgaG9va1xuICogcmVzdW1lIGluaXRpYWxpemVkIGl0cyByZXBsYXkgc3RhdGU6XG4gKlxuICogLSBgaG9va19yZWNlaXZlZF9zdHJlYW1gIOKAlCB0aGUgaG9pc3RlZCBgaG9va19yZWNlaXZlZGAgd3JpdGUgcmV0dXJuZWQgYVxuICogICB1c2FibGUgcmVwbGF5IHByZWxvYWQgKHJ1biArIGNvbXBsZXRlIGV2ZW50IGxvZyksIHNvIHRoZSBpbnZvY2F0aW9uXG4gKiAgIHNraXBwZWQgYm90aCB0aGUgYHJ1bl9zdGFydGVkYCB3cml0ZSBhbmQgdGhlIGluaXRpYWwgYGV2ZW50cy5saXN0YC5cbiAqIC0gYGhvb2tfcmVjZWl2ZWRfZmFsbGJhY2tgIOKAlCB0aGUgaG9pc3RlZCB3cml0ZSBzdWNjZWVkZWQgYnV0IHJldHVybmVkIG5vXG4gKiAgIHVzYWJsZSBwcmVsb2FkIChhIENCT1IgcmVzcG9uc2UgZnJvbSBhbiBvbGRlciBzZXJ2ZXIsIGEgV29ybGQgdGhhdFxuICogICBpZ25vcmVkIHRoZSBvcHQtaW4sIGEgYm91bmRlZCBgaGFzTW9yZWAgcGFnZSwgb3IgYSBwcmVsb2FkIHRoYXQgZmFpbGVkXG4gKiAgIHZhbGlkYXRpb24pOyB0aGUgaW52b2NhdGlvbiBmZWxsIGJhY2sgdG8gdGhlIGBydW5fc3RhcnRlZGAgc2V0dXAgd2l0aG91dFxuICogICByZS1wb3N0aW5nIHRoZSBob29rLlxuICpcbiAqIEFic2VudCBvbiBsZWdhY3kgaG9vayBkZWxpdmVyaWVzIChubyByZXN1bWVJZC9kaWdlc3QpIGFuZCBvbiBldmVyeSBvdGhlclxuICogZGVsaXZlcnkga2luZCwgd2hpY2ggdGFrZSB0aGUgYHJ1bl9zdGFydGVkYCBzZXR1cCB1bmNvbmRpdGlvbmFsbHkuXG4gKlxuICogVGhpcyBpcyBhIGxhdGVuY3kvc2V0dXAtcGF0aCBzaWduYWw6IGl0IHNheXMgd2hpY2ggcmVxdWVzdHMgaW5pdGlhbGl6ZWRcbiAqIHRoZSBpbnZvY2F0aW9uLCBOT1QgdGhhdCB0aGlzIGNvbnN1bWVyIGNyZWF0ZWQgdGhlIGBob29rX3JlY2VpdmVkYCBldmVudFxuICogKHRoZSBob2lzdGVkIHdyaXRlIG1heSBlcXVhbGx5IGhhdmUgY29udmVyZ2VkIG9uIHRoZSBwcm9kdWNlcidzIOKAlCBjbGFpbVxuICogb3duZXJzaGlwIGlzIG5vdCBvYnNlcnZhYmxlIGNsaWVudC1zaWRlOyBjZi5cbiAqIHtAbGluayBIb29rUmVzaWxpZW50UmVzdW1lTWF0ZXJpYWxpemVkfSkuXG4gKi9cbmV4cG9ydCBjb25zdCBIb29rUmVzdW1lU2V0dXBTb3VyY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LnJlc3VtZV9zZXR1cF9zb3VyY2UnXG4pO1xuXG4vLyBXZWJob29rIGF0dHJpYnV0ZXNcblxuLyoqIE51bWJlciBvZiB3ZWJob29rIGhhbmRsZXJzIHRyaWdnZXJlZCAqL1xuZXhwb3J0IGNvbnN0IFdlYmhvb2tIYW5kbGVyc1RyaWdnZXJlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd2ViaG9vay5oYW5kbGVycy50cmlnZ2VyZWQnXG4pO1xuXG4vLyBTdXNwZW5zaW9uIGF0dHJpYnV0ZXNcblxuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvblN0YXRlID0gU2VtYW50aWNDb252ZW50aW9uPCdzdXNwZW5kZWQnPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24uc3RhdGUnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvbkhvb2tDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5ob29rX2NvdW50J1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25TdGVwQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24uc3RlcF9jb3VudCdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uV2FpdENvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLndhaXRfY291bnQnXG4pO1xuXG4vLyBXb3JsZC9TdG9yYWdlIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIEhUVFAgY29udmVudGlvbnNcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9odHRwL2h0dHAtc3BhbnMvXG5cbi8qKiBIVFRQIHJlcXVlc3QgbWV0aG9kIChzdGFuZGFyZCBPVEVMOiBodHRwLnJlcXVlc3QubWV0aG9kKSAqL1xuZXhwb3J0IGNvbnN0IEh0dHBSZXF1ZXN0TWV0aG9kID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICdodHRwLnJlcXVlc3QubWV0aG9kJ1xuKTtcblxuLyoqIFJvdXRlIHBhdHRlcm4gZm9yIHRoZSByZXF1ZXN0IChzdGFuZGFyZCBPVEVMOiBodHRwLnJvdXRlKSAqL1xuZXhwb3J0IGNvbnN0IEh0dHBSb3V0ZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdodHRwLnJvdXRlJyk7XG5cbi8qKiBGdWxsIFVSTCBvZiB0aGUgcmVxdWVzdCAoc3RhbmRhcmQgT1RFTDogdXJsLmZ1bGwpICovXG5leHBvcnQgY29uc3QgVXJsRnVsbCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd1cmwuZnVsbCcpO1xuXG4vKiogU2VydmVyIGhvc3RuYW1lIChzdGFuZGFyZCBPVEVMOiBzZXJ2ZXIuYWRkcmVzcykgKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJBZGRyZXNzID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3NlcnZlci5hZGRyZXNzJyk7XG5cbi8qKiBTZXJ2ZXIgcG9ydCAoc3RhbmRhcmQgT1RFTDogc2VydmVyLnBvcnQpICovXG5leHBvcnQgY29uc3QgU2VydmVyUG9ydCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzZXJ2ZXIucG9ydCcpO1xuXG4vKiogSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSAoc3RhbmRhcmQgT1RFTDogaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZSkgKi9cbmV4cG9ydCBjb25zdCBIdHRwUmVzcG9uc2VTdGF0dXNDb2RlID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlJ1xuKTtcblxuLyoqIEVycm9yIHR5cGUgd2hlbiByZXF1ZXN0IGZhaWxzIChzdGFuZGFyZCBPVEVMOiBlcnJvci50eXBlKSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yVHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdlcnJvci50eXBlJyk7XG5cbi8vIFdvcmxkLXNwZWNpZmljIGN1c3RvbSBhdHRyaWJ1dGVzIChmb3Igd29ya2Zsb3ctc3BlY2lmaWMgY29udGV4dClcblxuLyoqIEZvcm1hdCB1c2VkIGZvciBwYXJzaW5nIHJlc3BvbnNlIGJvZHkgKGNib3Igb3IganNvbikgKi9cbmV4cG9ydCBjb25zdCBXb3JsZFBhcnNlRm9ybWF0ID0gU2VtYW50aWNDb252ZW50aW9uPCdjYm9yJyB8ICdqc29uJz4oXG4gICd3b3JrZmxvdy53b3JsZC5wYXJzZS5mb3JtYXQnXG4pO1xuXG4vLyBFdmVudCBsb2FkaW5nIGF0dHJpYnV0ZXNcblxuLyoqIE51bWJlciBvZiBwYWdpbmF0aW9uIHBhZ2VzIGxvYWRlZCB3aGVuIGZldGNoaW5nIHdvcmtmbG93IGV2ZW50cyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXZlbnRzUGFnZXNMb2FkZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5wYWdlc19sb2FkZWQnXG4pO1xuXG4vLyBRdWV1ZSB0aW1pbmcgYnJlYWtkb3duIGF0dHJpYnV0ZXMgKHdvcmtmbG93LXNwZWNpZmljKVxuXG4vKiogVGltZSBzcGVudCBkZXNlcmlhbGl6aW5nIHRoZSBxdWV1ZSBtZXNzYWdlIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlRGVzZXJpYWxpemVUaW1lTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnF1ZXVlLmRlc2VyaWFsaXplX3RpbWVfbXMnXG4pO1xuXG4vKiogVGltZSBzcGVudCBleGVjdXRpbmcgdGhlIGhhbmRsZXIgbG9naWMgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgUXVldWVFeGVjdXRpb25UaW1lTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnF1ZXVlLmV4ZWN1dGlvbl90aW1lX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgc2VyaWFsaXppbmcgdGhlIHJlc3BvbnNlIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlU2VyaWFsaXplVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5zZXJpYWxpemVfdGltZV9tcydcbik7XG5cbi8vIFBheWxvYWQgY29tcHJlc3Npb24gYXR0cmlidXRlcyAoenN0ZCBwcmVmZXJyZWQsIGd6aXAgZmFsbGJhY2s7IHNwZWNWZXJzaW9uID49IDUpXG4vL1xuLy8gU2l6ZXMgYXJlIG1lYXN1cmVkIGF0IHRoZSBjb21wcmVzc2lvbiBib3VuZGFyeTogYmVmb3JlIGVuY3J5cHRpb24gb24gdGhlXG4vLyB3cml0ZSBwYXRoIGFuZCBhZnRlciBkZWNyeXB0aW9uIG9uIHRoZSByZWFkIHBhdGguIFRoZXkgdGhlcmVmb3JlIHJlZmxlY3Rcbi8vIGNvbXByZXNzaW9uJ3MgZWZmZWN0LCBub3QgdGhlIGF0LXJlc3Qgc2l6ZSAod2hpY2ggYWxzbyBpbmNsdWRlcyB0aGVcbi8vIH4yOC1ieXRlIGBlbmNyYCBlbnZlbG9wZSBhbmQsIG9uIHNvbWUgYmFja2VuZHMsIGJhc2U2NCBleHBhbnNpb24pLlxuXG4vKiogV2hldGhlciB0aGlzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSB3YXMgYSB3cml0ZSBvciByZWFkLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25PcGVyYXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdzZXJpYWxpemUnIHwgJ2Rlc2VyaWFsaXplJ1xuPignd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5vcGVyYXRpb24nKTtcblxuLyoqIFdoZXRoZXIgYSBjb21wcmVzc2lvbiBjb2RlYyB3YXMgYXBwbGllZCAod3JpdGUpIC8gcHJlc2VudCAocmVhZCkuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkNvbXByZXNzZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmNvbXByZXNzZWQnXG4pO1xuXG4vKiogV2hpY2ggY29tcHJlc3Npb24gY29kZWMgYXBwbGllZCAvIHdhcyBwcmVzZW50IChgenN0ZGAsIGBnemlwYCwgb3IgYG5vbmVgKS4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uQ29kZWMgPSBTZW1hbnRpY0NvbnZlbnRpb248J3pzdGQnIHwgJ2d6aXAnIHwgJ25vbmUnPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uY29kZWMnXG4pO1xuXG4vKiogTG9naWNhbCAodW5jb21wcmVzc2VkLCBkZXZhbHVlLXByZWZpeGVkKSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvblVuY29tcHJlc3NlZEJ5dGVzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLnVuY29tcHJlc3NlZF9ieXRlcydcbik7XG5cbi8qKiBTdG9yZWQgKHBvc3QtY29tcHJlc3Npb24sIHByZS1lbmNyeXB0aW9uKSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvblN0b3JlZEJ5dGVzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLnN0b3JlZF9ieXRlcydcbik7XG5cbi8qKiBGcmFjdGlvbiBvZiBieXRlcyBzYXZlZCBieSBjb21wcmVzc2lvbiAoMC4uMSk7IHNldCBvbmx5IHdoZW4gY29tcHJlc3NlZC4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uQ29tcHJlc3Npb25SYXRpbyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5jb21wcmVzc2lvbl9yYXRpbydcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHdvcmtmbG93IChndWVzdCkgY29kZSBleGVjdXRpb25zIHNlcmlhbGl6YXRpb24gY291bGQgbm90IGF2b2lkXG4gKiAoZ2V0dGVycywgcHJveGllcywgY3VzdG9tIHNlcmlhbGl6ZXJzKTsgc2V0IG9ubHkgd2hlbiBub24temVyby5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25HdWVzdENvZGVFeGVjdXRpb25zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmd1ZXN0X2NvZGVfZXhlY3V0aW9ucydcbik7XG5cbi8qKlxuICogRGVkdXBsaWNhdGVkIGBraW5kIChkZXRhaWwpYCBkZXNjcmlwdGlvbnMgb2YgdGhlIGd1ZXN0LWNvZGUgZXhlY3V0aW9ucztcbiAqIHNldCBvbmx5IHdoZW4gbm9uLXplcm8uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uR3Vlc3RDb2RlRGV0YWlscyA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmdbXT4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmd1ZXN0X2NvZGVfZGV0YWlscydcbik7XG5cbi8vIFJQQy9QZWVyIFNlcnZpY2UgYXR0cmlidXRlcyAtIEZvciBzZXJ2aWNlIG1hcHMgYW5kIGRlcGVuZGVuY3kgdHJhY2tpbmdcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9ycGMvcnBjLXNwYW5zL1xuXG4vKiogVGhlIHJlbW90ZSBzZXJ2aWNlIG5hbWUgZm9yIERhdGFkb2cgc2VydmljZSBtYXBzIChEYXRhZG9nLXNwZWNpZmljOiBwZWVyLnNlcnZpY2UpICovXG5leHBvcnQgY29uc3QgUGVlclNlcnZpY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncGVlci5zZXJ2aWNlJyk7XG5cbi8qKiBSUEMgc3lzdGVtIGlkZW50aWZpZXIgKHN0YW5kYXJkIE9URUw6IHJwYy5zeXN0ZW0pICovXG5leHBvcnQgY29uc3QgUnBjU3lzdGVtID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5zeXN0ZW0nKTtcblxuLyoqIFJQQyBzZXJ2aWNlIG5hbWUgKHN0YW5kYXJkIE9URUw6IHJwYy5zZXJ2aWNlKSAqL1xuZXhwb3J0IGNvbnN0IFJwY1NlcnZpY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncnBjLnNlcnZpY2UnKTtcblxuLyoqIFJQQyBtZXRob2QgbmFtZSAoc3RhbmRhcmQgT1RFTDogcnBjLm1ldGhvZCkgKi9cbmV4cG9ydCBjb25zdCBScGNNZXRob2QgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncnBjLm1ldGhvZCcpO1xuXG4vLyBFcnJvciBhdHRyaWJ1dGVzIC0gU3RhbmRhcmQgT1RFTCBlcnJvciBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2V4Y2VwdGlvbnMvZXhjZXB0aW9ucy1zcGFucy9cblxuLyoqIFdoZXRoZXIgdGhlIGVycm9yIGlzIHJldHJ5YWJsZSAod29ya2Zsb3ctc3BlY2lmaWMpICovXG5leHBvcnQgY29uc3QgRXJyb3JSZXRyeWFibGUgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ2Vycm9yLnJldHJ5YWJsZScpO1xuXG4vKiogRXJyb3IgY2F0ZWdvcnkgKHdvcmtmbG93LXNwZWNpZmljOiBmYXRhbCwgcmV0cnlhYmxlLCB0cmFuc2llbnQpICovXG5leHBvcnQgY29uc3QgRXJyb3JDYXRlZ29yeSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ2ZhdGFsJyB8ICdyZXRyeWFibGUnIHwgJ3RyYW5zaWVudCdcbj4oJ2Vycm9yLmNhdGVnb3J5Jyk7XG4iXX0=
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELHlCQUF5QixDQUMxQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FDekQsOEJBQThCLENBQy9CLENBQUM7QUFFRixpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELGlDQUFpQyxDQUNsQyxDQUFDO0FBRUYsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUN2RCxtQ0FBbUMsQ0FDcEMsQ0FBQztBQUVGLGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsMEJBQTBCLENBQzNCLENBQUM7QUFFRixrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUN2RCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUVGLCtCQUErQjtBQUUvQix3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFxQixhQUFhLENBQUMsQ0FBQztBQUVoRixrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUU5QyxxQkFBcUIsQ0FBQyxDQUFDO0FBRXpCLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsOEJBQThCLENBQy9CLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQ3pELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLGtCQUFrQixDQUN6RCxrQ0FBa0MsQ0FDbkMsQ0FBQztBQUVGLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsK0JBQStCLENBQ2hDLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsK0VBQStFO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVUsZ0JBQWdCLENBQUMsQ0FBQztBQUUzRSxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQ2pELHFCQUFxQixDQUN0QixDQUFDO0FBRUYsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUNwRCx3QkFBd0IsQ0FDekIsQ0FBQztBQUVGLGtFQUFrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FDakQscUJBQXFCLENBQ3RCLENBQUM7QUFFRix3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQ3BELHdCQUF3QixDQUN6QixDQUFDO0FBRUYsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUNwRCx3QkFBd0IsQ0FDekIsQ0FBQztBQUVGLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FDcEQsd0JBQXdCLENBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsa0JBQWtCLENBQzFELGdEQUFnRCxDQUNqRCxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGtCQUFrQixDQUMxRCxnREFBZ0QsQ0FDakQsQ0FBQztBQUVGLG1CQUFtQjtBQUVuQiwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQ2pELHFCQUFxQixDQUN0QixDQUFDO0FBRUYsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGtCQUFrQixDQUMxRCwrQkFBK0IsQ0FDaEMsQ0FBQztBQUVGLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxrQkFBa0IsQ0FDNUQsaUNBQWlDLENBQ2xDLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsa0JBQWtCLENBQzVELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsMkZBQTJGO0FBQzNGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCxvQ0FBb0MsQ0FDckMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFTLGVBQWUsQ0FBQyxDQUFDO0FBRXhFLGtCQUFrQjtBQUVsQiwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFTLFdBQVcsQ0FBQyxDQUFDO0FBRWhFLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQVMsU0FBUyxDQUFDLENBQUM7QUFFNUQsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUV0RSxpQ0FBaUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFpQixhQUFhLENBQUMsQ0FBQztBQUU1RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFTLGtCQUFrQixDQUFDLENBQUM7QUFFN0Usa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUNuRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFTLGNBQWMsQ0FBQyxDQUFDO0FBRXJFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQVMsY0FBYyxDQUFDLENBQUM7QUFFckU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsa0JBQWtCLENBQzNELGlDQUFpQyxDQUNsQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQ3hELDRCQUE0QixDQUM3QixDQUFDO0FBRUYsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBVSxjQUFjLENBQUMsQ0FBQztBQUV2RSxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN6QixrQkFBa0IsQ0FBaUIsa0JBQWtCLENBQUMsQ0FBQztBQUV6RCxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsOEJBQThCO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdFLGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSxvQ0FBb0M7QUFDcEMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQzNCLGtCQUFrQixDQUFTLG9CQUFvQixDQUFDLENBQUM7QUFFbkQsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBVSxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlFLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FDbEQsc0JBQXNCLENBQ3ZCLENBQUM7QUFFRiwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQ3ZELDRCQUE0QixDQUM3QixDQUFDO0FBRUYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUNsRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQUVGLG1FQUFtRTtBQUNuRSw4RUFBOEU7QUFFOUUsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlFLDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FDeEQsNEJBQTRCLENBQzdCLENBQUM7QUFFRix5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQ2xELHNCQUFzQixDQUN2QixDQUFDO0FBRUYsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUV0RCwwQkFBMEIsQ0FBQyxDQUFDO0FBRTlCLDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQy9DLDRCQUE0QixDQUM3QixDQUFDO0FBRUYsd0JBQXdCO0FBRXhCLHVEQUF1RDtBQUN2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCwrQkFBK0IsQ0FDaEMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRyxrQkFBa0IsQ0FDcEUsMENBQTBDLENBQzNDLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsa0JBQWtCLENBQ25FLHdDQUF3QyxDQUN6QyxDQUFDO0FBRUYsa0JBQWtCO0FBRWxCLHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQVMscUJBQXFCLENBQUMsQ0FBQztBQUUzRSw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFTLGtCQUFrQixDQUFDLENBQUM7QUFFckUsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBVSxxQkFBcUIsQ0FBQyxDQUFDO0FBRTVFOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQ25ELGdDQUFnQyxDQUNqQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxrQkFBa0IsQ0FDL0QsNkNBQTZDLENBQzlDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELDhCQUE4QixDQUMvQixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxrQkFBa0IsQ0FDOUQsNENBQTRDLENBQzdDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLGtCQUFrQixDQUNqRSwrQ0FBK0MsQ0FDaEQsQ0FBQztBQUVGLGlEQUFpRDtBQUNqRCxFQUFFO0FBQ0YsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxzRUFBc0U7QUFDdEUsbUVBQW1FO0FBQ25FLHlFQUF5RTtBQUN6RSxxQ0FBcUM7QUFDckMsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0Usc0VBQXNFO0FBQ3RFLG1EQUFtRDtBQUVuRCxrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUM3QywwQkFBMEIsQ0FDM0IsQ0FBQztBQUVGLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FDcEQsd0NBQXdDLENBQ3pDLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQ3JELHlDQUF5QyxDQUMxQyxDQUFDO0FBRUYsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FDN0MsdUNBQXVDLENBQ3hDLENBQUM7QUFFRix5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUM5QyxpQ0FBaUMsQ0FDbEMsQ0FBQztBQUVGLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FDcEQsd0NBQXdDLENBQ3pDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQ0FBcUMsQ0FDdEMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUNBQXVDLENBQ3hDLENBQUM7QUFFRiw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUM3Qyx5QkFBeUIsQ0FDMUIsQ0FBQztBQUVGLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQzlDLDBCQUEwQixDQUMzQixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELDhCQUE4QixDQUFDLENBQUM7QUFFbEMsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUNuRCxnQ0FBZ0MsQ0FDakMsQ0FBQztBQUVGLHFCQUFxQjtBQUVyQiwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQ3hELDRCQUE0QixDQUM3QixDQUFDO0FBRUYsd0JBQXdCO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUN2RCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGtCQUFrQixDQUMzRCxnQ0FBZ0MsQ0FDakMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGtCQUFrQixDQUMzRCxnQ0FBZ0MsQ0FDakMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGtCQUFrQixDQUMzRCxnQ0FBZ0MsQ0FDakMsQ0FBQztBQUVGLDREQUE0RDtBQUM1RCxvRUFBb0U7QUFFcEUsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQVMsWUFBWSxDQUFDLENBQUM7QUFFbEUsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBUyxVQUFVLENBQUMsQ0FBQztBQUU5RCxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFTLGdCQUFnQixDQUFDLENBQUM7QUFFMUUsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBUyxhQUFhLENBQUMsQ0FBQztBQUVwRSwyRUFBMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtCLENBQ3RELDJCQUEyQixDQUM1QixDQUFDO0FBRUYsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUVsRSxtRUFBbUU7QUFFbkUsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUNoRCw2QkFBNkIsQ0FDOUIsQ0FBQztBQUVGLDJCQUEyQjtBQUUzQixzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQ3pELDhCQUE4QixDQUMvQixDQUFDO0FBRUYsd0RBQXdEO0FBRXhELGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FDdEQsb0NBQW9DLENBQ3JDLENBQUM7QUFFRiw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQ3BELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUNwRCxrQ0FBa0MsQ0FDbkMsQ0FBQztBQUVGLG1GQUFtRjtBQUNuRixFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLDJFQUEyRTtBQUMzRSxzRUFBc0U7QUFDdEUscUVBQXFFO0FBRXJFLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FFdEQsa0NBQWtDLENBQUMsQ0FBQztBQUV0Qyx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQ3ZELG1DQUFtQyxDQUNwQyxDQUFDO0FBRUYsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUNsRCw4QkFBOEIsQ0FDL0IsQ0FBQztBQUVGLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxrQkFBa0IsQ0FDOUQsMkNBQTJDLENBQzVDLENBQUM7QUFFRix1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQ3hELHFDQUFxQyxDQUN0QyxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCwwQ0FBMEMsQ0FDM0MsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLGtCQUFrQixDQUNoRSw4Q0FBOEMsQ0FDL0MsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCwyQ0FBMkMsQ0FDNUMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUV0RSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFTLFlBQVksQ0FBQyxDQUFDO0FBRWxFLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQVMsYUFBYSxDQUFDLENBQUM7QUFFcEUsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUVsRSxxREFBcUQ7QUFDckQsZ0ZBQWdGO0FBRWhGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQVUsaUJBQWlCLENBQUMsQ0FBQztBQUU3RSxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUU3QyxnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPcGVuVGVsZW1ldHJ5IHNlbWFudGljIGNvbnZlbnRpb25zIGZvciBWZXJjZWwgV29ya2Zsb3cgdGVsZW1ldHJ5LlxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN0YW5kYXJkaXplZCB0ZWxlbWV0cnkgYXR0cmlidXRlcyBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogZm9yIGluc3RydW1lbnRpbmcgd29ya2Zsb3cgZXhlY3V0aW9uLCBzdGVwIHByb2Nlc3NpbmcsIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMuIEVhY2ggZXhwb3J0ZWQgZnVuY3Rpb25cbiAqIGNyZWF0ZXMgYSBwcm9wZXJseSBmb3JtYXR0ZWQgYXR0cmlidXRlIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHdpdGggT3BlblRlbGVtZXRyeSBzcGFucy5cbiAqXG4gKiBUaGUgc2VtYW50aWMgY29udmVudGlvbnMgYXJlIG9yZ2FuaXplZCBpbnRvIHNldmVyYWwgY2F0ZWdvcmllczpcbiAqIC0gKipXb3JrZmxvdyBhdHRyaWJ1dGVzKio6IFRyYWNrIHdvcmtmbG93IGxpZmVjeWNsZSwgc3RhdHVzLCBhbmQgbWV0YWRhdGFcbiAqIC0gKipTdGVwIGF0dHJpYnV0ZXMqKjogTW9uaXRvciBpbmRpdmlkdWFsIHN0ZXAgZXhlY3V0aW9uLCByZXRyaWVzLCBhbmQgcmVzdWx0c1xuICogLSAqKlF1ZXVlIGF0dHJpYnV0ZXMqKjogSW5zdHJ1bWVudCBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnNcbiAqIC0gKipEZXBsb3ltZW50IGF0dHJpYnV0ZXMqKjogQ2FwdHVyZSBkZXBsb3ltZW50IGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gKlxuICogQWxsIGF0dHJpYnV0ZSBmdW5jdGlvbnMgYXJlIHR5cGUtc2FmZSBhbmQgbGV2ZXJhZ2UgZXhpc3RpbmcgYmFja2VuZCB0eXBlcyB0byBlbnN1cmVcbiAqIGNvbnNpc3RlbmN5IGJldHdlZW4gdGVsZW1ldHJ5IGRhdGEgYW5kIGFjdHVhbCBzeXN0ZW0gc3RhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG4gKlxuICogLy8gU2V0IHdvcmtmbG93IGF0dHJpYnV0ZXMgb24gYSBzcGFuXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dOYW1lKCdteS13b3JrZmxvdycpLFxuICogICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dPcGVyYXRpb24oJ3N0YXJ0JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1blN0YXR1cygncnVubmluZycpLFxuICogfSk7XG4gKlxuICogLy8gU2V0IHN0ZXAgYXR0cmlidXRlc1xuICogc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAqICAgLi4uQXR0cmlidXRlLlN0ZXBOYW1lKCdwcm9jZXNzLWRhdGEnKSxcbiAqICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2NvbXBsZXRlZCcpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcEF0dGVtcHQoMSksXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvfSBPcGVuVGVsZW1ldHJ5IFNlbWFudGljIENvbnZlbnRpb25zXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VJZCwgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZW1hbnRpYyBjb252ZW50aW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBhdHRyaWJ1dGUgb2JqZWN0LlxuICogQHBhcmFtIG5hbWUgLSBUaGUgYXR0cmlidXRlIG5hbWUgZm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnNcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gU2VtYW50aWNDb252ZW50aW9uPFQ+KC4uLm5hbWVzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gKHZhbHVlOiBUKSA9PlxuICAgIE9iamVjdC5mcm9tRW50cmllcyhuYW1lcy5tYXAoKG5hbWUpID0+IFtuYW1lLCB2YWx1ZV0gYXMgY29uc3QpKTtcbn1cblxuLy8gV29ya2Zsb3cgYXR0cmlidXRlc1xuXG4vKiogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93IGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dOYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lm5hbWUnKTtcblxuLyoqIFRoZSBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93T3BlcmF0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnc3RhcnQnIHwgJ2V4ZWN1dGUnIHwgJ2V4ZWN1dGVfdjInIHwgJ3J1bidcbj4oJ3dvcmtmbG93Lm9wZXJhdGlvbicpO1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc3BlY2lmaWMgd29ya2Zsb3cgcnVuIGluc3RhbmNlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSdW5JZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd3b3JrZmxvdy5ydW4uaWQnKTtcblxuLyoqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSB3b3JrZmxvdyBydW4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1blN0YXR1cyA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgV29ya2Zsb3dSdW5bJ3N0YXR1cyddIHwgJ3dvcmtmbG93X3N1c3BlbmRlZCdcbj4oJ3dvcmtmbG93LnJ1bi5zdGF0dXMnKTtcblxuLyoqIFRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3RhcnRlZCAoVW5peCB0aW1lc3RhbXApICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGFydGVkQXQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0YXJ0ZWRfYXQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGV2ZW50cyBwcm9jZXNzZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXZlbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5jb3VudCdcbik7XG5cbi8qKiBXaGV0aGVyIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGFydHMgd2l0aCByZXBsYXkgb3IgcmVzdW1lcyBhIHJldGFpbmVkIFZNICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFeGVjdXRpb25Nb2RlID0gU2VtYW50aWNDb252ZW50aW9uPCdyZXBsYXknIHwgJ3JldGFpbmVkJz4oXG4gICd3b3JrZmxvdy5leGVjdXRpb24ubW9kZSdcbik7XG5cbi8qKlxuICogRXZlbnRzIHRoZSByZXBsYXkgd2Fsa2VkIHBhc3QgdGhhdCBubyBjb25zdW1lciBjbGFpbWVkLCBzdGlsbCBoZWxkIHdoZW4gdGhlXG4gKiByZXBsYXkgc3RvcHBlZC5cbiAqXG4gKiBBIG5vbi16ZXJvIGNvdW50IG9uIGEgc3VzcGVuc2lvbiBpcyBvcmRpbmFyeTogYW4gb3V0LW9mLWJhbmQgZGVsaXZlcnkgdGhhdFxuICogbGFuZGVkIGFoZWFkIG9mIHRoZSBjb2RlIHRoYXQgcmVhZHMgaXQgd2FpdHMgZm9yIHRoZSByZXBsYXkgdGhhdCBnZXRzIHRoZXJlLlxuICogRnJvbSBpbnNpZGUgb25lIHJlcGxheSB0aGF0IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZXZlbnQgbm8gcmVwbGF5IHdpbGxcbiAqIGV2ZXIgY2xhaW0sIGJlY2F1c2UgdGhlIHR3byBkaWZmZXIgb25seSBpbiB3aGF0IHRoZSBuZXh0IHJlcGxheSBkb2VzLiBTbyB0aGVcbiAqIGNvdW50IGdvZXMgb24gdGhlIHNwYW4gaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4sIGFuZCB0aGUgY2FzZSB3b3J0aCBhY3RpbmdcbiAqIG9uIGlzIGEgcXVlcnkgYWNyb3NzIGEgcnVuJ3Mgc3BhbnM6IHRoZSBzYW1lXG4gKiB7QGxpbmsgV29ya2Zsb3dQYXJrZWRFdmVudElkfSBoZWxkIG9uIHN1c3BlbnNpb24gYWZ0ZXIgc3VzcGVuc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UGFya2VkRXZlbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5wYXJrZWQuY291bnQnXG4pO1xuXG4vKiogT2xkZXN0IGV2ZW50IHN0aWxsIGhlbGQgdW5jbGFpbWVkIHdoZW4gdGhlIHJlcGxheSBzdG9wcGVkLiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UGFya2VkRXZlbnRJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5ldmVudF9pZCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSBvbGRlc3QgZXZlbnQgc3RpbGwgaGVsZCB1bmNsYWltZWQgd2hlbiB0aGUgcmVwbGF5IHN0b3BwZWQuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5wYXJrZWQuZXZlbnRfdHlwZSdcbik7XG5cbi8qKiBOdW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgd29ya2Zsb3cgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0FyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5hcmd1bWVudHMuY291bnQnXG4pO1xuXG4vKiogVHlwZSBvZiB0aGUgd29ya2Zsb3cgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5yZXN1bHQudHlwZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRyYWNlIGNvbnRleHQgd2FzIHByb3BhZ2F0ZWQgdG8gdGhpcyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1RyYWNlUHJvcGFnYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnRyYWNlLnByb3BhZ2F0ZWQnXG4pO1xuXG4vLyBRdWlja0pTIFZNIGVuZ2luZSBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgVk0gZW5naW5lIGV4ZWN1dGluZyB0aGUgd29ya2Zsb3cgZnVuY3Rpb24gZm9yIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Vm0gPSBTZW1hbnRpY0NvbnZlbnRpb248J25vZGUnIHwgJ3F1aWNranMnPignd29ya2Zsb3cudm0nKTtcblxuLyoqIE91dGNvbWUgb2YgYSBRdWlja0pTIFZNIHdvcmtmbG93IGludm9jYXRpb24gKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTT3V0Y29tZSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ2NvbXBsZXRlZCcgfCAnc3VzcGVuZGVkJyB8ICdmYWlsZWQnXG4+KCd3b3JrZmxvdy52bS5vdXRjb21lJyk7XG5cbi8qKiBXaGV0aGVyIHByZWxvYWRlZCBldmVudHMgZnJvbSBgZXZlbnRzLmNyZWF0ZSgncnVuX3N0YXJ0ZWQnKWAgd2VyZSB1c2VkICovXG5leHBvcnQgY29uc3QgUXVpY2tKU0V2ZW50c1ByZWxvYWRlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5wcmVsb2FkZWQnXG4pO1xuXG4vKiogVG90YWwgbnVtYmVyIG9mIGV2ZW50cyBmZXRjaGVkIGZyb20gdGhlIHdvcmxkIGZvciB0aGlzIGludm9jYXRpb24gKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTRXZlbnRzRmV0Y2hlZENvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy52bS5ldmVudHMuZmV0Y2hlZF9jb3VudCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgcGFnZXMgcmVxdWlyZWQgdG8gZmV0Y2ggYWxsIGV2ZW50cyAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNFdmVudHNGZXRjaGVkUGFnZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5mZXRjaGVkX3BhZ2VzJ1xuKTtcblxuLyoqIE51bWJlciBvZiBwZW5kaW5nIFZNIG9wZXJhdGlvbnMgY2FwdHVyZWQgYXQgc3VzcGVuc2lvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNQZW5kaW5nT3BzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLnBlbmRpbmdfb3BzX2NvdW50J1xuKTtcblxuLyoqIE51bWJlciBvZiBzdGVwcyBleGVjdXRlZCBpbmxpbmUgKGxpdmUtVk0gY29udGludWF0aW9uKSB0aGlzIGludm9jYXRpb24gKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTSW5saW5lU3RlcHMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3F1aWNranMuaW5saW5lX3N0ZXBzJ1xuKTtcblxuLyoqIEFjdGl2ZSB0cmFjZS1jb3JyZWxhdGlvbiBtb2RlIGZvciB0aGlzIGludm9jYXRpb24gKGxpbmtlZCBvciBjb250aW51b3VzKSAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHJhY2VNb2RlID0gU2VtYW50aWNDb252ZW50aW9uPCdsaW5rZWQnIHwgJ2NvbnRpbnVvdXMnPihcbiAgJ3dvcmtmbG93LnRyYWNlLm1vZGUnXG4pO1xuXG4vKiogV2hldGhlciB0aGlzIHdvcmtmbG93IGludm9jYXRpb24gaXMgdXNpbmcgdGhlIHR1cmJvIGZpcnN0LWRlbGl2ZXJ5IHBhdGggKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1R1cmJvID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCd3b3JrZmxvdy50dXJibycpO1xuXG4vKiogTmFtZSBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgd29ya2Zsb3cgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXJyb3JOYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5lcnJvci5uYW1lJ1xuKTtcblxuLyoqIEVycm9yIG1lc3NhZ2Ugd2hlbiB3b3JrZmxvdyBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXJyb3JNZXNzYWdlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5lcnJvci5tZXNzYWdlJ1xuKTtcblxuLyoqIEVycm9yIGNsYXNzaWZpY2F0aW9uIGNvZGUgKFVTRVJfRVJST1IsIFJVTlRJTUVfRVJST1IsIGV0Yy4pICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvckNvZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLmNvZGUnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3RlcHNDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdGVwcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiBob29rcyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0hvb2tzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaG9va3MuY3JlYXRlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygd2FpdHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dXYWl0c0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LndhaXRzLmNyZWF0ZWQnXG4pO1xuXG4vKipcbiAqIE51bWJlciBvZiBpbmxpbmUtb3duZWQgc3RlcHMgdGhpcyBpbnZvY2F0aW9uIHJlLWV4ZWN1dGVkIGJlY2F1c2UgaXQgaXMgYVxuICogcmVkZWxpdmVyeSBvZiB0aGVpciBvd25pbmcgcXVldWUgbWVzc2FnZSAoY3Jhc2ggcmVjb3ZlcnkgZm9yIGlubGluZVxuICogc3RlcHMg4oCUIHNlZSB0aGUgaW5saW5lIHN0ZXAgb3duZXJzaGlwIGNoYW5nZWxvZywgd29ya2Zsb3cjMjc4MCkuXG4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd093bmVkUmVjb3ZlcnlTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaW5saW5lX293bmVyc2hpcC5vd25lZF9yZWNvdmVyeV9zdGVwcydcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHBlbmRpbmcgc3RlcHMgZm9yIHdoaWNoIHRoaXMgcmVwbGF5IHN1cHByZXNzZWQgdGhlIGltbWVkaWF0ZVxuICogcmVxdWV1ZSAoYW5vdGhlciBpbnZvY2F0aW9uIGlubGluZS1vd25zIHRoZW0gdW5kZXIgYSBsaXZlIGxlYXNlKSBhbmRcbiAqIGVuc3VyZWQgYSBkZWxheWVkIGJhY2tzdG9wIHdha2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QmFja3N0b3BXYWtlc0FybWVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5pbmxpbmVfb3duZXJzaGlwLmJhY2tzdG9wX3dha2VzX2FybWVkJ1xuKTtcblxuLy8gUm91dGUgYXR0cmlidXRlc1xuXG4vKiogVGhlIHdvcmtmbG93IHJ1bnRpbWUgcm91dGUgYmVpbmcgaGFuZGxlZCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPCdmbG93Jz4oXG4gICd3b3JrZmxvdy5yb3V0ZS50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhpcyByb3V0ZSBpbnZvY2F0aW9uIHJldXNlZCBhbiBhbHJlYWR5LWNyZWF0ZWQgcmVxdWVzdCBoYW5kbGVyICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUhhbmRsZXJDYWNoZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5oYW5kbGVyX2NhY2hlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgdGltZXMgdGhpcyBpbi1tZW1vcnkgcm91dGUgaGFuZGxlciBoYXMgYmVlbiBpbnZva2VkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUludm9jYXRpb25Db3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucm91dGUuaW52b2NhdGlvbl9jb3VudCdcbik7XG5cbi8qKiBUaW1lIHNpbmNlIHRoaXMgcm91dGUgZW50cnlwb2ludCB3YXMgY29uc3RydWN0ZWQsIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVFbnRyeXBvaW50QWdlTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJvdXRlLmVudHJ5cG9pbnRfYWdlX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXZhbHVhdGluZyB0aGUgZ2VuZXJhdGVkIHJvdXRlIG1vZHVsZSBib2R5IGJlZm9yZSBjcmVhdGluZyB0aGUgZW50cnlwb2ludCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVNb2R1bGVCb2R5SW5pdE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5tb2R1bGVfYm9keV9pbml0X21zJ1xuKTtcblxuLyoqXG4gKiBDb21wdXRlIGluc3RhbmNlIGhhbmRsaW5nIHRoaXMgcm91dGUg4oCUIHRoZSBzeW50aGVzaXplZCBgQ09NUFVURV9JTlNUQU5DRV9JRGAuXG4gKiBVc2VzIE9URUwgYGZhYXMuaW5zdGFuY2VgIChleGVjdXRpb24tZW52aXJvbm1lbnQgaWQsIHJldXNlZCBhY3Jvc3NcbiAqIGludm9jYXRpb25zIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKTpcbiAqIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvYXR0cmlidXRlcy1yZWdpc3RyeS9mYWFzL1xuICovXG5leHBvcnQgY29uc3QgRmFhc0luc3RhbmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2ZhYXMuaW5zdGFuY2UnKTtcblxuLy8gU3RlcCBhdHRyaWJ1dGVzXG5cbi8qKiBOYW1lIG9mIHRoZSBzdGVwIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgU3RlcE5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5uYW1lJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHN0ZXAgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBTdGVwSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5pZCcpO1xuXG4vKiogQ3VycmVudCBhdHRlbXB0IG51bWJlciBmb3Igc3RlcCBleGVjdXRpb24gKHN0YXJ0cyBhdCAxKSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBBdHRlbXB0ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAuYXR0ZW1wdCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5zdGF0dXMnKTtcblxuLyoqIE1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgYWxsb3dlZCBmb3IgdGhpcyBzdGVwICovXG5leHBvcnQgY29uc3QgU3RlcE1heFJldHJpZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5tYXhfcmV0cmllcycpO1xuXG4vKiogV2hldGhlciB0cmFjZSBjb250ZXh0IHdhcyBwcm9wYWdhdGVkIHRvIHRoaXMgc3RlcCBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC50cmFjZS5wcm9wYWdhdGVkJ1xuKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgdGltZS10by1maXJzdC1zdGVwIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzOiBydW4gY3JlYXRpb24g4oaSXG4gKiB0aGlzIHN0ZXAncyBib2R5IGJlZ2lubmluZyB0byBleGVjdXRlLCBtaW51cyBwcmUtc3RlcCBob29rLWNyZWF0aW9uIHRpbWUuXG4gKiBPbmx5IHByZXNlbnQgb24gdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uIHdoZW4gaXQgcXVhbGlmaWVkIGZvclxuICogbWVhc3VyZW1lbnQgKHNlZSBydW50aW1lL3N0ZXAtbGF0ZW5jeS50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHRmc01zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAudHRmc19tcycpO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCBzdGVwLXRvLXN0ZXAgb3ZlcmhlYWQgaW4gbWlsbGlzZWNvbmRzOiB0aGUgcHJldmlvdXMgc3RlcCdzXG4gKiB0ZXJtaW5hbCBldmVudCDihpIgdGhpcyBzdGVwJ3MgYm9keSBiZWdpbm5pbmcgdG8gZXhlY3V0ZS4gT25seSBwcmVzZW50IHdoZW5cbiAqIHRoZSB0d28gc3RlcHMgcmFuIGJhY2stdG8tYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdHNvTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5zdHNvX21zJyk7XG5cbi8qKlxuICogQ2xpZW50LW1lYXN1cmVkIHJ1bl9zdGFydGVkLXRvLWZpcnN0LXN0ZXAgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHM6IHRoZVxuICogYHJ1bl9zdGFydGVkYCByZXNwb25zZSBsYW5kaW5nIChvciwgdW5kZXIgdHVyYm8sIHRoZSBsb2NhbCBydW4gc3ludGhlc2lzXG4gKiBpbnN0YW50KSDihpIgdGhpcyBzdGVwJ3Mgc3RhcnQgUE9TVCBiZWluZyBpc3N1ZWQuIEEgc3ViLXdpbmRvdyBvZiB0dGZzIHRoYXRcbiAqIGlzb2xhdGVzIHJlcGxheSBvdmVyaGVhZCBmcm9tIHRoZSBydW4tY3JlYXRpb24gcXVldWUgaG9wLiBPbmx5IHByZXNlbnQgb25cbiAqIHRoZSBydW4ncyBmaXJzdCBzdGVwIGV4ZWN1dGlvbiB3aGVuIGl0IHF1YWxpZmllZCBmb3IgbWVhc3VyZW1lbnQgKHNlZVxuICogcnVudGltZS9zdGVwLWxhdGVuY3kudHMpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFJzZnNNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLnJzZnNfbXMnKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgc3luY2hyb25vdXMgd29ya2Zsb3ctZnVuY3Rpb24gcmVwbGF5IGR1cmF0aW9uIGluXG4gKiBtaWxsaXNlY29uZHMsIGV4Y2x1ZGluZyBhd2FpdGVkIG5ldHdvcmsgSS9PLCBvZiBvbmx5IHRoZSBGSU5BTCByZXBsYXkgcGFzc1xuICogd2l0aGluIHRoZSByc2ZzIHdpbmRvdyDigJQgdGhlIHBhc3MgdGhhdCByZWFjaGVkIGFuZCBzY2hlZHVsZWQgdGhlIGZpcnN0XG4gKiBzdGVwLiBOb3QgYWNjdW11bGF0ZWQgYWNyb3NzIGVhcmxpZXIgcHJlLWZpcnN0LXN0ZXAgcGFzc2VzIChlLmcuIGFcbiAqIHdvcmtmbG93LWJvZHkgYHNldEF0dHJpYnV0ZXMoKWAgZGV0b3VyIHJlcGxheXMgbW9yZSB0aGFuIG9uY2UsIGFuZCBhXG4gKiByZWRlbGl2ZXJ5IG9taXRzIGVhcmxpZXIgaW52b2NhdGlvbnMnIHdvcmsgZW50aXJlbHkpLCBzbyB0aGlzIG11c3Qgbm90IGJlXG4gKiByZWFkIGFzIFwidGhlIHJlcGxheSBwb3J0aW9uIG9mIHJzZnNcIiDigJQgc3RlcC5yc2ZzX21zIGNvdmVycyB0aGUgd2hvbGVcbiAqIHdpbmRvdy4gT25seSBwcmVzZW50IGFsb25nc2lkZSBzdGVwLnJzZnNfbXMgYW5kIG9ubHkgZm9yIHRoZSBydW4ncyBmaXJzdFxuICogc3RlcCAoc2VlIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBGaW5hbFNjaGVkdWxpbmdSZXBsYXlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5maW5hbF9zY2hlZHVsaW5nX3JlcGxheV9tcydcbik7XG5cbi8qKlxuICogUnVudGltZSBzdGFydHVwLWxhdGVuY3kgb3B0aW1pemF0aW9ucyBhY3RpdmUgZm9yIHRoZSB0dGZzL3N0c28gbWVhc3VyZW1lbnRcbiAqIChlLmcuICd0dXJibycsICdsYXp5U3RlcFN0YXJ0JywgJ29wdGltaXN0aWNTdGFydCcpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcExhdGVuY3lPcHRpbWl6YXRpb25zID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZ1tdPihcbiAgJ3N0ZXAubGF0ZW5jeV9vcHRpbWl6YXRpb25zJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgd2FzIHNraXBwZWQgZHVyaW5nIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwcGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdzdGVwLnNraXBwZWQnKTtcblxuLyoqIFJlYXNvbiB3aHkgdGhlIHN0ZXAgd2FzIHNraXBwZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwU2tpcFJlYXNvbiA9XG4gIFNlbWFudGljQ29udmVudGlvbjxTdGVwWydzdGF0dXMnXT4oJ3N0ZXAuc2tpcF9yZWFzb24nKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBzdGVwIGZ1bmN0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcEFyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSBzdGVwIHJlc3VsdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3N0ZXAucmVzdWx0LnR5cGUnKTtcblxuLyoqIE5hbWUgb2YgdGhlIGVycm9yIHRoYXQgY2F1c2VkIHN0ZXAgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5uYW1lJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIHdoZW4gc3RlcCBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck1lc3NhZ2UgPVxuICBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5tZXNzYWdlJyk7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIGZhaWxlZCB3aXRoIGEgZmF0YWwgZXJyb3IgKG5vIHJldHJpZXMpICovXG5leHBvcnQgY29uc3QgU3RlcEZhdGFsRXJyb3IgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuZmF0YWxfZXJyb3InKTtcblxuLyoqIFdoZXRoZXIgYWxsIHJldHJ5IGF0dGVtcHRzIGhhdmUgYmVlbiBleGhhdXN0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlFeGhhdXN0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LmV4aGF1c3RlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBuZXh0IHJldHJ5IGF0dGVtcHQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlUaW1lb3V0U2Vjb25kcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5yZXRyeS50aW1lb3V0X3NlY29uZHMnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3aWxsIGJlIHJldHJpZWQgYWZ0ZXIgdGhpcyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcFJldHJ5V2lsbFJldHJ5ID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC5yZXRyeS53aWxsX3JldHJ5J1xuKTtcblxuLy8gUXVldWUvTWVzc2FnaW5nIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIG1lc3NhZ2luZyBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L21lc3NhZ2luZy9tZXNzYWdpbmctc3BhbnMvXG5cbi8qKiBNZXNzYWdpbmcgc3lzdGVtIGlkZW50aWZpZXIgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5zeXN0ZW0pICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nU3lzdGVtID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ21lc3NhZ2luZy5zeXN0ZW0nKTtcblxuLyoqIERlc3RpbmF0aW9uIG5hbWUvcXVldWUgbmFtZSAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLmRlc3RpbmF0aW9uLm5hbWUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nRGVzdGluYXRpb25OYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICdtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSdcbik7XG5cbi8qKiBUaGUgbWVzc2FnZSBpZCBiZWluZyBoYW5kbGVkIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcubWVzc2FnZS5pZCkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdNZXNzYWdlSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248TWVzc2FnZUlkPihcbiAgJ21lc3NhZ2luZy5tZXNzYWdlLmlkJ1xuKTtcblxuLyoqIE9wZXJhdGlvbiB0eXBlIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nT3BlcmF0aW9uVHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ3B1Ymxpc2gnIHwgJ3JlY2VpdmUnIHwgJ3Byb2Nlc3MnXG4+KCdtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUnKTtcblxuLyoqIFRpbWUgdGFrZW4gdG8gZW5xdWV1ZSB0aGUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlT3ZlcmhlYWRNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUub3ZlcmhlYWRfbXMnXG4pO1xuXG4vLyBEZXBsb3ltZW50IGF0dHJpYnV0ZXNcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCAqL1xuZXhwb3J0IGNvbnN0IERlcGxveW1lbnRJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdkZXBsb3ltZW50LmlkJyk7XG5cbi8qKiBUaGUgZGVwbG95bWVudCBhIHJ1biBpcyBwaW5uZWQgdG8sIHNldCBvbmx5IG9uIGEgbWlzcm91dGVkIGRlbGl2ZXJ5LiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuUGlubmVkRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50LnBpbm5lZF9pZCdcbik7XG5cbi8qKiBSZS1yb3V0ZSBhdHRlbXB0cyBmb3IgdGhpcyBtaXNyb3V0ZWQgZGVsaXZlcnksIGluY2x1ZGluZyB0aGlzIG9uZS4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaFJldHJ5Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnRfbWlzbWF0Y2gucmV0cnlfY291bnQnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgbWlzcm91dGVkIGRlbGl2ZXJ5IHdhcyByZS1yb3V0ZWQgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dEZXBsb3ltZW50TWlzbWF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50X21pc21hdGNoLnJlY292ZXJlZCdcbik7XG5cbi8vIEhvb2sgYXR0cmlidXRlc1xuXG4vKiogVG9rZW4gaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBob29rICovXG5leHBvcnQgY29uc3QgSG9va1Rva2VuID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lmhvb2sudG9rZW4nKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIGhvb2sgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBIb29rSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay5pZCcpO1xuXG4vKiogV2hldGhlciBhIGhvb2sgd2FzIGZvdW5kIGJ5IGl0cyB0b2tlbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tGb3VuZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignd29ya2Zsb3cuaG9vay5mb3VuZCcpO1xuXG4vKipcbiAqIFByb2R1Y2VyLXNpZGUgc2lnbmFsIChvbiB0aGUgYGhvb2sucmVzdW1lYCBzcGFuKSB0aGF0IHRoZSBkaXJlY3RcbiAqIGBob29rX3JlY2VpdmVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgYnV0IHRoZSBxdWV1ZSBkaXNwYXRjaCBzdWNjZWVkZWQsIHNvXG4gKiB0aGUgcmVzdW1lIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3MgcmUtZW5zdXJlLiBDb3JyZXNwb25kcyB0b1xuICogYFJlc3VtZWRIb29rLnJlc2lsaWVudFJlc3VtZSA9PT0gdHJ1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBIb29rUmVzaWxpZW50UmVzdW1lID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuaG9vay5yZXNpbGllbnRfcmVzdW1lJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSB0aGF0IHRoaXMgcmVwbGF5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBob29rX3JlY2VpdmVkYCBldmVudCBmcm9tIHRoZSBxdWV1ZSBtZXNzYWdlJ3MgYGhvb2tJbnB1dGBcbiAqIGJlY2F1c2UgdGhlIHByb2R1Y2VyJ3MgZGlyZWN0IHdyaXRlIGhhZCBub3QgbGFuZGVkIOKAlCB0aGUgY29tcGxldGlvbiBvZiB0aGVcbiAqIHJlY292ZXJ5IHBhdGgge0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWV9IGJlZ2FuLlxuICpcbiAqIExlZ2FjeSAvIG5vbi1hdG9taWMgcmUtZW5zdXJlIHNpZ25hbCBvbmx5LiBBdG9taWMgbGF6eSByZXN1bWVzXG4gKiAocmVzdW1lSWQgKyBkaWdlc3QpIGdvIHRocm91Z2ggdGhlIGhvaXN0ZWQgcHJlbG9hZCB3cml0ZSBpbnN0ZWFkLCB3aG9zZVxuICogcmVzcG9uc2UgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgcHJvZHVjZXIgb3IgdGhlIGNvbnN1bWVyIHdvbiB0aGVcbiAqIGAocnVuSWQsIHJlc3VtZUlkKWAgY2xhaW0g4oCUIHNvIHRoaXMgYXR0cmlidXRlIGlzIGRlbGliZXJhdGVseSBOT1QgZW1pdHRlZFxuICogZm9yIHRoZW0gKGVtaXR0aW5nIGB0cnVlYCB1bmNvbmRpdGlvbmFsbHkgd291bGQgY291bnQgZXZlcnkgcHJvZHVjZXItd29uXG4gKiByZXN1bWUgYXMgYSByZWNvdmVyeSkuIFRoZSBwcm9kdWNlci1iZWdpbiAoe0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWV9KSAvXG4gKiBjb25zdW1lci1tYXRlcmlhbGl6ZWQgcGFpcmluZyBpcyB0aGVyZWZvcmUgbm8gbG9uZ2VyIGNvbXBsZXRlIGZvciBhdG9taWNcbiAqIGxhenkgcmVzdW1wdGlvbnM7IHVzZSB7QGxpbmsgSG9va1Jlc3VtZVNldHVwU291cmNlfSB0byBvYnNlcnZlIHRoYXQgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXNpbGllbnRSZXN1bWVNYXRlcmlhbGl6ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc2lsaWVudF9yZXN1bWVfbWF0ZXJpYWxpemVkJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSBvZiBob3cgYSBsYXp5IGhvb2tcbiAqIHJlc3VtZSBpbml0aWFsaXplZCBpdHMgcmVwbGF5IHN0YXRlOlxuICpcbiAqIC0gYGhvb2tfcmVjZWl2ZWRfc3RyZWFtYCDigJQgdGhlIGhvaXN0ZWQgYGhvb2tfcmVjZWl2ZWRgIHdyaXRlIHJldHVybmVkIGFcbiAqICAgdXNhYmxlIHJlcGxheSBwcmVsb2FkIChydW4gKyBjb21wbGV0ZSBldmVudCBsb2cpLCBzbyB0aGUgaW52b2NhdGlvblxuICogICBza2lwcGVkIGJvdGggdGhlIGBydW5fc3RhcnRlZGAgd3JpdGUgYW5kIHRoZSBpbml0aWFsIGBldmVudHMubGlzdGAuXG4gKiAtIGBob29rX3JlY2VpdmVkX2ZhbGxiYWNrYCDigJQgdGhlIGhvaXN0ZWQgd3JpdGUgc3VjY2VlZGVkIGJ1dCByZXR1cm5lZCBub1xuICogICB1c2FibGUgcHJlbG9hZCAoYSBDQk9SIHJlc3BvbnNlIGZyb20gYW4gb2xkZXIgc2VydmVyLCBhIFdvcmxkIHRoYXRcbiAqICAgaWdub3JlZCB0aGUgb3B0LWluLCBhIGJvdW5kZWQgYGhhc01vcmVgIHBhZ2UsIG9yIGEgcHJlbG9hZCB0aGF0IGZhaWxlZFxuICogICB2YWxpZGF0aW9uKTsgdGhlIGludm9jYXRpb24gZmVsbCBiYWNrIHRvIHRoZSBgcnVuX3N0YXJ0ZWRgIHNldHVwIHdpdGhvdXRcbiAqICAgcmUtcG9zdGluZyB0aGUgaG9vay5cbiAqXG4gKiBBYnNlbnQgb24gbGVnYWN5IGhvb2sgZGVsaXZlcmllcyAobm8gcmVzdW1lSWQvZGlnZXN0KSBhbmQgb24gZXZlcnkgb3RoZXJcbiAqIGRlbGl2ZXJ5IGtpbmQsIHdoaWNoIHRha2UgdGhlIGBydW5fc3RhcnRlZGAgc2V0dXAgdW5jb25kaXRpb25hbGx5LlxuICpcbiAqIFRoaXMgaXMgYSBsYXRlbmN5L3NldHVwLXBhdGggc2lnbmFsOiBpdCBzYXlzIHdoaWNoIHJlcXVlc3RzIGluaXRpYWxpemVkXG4gKiB0aGUgaW52b2NhdGlvbiwgTk9UIHRoYXQgdGhpcyBjb25zdW1lciBjcmVhdGVkIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnRcbiAqICh0aGUgaG9pc3RlZCB3cml0ZSBtYXkgZXF1YWxseSBoYXZlIGNvbnZlcmdlZCBvbiB0aGUgcHJvZHVjZXIncyDigJQgY2xhaW1cbiAqIG93bmVyc2hpcCBpcyBub3Qgb2JzZXJ2YWJsZSBjbGllbnQtc2lkZTsgY2YuXG4gKiB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZU1hdGVyaWFsaXplZH0pLlxuICovXG5leHBvcnQgY29uc3QgSG9va1Jlc3VtZVNldHVwU291cmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5yZXN1bWVfc2V0dXBfc291cmNlJ1xuKTtcblxuLyoqXG4gKiBQcm9kdWNlci1zaWRlIHNpZ25hbCAob24gdGhlIHN1c3BlbnNpb24gc3BhbikgY291bnRpbmcgc3RlcHMgd2hvc2UgZGlyZWN0XG4gKiBgc3RlcF9jcmVhdGVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgd2hpbGUgdGhlaXIgYHN0ZXBJbnB1dGAtY2FycnlpbmdcbiAqIHF1ZXVlIHB1Ymxpc2ggc3VjY2VlZGVkLCBzbyBzdGVwIGNyZWF0aW9uIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3NcbiAqIHJlLWVuc3VyZS4gTWlycm9ycyB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0uXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwUmVzaWxpZW50RGlzcGF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXAucmVzaWxpZW50X2Rpc3BhdGNoX3JlY292ZXJlZCdcbik7XG5cbi8qKlxuICogQ29uc3VtZXItc2lkZSBzaWduYWwgKG9uIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3BhbikgdGhhdCB0aGlzIGRlbGl2ZXJ5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBzdGVwX2NyZWF0ZWRgIGV2ZW50IGZyb20gdGhlIHF1ZXVlIG1lc3NhZ2UncyBgc3RlcElucHV0YFxuICogYmVjYXVzZSB0aGUgcHJvZHVjZXIncyBkaXJlY3Qgd3JpdGUgaGFkIG5vdCBsYW5kZWQg4oCUIHRoZSBjb21wbGV0aW9uIG9mIHRoZVxuICogcmVjb3ZlcnkgcGF0aCB7QGxpbmsgU3RlcFJlc2lsaWVudERpc3BhdGNoUmVjb3ZlcmVkfSBiZWdhbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXNpbGllbnREaXNwYXRjaE1hdGVyaWFsaXplZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnN0ZXAucmVzaWxpZW50X2Rpc3BhdGNoX21hdGVyaWFsaXplZCdcbik7XG5cbi8vIEhvb2stdHJpZ2dlcmVkIHRpbWUtdG8tcmVzdW1lIChUVFIpIGF0dHJpYnV0ZXNcbi8vXG4vLyBTZXQgb24gdGhlIGBzdGVwLmV4ZWN1dGUgPG5hbWU+YCBzcGFuIG9mIHRoZSBGSVJTVCBkdXJhYmxlIHN0ZXAgZm9sbG93aW5nIGFcbi8vIGhvb2sgcmVzdW1lLCBhbmQgb25seSB0aGVyZTogb25lIHJlc3VtcHRpb24gcHJvZHVjZXMgZXhhY3RseSBvbmUgc2FtcGxlLCBzb1xuLy8gYSBsYXRlciBzdGVwIGluIHRoZSBzYW1lIGludm9jYXRpb24sIGEgcmV0cnksIG9yIGEgcmVkZWxpdmVyeSBuZXZlclxuLy8gcmUtcmVwb3J0cyBpdC4gVGhlIHBoYXNlcyBhcmUgbm9uLW92ZXJsYXBwaW5nIGFuZCBzdW0gZXhhY3RseSB0b1xuLy8ge0BsaW5rIFJlc3VtZVRvdGFsTXN9IOKAlCBzZWUgcnVudGltZS9yZXN1bWUtbGF0ZW5jeS50cyBmb3IgdGhlIGJvdW5kYXJ5XG4vLyBkZWZpbml0aW9ucyBhbmQgdGhlIGVtaXNzaW9uIGdhdGUuXG4vL1xuLy8gRGVsaWJlcmF0ZWx5IGNhcnJpZXMgbm8gYHJlc3VtZUlkYCwgcnVuIElELCBvciB0b2tlbjogdGhlIG1ldHJpYyBpcyBtZWFudCB0b1xuLy8gYmUgYWdncmVnYXRlZCBhY3Jvc3MgZXZlcnkgcmVzdW1lLCBhbmQgaGlnaC1jYXJkaW5hbGl0eSBrZXlzIHdvdWxkIG1ha2UgdGhhdFxuLy8gcHJvaGliaXRpdmUuIEV4aXN0aW5nIHRyYWNlLWNvcnJlbGF0aW9uIGZpZWxkcyBvbiB0aGUgc2FtZSBzcGFuIGFyZVxuLy8gdW5jaGFuZ2VkIGFuZCBzdGlsbCBpZGVudGlmeSB0aGUgaW5kaXZpZHVhbCBydW4uXG5cbi8qKiBUb3RhbCBUVFI6IGVudHJ5IGludG8gYHJlc3VtZUhvb2soKWAg4oaSIGltbWVkaWF0ZWx5IGJlZm9yZSBgc3RlcEZuLmFwcGx5KClgLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVRvdGFsTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS50b3RhbF9tcydcbik7XG5cbi8qKiBQaGFzZTogYHJlc3VtZUhvb2soKWAgZW50cnkg4oaSIHRoZSBxdWV1ZSBwdWJsaXNoIGJlaW5nIHJlcXVlc3RlZC4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVQcm9kdWNlclByZXBNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnByb2R1Y2VyX3ByZXBfbXMnXG4pO1xuXG4vKiogUGhhc2U6IHF1ZXVlIHB1Ymxpc2ggcmVxdWVzdGVkIOKGkiB0aGUgZmluYWwgY29uc3VtZXIncyBoYW5kbGVyIGJlaW5nIGVudGVyZWQuICovXG5leHBvcnQgY29uc3QgUmVzdW1lUXVldWVEZWxpdmVyeU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2UucXVldWVfZGVsaXZlcnlfbXMnXG4pO1xuXG4vKiogUGhhc2U6IGNvbnN1bWVyIGVudHJ5IOKGkiByZXBsYXkgYmVnaW5uaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVNldHVwTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5yZXN1bWVfc2V0dXBfbXMnXG4pO1xuXG4vKiogUGhhc2U6IHJlcGxheSBiZWdpbm5pbmcg4oaSIHRoZSBuZXh0IGR1cmFibGUgc3RlcCBiZWluZyBlbmNvdW50ZXJlZC4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVSZXBsYXlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnJlcGxheV9tcydcbik7XG5cbi8qKiBQaGFzZTogc3RlcCBlbmNvdW50ZXJlZCDihpIgdGhlIGBzdGVwX3N0YXJ0ZWRgIHJlcXVlc3QgYmVnaW5uaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0ZXBEaXNwYXRjaE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2Uuc3RlcF9kaXNwYXRjaF9tcydcbik7XG5cbi8qKlxuICogUGhhc2U6IGBzdGVwX3N0YXJ0ZWRgIHJlcXVlc3QgYmVnaW5uaW5nIOKGkiBpdHMgcmVzcG9uc2UgcmV0dXJuaW5nLiBPbWl0dGVkXG4gKiB1bmRlciBvcHRpbWlzdGljIGlubGluZSBzdGFydCwgd2hlcmUgdGhlIGNsYWltIGlzIG5vdCBhd2FpdGVkIGJlZm9yZSB0aGVcbiAqIGJvZHkgcnVucyBhbmQgdGhlcmVmb3JlIGhhcyBubyBjb21wbGV0aW9uIGluc3RhbnQgYXQgdGhhdCBwb2ludDsgdGhlIHRpbWVcbiAqIGlzIHRoZW4gcmVwb3J0ZWQgZW50aXJlbHkgYXMge0BsaW5rIFJlc3VtZVN0ZXBQcmVwYXJlTXN9LlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RlcENsYWltTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5zdGVwX2NsYWltX21zJ1xuKTtcblxuLyoqXG4gKiBQaGFzZTogY2xhaW0gcmV0dXJuaW5nIOKGkiBpbW1lZGlhdGVseSBiZWZvcmUgYHN0ZXBGbi5hcHBseSgpYC4gRGVsaWJlcmF0ZWx5XG4gKiBpbmNsdWRlcyBlbmNyeXB0aW9uLWtleSByZXNvbHV0aW9uLCBhcmd1bWVudCBoeWRyYXRpb24sIGFuZCBzdGVwLWNvbnRleHRcbiAqIHNldHVwOyBgd29ya2Zsb3cucXVldWUuZGVzZXJpYWxpemVfdGltZV9tc2Agc3RpbGwgaXNvbGF0ZXMgaHlkcmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RlcFByZXBhcmVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnN0ZXBfcHJlcGFyZV9tcydcbik7XG5cbi8qKiBXaGF0IHRyaWdnZXJlZCB0aGUgbWVhc3VyZWQgcmVzdW1wdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVUcmlnZ2VyID0gU2VtYW50aWNDb252ZW50aW9uPCdob29rJz4oXG4gICd3b3JrZmxvdy5yZXN1bWUudHJpZ2dlcidcbik7XG5cbi8qKiBXaGljaCBgcmVzdW1lSG9vaygpYCBkaXNwYXRjaCBwYXRoIHByb2R1Y2VkIHRoaXMgcmVzdW1lLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0cmF0ZWd5ID0gU2VtYW50aWNDb252ZW50aW9uPCdwYXJhbGxlbCcgfCAnc2VxdWVudGlhbCc+KFxuICAnd29ya2Zsb3cucmVzdW1lLnN0cmF0ZWd5J1xuKTtcblxuLyoqXG4gKiBIb3cgdGhlIGNvbnN1bWluZyBpbnZvY2F0aW9uIGluaXRpYWxpemVkIHJlcGxheSBzdGF0ZS4gRGlzdGluY3QgZnJvbSB0aGVcbiAqIHByZS1leGlzdGluZyB7QGxpbmsgSG9va1Jlc3VtZVNldHVwU291cmNlfSAoYHdvcmtmbG93LnJlc3VtZV9zZXR1cF9zb3VyY2VgLFxuICogb24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSwgd2hpY2ggcmVwb3J0cyB0aGUgZmluZXItZ3JhaW5lZFxuICogaG9pc3RlZC13cml0ZSBvdXRjb21lOyB0aGlzIG9uZSBpcyB0aGUgVFRSIGRpbWVuc2lvbiBhbmQgc2hhcmVzIHRoZSBtZXRyaWMnc1xuICogdGhyZWUtdmFsdWUgdm9jYWJ1bGFyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVNldHVwU291cmNlID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnaG9va19wcmVsb2FkJyB8ICdydW5fc3RhcnRlZCcgfCAnZXZlbnRfbG9hZCdcbj4oJ3dvcmtmbG93LnJlc3VtZS5zZXR1cF9zb3VyY2UnKTtcblxuLyoqIFdoZXRoZXIgdGhlIG1lYXN1cmVkIHN0ZXAgcmFuIGluIHRoZSByZXN1bWluZyBpbnZvY2F0aW9uIG9yIGEgcXVldWVkIG9uZS4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVTdGVwRXhlY3V0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPCdpbmxpbmUnIHwgJ2Rpc3BhdGNoZWQnPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5zdGVwX2V4ZWN1dGlvbidcbik7XG5cbi8vIFdlYmhvb2sgYXR0cmlidXRlc1xuXG4vKiogTnVtYmVyIG9mIHdlYmhvb2sgaGFuZGxlcnMgdHJpZ2dlcmVkICovXG5leHBvcnQgY29uc3QgV2ViaG9va0hhbmRsZXJzVHJpZ2dlcmVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3ZWJob29rLmhhbmRsZXJzLnRyaWdnZXJlZCdcbik7XG5cbi8vIFN1c3BlbnNpb24gYXR0cmlidXRlc1xuXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uU3RhdGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3N1c3BlbmRlZCc+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5zdGF0ZSdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uSG9va0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLmhvb2tfY291bnQnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvblN0ZXBDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5zdGVwX2NvdW50J1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25XYWl0Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24ud2FpdF9jb3VudCdcbik7XG5cbi8vIFdvcmxkL1N0b3JhZ2UgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgSFRUUCBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2h0dHAvaHR0cC1zcGFucy9cblxuLyoqIEhUVFAgcmVxdWVzdCBtZXRob2QgKHN0YW5kYXJkIE9URUw6IGh0dHAucmVxdWVzdC5tZXRob2QpICovXG5leHBvcnQgY29uc3QgSHR0cFJlcXVlc3RNZXRob2QgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ2h0dHAucmVxdWVzdC5tZXRob2QnXG4pO1xuXG4vKiogUm91dGUgcGF0dGVybiBmb3IgdGhlIHJlcXVlc3QgKHN0YW5kYXJkIE9URUw6IGh0dHAucm91dGUpICovXG5leHBvcnQgY29uc3QgSHR0cFJvdXRlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2h0dHAucm91dGUnKTtcblxuLyoqIEZ1bGwgVVJMIG9mIHRoZSByZXF1ZXN0IChzdGFuZGFyZCBPVEVMOiB1cmwuZnVsbCkgKi9cbmV4cG9ydCBjb25zdCBVcmxGdWxsID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3VybC5mdWxsJyk7XG5cbi8qKiBTZXJ2ZXIgaG9zdG5hbWUgKHN0YW5kYXJkIE9URUw6IHNlcnZlci5hZGRyZXNzKSAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckFkZHJlc3MgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc2VydmVyLmFkZHJlc3MnKTtcblxuLyoqIFNlcnZlciBwb3J0IChzdGFuZGFyZCBPVEVMOiBzZXJ2ZXIucG9ydCkgKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQb3J0ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3NlcnZlci5wb3J0Jyk7XG5cbi8qKiBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIChzdGFuZGFyZCBPVEVMOiBodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlKSAqL1xuZXhwb3J0IGNvbnN0IEh0dHBSZXNwb25zZVN0YXR1c0NvZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ2h0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGUnXG4pO1xuXG4vKiogRXJyb3IgdHlwZSB3aGVuIHJlcXVlc3QgZmFpbHMgKHN0YW5kYXJkIE9URUw6IGVycm9yLnR5cGUpICovXG5leHBvcnQgY29uc3QgRXJyb3JUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2Vycm9yLnR5cGUnKTtcblxuLy8gV29ybGQtc3BlY2lmaWMgY3VzdG9tIGF0dHJpYnV0ZXMgKGZvciB3b3JrZmxvdy1zcGVjaWZpYyBjb250ZXh0KVxuXG4vKiogRm9ybWF0IHVzZWQgZm9yIHBhcnNpbmcgcmVzcG9uc2UgYm9keSAoY2JvciBvciBqc29uKSAqL1xuZXhwb3J0IGNvbnN0IFdvcmxkUGFyc2VGb3JtYXQgPSBTZW1hbnRpY0NvbnZlbnRpb248J2Nib3InIHwgJ2pzb24nPihcbiAgJ3dvcmtmbG93LndvcmxkLnBhcnNlLmZvcm1hdCdcbik7XG5cbi8vIEV2ZW50IGxvYWRpbmcgYXR0cmlidXRlc1xuXG4vKiogTnVtYmVyIG9mIHBhZ2luYXRpb24gcGFnZXMgbG9hZGVkIHdoZW4gZmV0Y2hpbmcgd29ya2Zsb3cgZXZlbnRzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFdmVudHNQYWdlc0xvYWRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhZ2VzX2xvYWRlZCdcbik7XG5cbi8vIFF1ZXVlIHRpbWluZyBicmVha2Rvd24gYXR0cmlidXRlcyAod29ya2Zsb3ctc3BlY2lmaWMpXG5cbi8qKiBUaW1lIHNwZW50IGRlc2VyaWFsaXppbmcgdGhlIHF1ZXVlIG1lc3NhZ2UgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgUXVldWVEZXNlcmlhbGl6ZVRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuZGVzZXJpYWxpemVfdGltZV9tcydcbik7XG5cbi8qKiBUaW1lIHNwZW50IGV4ZWN1dGluZyB0aGUgaGFuZGxlciBsb2dpYyBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZUV4ZWN1dGlvblRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuZXhlY3V0aW9uX3RpbWVfbXMnXG4pO1xuXG4vKiogVGltZSBzcGVudCBzZXJpYWxpemluZyB0aGUgcmVzcG9uc2UgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgUXVldWVTZXJpYWxpemVUaW1lTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnF1ZXVlLnNlcmlhbGl6ZV90aW1lX21zJ1xuKTtcblxuLy8gUGF5bG9hZCBjb21wcmVzc2lvbiBhdHRyaWJ1dGVzICh6c3RkIHByZWZlcnJlZCwgZ3ppcCBmYWxsYmFjazsgc3BlY1ZlcnNpb24gPj0gNSlcbi8vXG4vLyBTaXplcyBhcmUgbWVhc3VyZWQgYXQgdGhlIGNvbXByZXNzaW9uIGJvdW5kYXJ5OiBiZWZvcmUgZW5jcnlwdGlvbiBvbiB0aGVcbi8vIHdyaXRlIHBhdGggYW5kIGFmdGVyIGRlY3J5cHRpb24gb24gdGhlIHJlYWQgcGF0aC4gVGhleSB0aGVyZWZvcmUgcmVmbGVjdFxuLy8gY29tcHJlc3Npb24ncyBlZmZlY3QsIG5vdCB0aGUgYXQtcmVzdCBzaXplICh3aGljaCBhbHNvIGluY2x1ZGVzIHRoZVxuLy8gfjI4LWJ5dGUgYGVuY3JgIGVudmVsb3BlIGFuZCwgb24gc29tZSBiYWNrZW5kcywgYmFzZTY0IGV4cGFuc2lvbikuXG5cbi8qKiBXaGV0aGVyIHRoaXMgc2VyaWFsaXplL2Rlc2VyaWFsaXplIHdhcyBhIHdyaXRlIG9yIHJlYWQuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbk9wZXJhdGlvbiA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ3NlcmlhbGl6ZScgfCAnZGVzZXJpYWxpemUnXG4+KCd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLm9wZXJhdGlvbicpO1xuXG4vKiogV2hldGhlciBhIGNvbXByZXNzaW9uIGNvZGVjIHdhcyBhcHBsaWVkICh3cml0ZSkgLyBwcmVzZW50IChyZWFkKS4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uQ29tcHJlc3NlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uY29tcHJlc3NlZCdcbik7XG5cbi8qKiBXaGljaCBjb21wcmVzc2lvbiBjb2RlYyBhcHBsaWVkIC8gd2FzIHByZXNlbnQgKGB6c3RkYCwgYGd6aXBgLCBvciBgbm9uZWApLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Db2RlYyA9IFNlbWFudGljQ29udmVudGlvbjwnenN0ZCcgfCAnZ3ppcCcgfCAnbm9uZSc+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5jb2RlYydcbik7XG5cbi8qKiBMb2dpY2FsICh1bmNvbXByZXNzZWQsIGRldmFsdWUtcHJlZml4ZWQpIHBheWxvYWQgc2l6ZSBpbiBieXRlcy4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uVW5jb21wcmVzc2VkQnl0ZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24udW5jb21wcmVzc2VkX2J5dGVzJ1xuKTtcblxuLyoqIFN0b3JlZCAocG9zdC1jb21wcmVzc2lvbiwgcHJlLWVuY3J5cHRpb24pIHBheWxvYWQgc2l6ZSBpbiBieXRlcy4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uU3RvcmVkQnl0ZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uc3RvcmVkX2J5dGVzJ1xuKTtcblxuLyoqIEZyYWN0aW9uIG9mIGJ5dGVzIHNhdmVkIGJ5IGNvbXByZXNzaW9uICgwLi4xKTsgc2V0IG9ubHkgd2hlbiBjb21wcmVzc2VkLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Db21wcmVzc2lvblJhdGlvID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmNvbXByZXNzaW9uX3JhdGlvJ1xuKTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygd29ya2Zsb3cgKGd1ZXN0KSBjb2RlIGV4ZWN1dGlvbnMgc2VyaWFsaXphdGlvbiBjb3VsZCBub3QgYXZvaWRcbiAqIChnZXR0ZXJzLCBwcm94aWVzLCBjdXN0b20gc2VyaWFsaXplcnMpOyBzZXQgb25seSB3aGVuIG5vbi16ZXJvLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkd1ZXN0Q29kZUV4ZWN1dGlvbnMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uZ3Vlc3RfY29kZV9leGVjdXRpb25zJ1xuKTtcblxuLyoqXG4gKiBEZWR1cGxpY2F0ZWQgYGtpbmQgKGRldGFpbClgIGRlc2NyaXB0aW9ucyBvZiB0aGUgZ3Vlc3QtY29kZSBleGVjdXRpb25zO1xuICogc2V0IG9ubHkgd2hlbiBub24temVyby5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25HdWVzdENvZGVEZXRhaWxzID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZ1tdPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uZ3Vlc3RfY29kZV9kZXRhaWxzJ1xuKTtcblxuLy8gUlBDL1BlZXIgU2VydmljZSBhdHRyaWJ1dGVzIC0gRm9yIHNlcnZpY2UgbWFwcyBhbmQgZGVwZW5kZW5jeSB0cmFja2luZ1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L3JwYy9ycGMtc3BhbnMvXG5cbi8qKiBUaGUgcmVtb3RlIHNlcnZpY2UgbmFtZSBmb3IgRGF0YWRvZyBzZXJ2aWNlIG1hcHMgKERhdGFkb2ctc3BlY2lmaWM6IHBlZXIuc2VydmljZSkgKi9cbmV4cG9ydCBjb25zdCBQZWVyU2VydmljZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdwZWVyLnNlcnZpY2UnKTtcblxuLyoqIFJQQyBzeXN0ZW0gaWRlbnRpZmllciAoc3RhbmRhcmQgT1RFTDogcnBjLnN5c3RlbSkgKi9cbmV4cG9ydCBjb25zdCBScGNTeXN0ZW0gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncnBjLnN5c3RlbScpO1xuXG4vKiogUlBDIHNlcnZpY2UgbmFtZSAoc3RhbmRhcmQgT1RFTDogcnBjLnNlcnZpY2UpICovXG5leHBvcnQgY29uc3QgUnBjU2VydmljZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMuc2VydmljZScpO1xuXG4vKiogUlBDIG1ldGhvZCBuYW1lIChzdGFuZGFyZCBPVEVMOiBycGMubWV0aG9kKSAqL1xuZXhwb3J0IGNvbnN0IFJwY01ldGhvZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMubWV0aG9kJyk7XG5cbi8vIEVycm9yIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIGVycm9yIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvZXhjZXB0aW9ucy9leGNlcHRpb25zLXNwYW5zL1xuXG4vKiogV2hldGhlciB0aGUgZXJyb3IgaXMgcmV0cnlhYmxlICh3b3JrZmxvdy1zcGVjaWZpYykgKi9cbmV4cG9ydCBjb25zdCBFcnJvclJldHJ5YWJsZSA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignZXJyb3IucmV0cnlhYmxlJyk7XG5cbi8qKiBFcnJvciBjYXRlZ29yeSAod29ya2Zsb3ctc3BlY2lmaWM6IGZhdGFsLCByZXRyeWFibGUsIHRyYW5zaWVudCkgKi9cbmV4cG9ydCBjb25zdCBFcnJvckNhdGVnb3J5ID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnZmF0YWwnIHwgJ3JldHJ5YWJsZScgfCAndHJhbnNpZW50J1xuPignZXJyb3IuY2F0ZWdvcnknKTtcbiJdfQ==
@@ -81,6 +81,12 @@ export declare function trace<T>(spanName: string, ...args: [fn: (span?: Span) =
81
81
  * callback. No-op when OpenTelemetry is not available.
82
82
  */
83
83
  export declare function recordElapsedSpan(spanName: string, startEpochMs: number, opts?: SpanOptions): Promise<void>;
84
+ /**
85
+ * Records the same user-code interval as the inner `step.execute` span. The
86
+ * configured OpenTelemetry meter provider attaches resource dimensions such as
87
+ * service.name, so this avoids accepting a caller-controlled service tag.
88
+ */
89
+ export declare function recordStepExecutionDuration(durationMs: number, status: 'ok' | 'error'): Promise<void>;
84
90
  /**
85
91
  * Applies the workflow suspension algebraic effect to an active span.
86
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}