footprintjs 0.2.2 → 0.3.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 (68) hide show
  1. package/README.md +137 -41
  2. package/dist/esm/index.js +7 -1
  3. package/dist/esm/lib/builder/FlowChartBuilder.js +72 -91
  4. package/dist/esm/lib/builder/types.js +1 -1
  5. package/dist/esm/lib/contract/defineContract.js +32 -0
  6. package/dist/esm/lib/contract/index.js +18 -0
  7. package/dist/esm/lib/contract/openapi.js +120 -0
  8. package/dist/esm/lib/contract/schema.js +199 -0
  9. package/dist/esm/lib/contract/types.js +9 -0
  10. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  11. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +5 -5
  12. package/dist/esm/lib/engine/handlers/ContinuationResolver.js +6 -6
  13. package/dist/esm/lib/engine/handlers/DeciderHandler.js +4 -4
  14. package/dist/esm/lib/engine/handlers/NodeResolver.js +1 -2
  15. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +1 -2
  16. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -6
  17. package/dist/esm/lib/engine/narrative/ControlFlowNarrativeGenerator.js +13 -18
  18. package/dist/esm/lib/engine/narrative/types.js +1 -1
  19. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +10 -11
  20. package/dist/esm/lib/engine/types.js +1 -1
  21. package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
  22. package/dist/esm/types/index.d.ts +4 -0
  23. package/dist/esm/types/lib/builder/FlowChartBuilder.d.ts +17 -10
  24. package/dist/esm/types/lib/builder/types.d.ts +6 -6
  25. package/dist/esm/types/lib/contract/defineContract.d.ts +18 -0
  26. package/dist/esm/types/lib/contract/index.d.ts +14 -0
  27. package/dist/esm/types/lib/contract/openapi.d.ts +12 -0
  28. package/dist/esm/types/lib/contract/schema.d.ts +14 -0
  29. package/dist/esm/types/lib/contract/types.d.ts +94 -0
  30. package/dist/esm/types/lib/engine/graph/StageNode.d.ts +0 -2
  31. package/dist/esm/types/lib/engine/narrative/ControlFlowNarrativeGenerator.d.ts +6 -6
  32. package/dist/esm/types/lib/engine/narrative/types.d.ts +6 -6
  33. package/dist/esm/types/lib/engine/types.d.ts +0 -1
  34. package/dist/esm/types/lib/runner/ExecutionRuntime.d.ts +0 -1
  35. package/dist/index.js +12 -2
  36. package/dist/lib/builder/FlowChartBuilder.js +72 -91
  37. package/dist/lib/builder/types.js +1 -1
  38. package/dist/lib/contract/defineContract.js +36 -0
  39. package/dist/lib/contract/index.js +26 -0
  40. package/dist/lib/contract/openapi.js +124 -0
  41. package/dist/lib/contract/schema.js +205 -0
  42. package/dist/lib/contract/types.js +10 -0
  43. package/dist/lib/engine/graph/StageNode.js +1 -1
  44. package/dist/lib/engine/handlers/ChildrenExecutor.js +5 -5
  45. package/dist/lib/engine/handlers/ContinuationResolver.js +6 -6
  46. package/dist/lib/engine/handlers/DeciderHandler.js +4 -4
  47. package/dist/lib/engine/handlers/NodeResolver.js +1 -2
  48. package/dist/lib/engine/handlers/RuntimeStructureManager.js +1 -2
  49. package/dist/lib/engine/handlers/SelectorHandler.js +6 -6
  50. package/dist/lib/engine/narrative/ControlFlowNarrativeGenerator.js +13 -18
  51. package/dist/lib/engine/narrative/types.js +1 -1
  52. package/dist/lib/engine/traversal/FlowchartTraverser.js +10 -11
  53. package/dist/lib/engine/types.js +1 -1
  54. package/dist/lib/runner/ExecutionRuntime.js +1 -1
  55. package/dist/types/index.d.ts +4 -0
  56. package/dist/types/lib/builder/FlowChartBuilder.d.ts +17 -10
  57. package/dist/types/lib/builder/types.d.ts +6 -6
  58. package/dist/types/lib/contract/defineContract.d.ts +18 -0
  59. package/dist/types/lib/contract/index.d.ts +14 -0
  60. package/dist/types/lib/contract/openapi.d.ts +12 -0
  61. package/dist/types/lib/contract/schema.d.ts +14 -0
  62. package/dist/types/lib/contract/types.d.ts +94 -0
  63. package/dist/types/lib/engine/graph/StageNode.d.ts +0 -2
  64. package/dist/types/lib/engine/narrative/ControlFlowNarrativeGenerator.d.ts +6 -6
  65. package/dist/types/lib/engine/narrative/types.d.ts +6 -6
  66. package/dist/types/lib/engine/types.d.ts +0 -1
  67. package/dist/types/lib/runner/ExecutionRuntime.d.ts +0 -1
  68. package/package.json +1 -1
