footprintjs 9.47.0 → 9.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +8 -8
  3. package/dist/esm/lib/builder/FlowChartBuilder.js +5 -4
  4. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  5. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -1
  6. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -3
  7. package/dist/esm/lib/engine/types.d.ts +1 -1
  8. package/dist/esm/lib/engine/types.js +1 -1
  9. package/dist/esm/lib/ids/reservedIds.d.ts +34 -0
  10. package/dist/esm/lib/ids/reservedIds.js +45 -0
  11. package/dist/esm/lib/ids/runtimeStageId.d.ts +13 -31
  12. package/dist/esm/lib/ids/runtimeStageId.js +12 -43
  13. package/dist/esm/lib/memory/DiagnosticCollector.d.ts +1 -1
  14. package/dist/esm/lib/memory/DiagnosticCollector.js +1 -1
  15. package/dist/esm/lib/memory/StageContext.d.ts +2 -1
  16. package/dist/esm/lib/memory/StageContext.js +1 -1
  17. package/dist/esm/lib/memory/backtrack.d.ts +3 -2
  18. package/dist/esm/lib/memory/backtrack.js +4 -10
  19. package/dist/esm/lib/memory/frameTypes.d.ts +98 -0
  20. package/dist/esm/lib/memory/frameTypes.js +14 -0
  21. package/dist/esm/lib/memory/index.d.ts +4 -2
  22. package/dist/esm/lib/memory/index.js +1 -2
  23. package/dist/esm/lib/memory/runPolicy.d.ts +2 -1
  24. package/dist/esm/lib/memory/runPolicy.js +1 -1
  25. package/dist/esm/lib/memory/types.d.ts +41 -98
  26. package/dist/esm/lib/memory/types.js +7 -8
  27. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +2 -1
  28. package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
  29. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +2 -1
  30. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  31. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  32. package/dist/esm/lib/runner/getSubtreeSnapshot.js +1 -1
  33. package/dist/esm/lib/slice/keysReadSources.d.ts +3 -3
  34. package/dist/esm/lib/slice/keysReadSources.js +3 -4
  35. package/dist/esm/lib/time-travel/bundles.d.ts +3 -3
  36. package/dist/esm/lib/time-travel/bundles.js +2 -2
  37. package/dist/esm/lib/time-travel/commitStops.d.ts +2 -2
  38. package/dist/esm/lib/time-travel/commitStops.js +1 -1
  39. package/dist/esm/lib/time-travel/tagStops.js +1 -1
  40. package/dist/esm/lib/time-travel/types.d.ts +23 -14
  41. package/dist/esm/lib/time-travel/types.js +9 -9
  42. package/dist/esm/trace.d.ts +5 -4
  43. package/dist/esm/trace.js +4 -4
  44. package/dist/lib/builder/FlowChartBuilder.js +5 -4
  45. package/dist/lib/engine/traversal/FlowchartTraverser.js +6 -5
  46. package/dist/lib/engine/types.js +1 -1
  47. package/dist/lib/ids/reservedIds.js +49 -0
  48. package/dist/lib/ids/runtimeStageId.js +26 -58
  49. package/dist/lib/memory/DiagnosticCollector.js +1 -1
  50. package/dist/lib/memory/StageContext.js +1 -1
  51. package/dist/lib/memory/backtrack.js +4 -10
  52. package/dist/lib/memory/frameTypes.js +15 -0
  53. package/dist/lib/memory/index.js +2 -5
  54. package/dist/lib/memory/runPolicy.js +1 -1
  55. package/dist/lib/memory/types.js +6 -11
  56. package/dist/lib/runner/ExecutionRuntime.js +1 -1
  57. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  58. package/dist/lib/runner/getSubtreeSnapshot.js +1 -1
  59. package/dist/lib/slice/keysReadSources.js +3 -4
  60. package/dist/lib/time-travel/bundles.js +2 -2
  61. package/dist/lib/time-travel/commitStops.js +1 -1
  62. package/dist/lib/time-travel/tagStops.js +1 -1
  63. package/dist/lib/time-travel/types.js +9 -9
  64. package/dist/trace.js +32 -32
  65. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  66. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -1
  67. package/dist/types/lib/engine/types.d.ts +1 -1
  68. package/dist/types/lib/ids/reservedIds.d.ts +34 -0
  69. package/dist/types/lib/ids/runtimeStageId.d.ts +13 -31
  70. package/dist/types/lib/memory/DiagnosticCollector.d.ts +1 -1
  71. package/dist/types/lib/memory/StageContext.d.ts +2 -1
  72. package/dist/types/lib/memory/backtrack.d.ts +3 -2
  73. package/dist/types/lib/memory/frameTypes.d.ts +98 -0
  74. package/dist/types/lib/memory/index.d.ts +4 -2
  75. package/dist/types/lib/memory/runPolicy.d.ts +2 -1
  76. package/dist/types/lib/memory/types.d.ts +41 -98
  77. package/dist/types/lib/runner/ExecutionRuntime.d.ts +2 -1
  78. package/dist/types/lib/runner/FlowChartExecutor.d.ts +2 -1
  79. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  80. package/dist/types/lib/slice/keysReadSources.d.ts +3 -3
  81. package/dist/types/lib/time-travel/bundles.d.ts +3 -3
  82. package/dist/types/lib/time-travel/commitStops.d.ts +2 -2
  83. package/dist/types/lib/time-travel/types.d.ts +23 -14
  84. package/dist/types/trace.d.ts +5 -4
  85. package/package.json +1 -1
@@ -5,9 +5,9 @@
5
5
  * Every handler receives HandlerDeps (the DI bag) instead of importing the traverser.
6
6
  */
7
7
  import type { LogAddress } from '../memory/eventPosition.js';
8
+ import type { FlowControlType, FlowMessage } from '../memory/frameTypes.js';
8
9
  import type { SharedMemory } from '../memory/SharedMemory.js';
9
10
  import type { StageContext } from '../memory/StageContext.js';
10
- import type { FlowControlType, FlowMessage } from '../memory/types.js';
11
11
  import type { ScopeProtectionMode } from '../scope/protection/types.js';
12
12
  import type { StageNode } from './graph/StageNode.js';
13
13
  import type { QueuedPause, ResumeEntry } from './handlers/ResumeEntry.js';
@@ -27,4 +27,4 @@ export var ArrayMergeMode;
27
27
  /** Overwrite parent array with subflow output. Use for Dynamic loops. */
28
28
  ArrayMergeMode["Replace"] = "replace";