@@ -7,4 +7,4 @@
7
7
  * are defined locally here for the new library.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBaZXJvIGRlcHMgb24gb2xkIGNvZGUuIE9ubHkgaW1wb3J0cyBmcm9tIGxpYi9tZW1vcnkgKFBoYXNlIDEpLlxuICogVHlwZXMgdGhhdCBvcmlnaW5hdGVkIGluIGV4ZWN1dG9yL1BpcGVsaW5lLnRzIGFuZCBleGVjdXRvci90eXBlcy50c1xuICogYXJlIGRlZmluZWQgbG9jYWxseSBoZXJlIGZvciB0aGUgbmV3IGxpYnJhcnkuXG4gKi9cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBMb2dnZXIgKGNvcGllZCBmcm9tIHV0aWxzL2xvZ2dlci50cyB0byBhdm9pZCBvbGQtY29kZSBkZXApXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgaW5mbyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBsb2cobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjb3BlIFByb3RlY3Rpb24gKGNvcGllZCBmcm9tIHNjb3BlL3Byb3RlY3Rpb24vdHlwZXMudHMpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2NvcGVQcm90ZWN0aW9uTW9kZSA9ICdlcnJvcicgfCAnd2FybicgfCAnb2ZmJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIHN0YWdlcyB0byBlbWl0IHRva2VucyBpbmNyZW1lbnRhbGx5LiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqXG4gKiBUT3V0ICAg4oCTIHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogVFNjb3BlIOKAkyB0aGUgc2NvcGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgc3RhZ2VcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4gIHN0cmVhbUNhbGxiYWNrPzogU3RyZWFtQ2FsbGJhY2ssXG4pID0+IFByb21pc2U8VE91dD4gfCBUT3V0O1xuXG4vKiogUmVsYXhlZC1nZW5lcmljIGFsaWFzIGZvciBidWlsZGVyIGVyZ29ub21pY3MuICovXG5leHBvcnQgdHlwZSBTdGFnZUZuID0gUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPGFueSwgYW55PjtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJlYW1pbmdcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN1YmZsb3cgTW91bnQgT3B0aW9uc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3RhZ2VOb2RlIOKAlCB0aGUgcnVudGltZSBncmFwaCBub2RlXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU3RhZ2VOb2RlPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lOyBhbHNvIHVzZWQgYXMgdGhlIHN0YWdlTWFwIGtleS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgc3RhYmxlIGlkIChyZXF1aXJlZCBieSBkZWNpZGVyL2ZvcmsgYWdncmVnYXRpb24pLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgbmFtZSBmb3IgVUkuICovXG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBDb250aW51YXRpb25zIOKUgOKUgFxuICAvKiogTGluZWFyIGNvbnRpbnVhdGlvbi4gKi9cbiAgbmV4dD86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogUGFyYWxsZWwgY2hpbGRyZW4gKGZvcmspLiAqL1xuICBjaGlsZHJlbj86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG5cbiAgLy8g4pSA4pSAIERlY2lkZXJzICYgU2VsZWN0b3JzIOKUgOKUgFxuICAvKiogV2hlbiB0cnVlLCBmbiBJUyB0aGUgZGVjaWRlciDigJQgcmV0dXJucyBhIGJyYW5jaCBJRCBzdHJpbmcuICovXG4gIGRlY2lkZXJGbj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIHRoZSBzZWxlY3RvciDigJQgcmV0dXJucyBicmFuY2ggSUQocykuICovXG4gIHNlbGVjdG9yRm4/OiBib29sZWFuO1xuXG4gIC8vIOKUgOKUgCBTdGFnZSBmdW5jdGlvbiDilIDilIBcbiAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcblxuICAvLyDilIDilIAgU3RyZWFtaW5nIOKUgOKUgFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBTdWJmbG93IOKUgOKUgFxuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgJHJlZj86IHN0cmluZztcbiAgbW91bnRJZD86IHN0cmluZztcbiAgc3ViZmxvd01vdW50T3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgcGFyYWxsZWwgY2hpbGRyZW4gdXNlIGZhaWwtZmFzdCBzZW1hbnRpY3MgKHJlamVjdCBvbiBmaXJzdCBlcnJvcikuICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcblxuICAvKiogSW5saW5lIHN1YmZsb3cgZGVmaW5pdGlvbiBmb3IgZHluYW1pYyBzdWJmbG93IGF0dGFjaG1lbnQuICovXG4gIHN1YmZsb3dEZWY/OiB7XG4gICAgcm9vdDogU3RhZ2VOb2RlO1xuICAgIHN0YWdlTWFwPzogTWFwPHN0cmluZywgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICAgIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG4gICAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZSB9PjtcbiAgfTtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZyc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydFNwZWMgKHB1cmUgSlNPTiwgbm8gZnVuY3Rpb25zIOKAlCBmb3IgRkXihpJCRSB0cmFuc3BvcnQpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRTcGVjIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEZsb3dDaGFydFNwZWNbXTtcbiAgbmV4dD86IEZsb3dDaGFydFNwZWM7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEJ1aWxkLVRpbWUgRXh0cmFjdG9yXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIE1ldGFkYXRhIHByb3ZpZGVkIHRvIHRoZSBidWlsZC10aW1lIGV4dHJhY3RvciBmb3IgZWFjaCBub2RlLiAqL1xuZXhwb3J0IHR5cGUgQnVpbGRUaW1lTm9kZU1ldGFkYXRhID0gRmxvd0NoYXJ0U3BlYztcblxuZXhwb3J0IHR5cGUgQnVpbGRUaW1lRXh0cmFjdG9yPFRSZXN1bHQgPSBGbG93Q2hhcnRTcGVjPiA9IChtZXRhZGF0YTogQnVpbGRUaW1lTm9kZU1ldGFkYXRhKSA9PiBUUmVzdWx0O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFRyYXZlcnNhbCBFeHRyYWN0b3IgKHJ1bnRpbWUpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgVHJhdmVyc2FsRXh0cmFjdG9yPFRSZXN1bHQgPSB1bmtub3duPiA9IChzbmFwc2hvdDogdW5rbm93bikgPT4gVFJlc3VsdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgZXh0cmFjdG9yPzogVHJhdmVyc2FsRXh0cmFjdG9yO1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZTogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xuICBsb2dnZXI/OiBJTG9nZ2VyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFnZURlc2NyaXB0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBmbj86IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbn1cbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBaZXJvIGRlcHMgb24gb2xkIGNvZGUuIE9ubHkgaW1wb3J0cyBmcm9tIGxpYi9tZW1vcnkgKFBoYXNlIDEpLlxuICogVHlwZXMgdGhhdCBvcmlnaW5hdGVkIGluIGV4ZWN1dG9yL1BpcGVsaW5lLnRzIGFuZCBleGVjdXRvci90eXBlcy50c1xuICogYXJlIGRlZmluZWQgbG9jYWxseSBoZXJlIGZvciB0aGUgbmV3IGxpYnJhcnkuXG4gKi9cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBMb2dnZXIgKGNvcGllZCBmcm9tIHV0aWxzL2xvZ2dlci50cyB0byBhdm9pZCBvbGQtY29kZSBkZXApXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgaW5mbyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBsb2cobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjb3BlIFByb3RlY3Rpb24gKGNvcGllZCBmcm9tIHNjb3BlL3Byb3RlY3Rpb24vdHlwZXMudHMpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2NvcGVQcm90ZWN0aW9uTW9kZSA9ICdlcnJvcicgfCAnd2FybicgfCAnb2ZmJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIHN0YWdlcyB0byBlbWl0IHRva2VucyBpbmNyZW1lbnRhbGx5LiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqXG4gKiBUT3V0ICAg4oCTIHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogVFNjb3BlIOKAkyB0aGUgc2NvcGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgc3RhZ2VcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4gIHN0cmVhbUNhbGxiYWNrPzogU3RyZWFtQ2FsbGJhY2ssXG4pID0+IFByb21pc2U8VE91dD4gfCBUT3V0O1xuXG4vKiogUmVsYXhlZC1nZW5lcmljIGFsaWFzIGZvciBidWlsZGVyIGVyZ29ub21pY3MuICovXG5leHBvcnQgdHlwZSBTdGFnZUZuID0gUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPGFueSwgYW55PjtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJlYW1pbmdcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN1YmZsb3cgTW91bnQgT3B0aW9uc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3RhZ2VOb2RlIOKAlCB0aGUgcnVudGltZSBncmFwaCBub2RlXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU3RhZ2VOb2RlPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lOyBhbHNvIHVzZWQgYXMgdGhlIHN0YWdlTWFwIGtleS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgc3RhYmxlIGlkIChyZXF1aXJlZCBieSBkZWNpZGVyL2ZvcmsgYWdncmVnYXRpb24pLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvLyDilIDilIAgQ29udGludWF0aW9ucyDilIDilIBcbiAgLyoqIExpbmVhciBjb250aW51YXRpb24uICovXG4gIG5leHQ/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIFBhcmFsbGVsIGNoaWxkcmVuIChmb3JrKS4gKi9cbiAgY2hpbGRyZW4/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdO1xuXG4gIC8vIOKUgOKUgCBEZWNpZGVycyAmIFNlbGVjdG9ycyDilIDilIBcbiAgLyoqIFdoZW4gdHJ1ZSwgZm4gSVMgdGhlIGRlY2lkZXIg4oCUIHJldHVybnMgYSBicmFuY2ggSUQgc3RyaW5nLiAqL1xuICBkZWNpZGVyRm4/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBmbiBJUyB0aGUgc2VsZWN0b3Ig4oCUIHJldHVybnMgYnJhbmNoIElEKHMpLiAqL1xuICBzZWxlY3RvckZuPzogYm9vbGVhbjtcblxuICAvLyDilIDilIAgU3RhZ2UgZnVuY3Rpb24g4pSA4pSAXG4gIGZuPzogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG5cbiAgLy8g4pSA4pSAIFN0cmVhbWluZyDilIDilIBcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcblxuICAvLyDilIDilIAgU3ViZmxvdyDilIDilIBcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gICRyZWY/OiBzdHJpbmc7XG4gIG1vdW50SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dNb3VudE9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zO1xuXG4gIC8qKiBXaGVuIHRydWUsIHBhcmFsbGVsIGNoaWxkcmVuIHVzZSBmYWlsLWZhc3Qgc2VtYW50aWNzIChyZWplY3Qgb24gZmlyc3QgZXJyb3IpLiAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG5cbiAgLyoqIElubGluZSBzdWJmbG93IGRlZmluaXRpb24gZm9yIGR5bmFtaWMgc3ViZmxvdyBhdHRhY2htZW50LiAqL1xuICBzdWJmbG93RGVmPzoge1xuICAgIHJvb3Q6IFN0YWdlTm9kZTtcbiAgICBzdGFnZU1hcD86IE1hcDxzdHJpbmcsIFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgICBidWlsZFRpbWVTdHJ1Y3R1cmU/OiB1bmtub3duO1xuICAgIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGUgfT47XG4gIH07XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChKU09OLXNhZmUsIGZvciB2aXN1YWxpemF0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydFNwZWMgKHB1cmUgSlNPTiwgbm8gZnVuY3Rpb25zIOKAlCBmb3IgRkXihpJCRSB0cmFuc3BvcnQpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRTcGVjIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQnVpbGQtVGltZSBFeHRyYWN0b3Jcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogTWV0YWRhdGEgcHJvdmlkZWQgdG8gdGhlIGJ1aWxkLXRpbWUgZXh0cmFjdG9yIGZvciBlYWNoIG5vZGUuICovXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVOb2RlTWV0YWRhdGEgPSBGbG93Q2hhcnRTcGVjO1xuXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVFeHRyYWN0b3I8VFJlc3VsdCA9IEZsb3dDaGFydFNwZWM+ID0gKG1ldGFkYXRhOiBCdWlsZFRpbWVOb2RlTWV0YWRhdGEpID0+IFRSZXN1bHQ7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJhdmVyc2FsIEV4dHJhY3RvciAocnVudGltZSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBUcmF2ZXJzYWxFeHRyYWN0b3I8VFJlc3VsdCA9IHVua25vd24+ID0gKHNuYXBzaG90OiB1bmtub3duKSA9PiBUUmVzdWx0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnQg4oCUIGNvbXBpbGVkIG91dHB1dCBvZiBidWlsZCgpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRmxvd0NoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBleHRyYWN0b3I/OiBUcmF2ZXJzYWxFeHRyYWN0b3I7XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0SW5wdXRTY2hlbWEoKS4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldE91dHB1dFNjaGVtYSgpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IG1hcHBlciDigJQgZXh0cmFjdHMgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTaW1wbGlmaWVkIFBhcmFsbGVsIFNwZWMgKGZvciBhZGRMaXN0T2ZGdW5jdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXhlY09wdGlvbnMgKGZvciBleGVjdXRlKCkgY29udmVuaWVuY2Ug4oCUIHVzZWQgYnkgcnVubmVyIGxheWVyKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEV4ZWNPcHRpb25zID0ge1xuICBkZWZhdWx0cz86IHVua25vd247XG4gIGluaXRpYWw/OiB1bmtub3duO1xuICByZWFkT25seT86IHVua25vd247XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZTogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZT86IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN1YmZsb3dSZWZcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZWYge1xuICAkcmVmOiBzdHJpbmc7XG4gIG1vdW50SWQ6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * contract/defineContract.ts — Factory for creating a FlowChartContract.
4
+ *
5
+ * Wraps a compiled FlowChart with I/O schemas and an output mapper,
6
+ * using the same pattern as SubflowMountOptions (inputMapper/outputMapper).
7
+ *
8
+ * Usage:
9
+ * const contract = defineContract(chart, {
10
+ * inputSchema: z.object({ name: z.string() }),
11
+ * outputSchema: z.object({ greeting: z.string() }),
12
+ * outputMapper: (scope) => ({ greeting: scope.message as string }),
13
+ * });
14
+ *
15
+ * const openapi = contract.toOpenAPI();
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.defineContract = void 0;
19
+ const openapi_1 = require("./openapi");
20
+ const schema_1 = require("./schema");
21
+ function defineContract(chart, options) {
22
+ const inputSchema = options.inputSchema ? (0, schema_1.normalizeSchema)(options.inputSchema) : undefined;
23
+ const outputSchema = options.outputSchema ? (0, schema_1.normalizeSchema)(options.outputSchema) : undefined;
24
+ const contract = {
25
+ chart,
26
+ inputSchema,
27
+ outputSchema,
28
+ outputMapper: options.outputMapper,
29
+ toOpenAPI(apiOptions) {
30
+ return (0, openapi_1.generateOpenAPI)(contract, apiOptions);
31
+ },
32
+ };
33
+ return contract;
34
+ }
35
+ exports.defineContract = defineContract;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lQ29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L2RlZmluZUNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBR0gsdUNBQTRDO0FBQzVDLHFDQUEyQztBQUczQyxTQUFnQixjQUFjLENBQzVCLEtBQWdCLEVBQ2hCLE9BQWtEO0lBRWxELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUEsd0JBQWUsRUFBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFBLHdCQUFlLEVBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFOUYsTUFBTSxRQUFRLEdBQXVDO1FBQ25ELEtBQUs7UUFDTCxXQUFXO1FBQ1gsWUFBWTtRQUNaLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxTQUFTLENBQUMsVUFBMkI7WUFDbkMsT0FBTyxJQUFBLHlCQUFlLEVBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQWxCRCx3Q0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNvbnRyYWN0L2RlZmluZUNvbnRyYWN0LnRzIOKAlCBGYWN0b3J5IGZvciBjcmVhdGluZyBhIEZsb3dDaGFydENvbnRyYWN0LlxuICpcbiAqIFdyYXBzIGEgY29tcGlsZWQgRmxvd0NoYXJ0IHdpdGggSS9PIHNjaGVtYXMgYW5kIGFuIG91dHB1dCBtYXBwZXIsXG4gKiB1c2luZyB0aGUgc2FtZSBwYXR0ZXJuIGFzIFN1YmZsb3dNb3VudE9wdGlvbnMgKGlucHV0TWFwcGVyL291dHB1dE1hcHBlcikuXG4gKlxuICogVXNhZ2U6XG4gKiAgIGNvbnN0IGNvbnRyYWN0ID0gZGVmaW5lQ29udHJhY3QoY2hhcnQsIHtcbiAqICAgICBpbnB1dFNjaGVtYTogei5vYmplY3QoeyBuYW1lOiB6LnN0cmluZygpIH0pLFxuICogICAgIG91dHB1dFNjaGVtYTogei5vYmplY3QoeyBncmVldGluZzogei5zdHJpbmcoKSB9KSxcbiAqICAgICBvdXRwdXRNYXBwZXI6IChzY29wZSkgPT4gKHsgZ3JlZXRpbmc6IHNjb3BlLm1lc3NhZ2UgYXMgc3RyaW5nIH0pLFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IG9wZW5hcGkgPSBjb250cmFjdC50b09wZW5BUEkoKTtcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVPcGVuQVBJIH0gZnJvbSAnLi9vcGVuYXBpJztcbmltcG9ydCB7IG5vcm1hbGl6ZVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0Q29udHJhY3QsIEZsb3dDaGFydENvbnRyYWN0T3B0aW9ucywgT3BlbkFQSU9wdGlvbnMsIE9wZW5BUElTcGVjIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb250cmFjdDxUSW5wdXQgPSB1bmtub3duLCBUT3V0cHV0ID0gdW5rbm93bj4oXG4gIGNoYXJ0OiBGbG93Q2hhcnQsXG4gIG9wdGlvbnM6IEZsb3dDaGFydENvbnRyYWN0T3B0aW9uczxUSW5wdXQsIFRPdXRwdXQ+LFxuKTogRmxvd0NoYXJ0Q29udHJhY3Q8VElucHV0LCBUT3V0cHV0PiB7XG4gIGNvbnN0IGlucHV0U2NoZW1hID0gb3B0aW9ucy5pbnB1dFNjaGVtYSA/IG5vcm1hbGl6ZVNjaGVtYShvcHRpb25zLmlucHV0U2NoZW1hKSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgb3V0cHV0U2NoZW1hID0gb3B0aW9ucy5vdXRwdXRTY2hlbWEgPyBub3JtYWxpemVTY2hlbWEob3B0aW9ucy5vdXRwdXRTY2hlbWEpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNvbnRyYWN0OiBGbG93Q2hhcnRDb250cmFjdDxUSW5wdXQsIFRPdXRwdXQ+ID0ge1xuICAgIGNoYXJ0LFxuICAgIGlucHV0U2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYSxcbiAgICBvdXRwdXRNYXBwZXI6IG9wdGlvbnMub3V0cHV0TWFwcGVyLFxuICAgIHRvT3BlbkFQSShhcGlPcHRpb25zPzogT3BlbkFQSU9wdGlvbnMpOiBPcGVuQVBJU3BlYyB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVPcGVuQVBJKGNvbnRyYWN0LCBhcGlPcHRpb25zKTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBjb250cmFjdDtcbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /* istanbul ignore file */
3
+ /**
4
+ * contract/ — FlowChart I/O contract and OpenAPI generation layer.
5
+ *
6
+ * Standalone library: wraps a compiled FlowChart with input/output schemas
7
+ * and generates OpenAPI 3.1 specs. Uses the same inputMapper/outputMapper
8
+ * pattern as subflow mounting.
9
+ *
10
+ * Zero runtime deps on Zod — Zod schemas detected via duck-typing and
11
+ * converted to JSON Schema at contract creation time.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateOpenAPI = exports.zodToJsonSchema = exports.normalizeSchema = exports.isZodSchema = exports.defineContract = void 0;
15
+ // Factory
16
+ var defineContract_1 = require("./defineContract");
17
+ Object.defineProperty(exports, "defineContract", { enumerable: true, get: function () { return defineContract_1.defineContract; } });
18
+ // Schema utilities
19
+ var schema_1 = require("./schema");
20
+ Object.defineProperty(exports, "isZodSchema", { enumerable: true, get: function () { return schema_1.isZodSchema; } });
21
+ Object.defineProperty(exports, "normalizeSchema", { enumerable: true, get: function () { return schema_1.normalizeSchema; } });
22
+ Object.defineProperty(exports, "zodToJsonSchema", { enumerable: true, get: function () { return schema_1.zodToJsonSchema; } });
23
+ // OpenAPI generator
24
+ var openapi_1 = require("./openapi");
25
+ Object.defineProperty(exports, "generateOpenAPI", { enumerable: true, get: function () { return openapi_1.generateOpenAPI; } });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBMEI7QUFDMUI7Ozs7Ozs7OztHQVNHOzs7QUFFSCxVQUFVO0FBQ1YsbURBQWtEO0FBQXpDLGdIQUFBLGNBQWMsT0FBQTtBQUV2QixtQkFBbUI7QUFDbkIsbUNBQXlFO0FBQWhFLHFHQUFBLFdBQVcsT0FBQTtBQUFFLHlHQUFBLGVBQWUsT0FBQTtBQUFFLHlHQUFBLGVBQWUsT0FBQTtBQUV0RCxvQkFBb0I7QUFDcEIscUNBQTRDO0FBQW5DLDBHQUFBLGVBQWUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIGNvbnRyYWN0LyDigJQgRmxvd0NoYXJ0IEkvTyBjb250cmFjdCBhbmQgT3BlbkFQSSBnZW5lcmF0aW9uIGxheWVyLlxuICpcbiAqIFN0YW5kYWxvbmUgbGlicmFyeTogd3JhcHMgYSBjb21waWxlZCBGbG93Q2hhcnQgd2l0aCBpbnB1dC9vdXRwdXQgc2NoZW1hc1xuICogYW5kIGdlbmVyYXRlcyBPcGVuQVBJIDMuMSBzcGVjcy4gVXNlcyB0aGUgc2FtZSBpbnB1dE1hcHBlci9vdXRwdXRNYXBwZXJcbiAqIHBhdHRlcm4gYXMgc3ViZmxvdyBtb3VudGluZy5cbiAqXG4gKiBaZXJvIHJ1bnRpbWUgZGVwcyBvbiBab2Qg4oCUIFpvZCBzY2hlbWFzIGRldGVjdGVkIHZpYSBkdWNrLXR5cGluZyBhbmRcbiAqIGNvbnZlcnRlZCB0byBKU09OIFNjaGVtYSBhdCBjb250cmFjdCBjcmVhdGlvbiB0aW1lLlxuICovXG5cbi8vIEZhY3RvcnlcbmV4cG9ydCB7IGRlZmluZUNvbnRyYWN0IH0gZnJvbSAnLi9kZWZpbmVDb250cmFjdCc7XG5cbi8vIFNjaGVtYSB1dGlsaXRpZXNcbmV4cG9ydCB7IGlzWm9kU2NoZW1hLCBub3JtYWxpemVTY2hlbWEsIHpvZFRvSnNvblNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcblxuLy8gT3BlbkFQSSBnZW5lcmF0b3JcbmV4cG9ydCB7IGdlbmVyYXRlT3BlbkFQSSB9IGZyb20gJy4vb3BlbmFwaSc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dDaGFydENvbnRyYWN0LFxuICBGbG93Q2hhcnRDb250cmFjdE9wdGlvbnMsXG4gIEpzb25TY2hlbWEsXG4gIE9wZW5BUElPcHRpb25zLFxuICBPcGVuQVBJU3BlYyxcbiAgU2NoZW1hSW5wdXQsXG59IGZyb20gJy4vdHlwZXMnO1xuIl19
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * contract/openapi.ts — OpenAPI 3.1 spec generator.
4
+ *
5
+ * Generates an OpenAPI spec from a FlowChartContract by combining:
6
+ * - chart.description → operation description
7
+ * - chart.stageDescriptions → step-by-step detail
8
+ * - inputSchema → requestBody
9
+ * - outputSchema → response
10
+ * - chart.buildTimeStructure → operation metadata (branches, forks, etc.)
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.generateOpenAPI = void 0;
14
+ // ─────────────────────────────────────────────────────────────────────────────
15
+ // Internal helpers
16
+ // ─────────────────────────────────────────────────────────────────────────────
17
+ function slugify(name) {
18
+ return name
19
+ .toLowerCase()
20
+ .replace(/[^a-z0-9]+/g, '-')
21
+ .replace(/^-|-$/g, '');
22
+ }
23
+ function buildStepsDescription(chart) {
24
+ // Walk buildTimeStructure to produce a step-by-step description
25
+ const lines = [];
26
+ let step = 0;
27
+ const walk = (node) => {
28
+ step++;
29
+ const desc = node.description ? ` — ${node.description}` : '';
30
+ if (node.hasDecider && node.branchIds) {
31
+ lines.push(`${step}. ${node.name}${desc} — Decides between: ${node.branchIds.join(', ')}`);
32
+ }
33
+ else if (node.children && node.children.length > 0 && !node.hasDecider) {
34
+ const childNames = node.children.map((c) => c.name).join(', ');
35
+ lines.push(`${step}. ${node.name}${desc} (parallel: ${childNames})`);
36
+ }
37
+ else {
38
+ lines.push(`${step}. ${node.name}${desc}`);
39
+ }
40
+ if (node.children) {
41
+ for (const child of node.children)
42
+ walk(child);
43
+ }
44
+ if (node.next)
45
+ walk(node.next);
46
+ };
47
+ walk(chart.buildTimeStructure);
48
+ const header = chart.description ? `${chart.description}\n\n` : '';
49
+ return `${header}FlowChart: ${chart.root.name}\nSteps:\n${lines.join('\n')}`;
50
+ }
51
+ // ─────────────────────────────────────────────────────────────────────────────
52
+ // Public API
53
+ // ─────────────────────────────────────────────────────────────────────────────
54
+ function generateOpenAPI(contract, options) {
55
+ var _a, _b, _c;
56
+ const { chart, inputSchema, outputSchema } = contract;
57
+ const version = (_a = options === null || options === void 0 ? void 0 : options.version) !== null && _a !== void 0 ? _a : '1.0.0';
58
+ const basePath = (_b = options === null || options === void 0 ? void 0 : options.basePath) !== null && _b !== void 0 ? _b : '/';
59
+ const method = (_c = options === null || options === void 0 ? void 0 : options.method) !== null && _c !== void 0 ? _c : 'post';
60
+ const rootName = chart.root.name;
61
+ const operationId = slugify(rootName);
62
+ const path = `${basePath === '/' ? '' : basePath}/${operationId}`;
63
+ const fullDescription = buildStepsDescription(chart);
64
+ // Build schemas for components
65
+ const schemas = {};
66
+ const inputRef = `${rootName}Input`;
67
+ const outputRef = `${rootName}Output`;
68
+ if (inputSchema)
69
+ schemas[inputRef] = inputSchema;
70
+ if (outputSchema)
71
+ schemas[outputRef] = outputSchema;
72
+ // Build operation
73
+ const operation = {
74
+ operationId,
75
+ summary: rootName,
76
+ description: fullDescription,
77
+ ...(inputSchema
78
+ ? {
79
+ requestBody: {
80
+ required: true,
81
+ content: {
82
+ 'application/json': {
83
+ schema: { $ref: `#/components/schemas/${inputRef}` },
84
+ },
85
+ },
86
+ },
87
+ }
88
+ : {}),
89
+ responses: {
90
+ '200': {
91
+ description: 'Successful execution',
92
+ ...(outputSchema
93
+ ? {
94
+ content: {
95
+ 'application/json': {
96
+ schema: { $ref: `#/components/schemas/${outputRef}` },
97
+ },
98
+ },
99
+ }
100
+ : {}),
101
+ },
102
+ '500': {
103
+ description: 'Pipeline execution error',
104
+ },
105
+ },
106
+ };
107
+ const spec = {
108
+ openapi: '3.1.0',
109
+ info: {
110
+ title: rootName,
111
+ description: fullDescription,
112
+ version,
113
+ },
114
+ paths: {
115
+ [path]: {
116
+ [method]: operation,
117
+ },
118
+ },
119
+ ...(Object.keys(schemas).length > 0 ? { components: { schemas } } : {}),
120
+ };
121
+ return spec;
122
+ }
123
+ exports.generateOpenAPI = generateOpenAPI;
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29udHJhY3Qvb3BlbmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7QUFLSCxnRkFBZ0Y7QUFDaEYsbUJBQW1CO0FBQ25CLGdGQUFnRjtBQUVoRixTQUFTLE9BQU8sQ0FBQyxJQUFZO0lBQzNCLE9BQU8sSUFBSTtTQUNSLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsS0FBZ0I7SUFDN0MsZ0VBQWdFO0lBQ2hFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFFYixNQUFNLElBQUksR0FBRyxDQUFDLElBQWlDLEVBQUUsRUFBRTtRQUNqRCxJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFOUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sVUFB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LGtCQUFrQixFQUFFOzRCQUNsQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLFFBQVEsRUFBRSxFQUFFO3lCQUNyRDtxQkFDRjtpQkFDRjthQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLFNBQVMsRUFBRTtZQUNULEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsc0JBQXNCO2dCQUNuQyxHQUFHLENBQUMsWUFBWTtvQkFDZCxDQUFDLENBQUM7d0JBQ0UsT0FBTyxFQUFFOzRCQUNQLGtCQUFrQixFQUFFO2dDQUNsQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLFNBQVMsRUFBRSxFQUFFOzZCQUN0RDt5QkFDRjtxQkFDRjtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1I7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLDBCQUEwQjthQUN4QztTQUNGO0tBQ0YsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFnQjtRQUN4QixPQUFPLEVBQUUsT0FBTztRQUNoQixJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsUUFBUTtZQUNmLFdBQVcsRUFBRSxlQUFlO1lBQzVCLE9BQU87U0FDUjtRQUNELEtBQUssRUFBRTtZQUNMLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ04sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO2FBQ3BCO1NBQ0Y7UUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN4RSxDQUFDO0lBRUYsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBeEVELDBDQXdFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29udHJhY3Qvb3BlbmFwaS50cyDigJQgT3BlbkFQSSAzLjEgc3BlYyBnZW5lcmF0b3IuXG4gKlxuICogR2VuZXJhdGVzIGFuIE9wZW5BUEkgc3BlYyBmcm9tIGEgRmxvd0NoYXJ0Q29udHJhY3QgYnkgY29tYmluaW5nOlxuICogLSBjaGFydC5kZXNjcmlwdGlvbiDihpIgb3BlcmF0aW9uIGRlc2NyaXB0aW9uXG4gKiAtIGNoYXJ0LnN0YWdlRGVzY3JpcHRpb25zIOKGkiBzdGVwLWJ5LXN0ZXAgZGV0YWlsXG4gKiAtIGlucHV0U2NoZW1hIOKGkiByZXF1ZXN0Qm9keVxuICogLSBvdXRwdXRTY2hlbWEg4oaSIHJlc3BvbnNlXG4gKiAtIGNoYXJ0LmJ1aWxkVGltZVN0cnVjdHVyZSDihpIgb3BlcmF0aW9uIG1ldGFkYXRhIChicmFuY2hlcywgZm9ya3MsIGV0Yy4pXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRDb250cmFjdCwgSnNvblNjaGVtYSwgT3BlbkFQSU9wZXJhdGlvbiwgT3BlbkFQSU9wdGlvbnMsIE9wZW5BUElTcGVjIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJuYWwgaGVscGVyc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHNsdWdpZnkobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAucmVwbGFjZSgvXi18LSQvZywgJycpO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0ZXBzRGVzY3JpcHRpb24oY2hhcnQ6IEZsb3dDaGFydCk6IHN0cmluZyB7XG4gIC8vIFdhbGsgYnVpbGRUaW1lU3RydWN0dXJlIHRvIHByb2R1Y2UgYSBzdGVwLWJ5LXN0ZXAgZGVzY3JpcHRpb25cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBzdGVwID0gMDtcblxuICBjb25zdCB3YWxrID0gKG5vZGU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSkgPT4ge1xuICAgIHN0ZXArKztcbiAgICBjb25zdCBkZXNjID0gbm9kZS5kZXNjcmlwdGlvbiA/IGAg4oCUICR7bm9kZS5kZXNjcmlwdGlvbn1gIDogJyc7XG5cbiAgICBpZiAobm9kZS5oYXNEZWNpZGVyICYmIG5vZGUuYnJhbmNoSWRzKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke3N0ZXB9LiAke25vZGUubmFtZX0ke2Rlc2N9IOKAlCBEZWNpZGVzIGJldHdlZW46ICR7bm9kZS5icmFuY2hJZHMuam9pbignLCAnKX1gKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwICYmICFub2RlLmhhc0RlY2lkZXIpIHtcbiAgICAgIGNvbnN0IGNoaWxkTmFtZXMgPSBub2RlLmNoaWxkcmVuLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgbGluZXMucHVzaChgJHtzdGVwfS4gJHtub2RlLm5hbWV9JHtkZXNjfSAocGFyYWxsZWw6ICR7Y2hpbGROYW1lc30pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7c3RlcH0uICR7bm9kZS5uYW1lfSR7ZGVzY31gKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB3YWxrKGNoaWxkKTtcbiAgICB9XG4gICAgaWYgKG5vZGUubmV4dCkgd2Fsayhub2RlLm5leHQpO1xuICB9O1xuXG4gIHdhbGsoY2hhcnQuYnVpbGRUaW1lU3RydWN0dXJlKTtcblxuICBjb25zdCBoZWFkZXIgPSBjaGFydC5kZXNjcmlwdGlvbiA/IGAke2NoYXJ0LmRlc2NyaXB0aW9ufVxcblxcbmAgOiAnJztcbiAgcmV0dXJuIGAke2hlYWRlcn1GbG93Q2hhcnQ6ICR7Y2hhcnQucm9vdC5uYW1lfVxcblN0ZXBzOlxcbiR7bGluZXMuam9pbignXFxuJyl9YDtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBQdWJsaWMgQVBJXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlT3BlbkFQSShjb250cmFjdDogRmxvd0NoYXJ0Q29udHJhY3QsIG9wdGlvbnM/OiBPcGVuQVBJT3B0aW9ucyk6IE9wZW5BUElTcGVjIHtcbiAgY29uc3QgeyBjaGFydCwgaW5wdXRTY2hlbWEsIG91dHB1dFNjaGVtYSB9ID0gY29udHJhY3Q7XG4gIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCc7XG4gIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucz8uYmFzZVBhdGggPz8gJy8nO1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zPy5tZXRob2QgPz8gJ3Bvc3QnO1xuXG4gIGNvbnN0IHJvb3ROYW1lID0gY2hhcnQucm9vdC5uYW1lO1xuICBjb25zdCBvcGVyYXRpb25JZCA9IHNsdWdpZnkocm9vdE5hbWUpO1xuICBjb25zdCBwYXRoID0gYCR7YmFzZVBhdGggPT09ICcvJyA/ICcnIDogYmFzZVBhdGh9LyR7b3BlcmF0aW9uSWR9YDtcblxuICBjb25zdCBmdWxsRGVzY3JpcHRpb24gPSBidWlsZFN0ZXBzRGVzY3JpcHRpb24oY2hhcnQpO1xuXG4gIC8vIEJ1aWxkIHNjaGVtYXMgZm9yIGNvbXBvbmVudHNcbiAgY29uc3Qgc2NoZW1hczogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT4gPSB7fTtcbiAgY29uc3QgaW5wdXRSZWYgPSBgJHtyb290TmFtZX1JbnB1dGA7XG4gIGNvbnN0IG91dHB1dFJlZiA9IGAke3Jvb3ROYW1lfU91dHB1dGA7XG5cbiAgaWYgKGlucHV0U2NoZW1hKSBzY2hlbWFzW2lucHV0UmVmXSA9IGlucHV0U2NoZW1hO1xuICBpZiAob3V0cHV0U2NoZW1hKSBzY2hlbWFzW291dHB1dFJlZl0gPSBvdXRwdXRTY2hlbWE7XG5cbiAgLy8gQnVpbGQgb3BlcmF0aW9uXG4gIGNvbnN0IG9wZXJhdGlvbjogT3BlbkFQSU9wZXJhdGlvbiA9IHtcbiAgICBvcGVyYXRpb25JZCxcbiAgICBzdW1tYXJ5OiByb290TmFtZSxcbiAgICBkZXNjcmlwdGlvbjogZnVsbERlc2NyaXB0aW9uLFxuICAgIC4uLihpbnB1dFNjaGVtYVxuICAgICAgPyB7XG4gICAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHsgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7aW5wdXRSZWZ9YCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICcyMDAnOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3VjY2Vzc2Z1bCBleGVjdXRpb24nLFxuICAgICAgICAuLi4ob3V0cHV0U2NoZW1hXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6IHtcbiAgICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHtvdXRwdXRSZWZ9YCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9LFxuICAgICAgJzUwMCc6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQaXBlbGluZSBleGVjdXRpb24gZXJyb3InLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHNwZWM6IE9wZW5BUElTcGVjID0ge1xuICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IHJvb3ROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGZ1bGxEZXNjcmlwdGlvbixcbiAgICAgIHZlcnNpb24sXG4gICAgfSxcbiAgICBwYXRoczoge1xuICAgICAgW3BhdGhdOiB7XG4gICAgICAgIFttZXRob2RdOiBvcGVyYXRpb24sXG4gICAgICB9LFxuICAgIH0sXG4gICAgLi4uKE9iamVjdC5rZXlzKHNjaGVtYXMpLmxlbmd0aCA+IDAgPyB7IGNvbXBvbmVudHM6IHsgc2NoZW1hcyB9IH0gOiB7fSksXG4gIH07XG5cbiAgcmV0dXJuIHNwZWM7XG59XG4iXX0=
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * contract/schema.ts — Schema normalization utilities.
4
+ *
5
+ * Converts Zod schemas or raw JSON Schema objects into a normalized
6
+ * JsonSchema format. Zod detection uses duck-typing (checks for `_def`).
7
+ *
8
+ * Standalone: no dependency on Zod at import time.
9
+ * Compatible with Zod v4 internals.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.normalizeSchema = exports.zodToJsonSchema = exports.isZodSchema = void 0;
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ // Zod Detection (duck-typing)
15
+ // ─────────────────────────────────────────────────────────────────────────────
16
+ function isZodSchema(input) {
17
+ if (!input || typeof input !== 'object')
18
+ return false;
19
+ const obj = input;
20
+ // Zod v4: top-level schema has `def` with a `type` string
21
+ if ('def' in obj && typeof obj.def === 'object' && obj.def !== null) {
22
+ return typeof obj.def.type === 'string';
23
+ }
24
+ // Zod v3 fallback: `_def` with `typeName`
25
+ if ('_def' in obj && typeof obj._def === 'object' && obj._def !== null) {
26
+ return typeof obj._def.type === 'string';
27
+ }
28
+ return false;
29
+ }
30
+ exports.isZodSchema = isZodSchema;
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+ // Zod v4 → JSON Schema (minimal converter for common types)
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+ /**
35
+ * Get the def object from a Zod schema.
36
+ * In Zod v4, top-level schemas have `.def`, inner types accessed via
37
+ * `_def` or `.def` depending on context.
38
+ */
39
+ function getDef(zodSchema) {
40
+ // Top-level Zod v4 schema: `.def` property
41
+ if (zodSchema.def && typeof zodSchema.def === 'object') {
42
+ return zodSchema.def;
43
+ }
44
+ // Nested via _def (e.g., when accessing directly)
45
+ if (zodSchema._def && typeof zodSchema._def === 'object') {
46
+ return zodSchema._def;
47
+ }
48
+ return undefined;
49
+ }
50
+ /** Get description from a Zod v4 schema (stored via .description or .meta()) */
51
+ function getDescription(zodSchema) {
52
+ if (typeof zodSchema.description === 'string')
53
+ return zodSchema.description;
54
+ return undefined;
55
+ }
56
+ function zodDefToJsonSchema(def, zodSchema) {
57
+ const typeName = def.type;
58
+ const description = zodSchema ? getDescription(zodSchema) : undefined;
59
+ const base = {};
60
+ if (description)
61
+ base.description = description;
62
+ switch (typeName) {
63
+ case 'string':
64
+ return { ...base, type: 'string' };
65
+ case 'number':
66
+ return { ...base, type: 'number' };
67
+ case 'boolean':
68
+ return { ...base, type: 'boolean' };
69
+ case 'literal': {
70
+ // Zod v4: _def.values is an array of literal values
71
+ const values = def.values;
72
+ if (values && values.length === 1) {
73
+ return { ...base, type: typeof values[0], enum: values };
74
+ }
75
+ return { ...base, enum: values !== null && values !== void 0 ? values : [] };
76
+ }
77
+ case 'enum': {
78
+ // Zod v4: _def.entries is { key: value } object
79
+ const entries = def.entries;
80
+ const values = entries ? Object.values(entries) : [];
81
+ return { ...base, type: 'string', enum: values };
82
+ }
83
+ case 'array': {
84
+ // Zod v4: _def.element is the inner schema object
85
+ const element = def.element;
86
+ const elementDef = element ? getDef(element) : undefined;
87
+ const items = elementDef ? zodDefToJsonSchema(elementDef, element) : {};
88
+ return { ...base, type: 'array', items };
89
+ }
90
+ case 'object': {
91
+ // Zod v4: _def.shape is a direct object (not a function)
92
+ const shape = def.shape;
93
+ if (!shape)
94
+ return { ...base, type: 'object' };
95
+ const properties = {};
96
+ const required = [];
97
+ for (const [key, value] of Object.entries(shape)) {
98
+ const fieldSchema = value;
99
+ const fieldDef = getDef(fieldSchema);
100
+ if (fieldDef) {
101
+ // Check if field is optional or has default
102
+ if (fieldDef.type === 'optional' || fieldDef.type === 'default') {
103
+ const inner = fieldDef.innerType;
104
+ const innerDef = inner ? getDef(inner) : undefined;
105
+ if (innerDef) {
106
+ const schema = zodDefToJsonSchema(innerDef, inner);
107
+ if (fieldDef.type === 'default' && fieldDef.defaultValue !== undefined) {
108
+ schema.default = fieldDef.defaultValue;
109
+ }
110
+ properties[key] = schema;
111
+ }
112
+ else {
113
+ properties[key] = {};
114
+ }
115
+ }
116
+ else {
117
+ properties[key] = zodDefToJsonSchema(fieldDef, fieldSchema);
118
+ required.push(key);
119
+ }
120
+ }
121
+ }
122
+ return {
123
+ ...base,
124
+ type: 'object',
125
+ properties,
126
+ ...(required.length > 0 ? { required } : {}),
127
+ };
128
+ }
129
+ case 'optional': {
130
+ const inner = def.innerType;
131
+ const innerDef = inner ? getDef(inner) : undefined;
132
+ return innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
133
+ }
134
+ case 'default': {
135
+ const inner = def.innerType;
136
+ const innerDef = inner ? getDef(inner) : undefined;
137
+ const schema = innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
138
+ if (def.defaultValue !== undefined) {
139
+ schema.default = def.defaultValue;
140
+ }
141
+ return schema;
142
+ }
143
+ case 'nullable': {
144
+ const inner = def.innerType;
145
+ const innerDef = inner ? getDef(inner) : undefined;
146
+ const schema = innerDef ? zodDefToJsonSchema(innerDef, inner) : {};
147
+ return { ...base, oneOf: [schema, { type: 'null' }] };
148
+ }
149
+ case 'union': {
150
+ const options = def.options;
151
+ if (!options)
152
+ return base;
153
+ return {
154
+ ...base,
155
+ oneOf: options
156
+ .map((o) => {
157
+ const oDef = getDef(o);
158
+ return oDef ? zodDefToJsonSchema(oDef, o) : null;
159
+ })
160
+ .filter((s) => s !== null),
161
+ };
162
+ }
163
+ case 'record': {
164
+ // Zod v4: _def.valueType is the value schema
165
+ const valueType = def.valueType;
166
+ const valueDef = valueType ? getDef(valueType) : undefined;
167
+ return {
168
+ ...base,
169
+ type: 'object',
170
+ additionalProperties: valueDef ? zodDefToJsonSchema(valueDef, valueType) : true,
171
+ };
172
+ }
173
+ case 'any':
174
+ return base;
175
+ case 'pipe': {
176
+ // Zod v4: .transform() / .refine() — unwrap to input schema
177
+ const inner = def.in;
178
+ const innerDef = inner ? getDef(inner) : undefined;
179
+ return innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
180
+ }
181
+ default:
182
+ // Unknown Zod type — return empty schema
183
+ return base;
184
+ }
185
+ }
186
+ /** Convert a Zod schema object to JSON Schema. */
187
+ function zodToJsonSchema(zodSchema) {
188
+ const def = getDef(zodSchema);
189
+ if (!def)
190
+ return {};
191
+ return zodDefToJsonSchema(def, zodSchema);
192
+ }
193
+ exports.zodToJsonSchema = zodToJsonSchema;
194
+ // ─────────────────────────────────────────────────────────────────────────────
195
+ // Normalize — accepts either Zod or JSON Schema, returns JSON Schema
196
+ // ─────────────────────────────────────────────────────────────────────────────
197
+ function normalizeSchema(input) {
198
+ if (isZodSchema(input)) {
199
+ return zodToJsonSchema(input);
200
+ }
201
+ // Already a JSON Schema
202
+ return input;
203
+ }
204
+ exports.normalizeSchema = normalizeSchema;
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFJSCxnRkFBZ0Y7QUFDaEYsOEJBQThCO0FBQzlCLGdGQUFnRjtBQUVoRixTQUFnQixXQUFXLENBQUMsS0FBYztJQUN4QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0RCxNQUFNLEdBQUcsR0FBRyxLQUFnQyxDQUFDO0lBQzdDLDBEQUEwRDtJQUMxRCxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BFLE9BQU8sT0FBUSxHQUFHLENBQUMsR0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQ3ZFLENBQUM7SUFDRCwwQ0FBMEM7SUFDMUMsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN2RSxPQUFPLE9BQVEsR0FBRyxDQUFDLElBQWdDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBWkQsa0NBWUM7QUFFRCxnRkFBZ0Y7QUFDaEYsNERBQTREO0FBQzVELGdGQUFnRjtBQUVoRjs7OztHQUlHO0FBQ0gsU0FBUyxNQUFNLENBQUMsU0FBa0M7SUFDaEQsMkNBQTJDO0lBQzNDLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxPQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkQsT0FBTyxTQUFTLENBQUMsR0FBOEIsQ0FB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SUM7QUFFRCxnRkFBZ0Y7QUFDaEYscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUVoRixTQUFnQixlQUFlLENBQUMsS0FBa0I7SUFDaEQsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLGVBQWUsQ0FBQyxLQUFnQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELHdCQUF3QjtJQUN4QixPQUFPLEtBQW1CLENBQUM7QUFDN0IsQ0FBQztBQU5ELDBDQU1DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjb250cmFjdC9zY2hlbWEudHMg4oCUIFNjaGVtYSBub3JtYWxpemF0aW9uIHV0aWxpdGllcy5cbiAqXG4gKiBDb252ZXJ0cyBab2Qgc2NoZW1hcyBvciByYXcgSlNPTiBTY2hlbWEgb2JqZWN0cyBpbnRvIGEgbm9ybWFsaXplZFxuICogSnNvblNjaGVtYSBmb3JtYXQuIFpvZCBkZXRlY3Rpb24gdXNlcyBkdWNrLXR5cGluZyAoY2hlY2tzIGZvciBgX2RlZmApLlxuICpcbiAqIFN0YW5kYWxvbmU6IG5vIGRlcGVuZGVuY3kgb24gWm9kIGF0IGltcG9ydCB0aW1lLlxuICogQ29tcGF0aWJsZSB3aXRoIFpvZCB2NCBpbnRlcm5hbHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKc29uU2NoZW1hLCBTY2hlbWFJbnB1dCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFpvZCBEZXRlY3Rpb24gKGR1Y2stdHlwaW5nKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1pvZFNjaGVtYShpbnB1dDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb2JqID0gaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFpvZCB2NDogdG9wLWxldmVsIHNjaGVtYSBoYXMgYGRlZmAgd2l0aCBhIGB0eXBlYCBzdHJpbmdcbiAgaWYgKCdkZWYnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLmRlZiA9PT0gJ29iamVjdCcgJiYgb2JqLmRlZiAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0eXBlb2YgKG9iai5kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR5cGUgPT09ICdzdHJpbmcnO1xuICB9XG4gIC8vIFpvZCB2MyBmYWxsYmFjazogYF9kZWZgIHdpdGggYHR5cGVOYW1lYFxuICBpZiAoJ19kZWYnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLl9kZWYgPT09ICdvYmplY3QnICYmIG9iai5fZGVmICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiAob2JqLl9kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR5cGUgPT09ICdzdHJpbmcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBab2QgdjQg4oaSIEpTT04gU2NoZW1hIChtaW5pbWFsIGNvbnZlcnRlciBmb3IgY29tbW9uIHR5cGVzKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogR2V0IHRoZSBkZWYgb2JqZWN0IGZyb20gYSBab2Qgc2NoZW1hLlxuICogSW4gWm9kIHY0LCB0b3AtbGV2ZWwgc2NoZW1hcyBoYXZlIGAuZGVmYCwgaW5uZXIgdHlwZXMgYWNjZXNzZWQgdmlhXG4gKiBgX2RlZmAgb3IgYC5kZWZgIGRlcGVuZGluZyBvbiBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBnZXREZWYoem9kU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgLy8gVG9wLWxldmVsIFpvZCB2NCBzY2hlbWE6IGAuZGVmYCBwcm9wZXJ0eVxuICBpZiAoem9kU2NoZW1hLmRlZiAmJiB0eXBlb2Ygem9kU2NoZW1hLmRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gem9kU2NoZW1hLmRlZiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuICAvLyBOZXN0ZWQgdmlhIF9kZWYgKGUuZy4sIHdoZW4gYWNjZXNzaW5nIGRpcmVjdGx5KVxuICBpZiAoem9kU2NoZW1hLl9kZWYgJiYgdHlwZW9mIHpvZFNjaGVtYS5fZGVmID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB6b2RTY2hlbWEuX2RlZiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogR2V0IGRlc2NyaXB0aW9uIGZyb20gYSBab2QgdjQgc2NoZW1hIChzdG9yZWQgdmlhIC5kZXNjcmlwdGlvbiBvciAubWV0YSgpKSAqL1xuZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oem9kU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2Ygem9kU2NoZW1hLmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIHpvZFNjaGVtYS5kZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gem9kRGVmVG9Kc29uU2NoZW1hKGRlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHpvZFNjaGVtYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogSnNvblNjaGVtYSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gZGVmLnR5cGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IHpvZFNjaGVtYSA/IGdldERlc2NyaXB0aW9uKHpvZFNjaGVtYSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJhc2U6IEpzb25TY2hlbWEgPSB7fTtcbiAgaWYgKGRlc2NyaXB0aW9uKSBiYXNlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG5cbiAgc3dpdGNoICh0eXBlTmFtZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnc3RyaW5nJyB9O1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdudW1iZXInIH07XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdib29sZWFuJyB9O1xuXG4gICAgY2FzZSAnbGl0ZXJhbCc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi52YWx1ZXMgaXMgYW4gYXJyYXkgb2YgbGl0ZXJhbCB2YWx1ZXNcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZi52YWx1ZXMgYXMgdW5rbm93bltdIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6IHR5cGVvZiB2YWx1ZXNbMF0sIGVudW06IHZhbHVlcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgZW51bTogdmFsdWVzID8/IFtdIH07XG4gICAgfVxuXG4gICAgY2FzZSAnZW51bSc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi5lbnRyaWVzIGlzIHsga2V5OiB2YWx1ZSB9IG9iamVjdFxuICAgICAgY29uc3QgZW50cmllcyA9IGRlZi5lbnRyaWVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsdWVzID0gZW50cmllcyA/IE9iamVjdC52YWx1ZXMoZW50cmllcykgOiBbXTtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdzdHJpbmcnLCBlbnVtOiB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi5lbGVtZW50IGlzIHRoZSBpbm5lciBzY2hlbWEgb2JqZWN0XG4gICAgICBjb25zdCBlbGVtZW50ID0gZGVmLmVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlbGVtZW50RGVmID0gZWxlbWVudCA/IGdldERlZihlbGVtZW50KSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZWxlbWVudERlZiA/IHpvZERlZlRvSnNvblNjaGVtYShlbGVtZW50RGVmLCBlbGVtZW50KSA6IHt9O1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ2FycmF5JywgaXRlbXMgfTtcbiAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAvLyBab2QgdjQ6IF9kZWYuc2hhcGUgaXMgYSBkaXJlY3Qgb2JqZWN0IChub3QgYSBmdW5jdGlvbilcbiAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFzaGFwZSkgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ29iamVjdCcgfTtcblxuICAgICAgY29uc3QgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT4gPSB7fTtcbiAgICAgIGNvbnN0IHJlcXVpcmVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzaGFwZSkpIHtcbiAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgY29uc3QgZmllbGREZWYgPSBnZXREZWYoZmllbGRTY2hlbWEpO1xuICAgICAgICBpZiAoZmllbGREZWYpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBmaWVsZCBpcyBvcHRpb25hbCBvciBoYXMgZGVmYXVsdFxuICAgICAgICAgIGlmIChmaWVsZERlZi50eXBlID09PSAnb3B0aW9uYWwnIHx8IGZpZWxkRGVmLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXIgPSBmaWVsZERlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpbm5lckRlZikge1xuICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKTtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkRGVmLnR5cGUgPT09ICdkZWZhdWx0JyAmJiBmaWVsZERlZi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNjaGVtYS5kZWZhdWx0ID0gZmllbGREZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHNjaGVtYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB6b2REZWZUb0pzb25TY2hlbWEoZmllbGREZWYsIGZpZWxkU2NoZW1hKTtcbiAgICAgICAgICAgIHJlcXVpcmVkLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIC4uLihyZXF1aXJlZC5sZW5ndGggPiAwID8geyByZXF1aXJlZCB9IDoge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICdvcHRpb25hbCc6IHtcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmlubmVyVHlwZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlubmVyRGVmID0gaW5uZXIgPyBnZXREZWYoaW5uZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgIH1cblxuICAgIGNhc2UgJ2RlZmF1bHQnOiB7XG4gICAgICBjb25zdCBpbm5lciA9IGRlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgICAgaWYgKGRlZi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY2hlbWEuZGVmYXVsdCA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cblxuICAgIGNhc2UgJ251bGxhYmxlJzoge1xuICAgICAgY29uc3QgaW5uZXIgPSBkZWYuaW5uZXJUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzY2hlbWEgPSBpbm5lckRlZiA/IHpvZERlZlRvSnNvblNjaGVtYShpbm5lckRlZiwgaW5uZXIpIDoge307XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvbmVPZjogW3NjaGVtYSwgeyB0eXBlOiAnbnVsbCcgfV0gfTtcbiAgICB9XG5cbiAgICBjYXNlICd1bmlvbic6IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZWYub3B0aW9ucyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBiYXNlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgb25lT2Y6IG9wdGlvbnNcbiAgICAgICAgICAubWFwKChvKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvRGVmID0gZ2V0RGVmKG8pO1xuICAgICAgICAgICAgcmV0dXJuIG9EZWYgPyB6b2REZWZUb0pzb25TY2hlbWEob0RlZiwgbykgOiBudWxsO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocyk6IHMgaXMgSnNvblNjaGVtYSA9PiBzICE9PSBudWxsKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAncmVjb3JkJzoge1xuICAgICAgLy8gWm9kIHY0OiBfZGVmLnZhbHVlVHlwZSBpcyB0aGUgdmFsdWUgc2NoZW1hXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsdWVEZWYgPSB2YWx1ZVR5cGUgPyBnZXREZWYodmFsdWVUeXBlKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdmFsdWVEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEodmFsdWVEZWYsIHZhbHVlVHlwZSkgOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICdhbnknOlxuICAgICAgcmV0dXJuIGJhc2U7XG5cbiAgICBjYXNlICdwaXBlJzoge1xuICAgICAgLy8gWm9kIHY0OiAudHJhbnNmb3JtKCkgLyAucmVmaW5lKCkg4oCUIHVud3JhcCB0byBpbnB1dCBzY2hlbWFcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmluIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gaW5uZXJEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKSA6IGJhc2U7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFVua25vd24gWm9kIHR5cGUg4oCUIHJldHVybiBlbXB0eSBzY2hlbWFcbiAgICAgIHJldHVybiBiYXNlO1xuICB9XG59XG5cbi8qKiBDb252ZXJ0IGEgWm9kIHNjaGVtYSBvYmplY3QgdG8gSlNPTiBTY2hlbWEuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVG9Kc29uU2NoZW1hKHpvZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBKc29uU2NoZW1hIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHpvZFNjaGVtYSk7XG4gIGlmICghZGVmKSByZXR1cm4ge307XG4gIHJldHVybiB6b2REZWZUb0pzb25TY2hlbWEoZGVmLCB6b2RTY2hlbWEpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE5vcm1hbGl6ZSDigJQgYWNjZXB0cyBlaXRoZXIgWm9kIG9yIEpTT04gU2NoZW1hLCByZXR1cm5zIEpTT04gU2NoZW1hXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNjaGVtYShpbnB1dDogU2NoZW1hSW5wdXQpOiBKc29uU2NoZW1hIHtcbiAgaWYgKGlzWm9kU2NoZW1hKGlucHV0KSkge1xuICAgIHJldHVybiB6b2RUb0pzb25TY2hlbWEoaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG4gIC8vIEFscmVhZHkgYSBKU09OIFNjaGVtYVxuICByZXR1cm4gaW5wdXQgYXMgSnNvblNjaGVtYTtcbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * contract/types.ts — Types for the FlowChart contract layer.
4
+ *
5
+ * Defines the I/O boundary for a flowchart: input schema, output schema,
6
+ * and output mapper. Uses the same pattern as SubflowMountOptions
7
+ * (inputMapper/outputMapper) but at the top-level flowchart boundary.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNvbnRyYWN0L3R5cGVzLnRzIOKAlCBUeXBlcyBmb3IgdGhlIEZsb3dDaGFydCBjb250cmFjdCBsYXllci5cbiAqXG4gKiBEZWZpbmVzIHRoZSBJL08gYm91bmRhcnkgZm9yIGEgZmxvd2NoYXJ0OiBpbnB1dCBzY2hlbWEsIG91dHB1dCBzY2hlbWEsXG4gKiBhbmQgb3V0cHV0IG1hcHBlci4gVXNlcyB0aGUgc2FtZSBwYXR0ZXJuIGFzIFN1YmZsb3dNb3VudE9wdGlvbnNcbiAqIChpbnB1dE1hcHBlci9vdXRwdXRNYXBwZXIpIGJ1dCBhdCB0aGUgdG9wLWxldmVsIGZsb3djaGFydCBib3VuZGFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEpTT04gU2NoZW1hIChzdWJzZXQgb2YgSlNPTiBTY2hlbWEgRHJhZnQgMjAyMC0xMiAvIE9wZW5BUEkgMy4xKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEpzb25TY2hlbWEgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIEpzb25TY2hlbWE+O1xuICByZXF1aXJlZD86IHN0cmluZ1tdO1xuICBpdGVtcz86IEpzb25TY2hlbWE7XG4gIGVudW0/OiB1bmtub3duW107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbiAgZm9ybWF0Pzogc3RyaW5nO1xuICBhZGRpdGlvbmFsUHJvcGVydGllcz86IGJvb2xlYW4gfCBKc29uU2NoZW1hO1xuICBvbmVPZj86IEpzb25TY2hlbWFbXTtcbiAgYW55T2Y/OiBKc29uU2NoZW1hW107XG4gIGFsbE9mPzogSnNvblNjaGVtYVtdO1xuICAkcmVmPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTY2hlbWEgSW5wdXQg4oCUIGFjY2VwdHMgZWl0aGVyIFpvZCBzY2hlbWEgb3IgcmF3IEpTT04gU2NoZW1hXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEFueXRoaW5nIHdpdGggYSBgZGVmYCAoWm9kIHY0KSBvciBgX2RlZmAgKFpvZCB2MykgcHJvcGVydHkgaXMgdHJlYXRlZCBhcyBhIFpvZCBzY2hlbWEuICovXG5leHBvcnQgdHlwZSBTY2hlbWFJbnB1dCA9IEpzb25TY2hlbWEgfCB7IGRlZjogdW5rbm93bjsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydCBDb250cmFjdCDigJQgSS9PIGJvdW5kYXJ5IGRlZmluaXRpb25cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydENvbnRyYWN0T3B0aW9uczxUSW5wdXQgPSB1bmtub3duLCBUT3V0cHV0ID0gdW5rbm93bj4ge1xuICAvKiogU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGlucHV0IChyZWFkT25seUNvbnRleHQpIHNoYXBlLiBab2Qgb3IgSlNPTiBTY2hlbWEuICovXG4gIGlucHV0U2NoZW1hPzogU2NoZW1hSW5wdXQ7XG4gIC8qKiBTY2hlbWEgZGVzY3JpYmluZyB0aGUgb3V0cHV0IHNoYXBlLiBab2Qgb3IgSlNPTiBTY2hlbWEuICovXG4gIG91dHB1dFNjaGVtYT86IFNjaGVtYUlucHV0O1xuICAvKiogTWFwcyB0aGUgZmluYWwgc2NvcGUgc3RhdGUgaW50byB0aGUgcmVzcG9uc2Ugc2hhcGUuICovXG4gIG91dHB1dE1hcHBlcj86IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVE91dHB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRDb250cmFjdDxUSW5wdXQgPSB1bmtub3duLCBUT3V0cHV0ID0gdW5rbm93bj4ge1xuICAvKiogVGhlIGNvbXBpbGVkIGZsb3djaGFydC4gKi9cbiAgY2hhcnQ6IEZsb3dDaGFydDtcbiAgLyoqIEpTT04gU2NoZW1hIGZvciB0aGUgaW5wdXQgKG5vcm1hbGl6ZWQgZnJvbSBab2Qgb3IgcmF3KS4gKi9cbiAgaW5wdXRTY2hlbWE/OiBKc29uU2NoZW1hO1xuICAvKiogSlNPTiBTY2hlbWEgZm9yIHRoZSBvdXRwdXQgKG5vcm1hbGl6ZWQgZnJvbSBab2Qgb3IgcmF3KS4gKi9cbiAgb3V0cHV0U2NoZW1hPzogSnNvblNjaGVtYTtcbiAgLyoqIE1hcHMgdGhlIGZpbmFsIHNjb3BlIHN0YXRlIGludG8gdGhlIHJlc3BvbnNlIHNoYXBlLiAqL1xuICBvdXRwdXRNYXBwZXI/OiAoZmluYWxTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFRPdXRwdXQ7XG4gIC8qKiBBdXRvLWdlbmVyYXRlZCBPcGVuQVBJIHNwZWMuICovXG4gIHRvT3BlbkFQSShvcHRpb25zPzogT3BlbkFQSU9wdGlvbnMpOiBPcGVuQVBJU3BlYztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBPcGVuQVBJIFR5cGVzIChtaW5pbWFsIHN1YnNldCBvZiBPcGVuQVBJIDMuMSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BUElPcHRpb25zIHtcbiAgLyoqIEFQSSB2ZXJzaW9uIHN0cmluZyAoZGVmYXVsdDogXCIxLjAuMFwiKS4gKi9cbiAgdmVyc2lvbj86IHN0cmluZztcbiAgLyoqIEJhc2UgcGF0aCBwcmVmaXggKGRlZmF1bHQ6IFwiL1wiKS4gKi9cbiAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBIVFRQIG1ldGhvZCBmb3IgdGhlIGV4ZWN1dGUgZW5kcG9pbnQgKGRlZmF1bHQ6IFwicG9zdFwiKS4gKi9cbiAgbWV0aG9kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BUElTcGVjIHtcbiAgb3BlbmFwaTogJzMuMS4wJztcbiAgaW5mbzoge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gIH07XG4gIHBhdGhzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBPcGVuQVBJT3BlcmF0aW9uPj47XG4gIGNvbXBvbmVudHM/OiB7XG4gICAgc2NoZW1hcz86IFJlY29yZDxzdHJpbmcsIEpzb25TY2hlbWE+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BUElPcGVyYXRpb24ge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlcXVlc3RCb2R5Pzoge1xuICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIGNvbnRlbnQ6IHtcbiAgICAgICdhcHBsaWNhdGlvbi9qc29uJzoge1xuICAgICAgICBzY2hlbWE6IEpzb25TY2hlbWEgfCB7ICRyZWY6IHN0cmluZyB9O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xuICByZXNwb25zZXM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGNvbnRlbnQ/OiB7XG4gICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzoge1xuICAgICAgICAgIHNjaGVtYTogSnNvblNjaGVtYSB8IHsgJHJlZjogc3RyaW5nIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cbiAgPjtcbn1cbiJdfQ==
@@ -39,4 +39,4 @@ function isStageNodeReturn(output) {
39
39
  }