29
29
  })(ArrayMergeMode || (ArrayMergeMode = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWdCSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWU5RSxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVLRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgUXVldWVkUGF1c2UsIFJlc3VtZUVudHJ5IH0gZnJvbSAnLi9oYW5kbGVycy9SZXN1bWVFbnRyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLy8gUmUtZXhwb3J0IFN0YWdlTm9kZSB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLy8gUmUtZXhwb3J0IHBhdXNlIHR5cGVzIGZyb20gcGF1c2UvIGxpYnJhcnlcbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyLCBQYXVzZVJlc3VsdCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcbmV4cG9ydCB7IGlzUGF1c2VSZXN1bHQsIGlzUGF1c2VTaWduYWwsIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvZ2dlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBNaW5pbWFsIGxvZ2dpbmcgY29udHJhY3QuIE1pcnJvcnMgQ29uc29sZSBBUEkgc3Vic2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgaW5mbyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBsb2cobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG4vKiogRGVmYXVsdCBjb25zb2xlLWJhc2VkIGxvZ2dlci4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0tIHRyaXZpYWwgY29uc29sZSBkZWxlZ2F0aW9uICovXG5leHBvcnQgY29uc3QgZGVmYXVsdExvZ2dlcjogSUxvZ2dlciA9IHtcbiAgaW5mbzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmluZm8obWVzc2FnZSwgLi4uYXJncyksXG4gIGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZGVidWc6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZXJyb3I6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5hcmdzKSxcbiAgd2FybjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSwgLi4uYXJncyksXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgdG9rZW5zIGR1cmluZyBzdHJlYW1pbmcuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICogLSBUT3V0OiByZXR1cm4gdHlwZSBwcm9kdWNlZCBieSB0aGUgc3RhZ2VcbiAqIC0gVFNjb3BlOiB0aGUgc2NvcGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgc3RhZ2VcbiAqIC0gT3B0aW9uYWwgM3JkIHBhcmFtZXRlciBgc3RyZWFtQ2FsbGJhY2tgIGluamVjdGVkIGZvciBzdHJlYW1pbmcgc3RhZ2VzLlxuICovXG5leHBvcnQgdHlwZSBTdGFnZUZ1bmN0aW9uPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4gIHN0cmVhbUNhbGxiYWNrPzogU3RyZWFtQ2FsbGJhY2ssXG4pID0+IFByb21pc2U8VE91dCB8IHZvaWQ+IHwgVE91dCB8IHZvaWQ7XG5cbi8qKlxuICogU3RhZ2UgZnVuY3Rpb24gZm9yIHBhdXNhYmxlIHN0YWdlcyDigJQgcmV0dXJuIHZhbHVlIGlzIHRoZSBwYXVzZSBkYXRhIChhbnkgdHlwZSkuXG4gKiBSZXR1cm4gbm9uLXZvaWQgdG8gcGF1c2UsIHJldHVybiB2b2lkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICovXG5leHBvcnQgdHlwZSBQYXVzYWJsZVN0YWdlRnVuY3Rpb248VFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd247XG5cbi8qKiBGYWN0b3J5IHRoYXQgY3JlYXRlcyBhIHNjb3BlIGluc3RhbmNlIGZvciBlYWNoIHN0YWdlLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVGYWN0b3J5PFRTY29wZSA9IGFueT4gPSAoXG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd24sXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudixcbikgPT4gVFNjb3BlO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbWluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGFyYWxsZWwtZm9yLWVhY2ggKGR5bmFtaWMgZmFuLW91dClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEEgYnVpbHQgY2hhcnQsIGFzIGBhZGRQYXJhbGxlbEZvckVhY2hgJ3MgYGJyYW5jaGAgZmFjdG9yeSByZXR1cm5zIGl0LlxuICpcbiAqIFN0cnVjdHVyYWxseSB0aGUgc3Vic2V0IG9mIGBGbG93Q2hhcnRgIHRoZSBlbmdpbmUgbmVlZHMgdG8gbW91bnQgYSBicmFuY2gg4oCUXG4gKiBkZWNsYXJlZCBoZXJlIHJhdGhlciB0aGFuIGltcG9ydGVkIHNvIGBlbmdpbmUvYCBrZWVwcyBpdHMgb25lLXdheSBkZXBlbmRlbmN5XG4gKiBvbiBgYnVpbGRlci9gLiBBbnkgYGZsb3dDaGFydCguLi4pLmJ1aWxkKClgIHJlc3VsdCBzYXRpc2ZpZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmNoQ2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgZmFuLW91dCBjb25maWcg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0XG4gKiBydW50aW1lIGZyb20gdGhlIHBheWxvYWQuIERlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQgKEQyKS5cbiAqXG4gKiBFYWNoIGJyYW5jaCBydW5zIGFzIGEgZ2VuZXJhdGVkIFNVQkZMT1cgKGlzb2xhdGVkIHJ1bnRpbWUsIG93biBjb21taXQgbG9nLFxuICogYWRkcmVzc2FibGUgYXQgYDxzdGFnZUlkPn48aW5kZXg+YCBpbiBldmVyeSB0cmFjZSBxdWVyeSksIHdoaWNoIGlzIHdoYXRcbiAqIG1ha2VzIGJyYW5jaGVzIHVuYWJsZSB0byBjb3JydXB0IGVhY2ggb3RoZXIncyBpbi1mbGlnaHQgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYWxsZWxGb3JFYWNoQ29uZmlnPFRJdGVtID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIFBpY2tzIHRoZSBpdGVtcyB0byBmYW4gb3V0IG92ZXIsIGZyb20gdGhlIGxpdmUgc2NvcGUuIFJlYWRzIGhlcmUgYXJlXG4gICAqIHRyYWNrZWQgbGlrZSBhbnkgb3RoZXIgc3RhZ2UgcmVhZCwgc28gdGhlIGZhbi1vdXQncyBvd24gaW5wdXRzIHNob3cgdXAgaW5cbiAgICogdGhlIHRyYWNlIGFuZCBpbiBhIGJhY2t3YXJkIHNsaWNlLlxuICAgKi9cbiAgaXRlbXM6IChzY29wZTogVFNjb3BlKSA9PiByZWFkb25seSBUSXRlbVtdO1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBjaGFydCBmb3IgT05FIGl0ZW0uIENhbGxlZCBvbmNlIHBlciBleGVjdXRlZCBicmFuY2gsIHdpdGggdGhlXG4gICAqIGl0ZW0gYW5kIGl0cyBpbmRleCDigJQgY2xvc2Ugb3ZlciB0aGVtLCBvciByZWFkIHRoZSBgaXRlbWAgLyBgaW5kZXhgIHZhbHVlc1xuICAgKiBzZWVkZWQgaW50byB0aGUgYnJhbmNoJ3Mgb3duIHNjb3BlLlxuICAgKi9cbiAgYnJhbmNoOiAoaXRlbTogVEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IEJyYW5jaENoYXJ0O1xuICAvKipcbiAgICogSGFyZCBjZWlsaW5nIG9uIGJyYW5jaGVzIHBlciBleGVjdXRpb24uIFJFUVVJUkVEOiBhbiB1bmJvdW5kZWQgZmFuLW91dFxuICAgKiBkcml2ZW4gYnkgbW9kZWwgb3V0cHV0IGlzIGEgcmVzb3VyY2UgYXR0YWNrLCBzbyB0aGVyZSBpcyBubyBkZWZhdWx0IHRvXG4gICAqIGZvcmdldC4gRXh0cmEgaXRlbXMgZG8gbm90IHJ1biDigJQgdGhlIHRydW5jYXRpb24gaXMgcmVjb3JkZWQsIG5ldmVyIHNpbGVudC5cbiAgICovXG4gIG1heEJyYW5jaGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTdGF0ZSBrZXkgdGhlIG9yZGVyZWQgcmVzdWx0cyBhcnJheSBpcyB3cml0dGVuIHRvIG9uIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAqIFJFUVVJUkVEIOKAlCBhIGtleSBkZXJpdmVkIGZyb20gdGhlIHN0YWdlIGlkIGNvdWxkIHNpbGVudGx5IG92ZXJ3cml0ZSBzdGF0ZVxuICAgKiB0aGUgY2hhcnQgYWxyZWFkeSBvd25zLlxuICAgKi9cbiAgaW50bzogc3RyaW5nO1xuICAvKipcbiAgICogRmFuLW91dCBlcnJvciBwb2xpY3kg4oCUIHRoZSBTQU1FIHBvbGljeSB0aGUgZXhpc3RpbmcgcGFyYWxsZWwgZmFuLW91dCB1c2VzLlxuICAgKiBgdHJ1ZWAgPSBgUHJvbWlzZS5hbGxgICh0aGUgZmlyc3QgZmFpbGluZyBicmFuY2ggcmVqZWN0cyB0aGUgc3RhZ2UpO1xuICAgKiBvbWl0dGVkL2ZhbHNlID0gYmVzdC1lZmZvcnQgYFByb21pc2UuYWxsU2V0dGxlZGAgKGV2ZXJ5IGJyYW5jaCBydW5zOyBhXG4gICAqIGZhaWxlZCBicmFuY2gncyBzbG90IGluIHRoZSByZXN1bHRzIGFycmF5IGlzIGB1bmRlZmluZWRgKS5cbiAgICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXRyeSAocGVyLXN0YWdlIGRlY2xhcmF0aXZlIHBvbGljeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIERlY2xhcmF0aXZlIHBlci1zdGFnZSByZXRyeSBwb2xpY3kuXG4gKlxuICogV0hZIHRoaXMgZXhpc3RzOiBhIHJldHJ5IGhhbmQtcm9sbGVkIGluc2lkZSBhIHN0YWdlIGZ1bmN0aW9uIGlzIGludmlzaWJsZSB0b1xuICogdGhlIHRyYWNlLiBUaGUgc3RhZ2Ugc2hvd3Mgb25lIGV4ZWN1dGlvbiwgdGhlIGNvbW1pdCBsb2cgc2hvd3Mgb25lIGJ1bmRsZSxcbiAqIGFuZCB0aGUgdHdvIGZhaWxlZCBjYWxscyB0aGF0IHByZWNlZGVkIHRoZSBzdWNjZXNzZnVsIG9uZSBsZWZ0IG5vIG1hcmtcbiAqIGFueXdoZXJlIOKAlCBhbiB1bmV4cGxhaW5lZCBiZWhhdmlvdXIgaW4gYSBsaWJyYXJ5IHdob3NlIHdob2xlIHRoZXNpcyBpcyB0aGF0XG4gKiBub3RoaW5nIGludmlzaWJsZSBoYXBwZW5zLiBEZWNsYXJlZCBoZXJlIGluc3RlYWQsIGV2ZXJ5IGF0dGVtcHQgaXMgcGFydCBvZlxuICogdGhlIHJlY29yZDogZWFjaCBmYWlsZWQgYXR0ZW1wdCBmaXJlcyBgRmxvd1JlY29yZGVyLm9uU3RhZ2VSZXRyeWAgd2l0aCB0aGVcbiAqIGF0dGVtcHQgbnVtYmVyLCB0aGUgd2FpdCwgYW5kIHRoZSBzdHJ1Y3R1cmVkIGVycm9yLlxuICpcbiAqIEEgUE9MSUNZLCBub3QgYSBzdGFnZSBraW5kIOKAlCBgcmV0cnlgIHNpdHMgb24gYSBub3JtYWwgc3RhZ2UgdGhlIHdheVxuICogYGlzUGF1c2FibGVgIC8gYGlzU3RyZWFtaW5nYCBkby4gVGhlIHNlcmlhbGl6ZWQgbm9kZSBgdHlwZWAgaXMgdW5jaGFuZ2VkIGFuZFxuICogZXZlcnkgZXhpc3RpbmcgY29uc3VtZXIga2VlcHMgcmVuZGVyaW5nIHRoZSBzdGFnZSBleGFjdGx5IGFzIGJlZm9yZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGZsb3dDaGFydDxTdGF0ZT4oJ0ZldGNoIHVzZXInLCBmZXRjaEZuLCAnZmV0Y2gtdXNlcicpXG4gKiAgIC5yZXRyeSh7IGF0dGVtcHRzOiAzLCBiYWNrb2ZmTXM6IChuKSA9PiAxMDAgKiAyICoqIChuIC0gMSkgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5UG9saWN5IHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IHRpbWVzIHRoZSBzdGFnZSBmdW5jdGlvbiBtYXkgcnVuIGluIHRvdGFsLCBJTkNMVURJTkcgdGhlIGZpcnN0XG4gICAqIHJ1bi4gTXVzdCBiZSBhbiBpbnRlZ2VyID49IDE7IGAxYCBtZWFucyBcIm5vIHJldHJ5XCIgKGEgZGVjbGFyZWQgbm8tb3AsXG4gICAqIGFjY2VwdGVkIHNvIGEgcG9saWN5IGNhbiBiZSBzd2l0Y2hlZCBvZmYgd2l0aG91dCBkZWxldGluZyBpdCkuXG4gICAqL1xuICBhdHRlbXB0czogbnVtYmVyO1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgdGhlIE5FWFQgYXR0ZW1wdC4gRWl0aGVyIGEgZml4ZWQgbnVtYmVyIG9mXG4gICAqIG1pbGxpc2Vjb25kcywgb3IgYSBmdW5jdGlvbiBvZiB0aGUgYXR0ZW1wdCB0aGF0IGp1c3QgRkFJTEVEICgxLWJhc2VkKVxuICAgKiByZXR1cm5pbmcgbWlsbGlzZWNvbmRzIOKAlCBgKG4pID0+IDEwMCAqIDIgKiogKG4gLSAxKWAgaXMgZXhwb25lbnRpYWxcbiAgICogYmFja29mZi4gT21pdHRlZCAob3IgYSBub24tZmluaXRlIC8gbmVnYXRpdmUgcmVzdWx0KSBtZWFucyBubyB3YWl0LlxuICAgKlxuICAgKiBUaGUgd2FpdCBpcyBhIHBsYWluIGF3YWl0ZWQgdGltZXIgdGhhdCBpcyBDQU5DRUxMRUQgYnkgdGhlIHJ1bidzXG4gICAqIGBBYm9ydFNpZ25hbGAuIEl0IGlzIG5vdCBhIHBhdXNlOiBhIGNoYXJ0IGNhbm5vdCBiZSBjaGVja3BvaW50ZWQgaW4gdGhlXG4gICAqIG1pZGRsZSBvZiBhIGJhY2tvZmYuXG4gICAqL1xuICBiYWNrb2ZmTXM/OiBudW1iZXIgfCAoKGF0dGVtcHQ6IG51bWJlcikgPT4gbnVtYmVyKTtcbiAgLyoqXG4gICAqIElzIFRISVMgZXJyb3Igd29ydGggYW5vdGhlciBhdHRlbXB0PyBEZWZhdWx0cyB0byByZXRyeWluZyBldmVyeSBlcnJvci5cbiAgICogUmV0dXJuaW5nIGBmYWxzZWAgZW5kcyB0aGUgc3RhZ2UgaW1tZWRpYXRlbHkgb24gdGhlIG5vcm1hbCBlcnJvciBwYXRoIOKAlFxuICAgKiBleGFjdGx5IGFzIGlmIG5vIHBvbGljeSBoYWQgYmVlbiBkZWNsYXJlZCwgYW5kIHdpdGggbm8gcmV0cnkgZXZlbnQgKHRoZVxuICAgKiBwb2xpY3kgY2hvc2Ugbm90IHRvIGFjdDsgdGhlcmUgaXMgbm90aGluZyB0byByZXBvcnQgdGhhdCB0aGUgZXJyb3IgZXZlbnRcbiAgICogZG9lcyBub3QgYWxyZWFkeSBzYXkpLlxuICAgKlxuICAgKiBBIHRocm93IGZyb20gdGhpcyBwcmVkaWNhdGUgaXMgdHJlYXRlZCBhcyBgZmFsc2VgIOKAlCBhIGJyb2tlbiBwcmVkaWNhdGVcbiAgICogbXVzdCBub3QgdHVybiBhIGZhaWxpbmcgc3RhZ2UgaW50byBhbiBpbmZpbml0ZSByZXRyeSBsb29wLlxuICAgKi9cbiAgcmV0cnlPbj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gKi9cbmV4cG9ydCBlbnVtIEFycmF5TWVyZ2VNb2RlIHtcbiAgLyoqIEFwcGVuZCBzdWJmbG93IG91dHB1dCB0byBleGlzdGluZyBwYXJlbnQgYXJyYXk6IFsuLi5leGlzdGluZywgLi4udmFsdWVdLiBEZWZhdWx0LiAqL1xuICBDb25jYXQgPSAnY29uY2F0JyxcbiAgLyoqIE92ZXJ3cml0ZSBwYXJlbnQgYXJyYXkgd2l0aCBzdWJmbG93IG91dHB1dC4gVXNlIGZvciBEeW5hbWljIGxvb3BzLiAqL1xuICBSZXBsYWNlID0gJ3JlcGxhY2UnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlID0gYW55LCBUU3ViZmxvd0lucHV0ID0gYW55LCBUU3ViZmxvd091dHB1dCA9IGFueT4ge1xuICBpbnB1dE1hcHBlcj86IChwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBUU3ViZmxvd0lucHV0O1xuICAvKipcbiAgICogTWFwcyBzdWJmbG93IG91dHB1dCBiYWNrIGludG8gcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiAqKkFycmF5IG1lcmdlIGJlaGF2aW9yKiogaXMgY29udHJvbGxlZCBieSBgYXJyYXlNZXJnZWA6XG4gICAqIC0gYCdjb25jYXQnYCAoZGVmYXVsdCk6IGBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXWAg4oCUIHJldHVybiBvbmx5ICoqZGVsdGEqKiBpdGVtc1xuICAgKiAtIGAncmVwbGFjZSdgOiBvdmVyd3JpdGVzIHRoZSBwYXJlbnQgdmFsdWUg4oCUIHJldHVybiB0aGUgZnVsbCBhcnJheVxuICAgKlxuICAgKiBTY2FsYXIgdmFsdWVzIGFyZSBhbHdheXMgcmVwbGFjZWQgcmVnYXJkbGVzcyBvZiBgYXJyYXlNZXJnZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRGVsdGEgbW9kZSAoZGVmYXVsdCkg4oCUIHJldHVybiBvbmx5IG5ldyBpdGVtcywgY29uY2F0IGFwcGVuZHNcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IG1lc3NhZ2VzOiBzZi5uZXdNZXNzYWdlcyB9KVxuICAgKlxuICAgKiAvLyBSZXBsYWNlIG1vZGUg4oCUIHJldHVybiBmdWxsIGFycmF5LCBwYXJlbnQgdmFsdWUgaXMgb3ZlcndyaXR0ZW5cbiAgICogLy8gVXNlZnVsIGluIER5bmFtaWMgbG9vcHMgd2hlcmUgdGhlIHN1YmZsb3cgcmVjb21wdXRlcyB0aGUgZnVsbCB2YWx1ZSBlYWNoIGl0ZXJhdGlvblxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgdG9vbERlc2NyaXB0aW9uczogc2YudG9vbERlc2NyaXB0aW9ucyB9KSxcbiAgICogYXJyYXlNZXJnZTogQXJyYXlNZXJnZU1vZGUuUmVwbGFjZSxcbiAgICpcbiAgICogLy8gU2NhbGFycyBhcmUgZmluZSBpbiBib3RoIG1vZGVzIOKAlCBhbHdheXMgcmVwbGFjZWRcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHN0YXR1czogc2YucmVzdWx0LCBjb3VudDogc2YudG90YWwgfSlcbiAgICogYGBgXG4gICAqL1xuICBvdXRwdXRNYXBwZXI/OiAoc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICAgKiBBcHBsaWVzIG9ubHkgdG8gdG9wLWxldmVsIGFycmF5IGtleXMuIE5lc3RlZCBhcnJheXMgaW5zaWRlIG9iamVjdHNcbiAgICogYWx3YXlzIHVzZSBhcHBlbmQgKGFwcGVuZFRvQXJyYXkpIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcnJheU1lcmdlTW9kZS5Db25jYXRcbiAgICovXG4gIGFycmF5TWVyZ2U/OiBBcnJheU1lcmdlTW9kZTtcblxuICAvKipcbiAgICogU1RSVUNUVVJFLU9OTFk6IHRoZSBkb3duc3RyZWFtIHN0YWdlIGlkIHRoaXMgYnJhbmNoJ3MgY29udmVyZ2VuY2UgZWRnZVxuICAgKiBwb2ludHMgdG8sIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgXCJjb252ZXJnZSBhdCB0aGUgbmV4dCBsaW5lYXIgc3RhZ2UuXCJcbiAgICpcbiAgICogV2hlbiBhIGZvcmsvc2VsZWN0b3IvZGVjaWRlciBicmFuY2ggY2FycmllcyBgY29udmVyZ2VBdGAsIGl0cyB2aXN1YWxpemVkXG4gICAqIGBuZXh0YCBlZGdlIGlzIGZpcmVkIHRvIHRoZSBuYW1lZCBzdGFnZSBpbnN0ZWFkIG9mIHRvIHRoZSBzaGFyZWRcbiAgICogY29udmVyZ2VuY2Ugbm9kZSBpdHMgc2libGluZ3MgdXNlLiBUaGlzIGV4cHJlc3NlcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlXG4gICAqIOKAlCBlLmcuIGEgYHRvb2xzYCBzbG90IHRoYXQgYnlwYXNzZXMgdGhlIGBtZXNzYWdlQVBJYCBhc3NlbWJseSBub2RlIGFuZFxuICAgKiBwYWlycyB3aXRoIGl0cyBvdXRwdXQgYXQgYGNhbGwtbGxtYCAoc28gYGNhbGwtbGxtYCByZWFkcyBhcyBhIDItcGFyZW50XG4gICAqIG1lcmdlKSwgZmFpdGhmdWwgdG8gdGhlIEFudGhyb3BpYyB3aXJlIHByb3RvY29sIChzeXN0ZW0rbWVzc2FnZXMgPSB0aGVcbiAgICogbWVzc2FnZSBwYXlsb2FkOyB0b29scyA9IGEgc2VwYXJhdGUgdG9wLWxldmVsIGZpZWxkKS5cbiAgICpcbiAgICogKipUaGlzIGFmZmVjdHMgdGhlIFNUUlVDVFVSRS90b3BvbG9neSBncmFwaCBvbmx5Kiog4oCUIHRoZSBydW50aW1lIGlzXG4gICAqIHVuY2hhbmdlZCAodGhlIGJyYW5jaCdzIG91dHB1dHMgcmlkZSBzaGFyZWQgc2NvcGU7IHRoZSBuYW1lZCB0YXJnZXQgcmVhZHNcbiAgICogdGhlbSB3aGVuIGl0IHJ1bnMpLiBJdCBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBqb2luIGJhcnJpZXIuIFRoZSB0YXJnZXQgaXMgYVxuICAgKiBGT1JXQVJEIHN0YWdlIChhZGRlZCBsYXRlciBpbiB0aGUgY2hhaW4pLCBzbyBpdCBpcyBub3QgdmFsaWRhdGVkIGF0XG4gICAqIGJyYW5jaC1kZWNsYXJhdGlvbiB0aW1lLlxuICAgKi9cbiAgY29udmVyZ2VBdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGFuIGlubmVyIGBzY29wZS4kYnJlYWsocmVhc29uKWAgY2FsbCBpbnNpZGUgdGhpcyBzdWJmbG93XG4gICAqIHByb3BhZ2F0ZXMgdXAgdG8gdGhlIHBhcmVudCDigJQgaS5lLiwgdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgIGlzIHNldFxuICAgKiBhZnRlciB0aGUgc3ViZmxvdyBleGl0cywgdGVybWluYXRpbmcgdGhlIHBhcmVudCdzIG91dGVyIGxvb3AgdG9vLlxuICAgKlxuICAgKiAqKkRlZmF1bHQ6IGBmYWxzZWAqKiAoY3VycmVudCBiZWhhdmlvdXIg4oCUIGlubmVyIGJyZWFrIHN0b3BzIG9ubHkgdGhlXG4gICAqIHN1YmZsb3c7IHBhcmVudCBjb250aW51ZXMpLlxuICAgKlxuICAgKiAjIyBXaGVuIHRvIHVzZVxuICAgKlxuICAgKiBTZXQgYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBvbiBzdWJmbG93IG1vdW50cyB0aGF0IHJlcHJlc2VudFxuICAgKiAqKnRlcm1pbmFsKiogYnJhbmNoZXMg4oCUIFwiaWYgdGhpcyBzdWJmbG93IGZpcmVzLCB0aGUgb3V0ZXIgbG9vcCBpc1xuICAgKiBkb25lXCIuIEV4YW1wbGVzOlxuICAgKlxuICAgKiAtIEEgaHVtYW4tcmV2aWV3IHJ1bm5lciB0aGF0IHRha2VzIG92ZXIgZnJvbSBhbiBhZ2VudCdzIHRvb2wtY2FsbGluZ1xuICAgKiAgIGxvb3AgYW5kIHByb2R1Y2VzIHRoZSBmaW5hbCByZXNwb25zZS5cbiAgICogLSBBIHNhZmV0eS1nYXRlIHN1YmZsb3cgdGhhdCBoYWx0cyB0aGUgb3V0ZXIgd29ya2Zsb3cgd2hlbiBhIHBvbGljeVxuICAgKiAgIHZpb2xhdGlvbiBpcyBkZXRlY3RlZC5cbiAgICogLSBBbiBlcnJvci1yZWNvdmVyeSBzdWJmbG93IHRoYXQgcmVzdG9yZXMgc3RhdGUgYW5kIHRoZW4gdGVybWluYXRlcy5cbiAgICpcbiAgICogIyMgU2VtYW50aWNzXG4gICAqXG4gICAqIDEuIEluc2lkZSB0aGUgc3ViZmxvdywgYSBzdGFnZSBjYWxscyBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLlxuICAgKiAyLiBUaGUgc3ViZmxvdydzIG93biBleGVjdXRpb24gc3RvcHMgKG5vcm1hbCBgJGJyZWFrYCBiZWhhdmlvdXIpLlxuICAgKiAzLiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnNwZWN0cyB0aGUgc3ViZmxvdydzIGV4aXQgc3RhdGUuIElmXG4gICAqICAgIGBwcm9wYWdhdGVCcmVhayA9PT0gdHJ1ZWAgQU5EIHRoZSBpbm5lciBicmVhayBmaXJlZCwgaXQgZm9yd2FyZHNcbiAgICogICAgdGhlIGJyZWFrIChhbmQgaXRzIHJlYXNvbikgdG8gdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgLlxuICAgKiA0LiBUaGUgcGFyZW50IHRyYXZlcnNlciBzZWVzIGBzaG91bGRCcmVha2Agb24gaXRzIG5leHQgc3RlcCBhbmQgZXhpdHMuXG4gICAqIDUuIEEgYEZsb3dSZWNvcmRlci5vbkJyZWFrYCBldmVudCBmaXJlcyBhdCB0aGUgcGFyZW50LW1vdW50IGxldmVsIHdpdGhcbiAgICogICAgYHByb3BhZ2F0ZWRGcm9tU3ViZmxvd2AgPSB0aGUgc3ViZmxvdydzIGlkIGFuZCB0aGUgaW5uZXIgcmVhc29uLlxuICAgKlxuICAgKiAjIyBQYXJhbGxlbC9mYW4tb3V0XG4gICAqXG4gICAqIEZvbGxvd3MgdGhlIGV4aXN0aW5nIGxpYnJhcnkgcnVsZSBpbiBgQ2hpbGRyZW5FeGVjdXRvcmA6IHRoZSBwYXJlbnRcbiAgICogYnJlYWtzIG9ubHkgd2hlbiAqKmV2ZXJ5KiogY2hpbGQgb2YgYSBmb3JrIGJyb2tlLiBBIHNpbmdsZVxuICAgKiBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIHN1YmZsb3cgY29udHJpYnV0aW5nIGl0cyBicmVhayB0byB0aGUgY291bnRcbiAgICogZG9lcyBub3Qgb24gaXRzIG93biB0ZXJtaW5hdGUgdGhlIHBhcmVudCBmYW4tb3V0LlxuICAgKlxuICAgKiAjIyBvdXRwdXRNYXBwZXIgc3RpbGwgcnVuc1xuICAgKlxuICAgKiBUaGUgc3ViZmxvdydzIGBvdXRwdXRNYXBwZXJgIChpZiBzdXBwbGllZCkgQUxXQVlTIHJ1bnMgYmVmb3JlIHRoZVxuICAgKiBicmVhayBwcm9wYWdhdGVzLCBzbyB0aGUgc3ViZmxvdydzIHBhcnRpYWwgc3RhdGUgaXMgc3RpbGwgd3JpdHRlbiB0b1xuICAgKiB0aGUgcGFyZW50IHNjb3BlLiBUaGlzIGlzIGludGVudGlvbmFsIOKAlCB0aGUgdHlwaWNhbCB1c2UgY2FzZSBpcyBhblxuICAgKiBcImVzY2FsYXRpb25cIiBzdWJmbG93IHdob3NlIG91dHB1dCBJUyB0aGUgZmluYWwgYW5zd2VyIHRoYXQgbmVlZHMgdG9cbiAgICogbGFuZCBpbiB0aGUgcGFyZW50IHNjb3BlIGJlZm9yZSB0aGUgb3V0ZXIgbG9vcCB0ZXJtaW5hdGVzLiBJZiB5b3VcbiAgICogd2FudCB0byBzdXBwcmVzcyBvdXRwdXQgbWFwcGluZyBvbiBicmVhaywgY2hlY2sgdGhlIGJyZWFrIHN0YXRlXG4gICAqIGluc2lkZSB5b3VyIGBvdXRwdXRNYXBwZXJgIGFuZCByZXR1cm4gYHt9YCBlYXJseS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByb3BhZ2F0ZUJyZWFrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4xKSBmb3IgdGhlIE1PVU5UIGl0c2VsZiDigJQgdGhlIE5BTUVTIHRoZSBhdXRob3IgcHV0c1xuICAgKiBvbiB0aGlzIG1vdW50IGF0IGJ1aWxkIHRpbWUsIGxhbmRlZCBieSB0aGUgc2FtZSBgYXBwbHlUYWdzYCBldmVyeSBvdGhlclxuICAgKiBgb3B0aW9ucy50YWdzYCBzaXRlIHVzZXMsIHdpdGggdGhlIHNhbWUgcmVmdXNhbHMgKGVtcHR5LCBub24tc3RyaW5nLCB0aGVcbiAgICogcmVzZXJ2ZWQgYH5gIG1hcmtlciwgYSBkdXBsaWNhdGUsIGEgc2Vjb25kIGRlY2xhcmF0aW9uKS5cbiAgICpcbiAgICogQSBtb3VudCBpcyBhIHN0YWdlIHRoYXQgY29tbWl0czogaXRzIGZpcnN0IGJ1bmRsZSBpbiB0aGUgUEFSRU5UIGxvZyBpcyBhXG4gICAqIHN0b3AgaW4gYGNvbW1pdFN0b3BzYCwgc28gYHRhZ1N0b3BzYCBrZWVwcyBpdCBsaWtlIGFueSB0YWdnZWQgc3RhZ2UgYW5kXG4gICAqIGNhcnJpZXMgdGhlc2UgbmFtZXMgYXMgYFN0b3AubWV0YWAuIFN0YW1wZWQgb24gdGhhdCBmaXJzdCBidW5kbGUgb25seVxuICAgKiAodGhlIG1vdW50J3MgZXhpdCBidW5kbGUgY2FycmllcyBub25lIOKAlCB0aGUgb25jZS1wZXItZXhlY3V0aW9uIGxhdykuXG4gICAqIFRoZSBzdWJmbG93J3MgT1dOIGxvZyBpcyB1bnRvdWNoZWQ6IGl0cyBpbm5lciBzdGFnZXMgZGVjbGFyZSB0aGVpciBvd25cbiAgICogdGFncywgYW5kIGBkcmlsbChtb3VudClgIHJlYWRzIHRob3NlIG9mZiB0aGUgaW5uZXIgbG9nLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBPTkxZIHRhZyBzaXRlIGZvciBhIGZvcmstY2hpbGQgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgKSBvclxuICAgKiBhIGJyYW5jaCBtb3VudCAoYGFkZFN1YkZsb3dDaGFydEJyYW5jaGApIOKAlCBhZnRlciB0aG9zZSB0aGUgY3Vyc29yIHN0aWxsXG4gICAqIHBvaW50cyBhdCB0aGUgcGFyZW50LCBzbyBgLnRhZygpYCByZWZ1c2VzIHJhdGhlciB0aGFuIG1pcy1hdHRyaWJ1dGUuIEFcbiAgICogbGluZWFyIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0TmV4dGApIG1vdmVzIHRoZSBjdXJzb3IsIHNvIGAudGFnKClgIHdvcmtzXG4gICAqIHRoZXJlIHRvbzsgZGVjbGFyZSBpbiBvbmUgcGxhY2UsIG5vdCBib3RoLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC5hZGRTZWxlY3RvckZ1bmN0aW9uKCdTbG90cycsIHBpY2tTbG90cywgJ3Nsb3RzJylcbiAgICogICAuYWRkU3ViRmxvd0NoYXJ0QnJhbmNoKCdtZW1vcnknLCBtZW1vcnlDaGFydCwgJ01lbW9yeScsIHsgdGFnczogWydzbG90Om1lbW9yeSddIH0pXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgndG9vbHMnLCB0b29sc0NoYXJ0LCAnVG9vbHMnLCB7IHRhZ3M6IFsnc2xvdDp0b29scyddIH0pXG4gICAqIC5lbmQoKVxuICAgKiBgYGBcbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVzdWx0IHtcbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHN1YmZsb3cncyBmaW5hbCBzdGF0ZS4gVGhlIHRyYXZlcnNlcidzIHJlY29yZCBob2xkcyB0aGUgTElWRSBoZWFwXG4gICAgICog4oCUIHdoYXQgYSBwbGFpbiBgZ2V0U25hcHNob3QoKWAgYW5kIHRoZSBjaGVja3BvaW50IHNlZS4gVW5kZXJcbiAgICAgKiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIHRoZSBleGVjdXRvciBzZXJ2ZXMgdGhlIHN1YmZsb3cncyBvd25cbiAgICAgKiByZWRhY3RlZCBtaXJyb3IgaGVyZSBpbnN0ZWFkICg5LjIwLjA7IGBoYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0c2ApLFxuICAgICAqIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBgc3RhdGVBdGAgZm9sZHMgYGhpc3RvcnlgIHRvLlxuICAgICAqL1xuICAgIGdsb2JhbENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YWdlQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGhpc3Rvcnk6IHVua25vd25bXTtcbiAgICAvKiogSWRlbnRpdHkgb2YgdGhlIGxvY2FsIGhpc3RvcnksIG5vdCBpdHMgcGFyZW50J3MgbG9nLiAqL1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgT1dOIGZvbGQgYmFzZSDigJQgdGhlIHN0YXRlIGl0cyBpc29sYXRlZCBydW50aW1lIHN0YXJ0ZWRcbiAgICAgKiBmcm9tLCBiZWZvcmUgaXRzIGZpcnN0IGNvbW1pdC4gVGhlIHNpYmxpbmcgb2ZcbiAgICAgKiBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAsIGNhcnJpZWQgaGVyZSBzbyBhIHN1YmZsb3cncyBgaGlzdG9yeWBcbiAgICAgKiBjYW4gYmUgZm9sZGVkIG9mZmxpbmUgZXhhY3RseSBsaWtlIHRoZSBydW4ncyBsb2cgKGBzdGF0ZUF0YCxcbiAgICAgKiBgdGltZVRyYXZlbCguLi4pLmRyaWxsKG1vdW50KWApLiBGcm96ZW4gYW5kIGRldGFjaGVkLlxuICAgICAqXG4gICAgICogTm9ybWFsbHkgYHt9YDogYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkIGlzIGl0c2VsZiB0aGUgZmlyc3RcbiAgICAgKiBDT01NSVQgaW4gYGhpc3RvcnlgICh0aGUgcm9vdCBjb250ZXh0IGNvbW1pdHMgaXQpLCBub3QgYSBwcmUtcnVuIGJhc2UuXG4gICAgICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpIOKAlCB0aGUgZ3JhcGggZXZlcnkgaWQgaW5zaWRlIHRoZSBzdWJmbG93IHJlc29sdmVzIGFnYWluc3QuICovXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogV2hlcmUgdGhlIHN1YmZsb3cncyB0cmF2ZXJzYWwgc3RhcnRzIHdoZW4gbm90IGF0IGByb290YCDigJQgYSByZXN1bWUnc1xuICAgKiBvbmUtc2hvdCByZS1lbnRyeSAoYFJlc3VtZUhvcC5lbnRyeWApOiB0aGUgbmV4dCBtb3VudCBvbiB0aGUgcGF1c2UgcGF0aCxcbiAgICogb3IgdGhlIHBhdXNlZCBzdGFnZSdzIHN0YW5kLWluLCBlYWNoIHdpdGggaXRzIGRpc3BhdGNoZXIncyBjb250aW51YXRpb25cbiAgICogYXR0YWNoZWQuIFZpc2l0ZWQgb25jZSwgZmlyc3Q7IG5ldmVyIHJlc29sdmFibGUgYnkgaWQuXG4gICAqL1xuICBlbnRyeT86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyB3YWl0aW5nIGluIHRoaXMgc3ViZmxvdyAoYFJlc3VtZUhvcC5wZW5kaW5nUGF1c2VzYCxcbiAgICogOS4yOC4wKSDigJQgcmFpc2VkIGluIG9yZGVyIG9uY2UgYGVudHJ5YCdzIGNoYWluIGVuZHMuXG4gICAqL1xuICBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXTtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQxOiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgc3ViZmxvdyBNT1VOVCBzdGFnZSBpbiB0aGUgcGFyZW50XG4gICAqIHRyYXZlcnNlci4gQmVjb21lcyB0aGUgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBmYWxsYmFjayBmb3IgdGhlIHN1YmZsb3cnc1xuICAgKiByb290IHN0YWdlIHNvIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW5zIGNyb3NzIHN1YmZsb3cgYm91bmRhcmllcy5cbiAgICovXG4gIHBhcmVudE1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgLyoqXG4gICAqIFRoZSByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYCDigJQgcHJlc2VudCB3aGVuIHRoZSBydW4ncyBwb2xpY3lcbiAgICoga2VlcHMgb25lIChgUnVuUG9saWN5Lm1pcnJvcmA6IGEgcnVuIHdpdGggYSByZWRhY3Rpb24gcG9saWN5KSwgZWxzZSBhYnNlbnQuXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJlYWRzIGl0IHRvIHNlcnZlIGEgc3ViZmxvdydzIHN0YXRlICg5LjIwLjApLlxuICAgKi9cbiAgcmVkYWN0ZWRTdG9yZT86IFNoYXJlZE1lbW9yeTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIC8qKlxuICAgKiBBIGZyZXNoIHJvb3QgZnJhbWUgb24gdGhpcyBydW50aW1lIOKAlCBpdHMgc3RvcmUsIGl0cyBsb2csIHRoZSBydW4ncyBwb2xpY3lcbiAgICogYW5kIG1pcnJvciAoYEV4ZWN1dGlvblJ1bnRpbWUubmV3Um9vdGApLiBgU3ViZmxvd0V4ZWN1dG9yYCBzd2FwcyBhXG4gICAqIHN1YmZsb3cncyBzZWVkIGZyYW1lIGZvciB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24gd2l0aCBpdC5cbiAgICovXG4gIG5ld1Jvb3QobmFtZTogc3RyaW5nLCBpZDogc3RyaW5nKTogU3RhZ2VDb250ZXh0O1xuICBnZXRTbmFwc2hvdChvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0pOiB7XG4gICAgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGV4ZWN1dGlvblRyZWU6IHVua25vd247XG4gICAgLyoqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBiYXNlIOKAlCBzZWUgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLiAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKiBEdWFsLWtleWVkIGJ5IHN1YmZsb3cgcGF0aCAobGFzdCBpdGVyYXRpb24pIEFORCBwZXItZXhlY3V0aW9uIG1vdW50IHJ1bnRpbWVTdGFnZUlkXG4gICAgICogIChlYWNoIGl0ZXJhdGlvbikg4oCUIHNlZSBSdW50aW1lU25hcHNob3Quc3ViZmxvd1Jlc3VsdHMgLyBzdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5LiAqL1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGJ1ZGdldCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIFRyYWNlIGlkZW50aWZpZXIgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgLyBvYnNlcnZhYmlsaXR5LiAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXIgRGVwZW5kZW5jaWVzIChESSBiYWcpIOKAlCB3YXMgUGlwZWxpbmVDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIYW5kbGVyRGVwcyDigJQgRGVwZW5kZW5jeSBpbmplY3Rpb24gYmFnIHBhc3NlZCB0byBhbGwgaGFuZGxlciBtb2R1bGVzLlxuICpcbiAqIFByb3ZpZGVzIHNoYXJlZCBzdGF0ZSAoc3RhZ2VNYXAsIHJ1bnRpbWUsIHNjb3BlRmFjdG9yeSwgZXRjLikgd2l0aG91dFxuICogaGFuZGxlcnMgbmVlZGluZyB0byBpbXBvcnQgdGhlIHRyYXZlcnNlciBkaXJlY3RseS4gQXZvaWRzIGNpcmN1bGFyIGRlcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc3RyZWFtSGFuZGxlcnM/OiBTdHJlYW1IYW5kbGVycztcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZTogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcHJvcGFnYXRlcyB0byBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LiAqL1xuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnY7XG4gIG5hcnJhdGl2ZUdlbmVyYXRvcjogSUNvbnRyb2xGbG93TmFycmF0aXZlO1xuICBsb2dnZXI6IElMb2dnZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKipcbiAgICogVGhlIHJlc3VtZSdzIG9uZS1zaG90IHJlLWVudHJ5IChNMikg4oCUIHNoYXJlZCBieSByZWZlcmVuY2Ugd2l0aCBldmVyeVxuICAgKiBuZXN0ZWQgdHJhdmVyc2VyLCBsaWtlIHRoZSBleGVjdXRpb24gY291bnRlci4gYFN1YmZsb3dFeGVjdXRvcmAgYXNrcyBpdFxuICAgKiBhdCBlYWNoIHN1YmZsb3cgZW50cnk6IHRoZSBGSVJTVCBlbnRyeSBpbnRvIGEgc3ViZmxvdyBvbiB0aGUgcGF1c2UgcGF0aFxuICAgKiB0YWtlcyB0aGF0IHN1YmZsb3cncyBjYXB0dXJlZCBzdGF0ZSAoc2VlZGluZyB0aGUgbmVzdGVkIHJ1bnRpbWUgaW4gcGxhY2VcbiAgICogb2YgdGhlIGlucHV0TWFwcGVyJ3MgdmFsdWVzIOKAlCB0aGUgbWFwcGVyIHN0aWxsIHJ1bnMgZm9yIHRoZSByZWFkLW9ubHlcbiAgICogYXJncyksIGl0cyBlbnRyeSBwb2ludCBhbmQgYW55IHNpYmxpbmcgcGF1c2VzIHdhaXRpbmcgdGhlcmU7IGV2ZXJ5IGxhdGVyXG4gICAqIGVudHJ5IGlzIGFuIG9yZGluYXJ5IG9uZS4gU2VlIGBSZXN1bWVFbnRyeWAuIFVuZGVmaW5lZCBvbiBub3JtYWwgYHJ1bigpYFxuICAgKiBwYXRocy5cbiAgICovXG4gIHJlc3VtZT86IFJlc3VtZUVudHJ5PFRPdXQsIFRTY29wZT47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSA5LjI4LjAg4oCUIHRoZSBlbmdpbmUgcGxhbnMgYSByZXN1bWUgd2l0aCB7QGxpbmsgcmVzdW1lfS5cbiAgICogU3RpbGwgaG9ub3VyZWQsIHVuZGVyIHRoZSBzYW1lIG9uZS1zaG90IGxhdzogZWFjaCBjYXB0dXJlIChrZXllZCBieVxuICAgKiBwYXRoLXByZWZpeGVkIGBzdWJmbG93SWRgKSBzZWVkcyBvbmx5IHRoZSBGSVJTVCBlbnRyeSBpbnRvIGl0cyBzdWJmbG93LFxuICAgKiBpbiBwbGFjZSBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXM7IGxhdGVyIGVudHJpZXMgYXJlIG9yZGluYXJ5LlxuICAgKiBJZ25vcmVkIHdoZW4gYHJlc3VtZWAgaXMgc2V0LlxuICAgKi9cbiAgc3ViZmxvd1N0YXRlc0ZvclJlc3VtZT86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24uICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBpbiBtaWxsaXNlY29uZHMuIENyZWF0ZXMgYW4gaW50ZXJuYWwgQWJvcnRDb250cm9sbGVyLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSdW50aW1lIGlucHV0IGRhdGEgZm9yIHRoZSBwaXBlbGluZS5cbiAgICogQmVjb21lcyB0aGUgcmVhZE9ubHlDb250ZXh0IGFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRBcmdzKClgLlxuICAgKiBTdGFnZXMgY2Fubm90IG92ZXJ3cml0ZSB0aGVzZSBrZXlzIHdpdGggYHNldFZhbHVlKClgLlxuICAgKi9cbiAgaW5wdXQ/OiB1bmtub3duO1xuICAvKipcbiAgICogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCByZWFkLW9ubHkgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlXG4gICAqIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycyAobGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzKS5cbiAgICogQWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEVudigpYC4gSW5oZXJpdGVkIGJ5IHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBlbnY/OiBFeGVjdXRpb25FbnY7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBuZXN0ZWQgYGV4ZWN1dGVOb2RlYCBkZXB0aCBmb3IgdGhpcyBydW4uXG4gICAqIERlZmF1bHRzIHRvIGBGbG93Y2hhcnRUcmF2ZXJzZXIuTUFYX0VYRUNVVEVfREVQVEhgICg1MDApLlxuICAgKlxuICAgKiBEZXB0aCBjb3VudHMgVFJFRSBuZXN0aW5nIG9ubHkg4oCUIGZvcmsgY2hpbGRyZW4sIGRlY2lkZXIvc2VsZWN0b3IgYnJhbmNoXG4gICAqIGRpc3BhdGNoLCByZWN1cnNpdmUgY29tcG9zaXRpb24uIExpbmVhciBjaGFpbnMgYW5kIGxvb3AgaXRlcmF0aW9ucyBydW5cbiAgICogb24gYSBmbGF0IHRyYW1wb2xpbmUgYW5kIG5ldmVyIGNvbnN1bWUgZGVwdGgsIHNvIHRoaXMgcmFyZWx5IG5lZWRzXG4gICAqIHJhaXNpbmcuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIG1heGltdW0gbG9vcCBpdGVyYXRpb25zIHBlciBub2RlIGZvciB0aGlzIHJ1biAodGhlXG4gICAqIGBDb250aW51YXRpb25SZXNvbHZlcmAgaW5maW5pdGUtbG9vcCBndWFyZCkuIERlZmF1bHRzIHRvIDEwMDAuXG4gICAqIFRoaXMgaXMgdGhlIGJpbmRpbmcgY29uc3RyYWludCBmb3IgbG9vcC1oZWF2eSBwaXBlbGluZXMg4oCUIHJhaXNlIGl0IGZvclxuICAgKiBsZWdpdGltYXRlbHkgbG9uZyBsb29wcyAoYGxvb3BUb2AgY2hhaW5zIHJ1biB3aXRoIGEgZmxhdCBzdGFjaywgc28gaGlnaFxuICAgKiB2YWx1ZXMgYXJlIHNhZmU7IG1lbW9yeSBmb3Igc3RhdGUvbmFycmF0aXZlIHN0aWxsIGdyb3dzIHBlciBpdGVyYXRpb24pLlxuICAgKiBBbHNvIGJvdW5kcyB0aGUgcnVuLXRvdGFsIGNoYWluIG9mIGZ1bmN0aW9uLWJlYXJpbmcgZHluYW1pYyBgbmV4dGBcbiAgICogY29udGludWF0aW9ucyAoZnJlc2ggbm9kZXMgcmV0dXJuZWQgZnJvbSBzdGFnZXMpIOKAlCBhIHJ1bmF3YXkgZHluYW1pY1xuICAgKiBjaGFpbiBlcnJvcnMgaW5zdGVhZCBvZiBydW5uaW5nIGZvcmV2ZXIuXG4gICAqIFByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heEl0ZXJhdGlvbnM/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDigJQgY2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gbWVtb3J5L3R5cGVzLnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVudGltZSBTdHJ1Y3R1cmUgTWV0YWRhdGEgKHVzZWQgYnkgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQgKHR5cGUgc3RheXMgYCdmb3JrJ2ApLiAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm9kZSBSZXN1bHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBOb2RlUmVzdWx0VHlwZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcmVzdWx0OiB1bmtub3duO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJlc3BvbnNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0ID0ge1xuICByZXN1bHQ6IHN0cmluZyB8IEVycm9yO1xuICBpc0Vycm9yOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0cyA9IHsgW2JyYW5jaElkOiBzdHJpbmddOiBCcmFuY2hSZXN1bHQgfTtcbmV4cG9ydCB0eXBlIFRyYXZlcnNhbFJlc3VsdCA9IEJyYW5jaFJlc3VsdHMgfCBzdHJpbmcgfCBFcnJvcjtcblxuLyoqIFJldHVybmVkIGJ5IHJ1bigpL3Jlc3VtZSgpIHdoZW4gZXhlY3V0aW9uIHBhdXNlcy4gKi9cbmV4cG9ydCB0eXBlIFBhdXNlZFJlc3VsdCA9IHtcbiAgcmVhZG9ubHkgcGF1c2VkOiB0cnVlO1xuICByZWFkb25seSBjaGVja3BvaW50OiBpbXBvcnQoJy4uL3BhdXNlL3R5cGVzLmpzJykuRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn07XG5cbi8qKiBGdWxsIHJldHVybiB0eXBlIG9mIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpIGFuZCByZXN1bWUoKS4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dG9yUmVzdWx0ID0gVHJhdmVyc2FsUmVzdWx0IHwgUGF1c2VkUmVzdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChmb3IgdmlzdWFsaXphdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OlxuICAgIHwgJ3N0YWdlJ1xuICAgIHwgJ2RlY2lkZXInXG4gICAgfCAnc2VsZWN0b3InXG4gICAgfCAnZm9yaydcbiAgICB8ICdzdHJlYW1pbmcnXG4gICAgfCAnc3ViZmxvdydcbiAgICB8ICdsb29wJ1xuICAgIHwgJ3VzZXInXG4gICAgfCAndG9vbCdcbiAgICB8ICdmdW5jdGlvbidcbiAgICB8ICdzZXF1ZW5jZSc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU7XG4gIGJyYW5jaGVzPzogUmVjb3JkPHN0cmluZywgU2VyaWFsaXplZFBpcGVsaW5lTm9kZT47XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGhhc1N1YnRyZWU/OiBib29sZWFuO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IOKAlCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdCBydW50aW1lXG4gICAqIGZyb20gdGhlIHBheWxvYWQuIEEgZmxhZywgbm90IGEgdHlwZTogYHR5cGVgIHN0YXlzIGAnZm9yaydgIHNvIGV2ZXJ5XG4gICAqIGV4aXN0aW5nIGNvbnN1bWVyIHJlbmRlcnMgaXQgY29ycmVjdGx5IChpdCBJUyBhIGZhbi1vdXQpLCBhbmQgYSBjb25zdW1lclxuICAgKiB0aGF0IHdhbnRzIHRvIHNheSBcIm9uZSBicmFuY2ggcGVyIGl0ZW1cIiBjYW4gcmVhZCB0aGlzLlxuICAgKi9cbiAgaXNEeW5hbWljUGFyYWxsZWw/OiBib29sZWFuO1xuICAvKipcbiAgICogVG90YWwgYXR0ZW1wdHMgdGhpcyBzdGFnZSdzIGZ1bmN0aW9uIG1heSBydW4sIGZyb20gaXRzIGRlY2xhcmVkXG4gICAqIHtAbGluayBSZXRyeVBvbGljeX0uIFByZXNlbnQgb25seSB3aGVuIGEgcG9saWN5IHdhcyBkZWNsYXJlZC4gVGhlIENPVU5UXG4gICAqIG9ubHkg4oCUIGBiYWNrb2ZmTXNgIGFuZCBgcmV0cnlPbmAgY2FuIGJlIGZ1bmN0aW9ucywgd2hpY2ggYSBKU09OLXNhZmUgc3BlY1xuICAgKiBjYW5ub3QgY2FycnkuXG4gICAqL1xuICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4wKSDigJQgdGhlIG5hbWVzIHRoZSBhdXRob3IgcHV0IG9uIHRoaXMgc3RhZ2UgYXQgYnVpbGRcbiAgICogdGltZSwgY29waWVkIGFzLWlzLiBGcmVlIHN0cmluZ3M7IGZvb3RwcmludGpzIGFzc2lnbnMgdGhlbSBubyBtZWFuaW5nLlxuICAgKiBBYnNlbnQgd2hlbiB0aGUgc3RhZ2UgZGVjbGFyZXMgbm9uZS5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgaXMgZGVmaW5lZCBpbiBgLi4vYnVpbGRlci90eXBlcy50c2AuIFRoZSBlbmdpbmUgbGF5ZXIgY29uc3VtZXMgaXRcbi8vIHZpYSBpbXBvcnQgZnJvbSB0aGVyZS4gQSBkdXBsaWNhdGUgbWluaW1hbCBkZWZpbml0aW9uIHByZXZpb3VzbHkgbGl2ZWQgaGVyZVxuLy8gYW5kIGNhdXNlZCBUUyBjb25mdXNpb24gYXQgY29tcG9zaXRpb24gYm91bmRhcmllcyAoQ29tcG9zYWJsZVJ1bm5lciB2c1xuLy8gYWRkU3ViRmxvd0NoYXJ0IHBhcmFtZXRlcikuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbm93IGxpdmVzIGluIGJ1aWxkZXIvLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWdCSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWU5RSxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVLRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBRdWV1ZWRQYXVzZSwgUmVzdW1lRW50cnkgfSBmcm9tICcuL2hhbmRsZXJzL1Jlc3VtZUVudHJ5LmpzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuXG4vLyBSZS1leHBvcnQgU3RhZ2VOb2RlIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vLyBSZS1leHBvcnQgcGF1c2UgdHlwZXMgZnJvbSBwYXVzZS8gbGlicmFyeVxuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIsIFBhdXNlUmVzdWx0IH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1pbmltYWwgbG9nZ2luZyBjb250cmFjdC4gTWlycm9ycyBDb25zb2xlIEFQSSBzdWJzZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8qKiBEZWZhdWx0IGNvbnNvbGUtYmFzZWQgbG9nZ2VyLiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLS0gdHJpdmlhbCBjb25zb2xlIGRlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9nZ2VyOiBJTG9nZ2VyID0ge1xuICBpbmZvOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgbG9nOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICB3YXJuOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUud2FybihtZXNzYWdlLCAuLi5hcmdzKSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2UgRnVuY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0b2tlbnMgZHVyaW5nIHN0cmVhbWluZy4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbUNhbGxiYWNrID0gKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3Igc3RhZ2UgaGFuZGxlcnMuXG4gKiAtIFRPdXQ6IHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogLSBUU2NvcGU6IHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICogLSBPcHRpb25hbCAzcmQgcGFyYW1ldGVyIGBzdHJlYW1DYWxsYmFja2AgaW5qZWN0ZWQgZm9yIHN0cmVhbWluZyBzdGFnZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0IHwgdm9pZD4gfCBUT3V0IHwgdm9pZDtcblxuLyoqXG4gKiBTdGFnZSBmdW5jdGlvbiBmb3IgcGF1c2FibGUgc3RhZ2VzIOKAlCByZXR1cm4gdmFsdWUgaXMgdGhlIHBhdXNlIGRhdGEgKGFueSB0eXBlKS5cbiAqIFJldHVybiBub24tdm9pZCB0byBwYXVzZSwgcmV0dXJuIHZvaWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdXNhYmxlU3RhZ2VGdW5jdGlvbjxUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bjtcblxuLyoqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgc2NvcGUgaW5zdGFuY2UgZm9yIGVhY2ggc3RhZ2UuICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlID0gYW55PiA9IChcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bixcbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52LFxuKSA9PiBUU2NvcGU7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU3RyZWFtVG9rZW5IYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIGZ1bGxUZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUhhbmRsZXJzIHtcbiAgb25Ub2tlbj86IFN0cmVhbVRva2VuSGFuZGxlcjtcbiAgb25TdGFydD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG4gIG9uRW5kPzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJhbGxlbC1mb3ItZWFjaCAoZHluYW1pYyBmYW4tb3V0KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQSBidWlsdCBjaGFydCwgYXMgYGFkZFBhcmFsbGVsRm9yRWFjaGAncyBgYnJhbmNoYCBmYWN0b3J5IHJldHVybnMgaXQuXG4gKlxuICogU3RydWN0dXJhbGx5IHRoZSBzdWJzZXQgb2YgYEZsb3dDaGFydGAgdGhlIGVuZ2luZSBuZWVkcyB0byBtb3VudCBhIGJyYW5jaCDigJRcbiAqIGRlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgc28gYGVuZ2luZS9gIGtlZXBzIGl0cyBvbmUtd2F5IGRlcGVuZGVuY3lcbiAqIG9uIGBidWlsZGVyL2AuIEFueSBgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKWAgcmVzdWx0IHNhdGlzZmllcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8qKlxuICogUnVudGltZSBmYW4tb3V0IGNvbmZpZyDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIENPVU5UIGRlY2lkZWQgYXRcbiAqIHJ1bnRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDIpLlxuICpcbiAqIEVhY2ggYnJhbmNoIHJ1bnMgYXMgYSBnZW5lcmF0ZWQgU1VCRkxPVyAoaXNvbGF0ZWQgcnVudGltZSwgb3duIGNvbW1pdCBsb2csXG4gKiBhZGRyZXNzYWJsZSBhdCBgPHN0YWdlSWQ+fjxpbmRleD5gIGluIGV2ZXJ5IHRyYWNlIHF1ZXJ5KSwgd2hpY2ggaXMgd2hhdFxuICogbWFrZXMgYnJhbmNoZXMgdW5hYmxlIHRvIGNvcnJ1cHQgZWFjaCBvdGhlcidzIGluLWZsaWdodCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hDb25maWc8VEl0ZW0gPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogUGlja3MgdGhlIGl0ZW1zIHRvIGZhbiBvdXQgb3ZlciwgZnJvbSB0aGUgbGl2ZSBzY29wZS4gUmVhZHMgaGVyZSBhcmVcbiAgICogdHJhY2tlZCBsaWtlIGFueSBvdGhlciBzdGFnZSByZWFkLCBzbyB0aGUgZmFuLW91dCdzIG93biBpbnB1dHMgc2hvdyB1cCBpblxuICAgKiB0aGUgdHJhY2UgYW5kIGluIGEgYmFja3dhcmQgc2xpY2UuXG4gICAqL1xuICBpdGVtczogKHNjb3BlOiBUU2NvcGUpID0+IHJlYWRvbmx5IFRJdGVtW107XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNoYXJ0IGZvciBPTkUgaXRlbS4gQ2FsbGVkIG9uY2UgcGVyIGV4ZWN1dGVkIGJyYW5jaCwgd2l0aCB0aGVcbiAgICogaXRlbSBhbmQgaXRzIGluZGV4IOKAlCBjbG9zZSBvdmVyIHRoZW0sIG9yIHJlYWQgdGhlIGBpdGVtYCAvIGBpbmRleGAgdmFsdWVzXG4gICAqIHNlZWRlZCBpbnRvIHRoZSBicmFuY2gncyBvd24gc2NvcGUuXG4gICAqL1xuICBicmFuY2g6IChpdGVtOiBUSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gQnJhbmNoQ2hhcnQ7XG4gIC8qKlxuICAgKiBIYXJkIGNlaWxpbmcgb24gYnJhbmNoZXMgcGVyIGV4ZWN1dGlvbi4gUkVRVUlSRUQ6IGFuIHVuYm91bmRlZCBmYW4tb3V0XG4gICAqIGRyaXZlbiBieSBtb2RlbCBvdXRwdXQgaXMgYSByZXNvdXJjZSBhdHRhY2ssIHNvIHRoZXJlIGlzIG5vIGRlZmF1bHQgdG9cbiAgICogZm9yZ2V0LiBFeHRyYSBpdGVtcyBkbyBub3QgcnVuIOKAlCB0aGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCwgbmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgbWF4QnJhbmNoZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFN0YXRlIGtleSB0aGUgb3JkZXJlZCByZXN1bHRzIGFycmF5IGlzIHdyaXR0ZW4gdG8gb24gdGhlIHBhcmVudCBzY29wZS5cbiAgICogUkVRVUlSRUQg4oCUIGEga2V5IGRlcml2ZWQgZnJvbSB0aGUgc3RhZ2UgaWQgY291bGQgc2lsZW50bHkgb3ZlcndyaXRlIHN0YXRlXG4gICAqIHRoZSBjaGFydCBhbHJlYWR5IG93bnMuXG4gICAqL1xuICBpbnRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYW4tb3V0IGVycm9yIHBvbGljeSDigJQgdGhlIFNBTUUgcG9saWN5IHRoZSBleGlzdGluZyBwYXJhbGxlbCBmYW4tb3V0IHVzZXMuXG4gICAqIGB0cnVlYCA9IGBQcm9taXNlLmFsbGAgKHRoZSBmaXJzdCBmYWlsaW5nIGJyYW5jaCByZWplY3RzIHRoZSBzdGFnZSk7XG4gICAqIG9taXR0ZWQvZmFsc2UgPSBiZXN0LWVmZm9ydCBgUHJvbWlzZS5hbGxTZXR0bGVkYCAoZXZlcnkgYnJhbmNoIHJ1bnM7IGFcbiAgICogZmFpbGVkIGJyYW5jaCdzIHNsb3QgaW4gdGhlIHJlc3VsdHMgYXJyYXkgaXMgYHVuZGVmaW5lZGApLlxuICAgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHJ5IChwZXItc3RhZ2UgZGVjbGFyYXRpdmUgcG9saWN5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRGVjbGFyYXRpdmUgcGVyLXN0YWdlIHJldHJ5IHBvbGljeS5cbiAqXG4gKiBXSFkgdGhpcyBleGlzdHM6IGEgcmV0cnkgaGFuZC1yb2xsZWQgaW5zaWRlIGEgc3RhZ2UgZnVuY3Rpb24gaXMgaW52aXNpYmxlIHRvXG4gKiB0aGUgdHJhY2UuIFRoZSBzdGFnZSBzaG93cyBvbmUgZXhlY3V0aW9uLCB0aGUgY29tbWl0IGxvZyBzaG93cyBvbmUgYnVuZGxlLFxuICogYW5kIHRoZSB0d28gZmFpbGVkIGNhbGxzIHRoYXQgcHJlY2VkZWQgdGhlIHN1Y2Nlc3NmdWwgb25lIGxlZnQgbm8gbWFya1xuICogYW55d2hlcmUg4oCUIGFuIHVuZXhwbGFpbmVkIGJlaGF2aW91ciBpbiBhIGxpYnJhcnkgd2hvc2Ugd2hvbGUgdGhlc2lzIGlzIHRoYXRcbiAqIG5vdGhpbmcgaW52aXNpYmxlIGhhcHBlbnMuIERlY2xhcmVkIGhlcmUgaW5zdGVhZCwgZXZlcnkgYXR0ZW1wdCBpcyBwYXJ0IG9mXG4gKiB0aGUgcmVjb3JkOiBlYWNoIGZhaWxlZCBhdHRlbXB0IGZpcmVzIGBGbG93UmVjb3JkZXIub25TdGFnZVJldHJ5YCB3aXRoIHRoZVxuICogYXR0ZW1wdCBudW1iZXIsIHRoZSB3YWl0LCBhbmQgdGhlIHN0cnVjdHVyZWQgZXJyb3IuXG4gKlxuICogQSBQT0xJQ1ksIG5vdCBhIHN0YWdlIGtpbmQg4oCUIGByZXRyeWAgc2l0cyBvbiBhIG5vcm1hbCBzdGFnZSB0aGUgd2F5XG4gKiBgaXNQYXVzYWJsZWAgLyBgaXNTdHJlYW1pbmdgIGRvLiBUaGUgc2VyaWFsaXplZCBub2RlIGB0eXBlYCBpcyB1bmNoYW5nZWQgYW5kXG4gKiBldmVyeSBleGlzdGluZyBjb25zdW1lciBrZWVwcyByZW5kZXJpbmcgdGhlIHN0YWdlIGV4YWN0bHkgYXMgYmVmb3JlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZmxvd0NoYXJ0PFN0YXRlPignRmV0Y2ggdXNlcicsIGZldGNoRm4sICdmZXRjaC11c2VyJylcbiAqICAgLnJldHJ5KHsgYXR0ZW1wdHM6IDMsIGJhY2tvZmZNczogKG4pID0+IDEwMCAqIDIgKiogKG4gLSAxKSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlQb2xpY3kge1xuICAvKipcbiAgICogSG93IG1hbnkgdGltZXMgdGhlIHN0YWdlIGZ1bmN0aW9uIG1heSBydW4gaW4gdG90YWwsIElOQ0xVRElORyB0aGUgZmlyc3RcbiAgICogcnVuLiBNdXN0IGJlIGFuIGludGVnZXIgPj0gMTsgYDFgIG1lYW5zIFwibm8gcmV0cnlcIiAoYSBkZWNsYXJlZCBuby1vcCxcbiAgICogYWNjZXB0ZWQgc28gYSBwb2xpY3kgY2FuIGJlIHN3aXRjaGVkIG9mZiB3aXRob3V0IGRlbGV0aW5nIGl0KS5cbiAgICovXG4gIGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGJlZm9yZSB0aGUgTkVYVCBhdHRlbXB0LiBFaXRoZXIgYSBmaXhlZCBudW1iZXIgb2ZcbiAgICogbWlsbGlzZWNvbmRzLCBvciBhIGZ1bmN0aW9uIG9mIHRoZSBhdHRlbXB0IHRoYXQganVzdCBGQUlMRUQgKDEtYmFzZWQpXG4gICAqIHJldHVybmluZyBtaWxsaXNlY29uZHMg4oCUIGAobikgPT4gMTAwICogMiAqKiAobiAtIDEpYCBpcyBleHBvbmVudGlhbFxuICAgKiBiYWNrb2ZmLiBPbWl0dGVkIChvciBhIG5vbi1maW5pdGUgLyBuZWdhdGl2ZSByZXN1bHQpIG1lYW5zIG5vIHdhaXQuXG4gICAqXG4gICAqIFRoZSB3YWl0IGlzIGEgcGxhaW4gYXdhaXRlZCB0aW1lciB0aGF0IGlzIENBTkNFTExFRCBieSB0aGUgcnVuJ3NcbiAgICogYEFib3J0U2lnbmFsYC4gSXQgaXMgbm90IGEgcGF1c2U6IGEgY2hhcnQgY2Fubm90IGJlIGNoZWNrcG9pbnRlZCBpbiB0aGVcbiAgICogbWlkZGxlIG9mIGEgYmFja29mZi5cbiAgICovXG4gIGJhY2tvZmZNcz86IG51bWJlciB8ICgoYXR0ZW1wdDogbnVtYmVyKSA9PiBudW1iZXIpO1xuICAvKipcbiAgICogSXMgVEhJUyBlcnJvciB3b3J0aCBhbm90aGVyIGF0dGVtcHQ/IERlZmF1bHRzIHRvIHJldHJ5aW5nIGV2ZXJ5IGVycm9yLlxuICAgKiBSZXR1cm5pbmcgYGZhbHNlYCBlbmRzIHRoZSBzdGFnZSBpbW1lZGlhdGVseSBvbiB0aGUgbm9ybWFsIGVycm9yIHBhdGgg4oCUXG4gICAqIGV4YWN0bHkgYXMgaWYgbm8gcG9saWN5IGhhZCBiZWVuIGRlY2xhcmVkLCBhbmQgd2l0aCBubyByZXRyeSBldmVudCAodGhlXG4gICAqIHBvbGljeSBjaG9zZSBub3QgdG8gYWN0OyB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydCB0aGF0IHRoZSBlcnJvciBldmVudFxuICAgKiBkb2VzIG5vdCBhbHJlYWR5IHNheSkuXG4gICAqXG4gICAqIEEgdGhyb3cgZnJvbSB0aGlzIHByZWRpY2F0ZSBpcyB0cmVhdGVkIGFzIGBmYWxzZWAg4oCUIGEgYnJva2VuIHByZWRpY2F0ZVxuICAgKiBtdXN0IG5vdCB0dXJuIGEgZmFpbGluZyBzdGFnZSBpbnRvIGFuIGluZmluaXRlIHJldHJ5IGxvb3AuXG4gICAqL1xuICByZXRyeU9uPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAqL1xuZXhwb3J0IGVudW0gQXJyYXlNZXJnZU1vZGUge1xuICAvKiogQXBwZW5kIHN1YmZsb3cgb3V0cHV0IHRvIGV4aXN0aW5nIHBhcmVudCBhcnJheTogWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0uIERlZmF1bHQuICovXG4gIENvbmNhdCA9ICdjb25jYXQnLFxuICAvKiogT3ZlcndyaXRlIHBhcmVudCBhcnJheSB3aXRoIHN1YmZsb3cgb3V0cHV0LiBVc2UgZm9yIER5bmFtaWMgbG9vcHMuICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIC8qKlxuICAgKiBNYXBzIHN1YmZsb3cgb3V0cHV0IGJhY2sgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqICoqQXJyYXkgbWVyZ2UgYmVoYXZpb3IqKiBpcyBjb250cm9sbGVkIGJ5IGBhcnJheU1lcmdlYDpcbiAgICogLSBgJ2NvbmNhdCdgIChkZWZhdWx0KTogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCDigJQgcmV0dXJuIG9ubHkgKipkZWx0YSoqIGl0ZW1zXG4gICAqIC0gYCdyZXBsYWNlJ2A6IG92ZXJ3cml0ZXMgdGhlIHBhcmVudCB2YWx1ZSDigJQgcmV0dXJuIHRoZSBmdWxsIGFycmF5XG4gICAqXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIGFsd2F5cyByZXBsYWNlZCByZWdhcmRsZXNzIG9mIGBhcnJheU1lcmdlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBEZWx0YSBtb2RlIChkZWZhdWx0KSDigJQgcmV0dXJuIG9ubHkgbmV3IGl0ZW1zLCBjb25jYXQgYXBwZW5kc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgbW9kZSDigJQgcmV0dXJuIGZ1bGwgYXJyYXksIHBhcmVudCB2YWx1ZSBpcyBvdmVyd3JpdHRlblxuICAgKiAvLyBVc2VmdWwgaW4gRHluYW1pYyBsb29wcyB3aGVyZSB0aGUgc3ViZmxvdyByZWNvbXB1dGVzIHRoZSBmdWxsIHZhbHVlIGVhY2ggaXRlcmF0aW9uXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyB0b29sRGVzY3JpcHRpb25zOiBzZi50b29sRGVzY3JpcHRpb25zIH0pLFxuICAgKiBhcnJheU1lcmdlOiBBcnJheU1lcmdlTW9kZS5SZXBsYWNlLFxuICAgKlxuICAgKiAvLyBTY2FsYXJzIGFyZSBmaW5lIGluIGJvdGggbW9kZXMg4oCUIGFsd2F5cyByZXBsYWNlZFxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgc3RhdHVzOiBzZi5yZXN1bHQsIGNvdW50OiBzZi50b3RhbCB9KVxuICAgKiBgYGBcbiAgICovXG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqIEFwcGxpZXMgb25seSB0byB0b3AtbGV2ZWwgYXJyYXkga2V5cy4gTmVzdGVkIGFycmF5cyBpbnNpZGUgb2JqZWN0c1xuICAgKiBhbHdheXMgdXNlIGFwcGVuZCAoYXBwZW5kVG9BcnJheSkgcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycmF5TWVyZ2VNb2RlLkNvbmNhdFxuICAgKi9cbiAgYXJyYXlNZXJnZT86IEFycmF5TWVyZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTVFJVQ1RVUkUtT05MWTogdGhlIGRvd25zdHJlYW0gc3RhZ2UgaWQgdGhpcyBicmFuY2gncyBjb252ZXJnZW5jZSBlZGdlXG4gICAqIHBvaW50cyB0bywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBcImNvbnZlcmdlIGF0IHRoZSBuZXh0IGxpbmVhciBzdGFnZS5cIlxuICAgKlxuICAgKiBXaGVuIGEgZm9yay9zZWxlY3Rvci9kZWNpZGVyIGJyYW5jaCBjYXJyaWVzIGBjb252ZXJnZUF0YCwgaXRzIHZpc3VhbGl6ZWRcbiAgICogYG5leHRgIGVkZ2UgaXMgZmlyZWQgdG8gdGhlIG5hbWVkIHN0YWdlIGluc3RlYWQgb2YgdG8gdGhlIHNoYXJlZFxuICAgKiBjb252ZXJnZW5jZSBub2RlIGl0cyBzaWJsaW5ncyB1c2UuIFRoaXMgZXhwcmVzc2VzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2VcbiAgICog4oCUIGUuZy4gYSBgdG9vbHNgIHNsb3QgdGhhdCBieXBhc3NlcyB0aGUgYG1lc3NhZ2VBUElgIGFzc2VtYmx5IG5vZGUgYW5kXG4gICAqIHBhaXJzIHdpdGggaXRzIG91dHB1dCBhdCBgY2FsbC1sbG1gIChzbyBgY2FsbC1sbG1gIHJlYWRzIGFzIGEgMi1wYXJlbnRcbiAgICogbWVyZ2UpLCBmYWl0aGZ1bCB0byB0aGUgQW50aHJvcGljIHdpcmUgcHJvdG9jb2wgKHN5c3RlbSttZXNzYWdlcyA9IHRoZVxuICAgKiBtZXNzYWdlIHBheWxvYWQ7IHRvb2xzID0gYSBzZXBhcmF0ZSB0b3AtbGV2ZWwgZmllbGQpLlxuICAgKlxuICAgKiAqKlRoaXMgYWZmZWN0cyB0aGUgU1RSVUNUVVJFL3RvcG9sb2d5IGdyYXBoIG9ubHkqKiDigJQgdGhlIHJ1bnRpbWUgaXNcbiAgICogdW5jaGFuZ2VkICh0aGUgYnJhbmNoJ3Mgb3V0cHV0cyByaWRlIHNoYXJlZCBzY29wZTsgdGhlIG5hbWVkIHRhcmdldCByZWFkc1xuICAgKiB0aGVtIHdoZW4gaXQgcnVucykuIEl0IGRvZXMgTk9UIGludHJvZHVjZSBhIGpvaW4gYmFycmllci4gVGhlIHRhcmdldCBpcyBhXG4gICAqIEZPUldBUkQgc3RhZ2UgKGFkZGVkIGxhdGVyIGluIHRoZSBjaGFpbiksIHNvIGl0IGlzIG5vdCB2YWxpZGF0ZWQgYXRcbiAgICogYnJhbmNoLWRlY2xhcmF0aW9uIHRpbWUuXG4gICAqL1xuICBjb252ZXJnZUF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYW4gaW5uZXIgYHNjb3BlLiRicmVhayhyZWFzb24pYCBjYWxsIGluc2lkZSB0aGlzIHN1YmZsb3dcbiAgICogcHJvcGFnYXRlcyB1cCB0byB0aGUgcGFyZW50IOKAlCBpLmUuLCB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AgaXMgc2V0XG4gICAqIGFmdGVyIHRoZSBzdWJmbG93IGV4aXRzLCB0ZXJtaW5hdGluZyB0aGUgcGFyZW50J3Mgb3V0ZXIgbG9vcCB0b28uXG4gICAqXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYCoqIChjdXJyZW50IGJlaGF2aW91ciDigJQgaW5uZXIgYnJlYWsgc3RvcHMgb25seSB0aGVcbiAgICogc3ViZmxvdzsgcGFyZW50IGNvbnRpbnVlcykuXG4gICAqXG4gICAqICMjIFdoZW4gdG8gdXNlXG4gICAqXG4gICAqIFNldCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIG9uIHN1YmZsb3cgbW91bnRzIHRoYXQgcmVwcmVzZW50XG4gICAqICoqdGVybWluYWwqKiBicmFuY2hlcyDigJQgXCJpZiB0aGlzIHN1YmZsb3cgZmlyZXMsIHRoZSBvdXRlciBsb29wIGlzXG4gICAqIGRvbmVcIi4gRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gQSBodW1hbi1yZXZpZXcgcnVubmVyIHRoYXQgdGFrZXMgb3ZlciBmcm9tIGFuIGFnZW50J3MgdG9vbC1jYWxsaW5nXG4gICAqICAgbG9vcCBhbmQgcHJvZHVjZXMgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICAgKiAtIEEgc2FmZXR5LWdhdGUgc3ViZmxvdyB0aGF0IGhhbHRzIHRoZSBvdXRlciB3b3JrZmxvdyB3aGVuIGEgcG9saWN5XG4gICAqICAgdmlvbGF0aW9uIGlzIGRldGVjdGVkLlxuICAgKiAtIEFuIGVycm9yLXJlY292ZXJ5IHN1YmZsb3cgdGhhdCByZXN0b3JlcyBzdGF0ZSBhbmQgdGhlbiB0ZXJtaW5hdGVzLlxuICAgKlxuICAgKiAjIyBTZW1hbnRpY3NcbiAgICpcbiAgICogMS4gSW5zaWRlIHRoZSBzdWJmbG93LCBhIHN0YWdlIGNhbGxzIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIDIuIFRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvbiBzdG9wcyAobm9ybWFsIGAkYnJlYWtgIGJlaGF2aW91cikuXG4gICAqIDMuIGBTdWJmbG93RXhlY3V0b3JgIGluc3BlY3RzIHRoZSBzdWJmbG93J3MgZXhpdCBzdGF0ZS4gSWZcbiAgICogICAgYHByb3BhZ2F0ZUJyZWFrID09PSB0cnVlYCBBTkQgdGhlIGlubmVyIGJyZWFrIGZpcmVkLCBpdCBmb3J3YXJkc1xuICAgKiAgICB0aGUgYnJlYWsgKGFuZCBpdHMgcmVhc29uKSB0byB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AuXG4gICAqIDQuIFRoZSBwYXJlbnQgdHJhdmVyc2VyIHNlZXMgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBleGl0cy5cbiAgICogNS4gQSBgRmxvd1JlY29yZGVyLm9uQnJlYWtgIGV2ZW50IGZpcmVzIGF0IHRoZSBwYXJlbnQtbW91bnQgbGV2ZWwgd2l0aFxuICAgKiAgICBgcHJvcGFnYXRlZEZyb21TdWJmbG93YCA9IHRoZSBzdWJmbG93J3MgaWQgYW5kIHRoZSBpbm5lciByZWFzb24uXG4gICAqXG4gICAqICMjIFBhcmFsbGVsL2Zhbi1vdXRcbiAgICpcbiAgICogRm9sbG93cyB0aGUgZXhpc3RpbmcgbGlicmFyeSBydWxlIGluIGBDaGlsZHJlbkV4ZWN1dG9yYDogdGhlIHBhcmVudFxuICAgKiBicmVha3Mgb25seSB3aGVuICoqZXZlcnkqKiBjaGlsZCBvZiBhIGZvcmsgYnJva2UuIEEgc2luZ2xlXG4gICAqIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgc3ViZmxvdyBjb250cmlidXRpbmcgaXRzIGJyZWFrIHRvIHRoZSBjb3VudFxuICAgKiBkb2VzIG5vdCBvbiBpdHMgb3duIHRlcm1pbmF0ZSB0aGUgcGFyZW50IGZhbi1vdXQuXG4gICAqXG4gICAqICMjIG91dHB1dE1hcHBlciBzdGlsbCBydW5zXG4gICAqXG4gICAqIFRoZSBzdWJmbG93J3MgYG91dHB1dE1hcHBlcmAgKGlmIHN1cHBsaWVkKSBBTFdBWVMgcnVucyBiZWZvcmUgdGhlXG4gICAqIGJyZWFrIHByb3BhZ2F0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCBzdGF0ZSBpcyBzdGlsbCB3cml0dGVuIHRvXG4gICAqIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgaW50ZW50aW9uYWwg4oCUIHRoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIGFuXG4gICAqIFwiZXNjYWxhdGlvblwiIHN1YmZsb3cgd2hvc2Ugb3V0cHV0IElTIHRoZSBmaW5hbCBhbnN3ZXIgdGhhdCBuZWVkcyB0b1xuICAgKiBsYW5kIGluIHRoZSBwYXJlbnQgc2NvcGUgYmVmb3JlIHRoZSBvdXRlciBsb29wIHRlcm1pbmF0ZXMuIElmIHlvdVxuICAgKiB3YW50IHRvIHN1cHByZXNzIG91dHB1dCBtYXBwaW5nIG9uIGJyZWFrLCBjaGVjayB0aGUgYnJlYWsgc3RhdGVcbiAgICogaW5zaWRlIHlvdXIgYG91dHB1dE1hcHBlcmAgYW5kIHJldHVybiBge31gIGVhcmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvcGFnYXRlQnJlYWs/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjEpIGZvciB0aGUgTU9VTlQgaXRzZWxmIOKAlCB0aGUgTkFNRVMgdGhlIGF1dGhvciBwdXRzXG4gICAqIG9uIHRoaXMgbW91bnQgYXQgYnVpbGQgdGltZSwgbGFuZGVkIGJ5IHRoZSBzYW1lIGBhcHBseVRhZ3NgIGV2ZXJ5IG90aGVyXG4gICAqIGBvcHRpb25zLnRhZ3NgIHNpdGUgdXNlcywgd2l0aCB0aGUgc2FtZSByZWZ1c2FscyAoZW1wdHksIG5vbi1zdHJpbmcsIHRoZVxuICAgKiByZXNlcnZlZCBgfmAgbWFya2VyLCBhIGR1cGxpY2F0ZSwgYSBzZWNvbmQgZGVjbGFyYXRpb24pLlxuICAgKlxuICAgKiBBIG1vdW50IGlzIGEgc3RhZ2UgdGhhdCBjb21taXRzOiBpdHMgZmlyc3QgYnVuZGxlIGluIHRoZSBQQVJFTlQgbG9nIGlzIGFcbiAgICogc3RvcCBpbiBgY29tbWl0U3RvcHNgLCBzbyBgdGFnU3RvcHNgIGtlZXBzIGl0IGxpa2UgYW55IHRhZ2dlZCBzdGFnZSBhbmRcbiAgICogY2FycmllcyB0aGVzZSBuYW1lcyBhcyBgU3RvcC5tZXRhYC4gU3RhbXBlZCBvbiB0aGF0IGZpcnN0IGJ1bmRsZSBvbmx5XG4gICAqICh0aGUgbW91bnQncyBleGl0IGJ1bmRsZSBjYXJyaWVzIG5vbmUg4oCUIHRoZSBvbmNlLXBlci1leGVjdXRpb24gbGF3KS5cbiAgICogVGhlIHN1YmZsb3cncyBPV04gbG9nIGlzIHVudG91Y2hlZDogaXRzIGlubmVyIHN0YWdlcyBkZWNsYXJlIHRoZWlyIG93blxuICAgKiB0YWdzLCBhbmQgYGRyaWxsKG1vdW50KWAgcmVhZHMgdGhvc2Ugb2ZmIHRoZSBpbm5lciBsb2cuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIE9OTFkgdGFnIHNpdGUgZm9yIGEgZm9yay1jaGlsZCBtb3VudCAoYGFkZFN1YkZsb3dDaGFydGApIG9yXG4gICAqIGEgYnJhbmNoIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0QnJhbmNoYCkg4oCUIGFmdGVyIHRob3NlIHRoZSBjdXJzb3Igc3RpbGxcbiAgICogcG9pbnRzIGF0IHRoZSBwYXJlbnQsIHNvIGAudGFnKClgIHJlZnVzZXMgcmF0aGVyIHRoYW4gbWlzLWF0dHJpYnV0ZS4gQVxuICAgKiBsaW5lYXIgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnROZXh0YCkgbW92ZXMgdGhlIGN1cnNvciwgc28gYC50YWcoKWAgd29ya3NcbiAgICogdGhlcmUgdG9vOyBkZWNsYXJlIGluIG9uZSBwbGFjZSwgbm90IGJvdGguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLmFkZFNlbGVjdG9yRnVuY3Rpb24oJ1Nsb3RzJywgcGlja1Nsb3RzLCAnc2xvdHMnKVxuICAgKiAgIC5hZGRTdWJGbG93Q2hhcnRCcmFuY2goJ21lbW9yeScsIG1lbW9yeUNoYXJ0LCAnTWVtb3J5JywgeyB0YWdzOiBbJ3Nsb3Q6bWVtb3J5J10gfSlcbiAgICogICAuYWRkU3ViRmxvd0NoYXJ0QnJhbmNoKCd0b29scycsIHRvb2xzQ2hhcnQsICdUb29scycsIHsgdGFnczogWydzbG90OnRvb2xzJ10gfSlcbiAgICogLmVuZCgpXG4gICAqIGBgYFxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHQge1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgdHJlZUNvbnRleHQ6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ViZmxvdydzIGZpbmFsIHN0YXRlLiBUaGUgdHJhdmVyc2VyJ3MgcmVjb3JkIGhvbGRzIHRoZSBMSVZFIGhlYXBcbiAgICAgKiDigJQgd2hhdCBhIHBsYWluIGBnZXRTbmFwc2hvdCgpYCBhbmQgdGhlIGNoZWNrcG9pbnQgc2VlLiBVbmRlclxuICAgICAqIGBnZXRTbmFwc2hvdCh7IHJlZGFjdDogdHJ1ZSB9KWAgdGhlIGV4ZWN1dG9yIHNlcnZlcyB0aGUgc3ViZmxvdydzIG93blxuICAgICAqIHJlZGFjdGVkIG1pcnJvciBoZXJlIGluc3RlYWQgKDkuMjAuMDsgYGhhbmRsZXJzL3NlcnZlZFN1YmZsb3dSZXN1bHRzYCksXG4gICAgICogd2hpY2ggaXMgZXhhY3RseSB3aGF0IGBzdGF0ZUF0YCBmb2xkcyBgaGlzdG9yeWAgdG8uXG4gICAgICovXG4gICAgZ2xvYmFsQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc3RhZ2VDb250ZXh0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaGlzdG9yeTogdW5rbm93bltdO1xuICAgIC8qKiBJZGVudGl0eSBvZiB0aGUgbG9jYWwgaGlzdG9yeSwgbm90IGl0cyBwYXJlbnQncyBsb2cuICovXG4gICAgcmVhZG9ubHkgbG9nQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gICAgLyoqXG4gICAgICogVGhlIHN1YmZsb3cncyBPV04gZm9sZCBiYXNlIOKAlCB0aGUgc3RhdGUgaXRzIGlzb2xhdGVkIHJ1bnRpbWUgc3RhcnRlZFxuICAgICAqIGZyb20sIGJlZm9yZSBpdHMgZmlyc3QgY29tbWl0LiBUaGUgc2libGluZyBvZlxuICAgICAqIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCwgY2FycmllZCBoZXJlIHNvIGEgc3ViZmxvdydzIGBoaXN0b3J5YFxuICAgICAqIGNhbiBiZSBmb2xkZWQgb2ZmbGluZSBleGFjdGx5IGxpa2UgdGhlIHJ1bidzIGxvZyAoYHN0YXRlQXRgLFxuICAgICAqIGB0aW1lVHJhdmVsKC4uLikuZHJpbGwobW91bnQpYCkuIEZyb3plbiBhbmQgZGV0YWNoZWQuXG4gICAgICpcbiAgICAgKiBOb3JtYWxseSBge31gOiBhIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQgaXMgaXRzZWxmIHRoZSBmaXJzdFxuICAgICAqIENPTU1JVCBpbiBgaGlzdG9yeWAgKHRoZSByb290IGNvbnRleHQgY29tbWl0cyBpdCksIG5vdCBhIHByZS1ydW4gYmFzZS5cbiAgICAgKi9cbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfTtcbiAgcGFyZW50U3RhZ2VJZDogc3RyaW5nO1xuICBwaXBlbGluZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvdyBUcmF2ZXJzZXIgRmFjdG9yeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnkg4oCUIENyZWF0ZXMgYSBGbG93Y2hhcnRUcmF2ZXJzZXIgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICpcbiAqIEluamVjdGVkIGludG8gU3ViZmxvd0V4ZWN1dG9yIHRvIGJyZWFrIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5OlxuICogRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlci5cbiAqXG4gKiBUaGUgZmFjdG9yeSBjYXB0dXJlcyBwYXJlbnQgdHJhdmVyc2VyIGNvbmZpZyAoc3RhZ2VNYXAsIHNjb3BlRmFjdG9yeSwgbmFycmF0aXZlLCBldGMuKVxuICogaW4gYSBjbG9zdXJlLiBTdWJmbG93RXhlY3V0b3IgY2FsbHMgaXQgd2l0aCBzdWJmbG93LXNwZWNpZmljIG92ZXJyaWRlcyAocm9vdCwgcnVudGltZSwgaW5wdXQpLlxuICogVGhlIHJldHVybmVkIHRyYXZlcnNlciB1c2VzIHRoZSBTQU1FIDctcGhhc2UgYWxnb3JpdGhtIGFzIHRoZSB0b3AtbGV2ZWwgdHJhdmVyc2VyLFxuICogc28gZGVjaWRlcnMsIHNlbGVjdG9ycywgbG9vcHMsIGxhenkgc3ViZmxvd3MsIGFuZCBhYm9ydCBzaWduYWxzIGFsbCB3b3JrIGluc2lkZSBzdWJmbG93cy5cbiAqL1xuZXhwb3J0IHR5cGUgU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnk8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChvcHRpb25zOiB7XG4gIC8qKiBSb290IG5vZGUgb2YgdGhlIHN1YmZsb3cgKHdpdGggaXNTdWJmbG93Um9vdCBzdHJpcHBlZCkg4oCUIHRoZSBncmFwaCBldmVyeSBpZCBpbnNpZGUgdGhlIHN1YmZsb3cgcmVzb2x2ZXMgYWdhaW5zdC4gKi9cbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgc3ViZmxvdydzIHRyYXZlcnNhbCBzdGFydHMgd2hlbiBub3QgYXQgYHJvb3RgIOKAlCBhIHJlc3VtZSdzXG4gICAqIG9uZS1zaG90IHJlLWVudHJ5IChgUmVzdW1lSG9wLmVudHJ5YCk6IHRoZSBuZXh0IG1vdW50IG9uIHRoZSBwYXVzZSBwYXRoLFxuICAgKiBvciB0aGUgcGF1c2VkIHN0YWdlJ3Mgc3RhbmQtaW4sIGVhY2ggd2l0aCBpdHMgZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvblxuICAgKiBhdHRhY2hlZC4gVmlzaXRlZCBvbmNlLCBmaXJzdDsgbmV2ZXIgcmVzb2x2YWJsZSBieSBpZC5cbiAgICovXG4gIGVudHJ5PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKlxuICAgKiBQYXJhbGxlbCBzaWJsaW5ncycgcGF1c2VzIHdhaXRpbmcgaW4gdGhpcyBzdWJmbG93IChgUmVzdW1lSG9wLnBlbmRpbmdQYXVzZXNgLFxuICAgKiA5LjI4LjApIOKAlCByYWlzZWQgaW4gb3JkZXIgb25jZSBgZW50cnlgJ3MgY2hhaW4gZW5kcy5cbiAgICovXG4gIHBlbmRpbmdQYXVzZXM/OiByZWFkb25seSBRdWV1ZWRQYXVzZVtdO1xuICAvKiogSXNvbGF0ZWQgZXhlY3V0aW9uIHJ1bnRpbWUgZm9yIHRoZSBzdWJmbG93LiAqL1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgLyoqIE1hcHBlZCBpbnB1dCBmcm9tIHBhcmVudCBzY29wZSAoYmVjb21lcyByZWFkT25seUNvbnRleHQgZm9yIHN0YWdlcykuICovXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHVzZWQgYXMgYnJhbmNoUGF0aCBmb3IgbmFycmF0aXZlIGNvbnRleHQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDE6IHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBzdWJmbG93IE1PVU5UIHN0YWdlIGluIHRoZSBwYXJlbnRcbiAgICogdHJhdmVyc2VyLiBCZWNvbWVzIHRoZSBgcGFyZW50UnVudGltZVN0YWdlSWRgIGZhbGxiYWNrIGZvciB0aGUgc3ViZmxvdydzXG4gICAqIHJvb3Qgc3RhZ2Ugc28gcnVudGltZSBhbmNlc3RvciBjaGFpbnMgY3Jvc3Mgc3ViZmxvdyBib3VuZGFyaWVzLlxuICAgKi9cbiAgcGFyZW50TW91bnRSdW50aW1lU3RhZ2VJZD86IHN0cmluZztcbn0pID0+IFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCwgVFNjb3BlPjtcblxuLyoqXG4gKiBIYW5kbGUgcmV0dXJuZWQgYnkgU3ViZmxvd1RyYXZlcnNlckZhY3RvcnkuXG4gKiBQcm92aWRlcyBleGVjdXRlKCkgKyBhY2Nlc3MgdG8gbmVzdGVkIHN1YmZsb3cgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKiogRXhlY3V0ZSB0aGUgc3ViZmxvdydzIGdyYXBoIHVzaW5nIHRoZSBmdWxsIDctcGhhc2UgdHJhdmVyc2FsIGFsZ29yaXRobS4gKi9cbiAgZXhlY3V0ZSgpOiBQcm9taXNlPFRyYXZlcnNhbFJlc3VsdD47XG4gIC8qKiBDb2xsZWN0IG5lc3RlZCBzdWJmbG93IHJlc3VsdHMgKGZyb20gc3ViZmxvd3MgbW91bnRlZCBpbnNpZGUgdGhpcyBzdWJmbG93KS4gKi9cbiAgZ2V0U3ViZmxvd1Jlc3VsdHMoKTogTWFwPHN0cmluZywgU3ViZmxvd1Jlc3VsdD47XG4gIC8qKlxuICAgKiBGaW5hbCBicmVhayBzdGF0ZSBvZiB0aGUgc3ViZmxvdyBhZnRlciBgZXhlY3V0ZSgpYCByZXR1cm5zLlxuICAgKlxuICAgKiAgIC0gYHNob3VsZEJyZWFrOiB0cnVlYCAg4oaSIGEgc3RhZ2UgaW5zaWRlIHRoZSBzdWJmbG93IGNhbGxlZFxuICAgKiAgICAgYHNjb3BlLiRicmVhayhyZWFzb24pYCwgc3RvcHBpbmcgdGhlIHN1YmZsb3cncyBvd24gdHJhdmVyc2FsLlxuICAgKiAgIC0gYHJlYXNvbmAgICAgICAgICAgICAg4oaSIHRoZSBvcHRpb25hbCBzdHJpbmcgcGFzc2VkIHRvIGAkYnJlYWtgLlxuICAgKlxuICAgKiBVc2VkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIHRvIGltcGxlbWVudCBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2A6XG4gICAqIGlmIHRoZSBtb3VudCBvcHRzIGluIEFORCB0aGUgc3ViZmxvdyBicm9rZSwgdGhlIHBhcmVudCdzIGJyZWFrIGZsYWcgaXNcbiAgICogZm9yd2FyZGVkLlxuICAgKi9cbiAgZ2V0QnJlYWtTdGF0ZSgpOiB7IHNob3VsZEJyZWFrOiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUnVudGltZSBJbnRlcmZhY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIElFeGVjdXRpb25SdW50aW1lIOKAlCBJbnRlcmZhY2UgZm9yIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IHRoYXQgZW5naW5lIGhhbmRsZXJzIG5lZWQgZnJvbSB0aGUgcnVubmVyIGxheWVyLFxuICogYXZvaWRpbmcgY2lyY3VsYXIgaW1wb3J0cyBiZXR3ZWVuIGVuZ2luZS8gYW5kIHJ1bm5lci8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV4ZWN1dGlvblJ1bnRpbWUge1xuICBnbG9iYWxTdG9yZTogeyBnZXRTdGF0ZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICAvKipcbiAgICogVGhlIHJlZGFjdGVkIG1pcnJvciBvZiBgZ2xvYmFsU3RvcmVgIOKAlCBwcmVzZW50IHdoZW4gdGhlIHJ1bidzIHBvbGljeVxuICAgKiBrZWVwcyBvbmUgKGBSdW5Qb2xpY3kubWlycm9yYDogYSBydW4gd2l0aCBhIHJlZGFjdGlvbiBwb2xpY3kpLCBlbHNlIGFic2VudC5cbiAgICogYFN1YmZsb3dFeGVjdXRvcmAgcmVhZHMgaXQgdG8gc2VydmUgYSBzdWJmbG93J3Mgc3RhdGUgKDkuMjAuMCkuXG4gICAqL1xuICByZWRhY3RlZFN0b3JlPzogU2hhcmVkTWVtb3J5O1xuICByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIGV4ZWN1dGlvbkhpc3Rvcnk6IHsgbGlzdCgpOiB1bmtub3duW10gfTtcbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBvbiB0aGlzIHJ1bnRpbWUg4oCUIGl0cyBzdG9yZSwgaXRzIGxvZywgdGhlIHJ1bidzIHBvbGljeVxuICAgKiBhbmQgbWlycm9yIChgRXhlY3V0aW9uUnVudGltZS5uZXdSb290YCkuIGBTdWJmbG93RXhlY3V0b3JgIHN3YXBzIGFcbiAgICogc3ViZmxvdydzIHNlZWQgZnJhbWUgZm9yIHRoZSBmcmFtZSBpdHMgZmlyc3Qgc3RhZ2UgcnVucyBvbiB3aXRoIGl0LlxuICAgKi9cbiAgbmV3Um9vdChuYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBTdGFnZUNvbnRleHQ7XG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IHtcbiAgICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcbiAgICAvKiogVGhlIGNvbW1pdCBsb2cncyBmb2xkIGJhc2Ug4oCUIHNlZSBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAuICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29tbWl0TG9nOiB1bmtub3duW107XG4gICAgcmVhZG9ubHkgbG9nQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gICAgLyoqIER1YWwta2V5ZWQgYnkgc3ViZmxvdyBwYXRoIChsYXN0IGl0ZXJhdGlvbikgQU5EIHBlci1leGVjdXRpb24gbW91bnQgcnVudGltZVN0YWdlSWRcbiAgICAgKiAgKGVhY2ggaXRlcmF0aW9uKSDigJQgc2VlIFJ1bnRpbWVTbmFwc2hvdC5zdWJmbG93UmVzdWx0cyAvIHN1YmZsb3ctY29tbWl0LXZpc2liaWxpdHkuICovXG4gICAgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZWNvcmRlcnM/OiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PjtcbiAgfTtcbiAgc2V0Um9vdE9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgZ2V0UGlwZWxpbmVzKCk6IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBwcm9wYWdhdGVzIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXhlY3V0aW9uRW52IOKAlCBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGUgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzLlxuICpcbiAqIExpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0czogcmVhZC1vbmx5LCBpbmhlcml0ZWQgYnkgY2hpbGQgZXhlY3V0b3JzLFxuICogaW5mcmFzdHJ1Y3R1cmUtb25seSAobm90IGJ1c2luZXNzIGxvZ2ljKS5cbiAqXG4gKiBMaXRtdXMgdGVzdDogQ3JlYXRlZCBleHRlcm5hbCB0byB0aGUgZmxvd2NoYXJ0ICsgcGFzc2VkIGluIGZvciBleGVjdXRpb24gPSBlbnYuXG4gKiBCdXNpbmVzcyBjb25maWcgZm9yIGEgc3BlY2lmaWMgZmxvd2NoYXJ0ID0gYXJncyAoZ2V0QXJncygpKS5cbiAqXG4gKiBJbnRlbnRpb25hbGx5IGEgY2xvc2VkIHR5cGUg4oCUIG5vdCBleHRlbnNpYmxlIHRvIHByZXZlbnQgY291cGxpbmcgYmV0d2VlblxuICogcGFyZW50IGFuZCBjaGlsZCBmbG93Y2hhcnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkVudiB7XG4gIC8qKiBBYm9ydFNpZ25hbCBmb3IgY29vcGVyYXRpdmUgY2FuY2VsbGF0aW9uIGFjcm9zcyBuZXN0ZWQgZXhlY3V0b3JzLiAqL1xuICByZWFkb25seSBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRpbWVvdXQgYnVkZ2V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogVHJhY2UgaWRlbnRpZmllciBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAvIG9ic2VydmFiaWxpdHkuICovXG4gIHJlYWRvbmx5IHRyYWNlSWQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGFuZGxlciBEZXBlbmRlbmNpZXMgKERJIGJhZykg4oCUIHdhcyBQaXBlbGluZUNvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEhhbmRsZXJEZXBzIOKAlCBEZXBlbmRlbmN5IGluamVjdGlvbiBiYWcgcGFzc2VkIHRvIGFsbCBoYW5kbGVyIG1vZHVsZXMuXG4gKlxuICogUHJvdmlkZXMgc2hhcmVkIHN0YXRlIChzdGFnZU1hcCwgcnVudGltZSwgc2NvcGVGYWN0b3J5LCBldGMuKSB3aXRob3V0XG4gKiBoYW5kbGVycyBuZWVkaW5nIHRvIGltcG9ydCB0aGUgdHJhdmVyc2VyIGRpcmVjdGx5LiBBdm9pZHMgY2lyY3VsYXIgZGVwcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgc2NvcGVGYWN0b3J5OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzdHJlYW1IYW5kbGVycz86IFN0cmVhbUhhbmRsZXJzO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlOiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCBwcm9wYWdhdGVzIHRvIHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuICovXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudjtcbiAgbmFycmF0aXZlR2VuZXJhdG9yOiBJQ29udHJvbEZsb3dOYXJyYXRpdmU7XG4gIGxvZ2dlcjogSUxvZ2dlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgcmVzdW1lJ3Mgb25lLXNob3QgcmUtZW50cnkgKE0yKSDigJQgc2hhcmVkIGJ5IHJlZmVyZW5jZSB3aXRoIGV2ZXJ5XG4gICAqIG5lc3RlZCB0cmF2ZXJzZXIsIGxpa2UgdGhlIGV4ZWN1dGlvbiBjb3VudGVyLiBgU3ViZmxvd0V4ZWN1dG9yYCBhc2tzIGl0XG4gICAqIGF0IGVhY2ggc3ViZmxvdyBlbnRyeTogdGhlIEZJUlNUIGVudHJ5IGludG8gYSBzdWJmbG93IG9uIHRoZSBwYXVzZSBwYXRoXG4gICAqIHRha2VzIHRoYXQgc3ViZmxvdydzIGNhcHR1cmVkIHN0YXRlIChzZWVkaW5nIHRoZSBuZXN0ZWQgcnVudGltZSBpbiBwbGFjZVxuICAgKiBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXMg4oCUIHRoZSBtYXBwZXIgc3RpbGwgcnVucyBmb3IgdGhlIHJlYWQtb25seVxuICAgKiBhcmdzKSwgaXRzIGVudHJ5IHBvaW50IGFuZCBhbnkgc2libGluZyBwYXVzZXMgd2FpdGluZyB0aGVyZTsgZXZlcnkgbGF0ZXJcbiAgICogZW50cnkgaXMgYW4gb3JkaW5hcnkgb25lLiBTZWUgYFJlc3VtZUVudHJ5YC4gVW5kZWZpbmVkIG9uIG5vcm1hbCBgcnVuKClgXG4gICAqIHBhdGhzLlxuICAgKi9cbiAgcmVzdW1lPzogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIDkuMjguMCDigJQgdGhlIGVuZ2luZSBwbGFucyBhIHJlc3VtZSB3aXRoIHtAbGluayByZXN1bWV9LlxuICAgKiBTdGlsbCBob25vdXJlZCwgdW5kZXIgdGhlIHNhbWUgb25lLXNob3QgbGF3OiBlYWNoIGNhcHR1cmUgKGtleWVkIGJ5XG4gICAqIHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGApIHNlZWRzIG9ubHkgdGhlIEZJUlNUIGVudHJ5IGludG8gaXRzIHN1YmZsb3csXG4gICAqIGluIHBsYWNlIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlczsgbGF0ZXIgZW50cmllcyBhcmUgb3JkaW5hcnkuXG4gICAqIElnbm9yZWQgd2hlbiBgcmVzdW1lYCBpcyBzZXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCAodHlwZSBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0IHJ1bnRpbWVcbiAgICogZnJvbSB0aGUgcGF5bG9hZC4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXZlcnlcbiAgICogZXhpc3RpbmcgY29uc3VtZXIgcmVuZGVycyBpdCBjb3JyZWN0bHkgKGl0IElTIGEgZmFuLW91dCksIGFuZCBhIGNvbnN1bWVyXG4gICAqIHRoYXQgd2FudHMgdG8gc2F5IFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGNhbiByZWFkIHRoaXMuXG4gICAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCBhdHRlbXB0cyB0aGlzIHN0YWdlJ3MgZnVuY3Rpb24gbWF5IHJ1biwgZnJvbSBpdHMgZGVjbGFyZWRcbiAgICoge0BsaW5rIFJldHJ5UG9saWN5fS4gUHJlc2VudCBvbmx5IHdoZW4gYSBwb2xpY3kgd2FzIGRlY2xhcmVkLiBUaGUgQ09VTlRcbiAgICogb25seSDigJQgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zLCB3aGljaCBhIEpTT04tc2FmZSBzcGVjXG4gICAqIGNhbm5vdCBjYXJyeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMuIEZyZWUgc3RyaW5nczsgZm9vdHByaW50anMgYXNzaWducyB0aGVtIG5vIG1lYW5pbmcuXG4gICAqIEFic2VudCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=
@@ -0,0 +1,34 @@
1
+ /**
2
+ * reservedIds — the ONE refusal the engine's id doors ask (9.37.0, R5; its own file since C6).
3
+ *
4
+ * A user-authored id may not carry the grammar's delimiters (`#`, `/`), and a path segment may not
5
+ * carry the generated-segment marker (`~`). This is the engine's rule about which ids it admits,
6
+ * not part of the grammar: the grammar (`runtimeStageId.ts`, the record's) builds, parses and
7
+ * reads ids and imports nothing; this file reads its delimiters and the `~` grammar
8
+ * (`branchSegment.ts`), so the record no longer imports the engine's segment rule.
9
+ *
10
+ * Asked at the builder's id doors and at the run-time dynamic-StageNode door ONLY — never by the
11
+ * prefixer (which writes `/` on purpose) and never by a store (which holds runtimeStageIds).
12
+ */
13
+ /**
14
+ * Where a user-authored id sits in the grammar — what the builder admits it as.
15
+ *
16
+ * - `'stage'` — a stage id (`stageId` position): `#` and `/` are refused.
17
+ * - `'segment'` — a subflow id or a `parallelForEach` id (a PATH SEGMENT, or
18
+ * the parent of a generated one): `~` is refused too (see `branchSegment.ts`).
19
+ */
20
+ export type IdPosition = 'stage' | 'segment';
21
+ /**
22
+ * The builder's ONE refusal for user-authored ids (RFC 3986 §2.2 — the
23
+ * grammar's delimiters are reserved, so a user id can never fake a subflow
24
+ * path or an execution suffix). Returns the refusal sentence, or `undefined`
25
+ * when the id is admissible; the builder turns a sentence into its own error.
26
+ *
27
+ * The `~` sentence is `branchSegmentReservationMessage`'s, byte-for-byte, so a
28
+ * pre-9.37.0 refusal reads the same.
29
+ *
30
+ * @param what How the error names the id (`"subflow id"`, `"addFunction id"`).
31
+ * @param id The id as the user wrote it.
32
+ * @param position Where the id sits in the grammar.
33
+ */
34
+ export declare function refuseReservedId(what: string, id: string, position: IdPosition): string | undefined;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * reservedIds — the ONE refusal the engine's id doors ask (9.37.0, R5; its own file since C6).
3
+ *
4
+ * A user-authored id may not carry the grammar's delimiters (`#`, `/`), and a path segment may not
5
+ * carry the generated-segment marker (`~`). This is the engine's rule about which ids it admits,
6
+ * not part of the grammar: the grammar (`runtimeStageId.ts`, the record's) builds, parses and
7
+ * reads ids and imports nothing; this file reads its delimiters and the `~` grammar
8
+ * (`branchSegment.ts`), so the record no longer imports the engine's segment rule.
9
+ *
10
+ * Asked at the builder's id doors and at the run-time dynamic-StageNode door ONLY — never by the
11
+ * prefixer (which writes `/` on purpose) and never by a store (which holds runtimeStageIds).
12
+ */
13
+ import { branchSegmentReservationMessage, hasBranchSegmentMarker } from './branchSegment.js';
14
+ import { EXECUTION_DELIMITER, PATH_DELIMITER } from './runtimeStageId.js';
15
+ /**
16
+ * The builder's ONE refusal for user-authored ids (RFC 3986 §2.2 — the
17
+ * grammar's delimiters are reserved, so a user id can never fake a subflow
18
+ * path or an execution suffix). Returns the refusal sentence, or `undefined`
19
+ * when the id is admissible; the builder turns a sentence into its own error.
20
+ *
21
+ * The `~` sentence is `branchSegmentReservationMessage`'s, byte-for-byte, so a
22
+ * pre-9.37.0 refusal reads the same.
23
+ *
24
+ * @param what How the error names the id (`"subflow id"`, `"addFunction id"`).
25
+ * @param id The id as the user wrote it.
26
+ * @param position Where the id sits in the grammar.
27
+ */
28
+ export function refuseReservedId(what, id, position) {
29
+ // A missing / non-string id is not this rule's business — the door's own checks own it.
30
+ if (typeof id !== 'string')
31
+ return undefined;
32
+ if (position === 'segment' && hasBranchSegmentMarker(id))
33
+ return branchSegmentReservationMessage(what, id);
34
+ for (const delimiter of [PATH_DELIMITER, EXECUTION_DELIMITER]) {
35
+ if (!id.includes(delimiter))
36
+ continue;
37
+ return (`${what} '${id}' contains the reserved character '${delimiter}'. ` +
38
+ `From 9.37.0 '${PATH_DELIMITER}' and '${EXECUTION_DELIMITER}' are reserved for the runtimeStageId grammar ` +
39
+ `([subflowPath${PATH_DELIMITER}]stageId${EXECUTION_DELIMITER}executionIndex) — allowing one here would let a ` +
40
+ 'hand-authored id read as a subflow path or an execution suffix and silently mis-attribute its trace. ' +
41
+ 'Rename the id (a dash reads the same).');
42
+ }
43
+ return undefined;
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXJ2ZWRJZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2lkcy9yZXNlcnZlZElkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVcxRTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxRQUFvQjtJQUM3RSx3RkFBd0Y7SUFDeEYsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0MsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztRQUFFLE9BQU8sK0JBQStCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLFNBQVM7UUFDdEMsT0FBTyxDQUNMLEdBQUcsSUFBSSxLQUFLLEVBQUUsc0NBQXNDLFNBQVMsS0FBSztZQUNsRSxnQkFBZ0IsY0FBYyxVQUFVLG1CQUFtQixnREFBZ0Q7WUFDM0csZ0JBQWdCLGNBQWMsV0FBVyxtQkFBbUIsa0RBQWtEO1lBQzlHLHVHQUF1RztZQUN2Ryx3Q0FBd0MsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZXNlcnZlZElkcyDigJQgdGhlIE9ORSByZWZ1c2FsIHRoZSBlbmdpbmUncyBpZCBkb29ycyBhc2sgKDkuMzcuMCwgUjU7IGl0cyBvd24gZmlsZSBzaW5jZSBDNikuXG4gKlxuICogQSB1c2VyLWF1dGhvcmVkIGlkIG1heSBub3QgY2FycnkgdGhlIGdyYW1tYXIncyBkZWxpbWl0ZXJzIChgI2AsIGAvYCksIGFuZCBhIHBhdGggc2VnbWVudCBtYXkgbm90XG4gKiBjYXJyeSB0aGUgZ2VuZXJhdGVkLXNlZ21lbnQgbWFya2VyIChgfmApLiBUaGlzIGlzIHRoZSBlbmdpbmUncyBydWxlIGFib3V0IHdoaWNoIGlkcyBpdCBhZG1pdHMsXG4gKiBub3QgcGFydCBvZiB0aGUgZ3JhbW1hcjogdGhlIGdyYW1tYXIgKGBydW50aW1lU3RhZ2VJZC50c2AsIHRoZSByZWNvcmQncykgYnVpbGRzLCBwYXJzZXMgYW5kXG4gKiByZWFkcyBpZHMgYW5kIGltcG9ydHMgbm90aGluZzsgdGhpcyBmaWxlIHJlYWRzIGl0cyBkZWxpbWl0ZXJzIGFuZCB0aGUgYH5gIGdyYW1tYXJcbiAqIChgYnJhbmNoU2VnbWVudC50c2ApLCBzbyB0aGUgcmVjb3JkIG5vIGxvbmdlciBpbXBvcnRzIHRoZSBlbmdpbmUncyBzZWdtZW50IHJ1bGUuXG4gKlxuICogQXNrZWQgYXQgdGhlIGJ1aWxkZXIncyBpZCBkb29ycyBhbmQgYXQgdGhlIHJ1bi10aW1lIGR5bmFtaWMtU3RhZ2VOb2RlIGRvb3IgT05MWSDigJQgbmV2ZXIgYnkgdGhlXG4gKiBwcmVmaXhlciAod2hpY2ggd3JpdGVzIGAvYCBvbiBwdXJwb3NlKSBhbmQgbmV2ZXIgYnkgYSBzdG9yZSAod2hpY2ggaG9sZHMgcnVudGltZVN0YWdlSWRzKS5cbiAqL1xuXG5pbXBvcnQgeyBicmFuY2hTZWdtZW50UmVzZXJ2YXRpb25NZXNzYWdlLCBoYXNCcmFuY2hTZWdtZW50TWFya2VyIH0gZnJvbSAnLi9icmFuY2hTZWdtZW50LmpzJztcbmltcG9ydCB7IEVYRUNVVElPTl9ERUxJTUlURVIsIFBBVEhfREVMSU1JVEVSIH0gZnJvbSAnLi9ydW50aW1lU3RhZ2VJZC5qcyc7XG5cbi8qKlxuICogV2hlcmUgYSB1c2VyLWF1dGhvcmVkIGlkIHNpdHMgaW4gdGhlIGdyYW1tYXIg4oCUIHdoYXQgdGhlIGJ1aWxkZXIgYWRtaXRzIGl0IGFzLlxuICpcbiAqIC0gYCdzdGFnZSdgICAg4oCUIGEgc3RhZ2UgaWQgKGBzdGFnZUlkYCBwb3NpdGlvbik6IGAjYCBhbmQgYC9gIGFyZSByZWZ1c2VkLlxuICogLSBgJ3NlZ21lbnQnYCDigJQgYSBzdWJmbG93IGlkIG9yIGEgYHBhcmFsbGVsRm9yRWFjaGAgaWQgKGEgUEFUSCBTRUdNRU5ULCBvclxuICogICB0aGUgcGFyZW50IG9mIGEgZ2VuZXJhdGVkIG9uZSk6IGB+YCBpcyByZWZ1c2VkIHRvbyAoc2VlIGBicmFuY2hTZWdtZW50LnRzYCkuXG4gKi9cbmV4cG9ydCB0eXBlIElkUG9zaXRpb24gPSAnc3RhZ2UnIHwgJ3NlZ21lbnQnO1xuXG4vKipcbiAqIFRoZSBidWlsZGVyJ3MgT05FIHJlZnVzYWwgZm9yIHVzZXItYXV0aG9yZWQgaWRzIChSRkMgMzk4NiDCpzIuMiDigJQgdGhlXG4gKiBncmFtbWFyJ3MgZGVsaW1pdGVycyBhcmUgcmVzZXJ2ZWQsIHNvIGEgdXNlciBpZCBjYW4gbmV2ZXIgZmFrZSBhIHN1YmZsb3dcbiAqIHBhdGggb3IgYW4gZXhlY3V0aW9uIHN1ZmZpeCkuIFJldHVybnMgdGhlIHJlZnVzYWwgc2VudGVuY2UsIG9yIGB1bmRlZmluZWRgXG4gKiB3aGVuIHRoZSBpZCBpcyBhZG1pc3NpYmxlOyB0aGUgYnVpbGRlciB0dXJucyBhIHNlbnRlbmNlIGludG8gaXRzIG93biBlcnJvci5cbiAqXG4gKiBUaGUgYH5gIHNlbnRlbmNlIGlzIGBicmFuY2hTZWdtZW50UmVzZXJ2YXRpb25NZXNzYWdlYCdzLCBieXRlLWZvci1ieXRlLCBzbyBhXG4gKiBwcmUtOS4zNy4wIHJlZnVzYWwgcmVhZHMgdGhlIHNhbWUuXG4gKlxuICogQHBhcmFtIHdoYXQgICAgIEhvdyB0aGUgZXJyb3IgbmFtZXMgdGhlIGlkIChgXCJzdWJmbG93IGlkXCJgLCBgXCJhZGRGdW5jdGlvbiBpZFwiYCkuXG4gKiBAcGFyYW0gaWQgICAgICAgVGhlIGlkIGFzIHRoZSB1c2VyIHdyb3RlIGl0LlxuICogQHBhcmFtIHBvc2l0aW9uIFdoZXJlIHRoZSBpZCBzaXRzIGluIHRoZSBncmFtbWFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmdXNlUmVzZXJ2ZWRJZCh3aGF0OiBzdHJpbmcsIGlkOiBzdHJpbmcsIHBvc2l0aW9uOiBJZFBvc2l0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gQSBtaXNzaW5nIC8gbm9uLXN0cmluZyBpZCBpcyBub3QgdGhpcyBydWxlJ3MgYnVzaW5lc3Mg4oCUIHRoZSBkb29yJ3Mgb3duIGNoZWNrcyBvd24gaXQuXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAocG9zaXRpb24gPT09ICdzZWdtZW50JyAmJiBoYXNCcmFuY2hTZWdtZW50TWFya2VyKGlkKSkgcmV0dXJuIGJyYW5jaFNlZ21lbnRSZXNlcnZhdGlvbk1lc3NhZ2Uod2hhdCwgaWQpO1xuICBmb3IgKGNvbnN0IGRlbGltaXRlciBvZiBbUEFUSF9ERUxJTUlURVIsIEVYRUNVVElPTl9ERUxJTUlURVJdKSB7XG4gICAgaWYgKCFpZC5pbmNsdWRlcyhkZWxpbWl0ZXIpKSBjb250aW51ZTtcbiAgICByZXR1cm4gKFxuICAgICAgYCR7d2hhdH0gJyR7aWR9JyBjb250YWlucyB0aGUgcmVzZXJ2ZWQgY2hhcmFjdGVyICcke2RlbGltaXRlcn0nLiBgICtcbiAgICAgIGBGcm9tIDkuMzcuMCAnJHtQQVRIX0RFTElNSVRFUn0nIGFuZCAnJHtFWEVDVVRJT05fREVMSU1JVEVSfScgYXJlIHJlc2VydmVkIGZvciB0aGUgcnVudGltZVN0YWdlSWQgZ3JhbW1hciBgICtcbiAgICAgIGAoW3N1YmZsb3dQYXRoJHtQQVRIX0RFTElNSVRFUn1dc3RhZ2VJZCR7RVhFQ1VUSU9OX0RFTElNSVRFUn1leGVjdXRpb25JbmRleCkg4oCUIGFsbG93aW5nIG9uZSBoZXJlIHdvdWxkIGxldCBhIGAgK1xuICAgICAgJ2hhbmQtYXV0aG9yZWQgaWQgcmVhZCBhcyBhIHN1YmZsb3cgcGF0aCBvciBhbiBleGVjdXRpb24gc3VmZml4IGFuZCBzaWxlbnRseSBtaXMtYXR0cmlidXRlIGl0cyB0cmFjZS4gJyArXG4gICAgICAnUmVuYW1lIHRoZSBpZCAoYSBkYXNoIHJlYWRzIHRoZSBzYW1lKS4nXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -36,12 +36,18 @@
36
36
  * `isExecutionKey`, `stageIdOf`, `subflowPathOf`, `subflowSegmentsOf`,
37
37
  * `lastSegmentOf`, `isWithinSubflow` — and every composer joins through
38
38
  * `joinPath` / `buildRuntimeStageId`; no other file splits on `#` or `/`.
39
- * The delimiters are RESERVED (RFC 3986 §2.2 style): `refuseReservedId` is
40
- * the builder's one refusal for user-authored ids, so last-delimiter parsing
41
- * is sound by construction rather than by hope. Stores and the prefixer never
42
- * refuse — they hold runtime ids and prefixed ids, which carry the delimiters
43
- * on purpose.
39
+ * It builds, parses and reads ids, and imports nothing: it is the record's
40
+ * (C6). The delimiters are RESERVED (RFC 3986 §2.2 style): the engine's id
41
+ * doors refuse them in user-authored ids through ONE function,
42
+ * `reservedIds.ts · refuseReservedId`, which reads them here — so
43
+ * last-delimiter parsing is sound by construction rather than by hope. Stores
44
+ * and the prefixer never refuse — they hold runtime ids and prefixed ids,
45
+ * which carry the delimiters on purpose.
44
46
  */
47
+ /** Separates subflow path segments from each other and from the stage id. */
48
+ export declare const PATH_DELIMITER = "/";
49
+ /** Separates the (prefixed) stage id from the execution index. */
50
+ export declare const EXECUTION_DELIMITER = "#";
45
51
  declare const RUNTIME_STAGE_ID: unique symbol;
46
52
  declare const EXECUTION_INDEX: unique symbol;
47
53
  declare const COMMIT_IDX: unique symbol;
@@ -121,7 +127,8 @@ export declare function splitStageId(prefixedStageId: string): {
121
127
  /**
122
128
  * True when `key` names one EXECUTION (`…#N`) rather than a stage or a subflow
123
129
  * path. Its presence alone decides: the delimiter is reserved in every
124
- * user-authored id (`refuseReservedId`), so only the grammar puts it there.
130
+ * user-authored id (`reservedIds.ts · refuseReservedId`), so only the grammar
131
+ * puts it there.
125
132
  *
126
133
  * Asked where a map is keyed by both — `subflowResults` is dual-keyed by
127
134
  * subflow path AND by mount runtimeStageId.
@@ -153,31 +160,6 @@ export declare function lastSegmentOf(path: string): string;
153
160
  export declare function joinPath(...segments: readonly string[]): string;
154
161
  /** True when the (prefixed) id `id` sits INSIDE the subflow at `path` — at any depth below it. */
155
162
  export declare function isWithinSubflow(id: string, path: string): boolean;
156
- /**
157
- * Where a user-authored id sits in the grammar — what the builder admits it as.
158
- *
159
- * - `'stage'` — a stage id (`stageId` position): `#` and `/` are refused.
160
- * - `'segment'` — a subflow id or a `parallelForEach` id (a PATH SEGMENT, or
161
- * the parent of a generated one): `~` is refused too (see `branchSegment.ts`).
162
- */
163
- export type IdPosition = 'stage' | 'segment';
164
- /**
165
- * The builder's ONE refusal for user-authored ids (RFC 3986 §2.2 — the
166
- * grammar's delimiters are reserved, so a user id can never fake a subflow
167
- * path or an execution suffix). Returns the refusal sentence, or `undefined`
168
- * when the id is admissible; the builder turns a sentence into its own error.
169
- *
170
- * Called at the builder's id doors ONLY — never by the prefixer (which writes
171
- * `/` on purpose) and never by a store (which holds runtimeStageIds).
172
- *
173
- * The `~` sentence is `branchSegmentReservationMessage`'s, byte-for-byte, so a
174
- * pre-9.37.0 refusal reads the same.
175
- *
176
- * @param what How the error names the id (`"subflow id"`, `"addFunction id"`).
177
- * @param id The id as the user wrote it.
178
- * @param position Where the id sits in the grammar.
179
- */
180
- export declare function refuseReservedId(what: string, id: string, position: IdPosition): string | undefined;
181
163
  /**
182
164
  * Shared mutable counter for execution index.
183
165
  * Passed by reference to child traversers (subflows) so they
@@ -36,17 +36,18 @@
36
36
  * `isExecutionKey`, `stageIdOf`, `subflowPathOf`, `subflowSegmentsOf`,
37
37
  * `lastSegmentOf`, `isWithinSubflow` — and every composer joins through
38
38
  * `joinPath` / `buildRuntimeStageId`; no other file splits on `#` or `/`.
39
- * The delimiters are RESERVED (RFC 3986 §2.2 style): `refuseReservedId` is
40
- * the builder's one refusal for user-authored ids, so last-delimiter parsing
41
- * is sound by construction rather than by hope. Stores and the prefixer never
42
- * refuse — they hold runtime ids and prefixed ids, which carry the delimiters
43
- * on purpose.
39
+ * It builds, parses and reads ids, and imports nothing: it is the record's
40
+ * (C6). The delimiters are RESERVED (RFC 3986 §2.2 style): the engine's id
41
+ * doors refuse them in user-authored ids through ONE function,
42
+ * `reservedIds.ts · refuseReservedId`, which reads them here — so
43
+ * last-delimiter parsing is sound by construction rather than by hope. Stores
44
+ * and the prefixer never refuse — they hold runtime ids and prefixed ids,
45
+ * which carry the delimiters on purpose.
44
46
  */
45
- import { branchSegmentReservationMessage, hasBranchSegmentMarker } from './branchSegment.js';
46
47
  /** Separates subflow path segments from each other and from the stage id. */
47
- const PATH_DELIMITER = '/';
48
+ export const PATH_DELIMITER = '/';
48
49
  /** Separates the (prefixed) stage id from the execution index. */
49
- const EXECUTION_DELIMITER = '#';
50
+ export const EXECUTION_DELIMITER = '#';
50
51
  /**
51
52
  * Build a runtimeStageId from its components.
52
53
  *
@@ -132,7 +133,8 @@ export function splitStageId(prefixedStageId) {
132
133
  /**
133
134
  * True when `key` names one EXECUTION (`…#N`) rather than a stage or a subflow
134
135
  * path. Its presence alone decides: the delimiter is reserved in every
135
- * user-authored id (`refuseReservedId`), so only the grammar puts it there.
136
+ * user-authored id (`reservedIds.ts · refuseReservedId`), so only the grammar
137
+ * puts it there.
136
138
  *
137
139
  * Asked where a map is keyed by both — `subflowResults` is dual-keyed by
138
140
  * subflow path AND by mount runtimeStageId.
@@ -185,41 +187,8 @@ export function joinPath(...segments) {
185
187
  export function isWithinSubflow(id, path) {
186
188
  return id.startsWith(`${path}${PATH_DELIMITER}`);
187
189
  }
188
- /**
189
- * The builder's ONE refusal for user-authored ids (RFC 3986 §2.2 — the
190
- * grammar's delimiters are reserved, so a user id can never fake a subflow
191
- * path or an execution suffix). Returns the refusal sentence, or `undefined`
192
- * when the id is admissible; the builder turns a sentence into its own error.
193
- *
194
- * Called at the builder's id doors ONLY — never by the prefixer (which writes
195
- * `/` on purpose) and never by a store (which holds runtimeStageIds).
196
- *
197
- * The `~` sentence is `branchSegmentReservationMessage`'s, byte-for-byte, so a
198
- * pre-9.37.0 refusal reads the same.
199
- *
200
- * @param what How the error names the id (`"subflow id"`, `"addFunction id"`).
201
- * @param id The id as the user wrote it.
202
- * @param position Where the id sits in the grammar.
203
- */
204
- export function refuseReservedId(what, id, position) {
205
- // A missing / non-string id is not this rule's business — the door's own checks own it.
206
- if (typeof id !== 'string')
207
- return undefined;
208
- if (position === 'segment' && hasBranchSegmentMarker(id))
209
- return branchSegmentReservationMessage(what, id);
210
- for (const delimiter of [PATH_DELIMITER, EXECUTION_DELIMITER]) {
211
- if (!id.includes(delimiter))
212
- continue;
213
- return (`${what} '${id}' contains the reserved character '${delimiter}'. ` +
214
- `From 9.37.0 '${PATH_DELIMITER}' and '${EXECUTION_DELIMITER}' are reserved for the runtimeStageId grammar ` +
215
- `([subflowPath${PATH_DELIMITER}]stageId${EXECUTION_DELIMITER}executionIndex) — allowing one here would let a ` +
216
- 'hand-authored id read as a subflow path or an execution suffix and silently mis-attribute its trace. ' +
217
- 'Rename the id (a dash reads the same).');
218
- }
219
- return undefined;
220
- }
221
190
  /** Create a new execution counter starting at 0. */
222
191
  export function createExecutionCounter() {
223
192
  return { value: 0 };
224
193
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZVN0YWdlSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2lkcy9ydW50aW1lU3RhZ2VJZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdGLDZFQUE2RTtBQUM3RSxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0Isa0VBQWtFO0FBQ2xFLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBZWhDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFlLEVBQUUsY0FBc0IsRUFBRSxXQUFvQjtJQUMvRixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEUsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsbUJBQW1CLEdBQUcsY0FBYyxFQUFvQixDQUFDO0FBQ3hGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsY0FBc0I7SUFLeEQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hFLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQW1CLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xHLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRCxNQUFNLGNB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QWMsV0FBVyxtQkFBbUIsa0RBQWtEO1lBQzlHLHVHQUF1RztZQUN2Ryx3Q0FBd0MsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBV0Qsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBydW50aW1lU3RhZ2VJZCDigJQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggZXhlY3V0aW9uIHN0ZXAgZHVyaW5nIHRyYXZlcnNhbC5cbiAqXG4gKiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleFxuICpcbiAqIENvbXBvbmVudHM6XG4gKiAgIHN0YWdlSWQgICAgICAgIOKAlCBzdGFibGUgbm9kZSBJRCBmcm9tIHRoZSBidWlsZGVyICgnY2FsbC1sbG0nLCAnc2VlZCcpXG4gKiAgIGV4ZWN1dGlvbkluZGV4IOKAlCBtb25vdG9uaWMgY291bnRlciBpbmNyZW1lbnRlZCBwZXIgc3RhZ2UgZXhlY3V0aW9uICgwLCAxLCAyLi4uKVxuICogICBzdWJmbG93UGF0aCAgICDigJQgb3B0aW9uYWwgcGF0aCBmb3Igc3ViZmxvdyBzdGFnZXMgKCdzZi10b29scycsICdzZi1vdXRlci9zZi1pbm5lcicpXG4gKlxuICogUHJvcGVydGllczpcbiAqICAgLSBVbmlxdWUgd2l0aGluIGEgcnVuIChleGVjdXRpb25JbmRleCBuZXZlciByZXBlYXRzKVxuICogICAtIEV4ZWN1dGlvbi1vcmRlcmVkIChzb3J0IGJ5IGV4ZWN1dGlvbkluZGV4ID0gZXhlY3V0aW9uIG9yZGVyKVxuICogICAtIEh1bWFuLXJlYWRhYmxlICgnc2YtdG9vbHMvZXhlY3V0ZS10b29sLWNhbGxzIzgnKVxuICogICAtIFBhcnNlYWJsZSAoc3BsaXQgb24gJyMnIGZvciBzdGFnZUlkIGFuZCBpbmRleCwgc3BsaXQgc3RhZ2VJZCBvbiAnLycgZm9yIHN1YmZsb3cgcGF0aClcbiAqXG4gKiBOYW1pbmctY29sbGlzaW9uIHdhcm5pbmdcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICBUaGUgcGFyc2VkLW91dHB1dCBgLnN0YWdlSWRgIGZpZWxkIGJlbG93IGlzIHRoZSBMT0NBTCBmb3JtIChzZWdtZW50XG4gKiAgIGFmdGVyIHRoZSBsYXN0ICcvJykuIFRoaXMgaXMgTk9UIHRoZSBzYW1lIGFzIGBzcGVjLmlkYCAvIGBub2RlLmlkYFxuICogICBmb3Igc3ViZmxvdy1uZXN0ZWQgc3RhZ2VzLCB3aGljaCBjYXJyeSB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtXG4gKiAgIChgJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscydgKS4gVG8gY29tcGFyZSBzYWZlbHksIHVzZVxuICogICBgc3BsaXRTdGFnZUlkKHNwZWMuaWQpYCB0byBkZWNvbXBvc2UgdGhlIHByZWZpeGVkIGZvcm0gdGhlIHNhbWVcbiAqICAgd2F5IGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBkZWNvbXBvc2VzIGEgcnVudGltZVN0YWdlSWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogYnVpbGRSdW50aW1lU3RhZ2VJZCgnY2FsbC1sbG0nLCA1KSAgICAgICAgICAgICAgICAgICAgLy8gJ2NhbGwtbGxtIzUnXG4gKiBidWlsZFJ1bnRpbWVTdGFnZUlkKCdleGVjdXRlLXRvb2wtY2FsbHMnLCA4LCAnc2YtdG9vbHMnKSAvLyAnc2YtdG9vbHMvZXhlY3V0ZS10b29sLWNhbGxzIzgnXG4gKiBidWlsZFJ1bnRpbWVTdGFnZUlkKCd2YWxpZGF0ZScsIDMsICdzZi1vdXRlci9zZi1pbm5lcicpICAvLyAnc2Ytb3V0ZXIvc2YtaW5uZXIvdmFsaWRhdGUjMydcbiAqIGBgYFxuICpcbiAqICMjIFRoZSBvbmUgb3duZXIgKEY3LCA5LjM3LjApXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIE9ORSBwbGFjZSB0aGUgZ3JhbW1hciBpcyBzcGVsbGVkLiBFdmVyeSByZWFkZXIgYXNrcyBpdCDigJRcbiAqIGBpc0V4ZWN1dGlvbktleWAsIGBzdGFnZUlkT2ZgLCBgc3ViZmxvd1BhdGhPZmAsIGBzdWJmbG93U2VnbWVudHNPZmAsXG4gKiBgbGFzdFNlZ21lbnRPZmAsIGBpc1dpdGhpblN1YmZsb3dgIOKAlCBhbmQgZXZlcnkgY29tcG9zZXIgam9pbnMgdGhyb3VnaFxuICogYGpvaW5QYXRoYCAvIGBidWlsZFJ1bnRpbWVTdGFnZUlkYDsgbm8gb3RoZXIgZmlsZSBzcGxpdHMgb24gYCNgIG9yIGAvYC5cbiAqIFRoZSBkZWxpbWl0ZXJzIGFyZSBSRVNFUlZFRCAoUkZDIDM5ODYgwqcyLjIgc3R5bGUpOiBgcmVmdXNlUmVzZXJ2ZWRJZGAgaXNcbiAqIHRoZSBidWlsZGVyJ3Mgb25lIHJlZnVzYWwgZm9yIHVzZXItYXV0aG9yZWQgaWRzLCBzbyBsYXN0LWRlbGltaXRlciBwYXJzaW5nXG4gKiBpcyBzb3VuZCBieSBjb25zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gYnkgaG9wZS4gU3RvcmVzIGFuZCB0aGUgcHJlZml4ZXIgbmV2ZXJcbiAqIHJlZnVzZSDigJQgdGhleSBob2xkIHJ1bnRpbWUgaWRzIGFuZCBwcmVmaXhlZCBpZHMsIHdoaWNoIGNhcnJ5IHRoZSBkZWxpbWl0ZXJzXG4gKiBvbiBwdXJwb3NlLlxuICovXG5cbmltcG9ydCB7IGJyYW5jaFNlZ21lbnRSZXNlcnZhdGlvbk1lc3NhZ2UsIGhhc0JyYW5jaFNlZ21lbnRNYXJrZXIgfSBmcm9tICcuL2JyYW5jaFNlZ21lbnQuanMnO1xuXG4vKiogU2VwYXJhdGVzIHN1YmZsb3cgcGF0aCBzZWdtZW50cyBmcm9tIGVhY2ggb3RoZXIgYW5kIGZyb20gdGhlIHN0YWdlIGlkLiAqL1xuY29uc3QgUEFUSF9ERUxJTUlURVIgPSAnLyc7XG4vKiogU2VwYXJhdGVzIHRoZSAocHJlZml4ZWQpIHN0YWdlIGlkIGZyb20gdGhlIGV4ZWN1dGlvbiBpbmRleC4gKi9cbmNvbnN0IEVYRUNVVElPTl9ERUxJTUlURVIgPSAnIyc7XG5cbi8vIOKUgOKUgCBCcmFuZHMgKHR5cGVzIG9ubHkg4oCUIFJ1c3QtbmV3dHlwZSBzdHlsZTsgbm8gcnVudGltZSBjb3N0KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVjbGFyZSBjb25zdCBSVU5USU1FX1NUQUdFX0lEOiB1bmlxdWUgc3ltYm9sO1xuZGVjbGFyZSBjb25zdCBFWEVDVVRJT05fSU5ERVg6IHVuaXF1ZSBzeW1ib2w7XG5kZWNsYXJlIGNvbnN0IENPTU1JVF9JRFg6IHVuaXF1ZSBzeW1ib2w7XG5cbi8qKiBBIGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgIHN0cmluZyB0aGUgZ3JhbW1hciBwcm9kdWNlZC4gQXNzaWduYWJsZSB0byBgc3RyaW5nYC4gKi9cbmV4cG9ydCB0eXBlIFJ1bnRpbWVTdGFnZUlkID0gc3RyaW5nICYgeyByZWFkb25seSBbUlVOVElNRV9TVEFHRV9JRF06IHRydWUgfTtcbi8qKiBUaGUgcnVuLWdsb2JhbCwgbW9ub3RvbmljIHBvc2l0aW9uIG9mIG9uZSBzdGFnZSBleGVjdXRpb24gKHRoZSBgI05gKS4gQXNzaWduYWJsZSB0byBgbnVtYmVyYC4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkluZGV4ID0gbnVtYmVyICYgeyByZWFkb25seSBbRVhFQ1VUSU9OX0lOREVYXTogdHJ1ZSB9O1xuLyoqIEEgYnVuZGxlJ3MgcG9zaXRpb24gaW4gYSBjb21taXQgbG9nIChgYnVuZGxlLmlkeGApLiBBc3NpZ25hYmxlIHRvIGBudW1iZXJgLiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0SWR4ID0gbnVtYmVyICYgeyByZWFkb25seSBbQ09NTUlUX0lEWF06IHRydWUgfTtcblxuLyoqXG4gKiBCdWlsZCBhIHJ1bnRpbWVTdGFnZUlkIGZyb20gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogTm90ZTogVGhlIHRyYXZlcnNlciBkb2VzIE5PVCB1c2UgdGhlIHN1YmZsb3dQYXRoIHBhcmFtZXRlciDigJQgbm9kZS5pZCBhbHJlYWR5XG4gKiBpbmNsdWRlcyB0aGUgc3ViZmxvdyBwcmVmaXggZnJvbSB0aGUgYnVpbGRlci4gVGhpcyBwYXJhbWV0ZXIgZXhpc3RzIGZvciBleHRlcm5hbFxuICogY29uc3VtZXJzIGNvbnN0cnVjdGluZyBJRHMgZnJvbSBwYXJzZWQgY29tcG9uZW50cyAocm91bmQtdHJpcCB2aWEgcGFyc2VSdW50aW1lU3RhZ2VJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJ1bnRpbWVTdGFnZUlkKHN0YWdlSWQ6IHN0cmluZywgZXhlY3V0aW9uSW5kZXg6IG51bWJlciwgc3ViZmxvd1BhdGg/OiBzdHJpbmcpOiBSdW50aW1lU3RhZ2VJZCB7XG4gIGNvbnN0IHByZWZpeCA9IHN1YmZsb3dQYXRoID8gYCR7c3ViZmxvd1BhdGh9JHtQQVRIX0RFTElNSVRFUn1gIDogJyc7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtzdGFnZUlkfSR7RVhFQ1VUSU9OX0RFTElNSVRFUn0ke2V4ZWN1dGlvbkluZGV4fWAgYXMgUnVudGltZVN0YWdlSWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBydW50aW1lU3RhZ2VJZCBpbnRvIGl0cyBjb21wb25lbnRzLlxuICpcbiAqIElNUE9SVEFOVCDigJQgbmFtaW5nIGNvbGxpc2lvbjogdGhlIHJldHVybmVkIGBzdGFnZUlkYCBpcyB0aGUgTE9DQUxcbiAqIGZvcm0gKHRoZSBzZWdtZW50IGJldHdlZW4gdGhlIGxhc3QgJy8nIGFuZCB0aGUgJyMnKS4gVGhpcyBpcyBOT1RcbiAqIHRoZSBzYW1lIGFzIGBzcGVjLmlkYCBvciBgbm9kZS5pZGAgZm9yIHN1YmZsb3ctbmVzdGVkIHN0YWdlcyxcbiAqIHdoaWNoIGNvbnRhaW4gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS5cbiAqXG4gKiAgIHBhcnNlUnVudGltZVN0YWdlSWQoJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscyM4Jykuc3RhZ2VJZFxuICogICAvLyDihpIgJ2V4ZWN1dGUtdG9vbC1jYWxscycgICAoTE9DQUwpXG4gKlxuICogICBub2RlLmlkICAvLyAocG9zdC1tb3VudCwgaW4gYSBzcGVjIHRoYXQgY29udGFpbnMgc3ViZmxvd3MpXG4gKiAgIC8vIOKGkiAnc2YtdG9vbHMvZXhlY3V0ZS10b29sLWNhbGxzJyAgIChGVUxMIHByZWZpeGVkKVxuICpcbiAqIFRvIGNvbXBhcmUgdGhlc2UgdHdvIHNhZmVseSwgdXNlIGBzcGxpdFN0YWdlSWQobm9kZS5pZClgIHRvIGdldFxuICogdGhlIGxvY2FsIGZvcm0sIE9SIHJlY29uc3RydWN0IHRoZSBmdWxsIGZvcm0gdmlhXG4gKiBgKHN1YmZsb3dQYXRoID8gc3ViZmxvd1BhdGggKyAnLycgOiAnJykgKyBzdGFnZUlkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHtcbiAgc3RhZ2VJZDogc3RyaW5nO1xuICBleGVjdXRpb25JbmRleDogRXhlY3V0aW9uSW5kZXg7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59IHtcbiAgY29uc3QgaGFzaElkeCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKEVYRUNVVElPTl9ERUxJTUlURVIpO1xuICBpZiAoaGFzaElkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4geyBzdGFnZUlkOiBydW50aW1lU3RhZ2VJZCwgZXhlY3V0aW9uSW5kZXg6IDAgYXMgRXhlY3V0aW9uSW5kZXgsIHN1YmZsb3dQYXRoOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIGNvbnN0IGJlZm9yZUhhc2ggPSBydW50aW1lU3RhZ2VJZC5zbGljZSgwLCBoYXNoSWR4KTtcbiAgY29uc3QgZXhlY3V0aW9uSW5kZXggPSBwYXJzZUludChydW50aW1lU3RhZ2VJZC5zbGljZShoYXNoSWR4ICsgMSksIDEwKSBhcyBFeGVjdXRpb25JbmRleDtcblxuICBjb25zdCBsYXN0U2xhc2ggPSBiZWZvcmVIYXNoLmxhc3RJbmRleE9mKFBBVEhfREVMSU1JVEVSKTtcbiAgaWYgKGxhc3RTbGFzaCA9PT0gLTEpIHtcbiAgICByZXR1cm4geyBzdGFnZUlkOiBiZWZvcmVIYXNoLCBleGVjdXRpb25JbmRleCwgc3ViZmxvd1BhdGg6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFnZUlkOiBiZWZvcmVIYXNoLnNsaWNlKGxhc3RTbGFzaCArIDEpLFxuICAgIGV4ZWN1dGlvbkluZGV4LFxuICAgIHN1YmZsb3dQYXRoOiBiZWZvcmVIYXNoLnNsaWNlKDAsIGxhc3RTbGFzaCksXG4gIH07XG59XG5cbi8qKlxuICogRGVjb21wb3NlIGEgKHBvc3NpYmx5IHByZWZpeGVkKSBzdGFnZSBpZCBpbnRvIGl0cyBjb21wb25lbnRzLlxuICpcbiAqIFVzZSB0aGlzIHdoZW4geW91IGhhdmUgYW4gaWQgV0lUSE9VVCB0aGUgYCNOYCBleGVjdXRpb24gc3VmZml4IGFuZFxuICogbmVlZCB0aGUgbG9jYWwgc3RhZ2UgbmFtZSBhbmQvb3IgdGhlIHN1YmZsb3cgcGF0aC4gQ29tbW9uIHNvdXJjZXNcbiAqIG9mIHN1Y2ggaWRzOlxuICogICAtIGBzcGVjLmlkYCAocG9zdC1tb3VudCB0aGUgaWQgaW5jbHVkZXMgYW55IHN1YmZsb3cgcHJlZml4KVxuICogICAtIGBDb21taXRCdW5kbGUuc3RhZ2VJZGAgKHBvc3QtbW91bnQgaWQpXG4gKiAgIC0gYG5vZGUuaWRgIGZyb20geHlmbG93IG5vZGVzIGJ1aWx0IG9mZiB0aGUgc3BlY1xuICogICAtIHRoZSBzZWdtZW50IG9mIGBydW50aW1lU3RhZ2VJZGAgQkVGT1JFIHRoZSBgI2AgKHVzZVxuICogICAgIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBkaXJlY3RseSBmb3IgZnVsbCBydW50aW1lU3RhZ2VJZCBzdHJpbmdzKVxuICpcbiAqIE1pcnJvcnMgdGhlIGRlY29tcG9zaXRpb24gYHBhcnNlUnVudGltZVN0YWdlSWRgIHBlcmZvcm1zIG9uIHRoZVxuICogc3RhZ2VJZCBwb3J0aW9uIG9mIGEgcnVudGltZVN0YWdlSWQsIHNvIHRoZSB0d28gaGVscGVycyBzdGF5IGluXG4gKiBsb2Nrc3RlcCBvbiBuYW1pbmcgYW5kIGJlaGF2aW9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBzcGxpdFN0YWdlSWQoJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscycpXG4gKiAvLyDihpIgeyBsb2NhbFN0YWdlSWQ6ICdleGVjdXRlLXRvb2wtY2FsbHMnLCBzdWJmbG93UGF0aDogJ3NmLXRvb2xzJyB9XG4gKlxuICogc3BsaXRTdGFnZUlkKCdleGVjdXRlLXRvb2wtY2FsbHMnKVxuICogLy8g4oaSIHsgbG9jYWxTdGFnZUlkOiAnZXhlY3V0ZS10b29sLWNhbGxzJywgc3ViZmxvd1BhdGg6IHVuZGVmaW5lZCB9XG4gKlxuICogc3BsaXRTdGFnZUlkKCdzZi1vdXRlci9zZi1pbm5lci92YWxpZGF0ZScpXG4gKiAvLyDihpIgeyBsb2NhbFN0YWdlSWQ6ICd2YWxpZGF0ZScsIHN1YmZsb3dQYXRoOiAnc2Ytb3V0ZXIvc2YtaW5uZXInIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U3RhZ2VJZChwcmVmaXhlZFN0YWdlSWQ6IHN0cmluZyk6IHtcbiAgbG9jYWxTdGFnZUlkOiBzdHJpbmc7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59IHtcbiAgY29uc3QgbGFzdFNsYXNoID0gcHJlZml4ZWRTdGFnZUlkLmxhc3RJbmRleE9mKFBBVEhfREVMSU1JVEVSKTtcbiAgaWYgKGxhc3RTbGFzaCA9PT0gLTEpIHtcbiAgICByZXR1cm4geyBsb2NhbFN0YWdlSWQ6IHByZWZpeGVkU3RhZ2VJZCwgc3ViZmxvd1BhdGg6IHVuZGVmaW5lZCB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbG9jYWxTdGFnZUlkOiBwcmVmaXhlZFN0YWdlSWQuc2xpY2UobGFzdFNsYXNoICsgMSksXG4gICAgc3ViZmxvd1BhdGg6IHByZWZpeGVkU3RhZ2VJZC5zbGljZSgwLCBsYXN0U2xhc2gpLFxuICB9O1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBga2V5YCBuYW1lcyBvbmUgRVhFQ1VUSU9OIChg4oCmI05gKSByYXRoZXIgdGhhbiBhIHN0YWdlIG9yIGEgc3ViZmxvd1xuICogcGF0aC4gSXRzIHByZXNlbmNlIGFsb25lIGRlY2lkZXM6IHRoZSBkZWxpbWl0ZXIgaXMgcmVzZXJ2ZWQgaW4gZXZlcnlcbiAqIHVzZXItYXV0aG9yZWQgaWQgKGByZWZ1c2VSZXNlcnZlZElkYCksIHNvIG9ubHkgdGhlIGdyYW1tYXIgcHV0cyBpdCB0aGVyZS5cbiAqXG4gKiBBc2tlZCB3aGVyZSBhIG1hcCBpcyBrZXllZCBieSBib3RoIOKAlCBgc3ViZmxvd1Jlc3VsdHNgIGlzIGR1YWwta2V5ZWQgYnlcbiAqIHN1YmZsb3cgcGF0aCBBTkQgYnkgbW91bnQgcnVudGltZVN0YWdlSWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4ZWN1dGlvbktleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4ga2V5LmluY2x1ZGVzKEVYRUNVVElPTl9ERUxJTUlURVIpO1xufVxuXG4vKipcbiAqIFRoZSBGVUxMIChzdWJmbG93LXByZWZpeGVkKSBzdGFnZSBpZCBvZiBhIHJ1bnRpbWVTdGFnZUlkIOKAlCBldmVyeXRoaW5nIGJlZm9yZVxuICogdGhlIGxhc3QgYCNgLCBpLmUuIHdoYXQgYG5vZGUuaWRgIC8gYENvbW1pdEJ1bmRsZS5zdGFnZUlkYCBob2xkLiBBIHN0cmluZ1xuICogd2l0aCBubyBgI2AgaXMgcmV0dXJuZWQgd2hvbGUuXG4gKlxuICogQGV4YW1wbGUgc3RhZ2VJZE9mKCdzZi10b29scy9leGVjdXRlIzgnKSAvLyAnc2YtdG9vbHMvZXhlY3V0ZSdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YWdlSWRPZihydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaElkeCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKEVYRUNVVElPTl9ERUxJTUlURVIpO1xuICByZXR1cm4gaGFzaElkeCA9PT0gLTEgPyBydW50aW1lU3RhZ2VJZCA6IHJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIGhhc2hJZHgpO1xufVxuXG4vKiogVGhlIGV4ZWN1dGlvbiBpbmRleCBvZiBhIHJ1bnRpbWVTdGFnZUlkLCBvciBgTmFOYCB3aGVuIGl0IGNhcnJpZXMgbm9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRpb25JbmRleE9mKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBoYXNoSWR4ID0gcnVudGltZVN0YWdlSWQubGFzdEluZGV4T2YoRVhFQ1VUSU9OX0RFTElNSVRFUik7XG4gIHJldHVybiBoYXNoSWR4ID09PSAtMSA/IE5hTiA6IE51bWJlci5wYXJzZUludChydW50aW1lU3RhZ2VJZC5zbGljZShoYXNoSWR4ICsgMSksIDEwKTtcbn1cblxuLyoqXG4gKiBUaGUgc3ViZmxvdyBwYXRoIGEgcnVudGltZVN0YWdlSWQgZXhlY3V0ZXMgaW4gKGAnc2YtYS9zZi1iJ2ApLCBvclxuICogYHVuZGVmaW5lZGAgYXQgdGhlIHRvcCBsZXZlbC4gUmVhZHMgdGhlIHN0YWdlLWlkIHBhcnQsIHNvIGl0IGFncmVlcyB3aXRoXG4gKiBgc3BsaXRTdGFnZUlkKHN0YWdlSWRPZihyaWQpKS5zdWJmbG93UGF0aGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJmbG93UGF0aE9mKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3BsaXRTdGFnZUlkKHN0YWdlSWRPZihydW50aW1lU3RhZ2VJZCkpLnN1YmZsb3dQYXRoO1xufVxuXG4vKiogVGhlIHN1YmZsb3cgcGF0aCBvZiBhIHJ1bnRpbWVTdGFnZUlkIGFzIHNlZ21lbnRzIChgWydzZi1hJywgJ3NmLWInXWApOyBgW11gIGF0IHRoZSB0b3AgbGV2ZWwuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViZmxvd1NlZ21lbnRzT2YocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0aCA9IHN1YmZsb3dQYXRoT2YocnVudGltZVN0YWdlSWQpO1xuICByZXR1cm4gcGF0aCA9PT0gdW5kZWZpbmVkID8gW10gOiBwYXRoLnNwbGl0KFBBVEhfREVMSU1JVEVSKTtcbn1cblxuLyoqIFRoZSBub24tZW1wdHkgc2VnbWVudHMgb2YgYSBzdWJmbG93IHBhdGggb3IgcHJlZml4ZWQgaWQgKGAnYS8vYi8nYCDihpIgYFsnYScsICdiJ11gKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoU2VnbWVudHMocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gcGF0aC5zcGxpdChQQVRIX0RFTElNSVRFUikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApO1xufVxuXG4vKiogVGhlIGxhc3Qgc2VnbWVudCBvZiBhIHBhdGggb3IgcHJlZml4ZWQgaWQgKGAnc2YtYS9zZi1iJ2Ag4oaSIGAnc2YtYidgKTsgdGhlIHdob2xlIHN0cmluZyB3aGVuIGl0IGhhcyBub25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3RTZWdtZW50T2YocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGguc2xpY2UocGF0aC5sYXN0SW5kZXhPZihQQVRIX0RFTElNSVRFUikgKyAxKTtcbn1cblxuLyoqIEpvaW4gcGF0aCBzZWdtZW50cyB3aXRoIHRoZSBncmFtbWFyJ3MgZGVsaW1pdGVyIChgam9pblBhdGgoJ3NmJywgJ3N0YWdlJylgIOKGkiBgJ3NmL3N0YWdlJ2ApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5QYXRoKC4uLnNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBzZWdtZW50cy5qb2luKFBBVEhfREVMSU1JVEVSKTtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGUgKHByZWZpeGVkKSBpZCBgaWRgIHNpdHMgSU5TSURFIHRoZSBzdWJmbG93IGF0IGBwYXRoYCDigJQgYXQgYW55IGRlcHRoIGJlbG93IGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2l0aGluU3ViZmxvdyhpZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlkLnN0YXJ0c1dpdGgoYCR7cGF0aH0ke1BBVEhfREVMSU1JVEVSfWApO1xufVxuXG4vKipcbiAqIFdoZXJlIGEgdXNlci1hdXRob3JlZCBpZCBzaXRzIGluIHRoZSBncmFtbWFyIOKAlCB3aGF0IHRoZSBidWlsZGVyIGFkbWl0cyBpdCBhcy5cbiAqXG4gKiAtIGAnc3RhZ2UnYCAgIOKAlCBhIHN0YWdlIGlkIChgc3RhZ2VJZGAgcG9zaXRpb24pOiBgI2AgYW5kIGAvYCBhcmUgcmVmdXNlZC5cbiAqIC0gYCdzZWdtZW50J2Ag4oCUIGEgc3ViZmxvdyBpZCBvciBhIGBwYXJhbGxlbEZvckVhY2hgIGlkIChhIFBBVEggU0VHTUVOVCwgb3JcbiAqICAgdGhlIHBhcmVudCBvZiBhIGdlbmVyYXRlZCBvbmUpOiBgfmAgaXMgcmVmdXNlZCB0b28gKHNlZSBgYnJhbmNoU2VnbWVudC50c2ApLlxuICovXG5leHBvcnQgdHlwZSBJZFBvc2l0aW9uID0gJ3N0YWdlJyB8ICdzZWdtZW50JztcblxuLyoqXG4gKiBUaGUgYnVpbGRlcidzIE9ORSByZWZ1c2FsIGZvciB1c2VyLWF1dGhvcmVkIGlkcyAoUkZDIDM5ODYgwqcyLjIg4oCUIHRoZVxuICogZ3JhbW1hcidzIGRlbGltaXRlcnMgYXJlIHJlc2VydmVkLCBzbyBhIHVzZXIgaWQgY2FuIG5ldmVyIGZha2UgYSBzdWJmbG93XG4gKiBwYXRoIG9yIGFuIGV4ZWN1dGlvbiBzdWZmaXgpLiBSZXR1cm5zIHRoZSByZWZ1c2FsIHNlbnRlbmNlLCBvciBgdW5kZWZpbmVkYFxuICogd2hlbiB0aGUgaWQgaXMgYWRtaXNzaWJsZTsgdGhlIGJ1aWxkZXIgdHVybnMgYSBzZW50ZW5jZSBpbnRvIGl0cyBvd24gZXJyb3IuXG4gKlxuICogQ2FsbGVkIGF0IHRoZSBidWlsZGVyJ3MgaWQgZG9vcnMgT05MWSDigJQgbmV2ZXIgYnkgdGhlIHByZWZpeGVyICh3aGljaCB3cml0ZXNcbiAqIGAvYCBvbiBwdXJwb3NlKSBhbmQgbmV2ZXIgYnkgYSBzdG9yZSAod2hpY2ggaG9sZHMgcnVudGltZVN0YWdlSWRzKS5cbiAqXG4gKiBUaGUgYH5gIHNlbnRlbmNlIGlzIGBicmFuY2hTZWdtZW50UmVzZXJ2YXRpb25NZXNzYWdlYCdzLCBieXRlLWZvci1ieXRlLCBzbyBhXG4gKiBwcmUtOS4zNy4wIHJlZnVzYWwgcmVhZHMgdGhlIHNhbWUuXG4gKlxuICogQHBhcmFtIHdoYXQgICAgIEhvdyB0aGUgZXJyb3IgbmFtZXMgdGhlIGlkIChgXCJzdWJmbG93IGlkXCJgLCBgXCJhZGRGdW5jdGlvbiBpZFwiYCkuXG4gKiBAcGFyYW0gaWQgICAgICAgVGhlIGlkIGFzIHRoZSB1c2VyIHdyb3RlIGl0LlxuICogQHBhcmFtIHBvc2l0aW9uIFdoZXJlIHRoZSBpZCBzaXRzIGluIHRoZSBncmFtbWFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmdXNlUmVzZXJ2ZWRJZCh3aGF0OiBzdHJpbmcsIGlkOiBzdHJpbmcsIHBvc2l0aW9uOiBJZFBvc2l0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gQSBtaXNzaW5nIC8gbm9uLXN0cmluZyBpZCBpcyBub3QgdGhpcyBydWxlJ3MgYnVzaW5lc3Mg4oCUIHRoZSBkb29yJ3Mgb3duIGNoZWNrcyBvd24gaXQuXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAocG9zaXRpb24gPT09ICdzZWdtZW50JyAmJiBoYXNCcmFuY2hTZWdtZW50TWFya2VyKGlkKSkgcmV0dXJuIGJyYW5jaFNlZ21lbnRSZXNlcnZhdGlvbk1lc3NhZ2Uod2hhdCwgaWQpO1xuICBmb3IgKGNvbnN0IGRlbGltaXRlciBvZiBbUEFUSF9ERUxJTUlURVIsIEVYRUNVVElPTl9ERUxJTUlURVJdKSB7XG4gICAgaWYgKCFpZC5pbmNsdWRlcyhkZWxpbWl0ZXIpKSBjb250aW51ZTtcbiAgICByZXR1cm4gKFxuICAgICAgYCR7d2hhdH0gJyR7aWR9JyBjb250YWlucyB0aGUgcmVzZXJ2ZWQgY2hhcmFjdGVyICcke2RlbGltaXRlcn0nLiBgICtcbiAgICAgIGBGcm9tIDkuMzcuMCAnJHtQQVRIX0RFTElNSVRFUn0nIGFuZCAnJHtFWEVDVVRJT05fREVMSU1JVEVSfScgYXJlIHJlc2VydmVkIGZvciB0aGUgcnVudGltZVN0YWdlSWQgZ3JhbW1hciBgICtcbiAgICAgIGAoW3N1YmZsb3dQYXRoJHtQQVRIX0RFTElNSVRFUn1dc3RhZ2VJZCR7RVhFQ1VUSU9OX0RFTElNSVRFUn1leGVjdXRpb25JbmRleCkg4oCUIGFsbG93aW5nIG9uZSBoZXJlIHdvdWxkIGxldCBhIGAgK1xuICAgICAgJ2hhbmQtYXV0aG9yZWQgaWQgcmVhZCBhcyBhIHN1YmZsb3cgcGF0aCBvciBhbiBleGVjdXRpb24gc3VmZml4IGFuZCBzaWxlbnRseSBtaXMtYXR0cmlidXRlIGl0cyB0cmFjZS4gJyArXG4gICAgICAnUmVuYW1lIHRoZSBpZCAoYSBkYXNoIHJlYWRzIHRoZSBzYW1lKS4nXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNoYXJlZCBtdXRhYmxlIGNvdW50ZXIgZm9yIGV4ZWN1dGlvbiBpbmRleC5cbiAqIFBhc3NlZCBieSByZWZlcmVuY2UgdG8gY2hpbGQgdHJhdmVyc2VycyAoc3ViZmxvd3MpIHNvIHRoZXlcbiAqIGNvbnRpbnVlIHRoZSBnbG9iYWwgbnVtYmVyaW5nIGluc3RlYWQgb2YgcmVzdGFydGluZyBhdCAwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkNvdW50ZXIge1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG4vKiogQ3JlYXRlIGEgbmV3IGV4ZWN1dGlvbiBjb3VudGVyIHN0YXJ0aW5nIGF0IDAuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhlY3V0aW9uQ291bnRlcigpOiBFeGVjdXRpb25Db3VudGVyIHtcbiAgcmV0dXJuIHsgdmFsdWU6IDAgfTtcbn1cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZVN0YWdlSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2lkcy9ydW50aW1lU3RhZ2VJZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNHO0FBRUgsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDbEMsa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQWV2Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBZSxFQUFFLGNBQXNCLEVBQUUsV0FBb0I7SUFDL0YsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BFLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLG1CQUFtQixHQUFHLGNBQWMsRUFBb0IsQ0FBQztBQUN4RixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLGNBQXNCO0lBS3hELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFtQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENB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QUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCwrR0FBK0c7QUFDL0csTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZO0lBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxrR0FBa0c7QUFDbEcsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFHLFFBQTJCO0lBQ3JELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsa0dBQWtHO0FBQ2xHLE1BQU0sVUFBVSxlQUFlLENBQUMsRUFBVSxFQUFFLElBQVk7SUFDdEQsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQVdELG9EQUFvRDtBQUNwRCxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcnVudGltZVN0YWdlSWQg4oCUIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBlYWNoIGV4ZWN1dGlvbiBzdGVwIGR1cmluZyB0cmF2ZXJzYWwuXG4gKlxuICogRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXhcbiAqXG4gKiBDb21wb25lbnRzOlxuICogICBzdGFnZUlkICAgICAgICDigJQgc3RhYmxlIG5vZGUgSUQgZnJvbSB0aGUgYnVpbGRlciAoJ2NhbGwtbGxtJywgJ3NlZWQnKVxuICogICBleGVjdXRpb25JbmRleCDigJQgbW9ub3RvbmljIGNvdW50ZXIgaW5jcmVtZW50ZWQgcGVyIHN0YWdlIGV4ZWN1dGlvbiAoMCwgMSwgMi4uLilcbiAqICAgc3ViZmxvd1BhdGggICAg4oCUIG9wdGlvbmFsIHBhdGggZm9yIHN1YmZsb3cgc3RhZ2VzICgnc2YtdG9vbHMnLCAnc2Ytb3V0ZXIvc2YtaW5uZXInKVxuICpcbiAqIFByb3BlcnRpZXM6XG4gKiAgIC0gVW5pcXVlIHdpdGhpbiBhIHJ1biAoZXhlY3V0aW9uSW5kZXggbmV2ZXIgcmVwZWF0cylcbiAqICAgLSBFeGVjdXRpb24tb3JkZXJlZCAoc29ydCBieSBleGVjdXRpb25JbmRleCA9IGV4ZWN1dGlvbiBvcmRlcilcbiAqICAgLSBIdW1hbi1yZWFkYWJsZSAoJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscyM4JylcbiAqICAgLSBQYXJzZWFibGUgKHNwbGl0IG9uICcjJyBmb3Igc3RhZ2VJZCBhbmQgaW5kZXgsIHNwbGl0IHN0YWdlSWQgb24gJy8nIGZvciBzdWJmbG93IHBhdGgpXG4gKlxuICogTmFtaW5nLWNvbGxpc2lvbiB3YXJuaW5nXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAgVGhlIHBhcnNlZC1vdXRwdXQgYC5zdGFnZUlkYCBmaWVsZCBiZWxvdyBpcyB0aGUgTE9DQUwgZm9ybSAoc2VnbWVudFxuICogICBhZnRlciB0aGUgbGFzdCAnLycpLiBUaGlzIGlzIE5PVCB0aGUgc2FtZSBhcyBgc3BlYy5pZGAgLyBgbm9kZS5pZGBcbiAqICAgZm9yIHN1YmZsb3ctbmVzdGVkIHN0YWdlcywgd2hpY2ggY2FycnkgdGhlIEZVTEwgcHJlZml4ZWQgZm9ybVxuICogICAoYCdzZi10b29scy9leGVjdXRlLXRvb2wtY2FsbHMnYCkuIFRvIGNvbXBhcmUgc2FmZWx5LCB1c2VcbiAqICAgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgdG8gZGVjb21wb3NlIHRoZSBwcmVmaXhlZCBmb3JtIHRoZSBzYW1lXG4gKiAgIHdheSBgcGFyc2VSdW50aW1lU3RhZ2VJZGAgZGVjb21wb3NlcyBhIHJ1bnRpbWVTdGFnZUlkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGJ1aWxkUnVudGltZVN0YWdlSWQoJ2NhbGwtbGxtJywgNSkgICAgICAgICAgICAgICAgICAgIC8vICdjYWxsLWxsbSM1J1xuICogYnVpbGRSdW50aW1lU3RhZ2VJZCgnZXhlY3V0ZS10b29sLWNhbGxzJywgOCwgJ3NmLXRvb2xzJykgLy8gJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscyM4J1xuICogYnVpbGRSdW50aW1lU3RhZ2VJZCgndmFsaWRhdGUnLCAzLCAnc2Ytb3V0ZXIvc2YtaW5uZXInKSAgLy8gJ3NmLW91dGVyL3NmLWlubmVyL3ZhbGlkYXRlIzMnXG4gKiBgYGBcbiAqXG4gKiAjIyBUaGUgb25lIG93bmVyIChGNywgOS4zNy4wKVxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIHRoZSBPTkUgcGxhY2UgdGhlIGdyYW1tYXIgaXMgc3BlbGxlZC4gRXZlcnkgcmVhZGVyIGFza3MgaXQg4oCUXG4gKiBgaXNFeGVjdXRpb25LZXlgLCBgc3RhZ2VJZE9mYCwgYHN1YmZsb3dQYXRoT2ZgLCBgc3ViZmxvd1NlZ21lbnRzT2ZgLFxuICogYGxhc3RTZWdtZW50T2ZgLCBgaXNXaXRoaW5TdWJmbG93YCDigJQgYW5kIGV2ZXJ5IGNvbXBvc2VyIGpvaW5zIHRocm91Z2hcbiAqIGBqb2luUGF0aGAgLyBgYnVpbGRSdW50aW1lU3RhZ2VJZGA7IG5vIG90aGVyIGZpbGUgc3BsaXRzIG9uIGAjYCBvciBgL2AuXG4gKiBJdCBidWlsZHMsIHBhcnNlcyBhbmQgcmVhZHMgaWRzLCBhbmQgaW1wb3J0cyBub3RoaW5nOiBpdCBpcyB0aGUgcmVjb3JkJ3NcbiAqIChDNikuIFRoZSBkZWxpbWl0ZXJzIGFyZSBSRVNFUlZFRCAoUkZDIDM5ODYgwqcyLjIgc3R5bGUpOiB0aGUgZW5naW5lJ3MgaWRcbiAqIGRvb3JzIHJlZnVzZSB0aGVtIGluIHVzZXItYXV0aG9yZWQgaWRzIHRocm91Z2ggT05FIGZ1bmN0aW9uLFxuICogYHJlc2VydmVkSWRzLnRzIMK3IHJlZnVzZVJlc2VydmVkSWRgLCB3aGljaCByZWFkcyB0aGVtIGhlcmUg4oCUIHNvXG4gKiBsYXN0LWRlbGltaXRlciBwYXJzaW5nIGlzIHNvdW5kIGJ5IGNvbnN0cnVjdGlvbiByYXRoZXIgdGhhbiBieSBob3BlLiBTdG9yZXNcbiAqIGFuZCB0aGUgcHJlZml4ZXIgbmV2ZXIgcmVmdXNlIOKAlCB0aGV5IGhvbGQgcnVudGltZSBpZHMgYW5kIHByZWZpeGVkIGlkcyxcbiAqIHdoaWNoIGNhcnJ5IHRoZSBkZWxpbWl0ZXJzIG9uIHB1cnBvc2UuXG4gKi9cblxuLyoqIFNlcGFyYXRlcyBzdWJmbG93IHBhdGggc2VnbWVudHMgZnJvbSBlYWNoIG90aGVyIGFuZCBmcm9tIHRoZSBzdGFnZSBpZC4gKi9cbmV4cG9ydCBjb25zdCBQQVRIX0RFTElNSVRFUiA9ICcvJztcbi8qKiBTZXBhcmF0ZXMgdGhlIChwcmVmaXhlZCkgc3RhZ2UgaWQgZnJvbSB0aGUgZXhlY3V0aW9uIGluZGV4LiAqL1xuZXhwb3J0IGNvbnN0IEVYRUNVVElPTl9ERUxJTUlURVIgPSAnIyc7XG5cbi8vIOKUgOKUgCBCcmFuZHMgKHR5cGVzIG9ubHkg4oCUIFJ1c3QtbmV3dHlwZSBzdHlsZTsgbm8gcnVudGltZSBjb3N0KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVjbGFyZSBjb25zdCBSVU5USU1FX1NUQUdFX0lEOiB1bmlxdWUgc3ltYm9sO1xuZGVjbGFyZSBjb25zdCBFWEVDVVRJT05fSU5ERVg6IHVuaXF1ZSBzeW1ib2w7XG5kZWNsYXJlIGNvbnN0IENPTU1JVF9JRFg6IHVuaXF1ZSBzeW1ib2w7XG5cbi8qKiBBIGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgIHN0cmluZyB0aGUgZ3JhbW1hciBwcm9kdWNlZC4gQXNzaWduYWJsZSB0byBgc3RyaW5nYC4gKi9cbmV4cG9ydCB0eXBlIFJ1bnRpbWVTdGFnZUlkID0gc3RyaW5nICYgeyByZWFkb25seSBbUlVOVElNRV9TVEFHRV9JRF06IHRydWUgfTtcbi8qKiBUaGUgcnVuLWdsb2JhbCwgbW9ub3RvbmljIHBvc2l0aW9uIG9mIG9uZSBzdGFnZSBleGVjdXRpb24gKHRoZSBgI05gKS4gQXNzaWduYWJsZSB0byBgbnVtYmVyYC4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkluZGV4ID0gbnVtYmVyICYgeyByZWFkb25seSBbRVhFQ1VUSU9OX0lOREVYXTogdHJ1ZSB9O1xuLyoqIEEgYnVuZGxlJ3MgcG9zaXRpb24gaW4gYSBjb21taXQgbG9nIChgYnVuZGxlLmlkeGApLiBBc3NpZ25hYmxlIHRvIGBudW1iZXJgLiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0SWR4ID0gbnVtYmVyICYgeyByZWFkb25seSBbQ09NTUlUX0lEWF06IHRydWUgfTtcblxuLyoqXG4gKiBCdWlsZCBhIHJ1bnRpbWVTdGFnZUlkIGZyb20gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogTm90ZTogVGhlIHRyYXZlcnNlciBkb2VzIE5PVCB1c2UgdGhlIHN1YmZsb3dQYXRoIHBhcmFtZXRlciDigJQgbm9kZS5pZCBhbHJlYWR5XG4gKiBpbmNsdWRlcyB0aGUgc3ViZmxvdyBwcmVmaXggZnJvbSB0aGUgYnVpbGRlci4gVGhpcyBwYXJhbWV0ZXIgZXhpc3RzIGZvciBleHRlcm5hbFxuICogY29uc3VtZXJzIGNvbnN0cnVjdGluZyBJRHMgZnJvbSBwYXJzZWQgY29tcG9uZW50cyAocm91bmQtdHJpcCB2aWEgcGFyc2VSdW50aW1lU3RhZ2VJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJ1bnRpbWVTdGFnZUlkKHN0YWdlSWQ6IHN0cmluZywgZXhlY3V0aW9uSW5kZXg6IG51bWJlciwgc3ViZmxvd1BhdGg/OiBzdHJpbmcpOiBSdW50aW1lU3RhZ2VJZCB7XG4gIGNvbnN0IHByZWZpeCA9IHN1YmZsb3dQYXRoID8gYCR7c3ViZmxvd1BhdGh9JHtQQVRIX0RFTElNSVRFUn1gIDogJyc7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtzdGFnZUlkfSR7RVhFQ1VUSU9OX0RFTElNSVRFUn0ke2V4ZWN1dGlvbkluZGV4fWAgYXMgUnVudGltZVN0YWdlSWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBydW50aW1lU3RhZ2VJZCBpbnRvIGl0cyBjb21wb25lbnRzLlxuICpcbiAqIElNUE9SVEFOVCDigJQgbmFtaW5nIGNvbGxpc2lvbjogdGhlIHJldHVybmVkIGBzdGFnZUlkYCBpcyB0aGUgTE9DQUxcbiAqIGZvcm0gKHRoZSBzZWdtZW50IGJldHdlZW4gdGhlIGxhc3QgJy8nIGFuZCB0aGUgJyMnKS4gVGhpcyBpcyBOT1RcbiAqIHRoZSBzYW1lIGFzIGBzcGVjLmlkYCBvciBgbm9kZS5pZGAgZm9yIHN1YmZsb3ctbmVzdGVkIHN0YWdlcyxcbiAqIHdoaWNoIGNvbnRhaW4gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS5cbiAqXG4gKiAgIHBhcnNlUnVudGltZVN0YWdlSWQoJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscyM4Jykuc3RhZ2VJZFxuICogICAvLyDihpIgJ2V4ZWN1dGUtdG9vbC1jYWxscycgICAoTE9DQUwpXG4gKlxuICogICBub2RlLmlkICAvLyAocG9zdC1tb3VudCwgaW4gYSBzcGVjIHRoYXQgY29udGFpbnMgc3ViZmxvd3MpXG4gKiAgIC8vIOKGkiAnc2YtdG9vbHMvZXhlY3V0ZS10b29sLWNhbGxzJyAgIChGVUxMIHByZWZpeGVkKVxuICpcbiAqIFRvIGNvbXBhcmUgdGhlc2UgdHdvIHNhZmVseSwgdXNlIGBzcGxpdFN0YWdlSWQobm9kZS5pZClgIHRvIGdldFxuICogdGhlIGxvY2FsIGZvcm0sIE9SIHJlY29uc3RydWN0IHRoZSBmdWxsIGZvcm0gdmlhXG4gKiBgKHN1YmZsb3dQYXRoID8gc3ViZmxvd1BhdGggKyAnLycgOiAnJykgKyBzdGFnZUlkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHtcbiAgc3RhZ2VJZDogc3RyaW5nO1xuICBleGVjdXRpb25JbmRleDogRXhlY3V0aW9uSW5kZXg7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59IHtcbiAgY29uc3QgaGFzaElkeCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKEVYRUNVVElPTl9ERUxJTUlURVIpO1xuICBpZiAoaGFzaElkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4geyBzdGFnZUlkOiBydW50aW1lU3RhZ2VJZCwgZXhlY3V0aW9uSW5kZXg6IDAgYXMgRXhlY3V0aW9uSW5kZXgsIHN1YmZsb3dQYXRoOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIGNvbnN0IGJlZm9yZUhhc2ggPSBydW50aW1lU3RhZ2VJZC5zbGljZSgwLCBoYXNoSWR4KTtcbiAgY29uc3QgZXhlY3V0aW9uSW5kZXggPSBwYXJzZUludChydW50aW1lU3RhZ2VJZC5zbGljZShoYXNoSWR4ICsgMSksIDEwKSBhcyBFeGVjdXRpb25JbmRleDtcblxuICBjb25zdCBsYXN0U2xhc2ggPSBiZWZvcmVIYXNoLmxhc3RJbmRleE9mKFBBVEhfREVMSU1JVEVSKTtcbiAgaWYgKGxhc3RTbGFzaCA9PT0gLTEpIHtcbiAgICByZXR1cm4geyBzdGFnZUlkOiBiZWZvcmVIYXNoLCBleGVjdXRpb25JbmRleCwgc3ViZmxvd1BhdGg6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFnZUlkOiBiZWZvcmVIYXNoLnNsaWNlKGxhc3RTbGFzaCArIDEpLFxuICAgIGV4ZWN1dGlvbkluZGV4LFxuICAgIHN1YmZsb3dQYXRoOiBiZWZvcmVIYXNoLnNsaWNlKDAsIGxhc3RTbGFzaCksXG4gIH07XG59XG5cbi8qKlxuICogRGVjb21wb3NlIGEgKHBvc3NpYmx5IHByZWZpeGVkKSBzdGFnZSBpZCBpbnRvIGl0cyBjb21wb25lbnRzLlxuICpcbiAqIFVzZSB0aGlzIHdoZW4geW91IGhhdmUgYW4gaWQgV0lUSE9VVCB0aGUgYCNOYCBleGVjdXRpb24gc3VmZml4IGFuZFxuICogbmVlZCB0aGUgbG9jYWwgc3RhZ2UgbmFtZSBhbmQvb3IgdGhlIHN1YmZsb3cgcGF0aC4gQ29tbW9uIHNvdXJjZXNcbiAqIG9mIHN1Y2ggaWRzOlxuICogICAtIGBzcGVjLmlkYCAocG9zdC1tb3VudCB0aGUgaWQgaW5jbHVkZXMgYW55IHN1YmZsb3cgcHJlZml4KVxuICogICAtIGBDb21taXRCdW5kbGUuc3RhZ2VJZGAgKHBvc3QtbW91bnQgaWQpXG4gKiAgIC0gYG5vZGUuaWRgIGZyb20geHlmbG93IG5vZGVzIGJ1aWx0IG9mZiB0aGUgc3BlY1xuICogICAtIHRoZSBzZWdtZW50IG9mIGBydW50aW1lU3RhZ2VJZGAgQkVGT1JFIHRoZSBgI2AgKHVzZVxuICogICAgIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBkaXJlY3RseSBmb3IgZnVsbCBydW50aW1lU3RhZ2VJZCBzdHJpbmdzKVxuICpcbiAqIE1pcnJvcnMgdGhlIGRlY29tcG9zaXRpb24gYHBhcnNlUnVudGltZVN0YWdlSWRgIHBlcmZvcm1zIG9uIHRoZVxuICogc3RhZ2VJZCBwb3J0aW9uIG9mIGEgcnVudGltZVN0YWdlSWQsIHNvIHRoZSB0d28gaGVscGVycyBzdGF5IGluXG4gKiBsb2Nrc3RlcCBvbiBuYW1pbmcgYW5kIGJlaGF2aW9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBzcGxpdFN0YWdlSWQoJ3NmLXRvb2xzL2V4ZWN1dGUtdG9vbC1jYWxscycpXG4gKiAvLyDihpIgeyBsb2NhbFN0YWdlSWQ6ICdleGVjdXRlLXRvb2wtY2FsbHMnLCBzdWJmbG93UGF0aDogJ3NmLXRvb2xzJyB9XG4gKlxuICogc3BsaXRTdGFnZUlkKCdleGVjdXRlLXRvb2wtY2FsbHMnKVxuICogLy8g4oaSIHsgbG9jYWxTdGFnZUlkOiAnZXhlY3V0ZS10b29sLWNhbGxzJywgc3ViZmxvd1BhdGg6IHVuZGVmaW5lZCB9XG4gKlxuICogc3BsaXRTdGFnZUlkKCdzZi1vdXRlci9zZi1pbm5lci92YWxpZGF0ZScpXG4gKiAvLyDihpIgeyBsb2NhbFN0YWdlSWQ6ICd2YWxpZGF0ZScsIHN1YmZsb3dQYXRoOiAnc2Ytb3V0ZXIvc2YtaW5uZXInIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U3RhZ2VJZChwcmVmaXhlZFN0YWdlSWQ6IHN0cmluZyk6IHtcbiAgbG9jYWxTdGFnZUlkOiBzdHJpbmc7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59IHtcbiAgY29uc3QgbGFzdFNsYXNoID0gcHJlZml4ZWRTdGFnZUlkLmxhc3RJbmRleE9mKFBBVEhfREVMSU1JVEVSKTtcbiAgaWYgKGxhc3RTbGFzaCA9PT0gLTEpIHtcbiAgICByZXR1cm4geyBsb2NhbFN0YWdlSWQ6IHByZWZpeGVkU3RhZ2VJZCwgc3ViZmxvd1BhdGg6IHVuZGVmaW5lZCB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbG9jYWxTdGFnZUlkOiBwcmVmaXhlZFN0YWdlSWQuc2xpY2UobGFzdFNsYXNoICsgMSksXG4gICAgc3ViZmxvd1BhdGg6IHByZWZpeGVkU3RhZ2VJZC5zbGljZSgwLCBsYXN0U2xhc2gpLFxuICB9O1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBga2V5YCBuYW1lcyBvbmUgRVhFQ1VUSU9OIChg4oCmI05gKSByYXRoZXIgdGhhbiBhIHN0YWdlIG9yIGEgc3ViZmxvd1xuICogcGF0aC4gSXRzIHByZXNlbmNlIGFsb25lIGRlY2lkZXM6IHRoZSBkZWxpbWl0ZXIgaXMgcmVzZXJ2ZWQgaW4gZXZlcnlcbiAqIHVzZXItYXV0aG9yZWQgaWQgKGByZXNlcnZlZElkcy50cyDCtyByZWZ1c2VSZXNlcnZlZElkYCksIHNvIG9ubHkgdGhlIGdyYW1tYXJcbiAqIHB1dHMgaXQgdGhlcmUuXG4gKlxuICogQXNrZWQgd2hlcmUgYSBtYXAgaXMga2V5ZWQgYnkgYm90aCDigJQgYHN1YmZsb3dSZXN1bHRzYCBpcyBkdWFsLWtleWVkIGJ5XG4gKiBzdWJmbG93IHBhdGggQU5EIGJ5IG1vdW50IHJ1bnRpbWVTdGFnZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeGVjdXRpb25LZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5pbmNsdWRlcyhFWEVDVVRJT05fREVMSU1JVEVSKTtcbn1cblxuLyoqXG4gKiBUaGUgRlVMTCAoc3ViZmxvdy1wcmVmaXhlZCkgc3RhZ2UgaWQgb2YgYSBydW50aW1lU3RhZ2VJZCDigJQgZXZlcnl0aGluZyBiZWZvcmVcbiAqIHRoZSBsYXN0IGAjYCwgaS5lLiB3aGF0IGBub2RlLmlkYCAvIGBDb21taXRCdW5kbGUuc3RhZ2VJZGAgaG9sZC4gQSBzdHJpbmdcbiAqIHdpdGggbm8gYCNgIGlzIHJldHVybmVkIHdob2xlLlxuICpcbiAqIEBleGFtcGxlIHN0YWdlSWRPZignc2YtdG9vbHMvZXhlY3V0ZSM4JykgLy8gJ3NmLXRvb2xzL2V4ZWN1dGUnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFnZUlkT2YocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2hJZHggPSBydW50aW1lU3RhZ2VJZC5sYXN0SW5kZXhPZihFWEVDVVRJT05fREVMSU1JVEVSKTtcbiAgcmV0dXJuIGhhc2hJZHggPT09IC0xID8gcnVudGltZVN0YWdlSWQgOiBydW50aW1lU3RhZ2VJZC5zbGljZSgwLCBoYXNoSWR4KTtcbn1cblxuLyoqIFRoZSBleGVjdXRpb24gaW5kZXggb2YgYSBydW50aW1lU3RhZ2VJZCwgb3IgYE5hTmAgd2hlbiBpdCBjYXJyaWVzIG5vbmUuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0aW9uSW5kZXhPZihydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgaGFzaElkeCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKEVYRUNVVElPTl9ERUxJTUlURVIpO1xuICByZXR1cm4gaGFzaElkeCA9PT0gLTEgPyBOYU4gOiBOdW1iZXIucGFyc2VJbnQocnVudGltZVN0YWdlSWQuc2xpY2UoaGFzaElkeCArIDEpLCAxMCk7XG59XG5cbi8qKlxuICogVGhlIHN1YmZsb3cgcGF0aCBhIHJ1bnRpbWVTdGFnZUlkIGV4ZWN1dGVzIGluIChgJ3NmLWEvc2YtYidgKSwgb3JcbiAqIGB1bmRlZmluZWRgIGF0IHRoZSB0b3AgbGV2ZWwuIFJlYWRzIHRoZSBzdGFnZS1pZCBwYXJ0LCBzbyBpdCBhZ3JlZXMgd2l0aFxuICogYHNwbGl0U3RhZ2VJZChzdGFnZUlkT2YocmlkKSkuc3ViZmxvd1BhdGhgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViZmxvd1BhdGhPZihydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHNwbGl0U3RhZ2VJZChzdGFnZUlkT2YocnVudGltZVN0YWdlSWQpKS5zdWJmbG93UGF0aDtcbn1cblxuLyoqIFRoZSBzdWJmbG93IHBhdGggb2YgYSBydW50aW1lU3RhZ2VJZCBhcyBzZWdtZW50cyAoYFsnc2YtYScsICdzZi1iJ11gKTsgYFtdYCBhdCB0aGUgdG9wIGxldmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YmZsb3dTZWdtZW50c09mKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdGggPSBzdWJmbG93UGF0aE9mKHJ1bnRpbWVTdGFnZUlkKTtcbiAgcmV0dXJuIHBhdGggPT09IHVuZGVmaW5lZCA/IFtdIDogcGF0aC5zcGxpdChQQVRIX0RFTElNSVRFUik7XG59XG5cbi8qKiBUaGUgbm9uLWVtcHR5IHNlZ21lbnRzIG9mIGEgc3ViZmxvdyBwYXRoIG9yIHByZWZpeGVkIGlkIChgJ2EvL2IvJ2Ag4oaSIGBbJ2EnLCAnYiddYCkuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aFNlZ21lbnRzKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBhdGguc3BsaXQoUEFUSF9ERUxJTUlURVIpLmZpbHRlcigocykgPT4gcy5sZW5ndGggPiAwKTtcbn1cblxuLyoqIFRoZSBsYXN0IHNlZ21lbnQgb2YgYSBwYXRoIG9yIHByZWZpeGVkIGlkIChgJ3NmLWEvc2YtYidgIOKGkiBgJ3NmLWInYCk7IHRoZSB3aG9sZSBzdHJpbmcgd2hlbiBpdCBoYXMgbm9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0U2VnbWVudE9mKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnNsaWNlKHBhdGgubGFzdEluZGV4T2YoUEFUSF9ERUxJTUlURVIpICsgMSk7XG59XG5cbi8qKiBKb2luIHBhdGggc2VnbWVudHMgd2l0aCB0aGUgZ3JhbW1hcidzIGRlbGltaXRlciAoYGpvaW5QYXRoKCdzZicsICdzdGFnZScpYCDihpIgYCdzZi9zdGFnZSdgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luUGF0aCguLi5zZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gc2VnbWVudHMuam9pbihQQVRIX0RFTElNSVRFUik7XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIChwcmVmaXhlZCkgaWQgYGlkYCBzaXRzIElOU0lERSB0aGUgc3ViZmxvdyBhdCBgcGF0aGAg4oCUIGF0IGFueSBkZXB0aCBiZWxvdyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpblN1YmZsb3coaWQ6IHN0cmluZywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpZC5zdGFydHNXaXRoKGAke3BhdGh9JHtQQVRIX0RFTElNSVRFUn1gKTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgbXV0YWJsZSBjb3VudGVyIGZvciBleGVjdXRpb24gaW5kZXguXG4gKiBQYXNzZWQgYnkgcmVmZXJlbmNlIHRvIGNoaWxkIHRyYXZlcnNlcnMgKHN1YmZsb3dzKSBzbyB0aGV5XG4gKiBjb250aW51ZSB0aGUgZ2xvYmFsIG51bWJlcmluZyBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgYXQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25Db3VudGVyIHtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuLyoqIENyZWF0ZSBhIG5ldyBleGVjdXRpb24gY291bnRlciBzdGFydGluZyBhdCAwLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4ZWN1dGlvbkNvdW50ZXIoKTogRXhlY3V0aW9uQ291bnRlciB7XG4gIHJldHVybiB7IHZhbHVlOiAwIH07XG59XG4iXX0=
@@ -7,8 +7,8 @@
7
7
  * Like a compiler's diagnostic collector — gathers warnings, errors,
8
8
  * and timing info without affecting the compilation output.
9
9
  */
10
+ import type { FlowMessage } from './frameTypes.js';
10
11
  import type { RedactionRule } from './redaction.js';
11
- import type { FlowMessage } from './types.js';
12
12
  /** @internal Diagnostic namespaces, separate from state paths. */
13
13
  export type DiagnosticChannel = 'logs' | 'errors' | 'metrics' | 'evals';
14
14
  export declare class DiagnosticCollector {
@@ -83,4 +83,4 @@ export class DiagnosticCollector {
83
83
  }
84
84
  }
85
85
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhZ25vc3RpY0NvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L0RpYWdub3N0aWNDb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFJSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSy9ELE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxZQUFZO0lBQ2xCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLEtBQUssRUFBRSxhQUFhO0NBQ1osQ0FBQztBQUVYLE1BQU0sT0FBTyxtQkFBbUI7SUFRRDtJQVB0QixVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUN4QyxZQUFZLEdBQTJCLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQTJCLEVBQUUsQ0FBQztJQUMzQyxXQUFXLEdBQTJCLEVBQUUsQ0FBQztJQUN6QyxZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUV4QyxzRUFBc0U7SUFDdEUsWUFBNkIsUUFBMEM7UUFBMUMsYUFBUSxHQUFSLFFBQVEsQ0FBa0M7SUFBRyxDQUFDO0lBRTNFLHNHQUFzRztJQUM5RixNQUFNLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWM7UUFDcEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0csQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUEwQixFQUFFLEdBQVcsRUFBRSxLQUFjLEVBQUUs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O1lBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxXQUFXLElBQUksU0FBUyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlhZ25vc3RpY0NvbGxlY3RvciDigJQgUGVyLXN0YWdlIG1ldGFkYXRhIGNvbGxlY3RvclxuICpcbiAqIENvbGxlY3RzIG5vbi1leGVjdXRpb24gbWV0YWRhdGEgZHVyaW5nIGEgc3RhZ2UncyBydW46XG4gKiAtIGxvZ3MsIGVycm9ycywgbWV0cmljcywgZXZhbHMsIGZsb3dNZXNzYWdlc1xuICpcbiAqIExpa2UgYSBjb21waWxlcidzIGRpYWdub3N0aWMgY29sbGVjdG9yIOKAlCBnYXRoZXJzIHdhcm5pbmdzLCBlcnJvcnMsXG4gKiBhbmQgdGltaW5nIGluZm8gd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNvbXBpbGF0aW9uIG91dHB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBzZXROZXN0ZWRWYWx1ZSwgdXBkYXRlTmVzdGVkVmFsdWUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqIEBpbnRlcm5hbCBEaWFnbm9zdGljIG5hbWVzcGFjZXMsIHNlcGFyYXRlIGZyb20gc3RhdGUgcGF0aHMuICovXG5leHBvcnQgdHlwZSBEaWFnbm9zdGljQ2hhbm5lbCA9ICdsb2dzJyB8ICdlcnJvcnMnIHwgJ21ldHJpY3MnIHwgJ2V2YWxzJztcblxuY29uc3QgQkFHX0ZJRUxEUyA9IHtcbiAgbG9nczogJ2xvZ0NvbnRleHQnLFxuICBlcnJvcnM6ICdlcnJvckNvbnRleHQnLFxuICBtZXRyaWNzOiAnbWV0cmljQ29udGV4dCcsXG4gIGV2YWxzOiAnZXZhbENvbnRleHQnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIERpYWdub3N0aWNDb2xsZWN0b3Ige1xuICBwdWJsaWMgbG9nQ29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwdWJsaWMgZXJyb3JDb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHB1YmxpYyBtZXRyaWNDb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHB1YmxpYyBldmFsQ29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwdWJsaWMgZmxvd01lc3NhZ2VzOiBGbG93TWVzc2FnZVtdID0gW107XG5cbiAgLyoqIFJlYWQgdGhlIGN1cnJlbnQgcnVuIHBvbGljeSwgaW5jbHVkaW5nIHBvbGljeSBzd2FwcyBhbmQgcmVzdW1lLiAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlYWRSdWxlPzogKCkgPT4gUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCkge31cblxuICAvKiogQSBuYW1lZCBlbnRyeTogdGhlIHJ1bidzIHJ1bGUgbWFwcyBpdHMgbmFtZSB0byBhIHN0YXRlIGtleSwgdGhlbiBhZGRzIHRoZSBkaWFnbm9zdGljIHNlbGVjdG9ycy4gKi9cbiAgcHJpdmF0ZSByZXRhaW4oY2hhbm5lbDogRGlhZ25vc3RpY0NoYW5uZWwsIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgICBjb25zdCBydWxlID0gdGhpcy5yZWFkUnVsZT8uKCk7XG4gICAgcmV0dXJuIHJ1bGUgJiYgIXJ1bGUuaXNEaWFnbm9zdGljSW5lcnQoKSA/IHJ1bGUucmV0YWluRGlhZ25vc3RpYyhbY2hhbm5lbCwgLi4ucGF0aCwga2V5XSwgdmFsdWUpIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlKGNoYW5uZWw6IERpYWdub3N0aWNDaGFubmVsLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdLCByZXBsYWNlOiBib29sZWFuKTogdW5rbm93biB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMucmV0YWluKGNoYW5uZWwsIHBhdGgsIGtleSwgdmFsdWUpO1xuICAgIGNvbnN0IHdyaXRlID0gcmVwbGFjZSA/IHNldE5lc3RlZFZhbHVlIDogdXBkYXRlTmVzdGVkVmFsdWU7XG4gICAgd3JpdGUodGhpc1tCQUdfRklFTERTW2NoYW5uZWxdXSwgW10sIHBhdGgsIGtleSwga2VwdCk7XG4gICAgcmV0dXJuIGtlcHQ7XG4gIH1cblxuICAvKiogQGludGVybmFsIEFkZCBvbmNlLCByZXR1cm5pbmcgdGhlIHJldGFpbmVkIGluY29taW5nIHZhbHVlIGZvciBlbWl0LlxuICAgKiBMZWdhY3kgd3JpdGVycyBzdGF5IHZvaWQ6IHRoZWlyIHJlc3VsdCBtYXkgYmUgcmV0dXJuZWQgYnkgYSBzdGFnZS4gKi9cbiAgYWRkKGNoYW5uZWw6IERpYWdub3N0aWNDaGFubmVsLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdID0gW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy53cml0ZShjaGFubmVsLCBrZXksIHZhbHVlLCBwYXRoLCBmYWxzZSk7XG4gIH1cblxuICBhZGRMb2coa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZ1tdID0gW10pIHtcbiAgICB0aGlzLmFkZCgnbG9ncycsIGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgc2V0TG9nKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwYXRoOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgdGhpcy53cml0ZSgnbG9ncycsIGtleSwgdmFsdWUsIHBhdGgsIHRydWUpO1xuICB9XG5cbiAgYWRkRXJyb3Ioa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZ1tdID0gW10pIHtcbiAgICB0aGlzLmFkZCgnZXJyb3JzJywga2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBhZGRNZXRyaWMoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZ1tdID0gW10pIHtcbiAgICB0aGlzLmFkZCgnbWV0cmljcycsIGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgc2V0TWV0cmljKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwYXRoOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgdGhpcy53cml0ZSgnbWV0cmljcycsIGtleSwgdmFsdWUsIHBhdGgsIHRydWUpO1xuICB9XG5cbiAgYWRkRXZhbChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10gPSBbXSkge1xuICAgIHRoaXMuYWRkKCdldmFscycsIGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgc2V0RXZhbChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10gPSBbXSkge1xuICAgIHRoaXMud3JpdGUoJ2V2YWxzJywga2V5LCB2YWx1ZSwgcGF0aCwgdHJ1ZSk7XG4gIH1cblxuICBhZGRGbG93TWVzc2FnZShmbG93TWVzc2FnZTogRmxvd01lc3NhZ2UpIHtcbiAgICBjb25zdCBydWxlID0gdGhpcy5yZWFkUnVsZT8uKCk7XG4gICAgaWYgKCFydWxlIHx8IHJ1bGUuaXNGbG93VGV4dEluZXJ0KCkpIHtcbiAgICAgIHRoaXMuZmxvd01lc3NhZ2VzLnB1c2goZmxvd01lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPbmx5IHBheWxvYWQgdGV4dCBpcyBzZWxlY3RhYmxlIOKAlCBhbmQgaXQgaGFzIG5vIG5hbWUgb2YgaXRzIG93biwgc28gb25seVxuICAgIC8vIHRoZSBkaWFnbm9zdGljIHNlbGVjdG9ycyByZWFjaCBpdC4gS2VlcCB0aGUgZXZpZGVuY2Ugb2Ygd2hhdCBoYXBwZW5lZFxuICAgIC8vICh0eXBlLCB0YXJnZXRzLCB0aW1pbmcsIGNvdW50cykgZXZlbiB3aGVuIGl0cyBleHBsYW5hdGlvbiBpcyBtYXNrZWQuXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBydWxlLnJldGFpbkZsb3dUZXh0KFsnZmxvd01lc3NhZ2VzJywgJ2Rlc2NyaXB0aW9uJ10sIGZsb3dNZXNzYWdlLmRlc2NyaXB0aW9uKTtcbiAgICBjb25zdCByYXRpb25hbGUgPVxuICAgICAgZmxvd01lc3NhZ2UucmF0aW9uYWxlID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBydWxlLnJldGFpbkZsb3dUZXh0KFsnZmxvd01lc3NhZ2VzJywgJ3JhdGlvbmFsZSddLCBmbG93TWVzc2FnZS5yYXRpb25hbGUpO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gZmxvd01lc3NhZ2UuZGVzY3JpcHRpb24gJiYgcmF0aW9uYWxlID09PSBmbG93TWVzc2FnZS5yYXRpb25hbGUpIHtcbiAgICAgIHRoaXMuZmxvd01lc3NhZ2VzLnB1c2goZmxvd01lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZsb3dNZXNzYWdlcy5wdXNoKHsgLi4uZmxvd01lc3NhZ2UsIGRlc2NyaXB0aW9uLCAuLi4ocmF0aW9uYWxlID09PSB1bmRlZmluZWQgPyB7fSA6IHsgcmF0aW9uYWxlIH0pIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhZ25vc3RpY0NvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L0RpYWdub3N0aWNDb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFJSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSy9ELE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxZQUFZO0lBQ2xCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLEtBQUssRUFBRSxhQUFhO0NBQ1osQ0FBQztBQUVYLE1BQU0sT0FBTyxtQkFBbUI7SUFRRDtJQVB0QixVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUN4QyxZQUFZLEdBQTJCLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQTJCLEVBQUUsQ0FBQztJQUMzQyxXQUFXLEdBQTJCLEVBQUUsQ0FBQztJQUN6QyxZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUV4QyxzRUFBc0U7SUFDdEUsWUFBNkIsUUFBMEM7UUFBMUMsYUFBUSxHQUFSLFFBQVEsQ0FBa0M7SUFBRyxDQUFDO0lBRTNFLHNHQUFzRztJQUM5RixNQUFNLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWM7UUFDcEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0csQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUEwQixFQUFFLEdBQVcsRUFBRSxLQUFjLEVBQUUs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O1lBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxXQUFXLElBQUksU0FBUyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlhZ25vc3RpY0NvbGxlY3RvciDigJQgUGVyLXN0YWdlIG1ldGFkYXRhIGNvbGxlY3RvclxuICpcbiAqIENvbGxlY3RzIG5vbi1leGVjdXRpb24gbWV0YWRhdGEgZHVyaW5nIGEgc3RhZ2UncyBydW46XG4gKiAtIGxvZ3MsIGVycm9ycywgbWV0cmljcywgZXZhbHMsIGZsb3dNZXNzYWdlc1xuICpcbiAqIExpa2UgYSBjb21waWxlcidzIGRpYWdub3N0aWMgY29sbGVjdG9yIOKAlCBnYXRoZXJzIHdhcm5pbmdzLCBlcnJvcnMsXG4gKiBhbmQgdGltaW5nIGluZm8gd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNvbXBpbGF0aW9uIG91dHB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dNZXNzYWdlIH0gZnJvbSAnLi9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcbmltcG9ydCB7IHNldE5lc3RlZFZhbHVlLCB1cGRhdGVOZXN0ZWRWYWx1ZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogQGludGVybmFsIERpYWdub3N0aWMgbmFtZXNwYWNlcywgc2VwYXJhdGUgZnJvbSBzdGF0ZSBwYXRocy4gKi9cbmV4cG9ydCB0eXBlIERpYWdub3N0aWNDaGFubmVsID0gJ2xvZ3MnIHwgJ2Vycm9ycycgfCAnbWV0cmljcycgfCAnZXZhbHMnO1xuXG5jb25zdCBCQUdfRklFTERTID0ge1xuICBsb2dzOiAnbG9nQ29udGV4dCcsXG4gIGVycm9yczogJ2Vycm9yQ29udGV4dCcsXG4gIG1ldHJpY3M6ICdtZXRyaWNDb250ZXh0JyxcbiAgZXZhbHM6ICdldmFsQ29udGV4dCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgRGlhZ25vc3RpY0NvbGxlY3RvciB7XG4gIHB1YmxpYyBsb2dDb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHB1YmxpYyBlcnJvckNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHVibGljIG1ldHJpY0NvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHVibGljIGV2YWxDb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHB1YmxpYyBmbG93TWVzc2FnZXM6IEZsb3dNZXNzYWdlW10gPSBbXTtcblxuICAvKiogUmVhZCB0aGUgY3VycmVudCBydW4gcG9saWN5LCBpbmNsdWRpbmcgcG9saWN5IHN3YXBzIGFuZCByZXN1bWUuICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVhZFJ1bGU/OiAoKSA9PiBSZWRhY3Rpb25SdWxlIHwgdW5kZWZpbmVkKSB7fVxuXG4gIC8qKiBBIG5hbWVkIGVudHJ5OiB0aGUgcnVuJ3MgcnVsZSBtYXBzIGl0cyBuYW1lIHRvIGEgc3RhdGUga2V5LCB0aGVuIGFkZHMgdGhlIGRpYWdub3N0aWMgc2VsZWN0b3JzLiAqL1xuICBwcml2YXRlIHJldGFpbihjaGFubmVsOiBEaWFnbm9zdGljQ2hhbm5lbCwgcGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnJlYWRSdWxlPy4oKTtcbiAgICByZXR1cm4gcnVsZSAmJiAhcnVsZS5pc0RpYWdub3N0aWNJbmVydCgpID8gcnVsZS5yZXRhaW5EaWFnbm9zdGljKFtjaGFubmVsLCAuLi5wYXRoLCBrZXldLCB2YWx1ZSkgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgd3JpdGUoY2hhbm5lbDogRGlhZ25vc3RpY0NoYW5uZWwsIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10sIHJlcGxhY2U6IGJvb2xlYW4pOiB1bmtub3duIHtcbiAgICBjb25zdCBrZXB0ID0gdGhpcy5yZXRhaW4oY2hhbm5lbCwgcGF0aCwga2V5LCB2YWx1ZSk7XG4gICAgY29uc3Qgd3JpdGUgPSByZXBsYWNlID8gc2V0TmVzdGVkVmFsdWUgOiB1cGRhdGVOZXN0ZWRWYWx1ZTtcbiAgICB3cml0ZSh0aGlzW0JBR19GSUVMRFNbY2hhbm5lbF1dLCBbXSwgcGF0aCwga2V5LCBrZXB0KTtcbiAgICByZXR1cm4ga2VwdDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgQWRkIG9uY2UsIHJldHVybmluZyB0aGUgcmV0YWluZWQgaW5jb21pbmcgdmFsdWUgZm9yIGVtaXQuXG4gICAqIExlZ2FjeSB3cml0ZXJzIHN0YXkgdm9pZDogdGhlaXIgcmVzdWx0IG1heSBiZSByZXR1cm5lZCBieSBhIHN0YWdlLiAqL1xuICBhZGQoY2hhbm5lbDogRGlhZ25vc3RpY0NoYW5uZWwsIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10gPSBbXSk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLndyaXRlKGNoYW5uZWwsIGtleSwgdmFsdWUsIHBhdGgsIGZhbHNlKTtcbiAgfVxuXG4gIGFkZExvZyhrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10gPSBbXSkge1xuICAgIHRoaXMuYWRkKCdsb2dzJywga2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBzZXRMb2coa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZ1tdID0gW10pIHtcbiAgICB0aGlzLndyaXRlKCdsb2dzJywga2V5LCB2YWx1ZSwgcGF0aCwgdHJ1ZSk7XG4gIH1cblxuICBhZGRFcnJvcihrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10gPSBbXSkge1xuICAgIHRoaXMuYWRkKCdlcnJvcnMnLCBrZXksIHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIGFkZE1ldHJpYyhrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10gPSBbXSkge1xuICAgIHRoaXMuYWRkKCdtZXRyaWNzJywga2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBzZXRNZXRyaWMoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZ1tdID0gW10pIHtcbiAgICB0aGlzLndyaXRlKCdtZXRyaWNzJywga2V5LCB2YWx1ZSwgcGF0aCwgdHJ1ZSk7XG4gIH1cblxuICBhZGRFdmFsKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwYXRoOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgdGhpcy5hZGQoJ2V2YWxzJywga2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBzZXRFdmFsKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwYXRoOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgdGhpcy53cml0ZSgnZXZhbHMnLCBrZXksIHZhbHVlLCBwYXRoLCB0cnVlKTtcbiAgfVxuXG4gIGFkZEZsb3dNZXNzYWdlKGZsb3dNZXNzYWdlOiBGbG93TWVzc2FnZSkge1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnJlYWRSdWxlPy4oKTtcbiAgICBpZiAoIXJ1bGUgfHwgcnVsZS5pc0Zsb3dUZXh0SW5lcnQoKSkge1xuICAgICAgdGhpcy5mbG93TWVzc2FnZXMucHVzaChmbG93TWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE9ubHkgcGF5bG9hZCB0ZXh0IGlzIHNlbGVjdGFibGUg4oCUIGFuZCBpdCBoYXMgbm8gbmFtZSBvZiBpdHMgb3duLCBzbyBvbmx5XG4gICAgLy8gdGhlIGRpYWdub3N0aWMgc2VsZWN0b3JzIHJlYWNoIGl0LiBLZWVwIHRoZSBldmlkZW5jZSBvZiB3aGF0IGhhcHBlbmVkXG4gICAgLy8gKHR5cGUsIHRhcmdldHMsIHRpbWluZywgY291bnRzKSBldmVuIHdoZW4gaXRzIGV4cGxhbmF0aW9uIGlzIG1hc2tlZC5cbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJ1bGUucmV0YWluRmxvd1RleHQoWydmbG93TWVzc2FnZXMnLCAnZGVzY3JpcHRpb24nXSwgZmxvd01lc3NhZ2UuZGVzY3JpcHRpb24pO1xuICAgIGNvbnN0IHJhdGlvbmFsZSA9XG4gICAgICBmbG93TWVzc2FnZS5yYXRpb25hbGUgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHJ1bGUucmV0YWluRmxvd1RleHQoWydmbG93TWVzc2FnZXMnLCAncmF0aW9uYWxlJ10sIGZsb3dNZXNzYWdlLnJhdGlvbmFsZSk7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSBmbG93TWVzc2FnZS5kZXNjcmlwdGlvbiAmJiByYXRpb25hbGUgPT09IGZsb3dNZXNzYWdlLnJhdGlvbmFsZSkge1xuICAgICAgdGhpcy5mbG93TWVzc2FnZXMucHVzaChmbG93TWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmxvd01lc3NhZ2VzLnB1c2goeyAuLi5mbG93TWVzc2FnZSwgZGVzY3JpcHRpb24sIC4uLihyYXRpb25hbGUgPT09IHVuZGVmaW5lZCA/IHt9IDogeyByYXRpb25hbGUgfSkgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=