40
40
  }
41
41
  exports.isStageNodeReturn = isStageNodeReturn;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VOb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQXVGSCw4RUFBOEU7QUFDOUUscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUU5RTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBZTtJQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV4RCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFpQyxDQUFDO1FBQzlDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUvQyxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDeEQsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3RCLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQztRQUU3QyxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQWhCRCw4Q0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlTm9kZSDigJQgVGhlIGdyYXBoIG5vZGUgdHlwZSBmb3IgZmxvd2NoYXJ0IHRyYXZlcnNhbC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBzaGFwZSBvZiBlYWNoIG5vZGUgaW4gdGhlIGZsb3djaGFydCBEQUc6XG4gKiAtIExpbmVhciBjb250aW51YXRpb24gdmlhIGBuZXh0YCAobGlua2VkIGxpc3QgdHJhdmVyc2FsKVxuICogLSBQYXJhbGxlbCBmYW4tb3V0IHZpYSBgY2hpbGRyZW5gIChmb3JrKVxuICogLSBDb25kaXRpb25hbCBicmFuY2hpbmcgdmlhIGBkZWNpZGVyRm5gIChzaW5nbGUtY2hvaWNlKSBvciBgc2VsZWN0b3JGbmAgKG11bHRpLWNob2ljZSlcbiAqIC0gQmFjay1lZGdlcyB2aWEgZHluYW1pYyBuZXh0IChsb29wKVxuICogLSBJc29sYXRlZCBzdWItdHJhdmVyc2FscyB2aWEgYGlzU3ViZmxvd1Jvb3RgIChzdWJmbG93KVxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VGdW5jdGlvbiwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWNpZGVyICsgU2VsZWN0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUGlja3MgZXhhY3RseSBPTkUgY2hpbGQgYnkgSUQuIENvbmRpdGlvbmFsIGJyYW5jaCAoaWYvc3dpdGNoKS4gKi9cbmV4cG9ydCB0eXBlIERlY2lkZXIgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFBpY2tzIE9ORSBPUiBNT1JFIGNoaWxkcmVuIGJ5IElELiBGaWx0ZXJlZCBmYW4tb3V0LlxuICogLSBTaW5nbGUgc3RyaW5nOiBiZWhhdmVzIGxpa2UgRGVjaWRlclxuICogLSBBcnJheTogc2VsZWN0ZWQgY2hpbGRyZW4gZXhlY3V0ZSBpbiBwYXJhbGxlbFxuICogLSBFbXB0eSBhcnJheTogc2tpcCBhbGwgY2hpbGRyZW5cbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0b3IgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgc3RyaW5nW10gfCBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZU5vZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5ICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHN0YWJsZSBpZCAocmVxdWlyZWQgYnkgZGVjaWRlci9mb3JrIGFnZ3JlZ2F0aW9uKSAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgbmFtZSBmb3IgVUkgKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgc3RhZ2UgZG9lcy4gVXNlZCBmb3IgbmFycmF0aXZlIGFuZCB0b29sIGRlc2NyaXB0aW9ucy4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLy8g4pSA4pSAIENvbnRpbnVhdGlvbiBwb2ludGVycyDilIDilIBcblxuICAvKiogTGluZWFyIGNvbnRpbnVhdGlvbiAobGlua2VkIGxpc3QgbmV4dCBwb2ludGVyKSAqL1xuICBuZXh0PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBQYXJhbGxlbCBjaGlsZHJlbiAoZm9yayBmYW4tb3V0KSAqL1xuICBjaGlsZHJlbj86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG5cbiAgLy8g4pSA4pSAIEJyYW5jaGluZyDilIDilIBcblxuICAvKiogT3V0cHV0LWJhc2VkIHNlbGVjdG9yOiBwaWNrcyBzdWJzZXQgb2YgY2hpbGRyZW4gKi9cbiAgbmV4dE5vZGVTZWxlY3Rvcj86IFNlbGVjdG9yO1xuICAvKiogV2hlbiB0cnVlLCBmbiBJUyBhIHNjb3BlLWJhc2VkIGRlY2lkZXIgdGhhdCByZXR1cm5zIGEgYnJhbmNoIElEIHN0cmluZyAqL1xuICBkZWNpZGVyRm4/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBmbiBJUyBhIHNjb3BlLWJhc2VkIHNlbGVjdG9yIHRoYXQgcmV0dXJucyBicmFuY2ggSUQocykgKi9cbiAgc2VsZWN0b3JGbj86IGJvb2xlYW47XG5cbiAgLy8g4pSA4pSAIFN0YWdlIGZ1bmN0aW9uIOKUgOKUgFxuXG4gIC8qKiBFbWJlZGRlZCBmdW5jdGlvbjsgb3RoZXJ3aXNlIHJlc29sdmVkIGZyb20gc3RhZ2VNYXAgYnkgYG5hbWVgICovXG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xuXG4gIC8vIOKUgOKUgCBTdHJlYW1pbmcg4pSA4pSAXG5cbiAgLyoqIFdoZW4gdHJ1ZSwgUGlwZWxpbmUgaW5qZWN0cyBhIHN0cmVhbUNhbGxiYWNrIGFzIDNyZCBwYXJhbWV0ZXIgKi9cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICAvKiogVW5pcXVlIHN0cmVhbSBpZGVudGlmaWVyIGZvciByb3V0aW5nIHRva2VucyAqL1xuICBzdHJlYW1JZD86IHN0cmluZztcblxuICAvLyDilIDilIAgU3ViZmxvdyDilIDilIBcblxuICAvKiogVHJ1ZSBpZiB0aGlzIGlzIHRoZSByb290IG5vZGUgb2YgYSBtb3VudGVkIHN1YmZsb3cgKi9cbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIC8qKiBNb3VudCBpZCBvZiB0aGUgc3ViZmxvdyAoZS5nLiwgXCJsbG0tY29yZVwiKSAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUgb2YgdGhlIHN1YmZsb3cgKi9cbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBSZWZlcmVuY2Uga2V5IGludG8gdGhlIHN1YmZsb3dzIGRpY3Rpb25hcnkgKi9cbiAgJHJlZj86IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIG1vdW50IGluc3RhbmNlICovXG4gIG1vdW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBJbnB1dC9vdXRwdXQgbWFwcGluZyBvcHRpb25zIGZvciBzdWJmbG93cyAqL1xuICBzdWJmbG93TW91bnRPcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucztcbiAgLyoqIFdoZW4gdHJ1ZSwgcGFyYWxsZWwgY2hpbGRyZW4gdXNlIGZhaWwtZmFzdCBzZW1hbnRpY3MgKHJlamVjdCBvbiBmaXJzdCBlcnJvcikgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xuXG4gIC8qKiBJbmxpbmUgc3ViZmxvdyBkZWZpbml0aW9uIGZvciBkeW5hbWljIHN1YmZsb3cgYXR0YWNobWVudCAqL1xuICBzdWJmbG93RGVmPzoge1xuICAgIHJvb3Q6IFN0YWdlTm9kZTtcbiAgICBzdGFnZU1hcD86IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gICAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbiAgICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlIH0+O1xuICB9O1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBpc1N0YWdlTm9kZVJldHVybiDigJQgZHVjay10eXBpbmcgZGV0ZWN0aW9uIGZvciBkeW5hbWljIGNvbnRpbnVhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRGV0ZWN0cyBpZiBhIHN0YWdlIG91dHB1dCBpcyBhIFN0YWdlTm9kZSBmb3IgZHluYW1pYyBjb250aW51YXRpb24uXG4gKlxuICogVXNlcyBkdWNrLXR5cGluZzogbXVzdCBoYXZlIGBuYW1lYCAoc3RyaW5nKSBBTkQgYXQgbGVhc3Qgb25lIGNvbnRpbnVhdGlvblxuICogcHJvcGVydHkgKG5vbi1lbXB0eSBjaGlsZHJlbiwgbmV4dCwgb3IgbmV4dE5vZGVTZWxlY3RvcikuXG4gKlxuICogU2FmZWx5IGhhbmRsZXMgcHJveHkgb2JqZWN0cyAoZS5nLiwgWm9kIHNjb3BlKSB0aGF0IG1heSB0aHJvdyBvbiBwcm9wZXJ0eSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWdlTm9kZVJldHVybihvdXRwdXQ6IHVua25vd24pOiBvdXRwdXQgaXMgU3RhZ2VOb2RlIHtcbiAgaWYgKCFvdXRwdXQgfHwgdHlwZW9mIG91dHB1dCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IG9iaiA9IG91dHB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIG9iai5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaGFzQ29udGludWF0aW9uID1cbiAgICAgIChBcnJheS5pc0FycmF5KG9iai5jaGlsZHJlbikgJiYgb2JqLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8XG4gICAgICBvYmoubmV4dCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eXBlb2Ygb2JqLm5leHROb2RlU2VsZWN0b3IgPT09ICdmdW5jdGlvbic7XG5cbiAgICByZXR1cm4gaGFzQ29udGludWF0aW9uO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VOb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQXFGSCw4RUFBOEU7QUFDOUUscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUU5RTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBZTtJQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV4RCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFpQyxDQUFDO1FBQzlDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUvQyxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDeEQsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3RCLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQztRQUU3QyxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQWhCRCw4Q0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlTm9kZSDigJQgVGhlIGdyYXBoIG5vZGUgdHlwZSBmb3IgZmxvd2NoYXJ0IHRyYXZlcnNhbC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBzaGFwZSBvZiBlYWNoIG5vZGUgaW4gdGhlIGZsb3djaGFydCBEQUc6XG4gKiAtIExpbmVhciBjb250aW51YXRpb24gdmlhIGBuZXh0YCAobGlua2VkIGxpc3QgdHJhdmVyc2FsKVxuICogLSBQYXJhbGxlbCBmYW4tb3V0IHZpYSBgY2hpbGRyZW5gIChmb3JrKVxuICogLSBDb25kaXRpb25hbCBicmFuY2hpbmcgdmlhIGBkZWNpZGVyRm5gIChzaW5nbGUtY2hvaWNlKSBvciBgc2VsZWN0b3JGbmAgKG11bHRpLWNob2ljZSlcbiAqIC0gQmFjay1lZGdlcyB2aWEgZHluYW1pYyBuZXh0IChsb29wKVxuICogLSBJc29sYXRlZCBzdWItdHJhdmVyc2FscyB2aWEgYGlzU3ViZmxvd1Jvb3RgIChzdWJmbG93KVxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VGdW5jdGlvbiwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWNpZGVyICsgU2VsZWN0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUGlja3MgZXhhY3RseSBPTkUgY2hpbGQgYnkgSUQuIENvbmRpdGlvbmFsIGJyYW5jaCAoaWYvc3dpdGNoKS4gKi9cbmV4cG9ydCB0eXBlIERlY2lkZXIgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFBpY2tzIE9ORSBPUiBNT1JFIGNoaWxkcmVuIGJ5IElELiBGaWx0ZXJlZCBmYW4tb3V0LlxuICogLSBTaW5nbGUgc3RyaW5nOiBiZWhhdmVzIGxpa2UgRGVjaWRlclxuICogLSBBcnJheTogc2VsZWN0ZWQgY2hpbGRyZW4gZXhlY3V0ZSBpbiBwYXJhbGxlbFxuICogLSBFbXB0eSBhcnJheTogc2tpcCBhbGwgY2hpbGRyZW5cbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0b3IgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgc3RyaW5nW10gfCBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZU5vZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5ICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHN0YWJsZSBpZCAocmVxdWlyZWQgYnkgZGVjaWRlci9mb3JrIGFnZ3JlZ2F0aW9uKSAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIERlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzLiBVc2VkIGZvciBuYXJyYXRpdmUgYW5kIHRvb2wgZGVzY3JpcHRpb25zLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvLyDilIDilIAgQ29udGludWF0aW9uIHBvaW50ZXJzIOKUgOKUgFxuXG4gIC8qKiBMaW5lYXIgY29udGludWF0aW9uIChsaW5rZWQgbGlzdCBuZXh0IHBvaW50ZXIpICovXG4gIG5leHQ/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIFBhcmFsbGVsIGNoaWxkcmVuIChmb3JrIGZhbi1vdXQpICovXG4gIGNoaWxkcmVuPzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcblxuICAvLyDilIDilIAgQnJhbmNoaW5nIOKUgOKUgFxuXG4gIC8qKiBPdXRwdXQtYmFzZWQgc2VsZWN0b3I6IHBpY2tzIHN1YnNldCBvZiBjaGlsZHJlbiAqL1xuICBuZXh0Tm9kZVNlbGVjdG9yPzogU2VsZWN0b3I7XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIGEgc2NvcGUtYmFzZWQgZGVjaWRlciB0aGF0IHJldHVybnMgYSBicmFuY2ggSUQgc3RyaW5nICovXG4gIGRlY2lkZXJGbj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIGEgc2NvcGUtYmFzZWQgc2VsZWN0b3IgdGhhdCByZXR1cm5zIGJyYW5jaCBJRChzKSAqL1xuICBzZWxlY3RvckZuPzogYm9vbGVhbjtcblxuICAvLyDilIDilIAgU3RhZ2UgZnVuY3Rpb24g4pSA4pSAXG5cbiAgLyoqIEVtYmVkZGVkIGZ1bmN0aW9uOyBvdGhlcndpc2UgcmVzb2x2ZWQgZnJvbSBzdGFnZU1hcCBieSBgbmFtZWAgKi9cbiAgZm4/OiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG5cbiAgLy8g4pSA4pSAIFN0cmVhbWluZyDilIDilIBcblxuICAvKiogV2hlbiB0cnVlLCBQaXBlbGluZSBpbmplY3RzIGEgc3RyZWFtQ2FsbGJhY2sgYXMgM3JkIHBhcmFtZXRlciAqL1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIC8qKiBVbmlxdWUgc3RyZWFtIGlkZW50aWZpZXIgZm9yIHJvdXRpbmcgdG9rZW5zICovXG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBTdWJmbG93IOKUgOKUgFxuXG4gIC8qKiBUcnVlIGlmIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZSBvZiBhIG1vdW50ZWQgc3ViZmxvdyAqL1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IGlkIG9mIHRoZSBzdWJmbG93IChlLmcuLCBcImxsbS1jb3JlXCIpICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGUgc3ViZmxvdyAqL1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFJlZmVyZW5jZSBrZXkgaW50byB0aGUgc3ViZmxvd3MgZGljdGlvbmFyeSAqL1xuICAkcmVmPzogc3RyaW5nO1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgbW91bnQgaW5zdGFuY2UgKi9cbiAgbW91bnRJZD86IHN0cmluZztcbiAgLyoqIElucHV0L291dHB1dCBtYXBwaW5nIG9wdGlvbnMgZm9yIHN1YmZsb3dzICovXG4gIHN1YmZsb3dNb3VudE9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zO1xuICAvKiogV2hlbiB0cnVlLCBwYXJhbGxlbCBjaGlsZHJlbiB1c2UgZmFpbC1mYXN0IHNlbWFudGljcyAocmVqZWN0IG9uIGZpcnN0IGVycm9yKSAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG5cbiAgLyoqIElubGluZSBzdWJmbG93IGRlZmluaXRpb24gZm9yIGR5bmFtaWMgc3ViZmxvdyBhdHRhY2htZW50ICovXG4gIHN1YmZsb3dEZWY/OiB7XG4gICAgcm9vdDogU3RhZ2VOb2RlO1xuICAgIHN0YWdlTWFwPzogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgICBidWlsZFRpbWVTdHJ1Y3R1cmU/OiB1bmtub3duO1xuICAgIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGUgfT47XG4gIH07XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGlzU3RhZ2VOb2RlUmV0dXJuIOKAlCBkdWNrLXR5cGluZyBkZXRlY3Rpb24gZm9yIGR5bmFtaWMgY29udGludWF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBEZXRlY3RzIGlmIGEgc3RhZ2Ugb3V0cHV0IGlzIGEgU3RhZ2VOb2RlIGZvciBkeW5hbWljIGNvbnRpbnVhdGlvbi5cbiAqXG4gKiBVc2VzIGR1Y2stdHlwaW5nOiBtdXN0IGhhdmUgYG5hbWVgIChzdHJpbmcpIEFORCBhdCBsZWFzdCBvbmUgY29udGludWF0aW9uXG4gKiBwcm9wZXJ0eSAobm9uLWVtcHR5IGNoaWxkcmVuLCBuZXh0LCBvciBuZXh0Tm9kZVNlbGVjdG9yKS5cbiAqXG4gKiBTYWZlbHkgaGFuZGxlcyBwcm94eSBvYmplY3RzIChlLmcuLCBab2Qgc2NvcGUpIHRoYXQgbWF5IHRocm93IG9uIHByb3BlcnR5IGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhZ2VOb2RlUmV0dXJuKG91dHB1dDogdW5rbm93bik6IG91dHB1dCBpcyBTdGFnZU5vZGUge1xuICBpZiAoIW91dHB1dCB8fCB0eXBlb2Ygb3V0cHV0ICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb2JqID0gb3V0cHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygb2JqLm5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBoYXNDb250aW51YXRpb24gPVxuICAgICAgKEFycmF5LmlzQXJyYXkob2JqLmNoaWxkcmVuKSAmJiBvYmouY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHxcbiAgICAgIG9iai5uZXh0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBvYmoubmV4dE5vZGVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBoYXNDb250aW51YXRpb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19