@decaf-ts/decorator-validation 1.7.4 → 1.7.6

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 (99) hide show
  1. package/dist/decorator-validation.cjs +145 -57
  2. package/dist/decorator-validation.esm.cjs +144 -58
  3. package/lib/esm/constants/index.js +3 -3
  4. package/lib/esm/index.d.ts +1 -1
  5. package/lib/esm/index.js +6 -6
  6. package/lib/esm/mcp/ModelContextProtocol.d.ts +31 -0
  7. package/lib/esm/mcp/ModelContextProtocol.js +66 -0
  8. package/lib/esm/mcp/mcp1.d.ts +0 -0
  9. package/lib/esm/mcp/mcp1.js +405 -0
  10. package/lib/esm/mcp/tools/createModel.tool.d.ts +0 -0
  11. package/lib/esm/mcp/tools/createModel.tool.js +67 -0
  12. package/lib/esm/mcp/tools/validateModel.tool.d.ts +0 -0
  13. package/lib/esm/mcp/tools/validateModel.tool.js +2 -0
  14. package/lib/esm/mcp/types.d.ts +3 -0
  15. package/lib/esm/mcp/types.js +2 -0
  16. package/lib/esm/model/Builder.d.ts +0 -0
  17. package/lib/esm/model/Builder.js +130 -0
  18. package/lib/esm/model/Model.d.ts +1 -0
  19. package/lib/esm/model/Model.js +21 -10
  20. package/lib/esm/model/construction.js +2 -2
  21. package/lib/esm/model/decorators.d.ts +10 -0
  22. package/lib/esm/model/decorators.js +16 -4
  23. package/lib/esm/model/index.js +9 -9
  24. package/lib/esm/model/utils.js +2 -2
  25. package/lib/esm/model/validation.js +15 -12
  26. package/lib/esm/utils/Decoration.js +2 -2
  27. package/lib/esm/utils/PathProxy.js +3 -3
  28. package/lib/esm/utils/constants.d.ts +1 -0
  29. package/lib/esm/utils/constants.js +2 -1
  30. package/lib/esm/utils/dates.js +3 -3
  31. package/lib/esm/utils/decorators.js +2 -2
  32. package/lib/esm/utils/index.js +11 -11
  33. package/lib/esm/utils/serialization.js +4 -4
  34. package/lib/esm/validation/Validation.d.ts +3 -0
  35. package/lib/esm/validation/Validation.js +14 -3
  36. package/lib/esm/validation/Validators/DateValidator.js +4 -4
  37. package/lib/esm/validation/Validators/DiffValidator.js +4 -4
  38. package/lib/esm/validation/Validators/EmailValidator.js +4 -4
  39. package/lib/esm/validation/Validators/EqualsValidator.js +4 -4
  40. package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.js +5 -5
  41. package/lib/esm/validation/Validators/GreaterThanValidator.js +5 -5
  42. package/lib/esm/validation/Validators/LessThanOrEqualValidator.d.ts +1 -1
  43. package/lib/esm/validation/Validators/LessThanOrEqualValidator.js +5 -5
  44. package/lib/esm/validation/Validators/LessThanValidator.d.ts +1 -1
  45. package/lib/esm/validation/Validators/LessThanValidator.js +5 -5
  46. package/lib/esm/validation/Validators/ListValidator.js +4 -4
  47. package/lib/esm/validation/Validators/MaxLengthValidator.js +4 -4
  48. package/lib/esm/validation/Validators/MaxValidator.js +4 -4
  49. package/lib/esm/validation/Validators/MinLengthValidator.js +4 -4
  50. package/lib/esm/validation/Validators/MinValidator.js +4 -4
  51. package/lib/esm/validation/Validators/PasswordValidator.js +4 -4
  52. package/lib/esm/validation/Validators/PatternValidator.js +4 -4
  53. package/lib/esm/validation/Validators/RequiredValidator.js +4 -4
  54. package/lib/esm/validation/Validators/StepValidator.js +4 -4
  55. package/lib/esm/validation/Validators/TypeValidator.js +6 -6
  56. package/lib/esm/validation/Validators/URLValidator.js +4 -4
  57. package/lib/esm/validation/Validators/Validator.js +3 -3
  58. package/lib/esm/validation/Validators/ValidatorRegistry.js +2 -2
  59. package/lib/esm/validation/Validators/constants.js +2 -2
  60. package/lib/esm/validation/Validators/decorators.js +3 -3
  61. package/lib/esm/validation/Validators/index.js +25 -25
  62. package/lib/esm/validation/Validators/utils.js +3 -3
  63. package/lib/esm/validation/decorators.d.ts +26 -3
  64. package/lib/esm/validation/decorators.js +107 -58
  65. package/lib/esm/validation/index.js +5 -5
  66. package/lib/esm/validation/types.d.ts +11 -5
  67. package/lib/esm/validation/types.js +2 -2
  68. package/lib/index.cjs +1 -1
  69. package/lib/index.d.ts +1 -1
  70. package/lib/mcp/ModelContextProtocol.cjs +70 -0
  71. package/lib/mcp/ModelContextProtocol.d.ts +31 -0
  72. package/lib/mcp/mcp1.cjs +405 -0
  73. package/lib/mcp/mcp1.d.ts +0 -0
  74. package/lib/mcp/tools/createModel.tool.cjs +67 -0
  75. package/lib/mcp/tools/createModel.tool.d.ts +0 -0
  76. package/lib/mcp/tools/validateModel.tool.cjs +2 -0
  77. package/lib/mcp/tools/validateModel.tool.d.ts +0 -0
  78. package/lib/mcp/types.cjs +3 -0
  79. package/lib/mcp/types.d.ts +3 -0
  80. package/lib/model/Builder.cjs +130 -0
  81. package/lib/model/Builder.d.ts +0 -0
  82. package/lib/model/Model.cjs +14 -3
  83. package/lib/model/Model.d.ts +1 -0
  84. package/lib/model/decorators.cjs +14 -1
  85. package/lib/model/decorators.d.ts +10 -0
  86. package/lib/model/validation.cjs +6 -3
  87. package/lib/utils/constants.cjs +2 -1
  88. package/lib/utils/constants.d.ts +1 -0
  89. package/lib/validation/Validation.cjs +12 -1
  90. package/lib/validation/Validation.d.ts +3 -0
  91. package/lib/validation/Validators/LessThanOrEqualValidator.cjs +1 -1
  92. package/lib/validation/Validators/LessThanOrEqualValidator.d.ts +1 -1
  93. package/lib/validation/Validators/LessThanValidator.cjs +1 -1
  94. package/lib/validation/Validators/LessThanValidator.d.ts +1 -1
  95. package/lib/validation/decorators.cjs +102 -52
  96. package/lib/validation/decorators.d.ts +26 -3
  97. package/lib/validation/types.cjs +1 -1
  98. package/lib/validation/types.d.ts +11 -5
  99. package/package.json +15 -4
@@ -1,2 +1,2 @@
1
- import { ValidationKeys } from "./Validators";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFhLE1BQU0sY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cywgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yc1wiO1xuaW1wb3J0IHsgSVJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFR5cGUgZGVmaW5pdGlvbiBmb3IgbWV0YWRhdGEgdXNlZCBieSB2YWxpZGF0aW9uIGRlY29yYXRvcnNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBtZXRhZGF0YSBhdHRhY2hlZCB0byBwcm9wZXJ0aWVzIGJ5IHZhbGlkYXRpb24gZGVjb3JhdG9ycy5cbiAqIFRoaXMgbWV0YWRhdGEgaXMgdXNlZCBkdXJpbmcgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgdmFsaWRhdGlvbiBydWxlcyBhbmQgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogQHByb3BlcnR5IHthbnlbXX0gW2FyZ3NdIC0gT3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgdmFsaWRhdG9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt0eXBlc10gLSBBcnJheSBvZiB0eXBlIG5hbWVzIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBoYXZlXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVmFsaWRhdGlvbk1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uTWV0YWRhdGEgPSB7XG4gIFtpbmRleGVyOiBzdHJpbmddOiBhbnk7XG4gIGFyZ3M/OiBhbnlbXTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBkZWZpbml0aW9uIGZvciBwcm9wZXJ0eS1sZXZlbCB2YWxpZGF0aW9uIGRlY29yYXRvciBjb25maWd1cmF0aW9uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgdGhhdCBhc3NvY2lhdGVzIGEgcHJvcGVydHkgd2l0aCBpdHMgdmFsaWRhdGlvbiBkZWNvcmF0b3JzLlxuICogVGhpcyB0eXBlIGlzIHVzZWQgdG8gdHJhY2sgd2hpY2ggZGVjb3JhdG9ycyBhcmUgYXBwbGllZCB0byBhIHNwZWNpZmljIHByb3BlcnR5IGR1cmluZyB2YWxpZGF0aW9uLlxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN5bWJvbH0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9yIHN5bWJvbCB0aGF0IHRoZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIHRvXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25EZWNvcmF0b3JEZWZpbml0aW9uW119IGRlY29yYXRvcnMgLSBBcnJheSBvZiBkZWNvcmF0b3IgZGVmaW5pdGlvbnMgYXBwbGllZCB0byB0aGUgcHJvcGVydHlcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uID0ge1xuICBwcm9wOiBzdHJpbmcgfCBzeW1ib2w7XG4gIGRlY29yYXRvcnM6IFZhbGlkYXRpb25EZWNvcmF0b3JEZWZpbml0aW9uW107XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGRlZmluaXRpb24gZm9yIGluZGl2aWR1YWwgdmFsaWRhdGlvbiBkZWNvcmF0b3IgbWV0YWRhdGFcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2UgRGVjb3JhdG9yTWV0YWRhdGEgdHlwZSB3aXRoIHZhbGlkYXRpb24tc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgdmFsaWRhdGlvbiBkZWNvcmF0b3IgYXBwbGllZCB0byBhIHByb3BlcnR5LlxuICpcbiAqIEBwcm9wZXJ0eSB7VmFsaWRhdGlvbkVsZW1lbnREZWZpbml0aW9ufSBwcm9wcyAtIFRoZSB2YWxpZGF0aW9uIGVsZW1lbnQgcHJvcGVydGllcyBhbmQgY29uZmlndXJhdGlvblxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFZhbGlkYXRpb25EZWNvcmF0b3JEZWZpbml0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvbiA9IERlY29yYXRvck1ldGFkYXRhICYge1xuICBwcm9wczogVmFsaWRhdGlvbkVsZW1lbnREZWZpbml0aW9uO1xufTtcblxuLyoqXG4gKiBAc3VtbWFyeSBUeXBlIGZvciBhIHZhbGlkYXRvciBlbGVtZW50IG1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRWxlbWVudERlZmluaXRpb24gPSB7XG4gIFtpbmRleGVyOiBzdHJpbmddOiBhbnk7XG5cbiAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgVHlwZSBmb3IgYSBtb2RlbCBlcnJvcnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsRXJyb3JzID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj47XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCB0eXBlIGZvciB7QGxpbmsgVmFsaWRhdG9yfSBjb25maWd1cmF0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JEZWZpbml0aW9uID0ge1xuICB2YWxpZGF0b3I6IENvbnN0cnVjdG9yPFZhbGlkYXRvcj47XG4gIHZhbGlkYXRpb25LZXk6IHN0cmluZztcbiAgc2F2ZTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgYSByZWdpc3RyeSB0aGF0IG1hbmFnZXMgdmFsaWRhdG9yIGluc3RhbmNlc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgY29udHJhY3QgZm9yIGEgcmVnaXN0cnkgdGhhdCBzdG9yZXMgYW5kIHJldHJpZXZlcyB2YWxpZGF0b3JzLlxuICogVGhlIHJlZ2lzdHJ5IGlzIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBhIGNvbGxlY3Rpb24gb2YgdmFsaWRhdG9ycyBhbmQgcHJvdmlkaW5nXG4gKiBhY2Nlc3MgdG8gdGhlbSBieSBrZXkuXG4gKlxuICogQGludGVyZmFjZSBJVmFsaWRhdG9yUmVnaXN0cnlcbiAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdmFsaWRhdG9yLCBtdXN0IGV4dGVuZCBWYWxpZGF0b3JcbiAqIEBleHRlbmRzIElSZWdpc3RyeTxUPlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdG9yUmVnaXN0cnk8VCBleHRlbmRzIFZhbGlkYXRvcj4gZXh0ZW5kcyBJUmVnaXN0cnk8VD4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBjdXN0b20gdmFsaWRhdGlvbiBrZXlzIGRlZmluZWQgaW4gdGhlIHJlZ2lzdHJ5XG4gICAqIEBzdW1tYXJ5IFJldHVybnMgYSBtYXBwaW5nIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGtleXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBzdGFuZGFyZCBrZXlzLlxuICAgKiBUaGlzIGFsbG93cyBmb3IgYWxpYXNpbmcgdmFsaWRhdGlvbiBrZXlzIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IE9iamVjdCBtYXBwaW5nIGN1c3RvbSBrZXlzIHRvIHN0YW5kYXJkIHZhbGlkYXRpb24ga2V5c1xuICAgKi9cbiAgZ2V0Q3VzdG9tS2V5cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVnaXN0ZXJlZCB2YWxpZGF0b3Iga2V5c1xuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB2YWxpZGF0aW9uIGtleXMgdGhhdCBoYXZlIHJlZ2lzdGVyZWQgdmFsaWRhdG9ycy5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nW119IEFycmF5IG9mIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGtleXNcbiAgICovXG4gIGdldEtleXMoKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgb25lIG9yIG1vcmUgdmFsaWRhdG9ycyB3aXRoIHRoZSByZWdpc3RyeVxuICAgKiBAc3VtbWFyeSBBZGRzIHZhbGlkYXRvcnMgdG8gdGhlIHJlZ2lzdHJ5LCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIHZhbGlkYXRpb24gb3BlcmF0aW9ucy5cbiAgICogVmFsaWRhdG9ycyBjYW4gYmUgcHJvdmlkZWQgYXMgaW5zdGFuY2VzIG9yIGFzIHZhbGlkYXRvciBkZWZpbml0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHsuLi4oVHxWYWxpZGF0b3JEZWZpbml0aW9uKX0gdmFsaWRhdG9yIC0gVmFsaWRhdG9yIGluc3RhbmNlcyBvciBkZWZpbml0aW9ucyB0byByZWdpc3RlclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXI8VCBleHRlbmRzIFZhbGlkYXRvcj4oXG4gICAgLi4udmFsaWRhdG9yOiAoVCB8IFZhbGlkYXRvckRlZmluaXRpb24pW11cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbGlkYXRvciBieSBpdHMga2V5XG4gICAqIEBzdW1tYXJ5IExvb2tzIHVwIGEgdmFsaWRhdG9yIGluIHRoZSByZWdpc3RyeSB1c2luZyBpdHMgdmFsaWRhdGlvbiBrZXkuXG4gICAqIFJldHVybnMgdGhlIHZhbGlkYXRvciBpZiBmb3VuZCwgb3IgdW5kZWZpbmVkIGlmIG5vIHZhbGlkYXRvciBpcyByZWdpc3RlcmVkIGZvciB0aGUga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHZhbGlkYXRpb24ga2V5IHRvIGxvb2sgdXAsIHR5cGljYWxseSBvbmUgb2YgdGhlIHtAbGluayBWYWxpZGF0aW9uS2V5c31cbiAgICogQHJldHVybiB7VHx1bmRlZmluZWR9IFRoZSByZWdpc3RlcmVkIHZhbGlkYXRvciBvciB1bmRlZmluZWQgaWYgbm9uZSBtYXRjaGVzIHRoZSBwcm92aWRlZCBrZXlcbiAgICovXG4gIGdldDxUIGV4dGVuZHMgVmFsaWRhdG9yPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2Ugb3B0aW9ucyB0eXBlIGZvciBhbGwgdmFsaWRhdG9yc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgY29tbW9uIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIGFsbCB2YWxpZGF0b3JzXG4gKiBAdHlwZWRlZiBWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRvck9wdGlvbnMgPSB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVUkwgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBVUkwgdmFsaWRhdGlvbiwgaW5jbHVkaW5nIGFsbG93ZWQgVVJMIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KHN0cmluZ3xzdHJpbmdbXXx7IG5hbWU6IHN0cmluZyB9KX0gdHlwZXMgLSBTcGVjaWZpZXMgdGhlIGFsbG93ZWQgVVJMIHR5cGVzIG9yIHBhdHRlcm5zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHR5cGUgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyBhbGxvd2VkIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFR5cGVWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhzdHJpbmd8c3RyaW5nW118eyBuYW1lOiBzdHJpbmcgfSl9IHR5cGVzIC0gU3BlY2lmaWVzIHRoZSBhbGxvd2VkIGRhdGEgdHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RlcCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHN0ZXAgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyB0aGUgc3RlcCBpbmNyZW1lbnRcbiAqIEBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxzdHJpbmcpfSBbVmFsaWRhdGlvbktleXMuU1RFUF0gLSBUaGUgc3RlcCB2YWx1ZSBmb3IgbnVtZXJpY2FsIHZhbGlkYXRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlNURVBdOiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdHRlcm4gdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBwYXR0ZXJuIHZhbGlkYXRpb24gdXNpbmcgcmVndWxhciBleHByZXNzaW9uc1xuICogQGludGVyZmFjZSBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsoUmVnRXhwfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXSAtIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dPzogUmVnRXhwIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIHZhbHVlIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWluaW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAaW50ZXJmYWNlIE1pblZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxEYXRlfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5NSU5dIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5WYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5NSU5dOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIGxlbmd0aCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIG1pbmltdW0gbGVuZ3RoIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWluTGVuZ3RoVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIXSAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbkxlbmd0aFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEhdOiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gdmFsdWUgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBtYXhpbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWF4VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsobnVtYmVyfERhdGV8c3RyaW5nKX0gW1ZhbGlkYXRpb25LZXlzLk1BWF0gLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1BWF06IG51bWJlciB8IERhdGUgfCBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbGVuZ3RoIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBNYXhMZW5ndGhWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW1ZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEhdIC0gVGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGhcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4TGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSF06IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGxpc3QgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBMaXN0VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gY2xhenogLSBBcnJheSBvZiBhbGxvd2VkIGNsYXNzIG5hbWVzIG9yIHR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGNsYXp6OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGF0ZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGRhdGUgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtWYWxpZGF0aW9uS2V5cy5GT1JNQVRdIC0gVGhlIGV4cGVjdGVkIGRhdGUgZm9ybWF0IHBhdHRlcm5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkZPUk1BVF0/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxzVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuRVFVQUxTXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5ESUZGXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBzdHJpbmc7XG59XG4iXX0=
1
+ import { ValidationKeys } from "./Validators/index.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFhLDhCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29yYXRvck1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9tb2RlbFwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMsIFZhbGlkYXRvciB9IGZyb20gXCIuL1ZhbGlkYXRvcnNcIjtcbmltcG9ydCB7IElSZWdpc3RyeSB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGRlZmluaXRpb24gZm9yIG1ldGFkYXRhIHVzZWQgYnkgdmFsaWRhdGlvbiBkZWNvcmF0b3JzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgbWV0YWRhdGEgYXR0YWNoZWQgdG8gcHJvcGVydGllcyBieSB2YWxpZGF0aW9uIGRlY29yYXRvcnMuXG4gKiBUaGlzIG1ldGFkYXRhIGlzIHVzZWQgZHVyaW5nIHZhbGlkYXRpb24gdG8gZGV0ZXJtaW5lIHZhbGlkYXRpb24gcnVsZXMgYW5kIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIEBwcm9wZXJ0eSB7YW55W119IFthcmdzXSAtIE9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdGhlIHZhbGlkYXRvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB2YWxpZGF0aW9uIGZhaWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdHlwZXNdIC0gQXJyYXkgb2YgdHlwZSBuYW1lcyB0aGF0IHRoZSBwcm9wZXJ0eSBjYW4gaGF2ZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFZhbGlkYXRpb25NZXRhZGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbk1ldGFkYXRhID0ge1xuICBbaW5kZXhlcjogc3RyaW5nXTogYW55O1xuICBhcmdzPzogYW55W107XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFR5cGUgZGVmaW5pdGlvbiBmb3IgcHJvcGVydHktbGV2ZWwgdmFsaWRhdGlvbiBkZWNvcmF0b3IgY29uZmlndXJhdGlvblxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIHRoYXQgYXNzb2NpYXRlcyBhIHByb3BlcnR5IHdpdGggaXRzIHZhbGlkYXRpb24gZGVjb3JhdG9ycy5cbiAqIFRoaXMgdHlwZSBpcyB1c2VkIHRvIHRyYWNrIHdoaWNoIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgdG8gYSBzcGVjaWZpYyBwcm9wZXJ0eSBkdXJpbmcgdmFsaWRhdGlvbi5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ3xzeW1ib2x9IHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSBvciBzeW1ib2wgdGhhdCB0aGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCB0b1xuICogQHByb3BlcnR5IHtWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvbltdfSBkZWNvcmF0b3JzIC0gQXJyYXkgb2YgZGVjb3JhdG9yIGRlZmluaXRpb25zIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiA9IHtcbiAgcHJvcDogc3RyaW5nIHwgc3ltYm9sO1xuICBkZWNvcmF0b3JzOiBWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvbltdO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBkZWZpbml0aW9uIGZvciBpbmRpdmlkdWFsIHZhbGlkYXRpb24gZGVjb3JhdG9yIG1ldGFkYXRhXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBiYXNlIERlY29yYXRvck1ldGFkYXRhIHR5cGUgd2l0aCB2YWxpZGF0aW9uLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHZhbGlkYXRpb24gZGVjb3JhdG9yIGFwcGxpZWQgdG8gYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbGVtZW50RGVmaW5pdGlvbn0gcHJvcHMgLSBUaGUgdmFsaWRhdGlvbiBlbGVtZW50IHByb3BlcnRpZXMgYW5kIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkRlY29yYXRvckRlZmluaXRpb24gPSBEZWNvcmF0b3JNZXRhZGF0YSAmIHtcbiAgcHJvcHM6IFZhbGlkYXRpb25FbGVtZW50RGVmaW5pdGlvbjtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgVHlwZSBmb3IgYSB2YWxpZGF0b3IgZWxlbWVudCBtZXRhZGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkVsZW1lbnREZWZpbml0aW9uID0ge1xuICBbaW5kZXhlcjogc3RyaW5nXTogYW55O1xuXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGVzPzogc3RyaW5nW107XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IFR5cGUgZm9yIGEgbW9kZWwgZXJyb3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbEVycm9ycyA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgdHlwZSBmb3Ige0BsaW5rIFZhbGlkYXRvcn0gY29uZmlndXJhdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yRGVmaW5pdGlvbiA9IHtcbiAgdmFsaWRhdG9yOiBDb25zdHJ1Y3RvcjxWYWxpZGF0b3I+O1xuICB2YWxpZGF0aW9uS2V5OiBzdHJpbmc7XG4gIHNhdmU6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGEgcmVnaXN0cnkgdGhhdCBtYW5hZ2VzIHZhbGlkYXRvciBpbnN0YW5jZXNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbnRyYWN0IGZvciBhIHJlZ2lzdHJ5IHRoYXQgc3RvcmVzIGFuZCByZXRyaWV2ZXMgdmFsaWRhdG9ycy5cbiAqIFRoZSByZWdpc3RyeSBpcyByZXNwb25zaWJsZSBmb3IgbWFpbnRhaW5pbmcgYSBjb2xsZWN0aW9uIG9mIHZhbGlkYXRvcnMgYW5kIHByb3ZpZGluZ1xuICogYWNjZXNzIHRvIHRoZW0gYnkga2V5LlxuICpcbiAqIEBpbnRlcmZhY2UgSVZhbGlkYXRvclJlZ2lzdHJ5XG4gKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHZhbGlkYXRvciwgbXVzdCBleHRlbmQgVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBJUmVnaXN0cnk8VD5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvclJlZ2lzdHJ5PFQgZXh0ZW5kcyBWYWxpZGF0b3I+IGV4dGVuZHMgSVJlZ2lzdHJ5PFQ+IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgY3VzdG9tIHZhbGlkYXRpb24ga2V5cyBkZWZpbmVkIGluIHRoZSByZWdpc3RyeVxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbWFwcGluZyBvZiBjdXN0b20gdmFsaWRhdGlvbiBrZXlzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgc3RhbmRhcmQga2V5cy5cbiAgICogVGhpcyBhbGxvd3MgZm9yIGFsaWFzaW5nIHZhbGlkYXRpb24ga2V5cyBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBPYmplY3QgbWFwcGluZyBjdXN0b20ga2V5cyB0byBzdGFuZGFyZCB2YWxpZGF0aW9uIGtleXNcbiAgICovXG4gIGdldEN1c3RvbUtleXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGtleXNcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdmFsaWRhdGlvbiBrZXlzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIHZhbGlkYXRvcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBvZiByZWdpc3RlcmVkIHZhbGlkYXRvciBrZXlzXG4gICAqL1xuICBnZXRLZXlzKCk6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIG9uZSBvciBtb3JlIHZhbGlkYXRvcnMgd2l0aCB0aGUgcmVnaXN0cnlcbiAgICogQHN1bW1hcnkgQWRkcyB2YWxpZGF0b3JzIHRvIHRoZSByZWdpc3RyeSwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIGZvciB2YWxpZGF0aW9uIG9wZXJhdGlvbnMuXG4gICAqIFZhbGlkYXRvcnMgY2FuIGJlIHByb3ZpZGVkIGFzIGluc3RhbmNlcyBvciBhcyB2YWxpZGF0b3IgZGVmaW5pdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uKFR8VmFsaWRhdG9yRGVmaW5pdGlvbil9IHZhbGlkYXRvciAtIFZhbGlkYXRvciBpbnN0YW5jZXMgb3IgZGVmaW5pdGlvbnMgdG8gcmVnaXN0ZXJcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHJlZ2lzdGVyPFQgZXh0ZW5kcyBWYWxpZGF0b3I+KFxuICAgIC4uLnZhbGlkYXRvcjogKFQgfCBWYWxpZGF0b3JEZWZpbml0aW9uKVtdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWxpZGF0b3IgYnkgaXRzIGtleVxuICAgKiBAc3VtbWFyeSBMb29rcyB1cCBhIHZhbGlkYXRvciBpbiB0aGUgcmVnaXN0cnkgdXNpbmcgaXRzIHZhbGlkYXRpb24ga2V5LlxuICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0b3IgaWYgZm91bmQsIG9yIHVuZGVmaW5lZCBpZiBubyB2YWxpZGF0b3IgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB2YWxpZGF0aW9uIGtleSB0byBsb29rIHVwLCB0eXBpY2FsbHkgb25lIG9mIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXN9XG4gICAqIEByZXR1cm4ge1R8dW5kZWZpbmVkfSBUaGUgcmVnaXN0ZXJlZCB2YWxpZGF0b3Igb3IgdW5kZWZpbmVkIGlmIG5vbmUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQga2V5XG4gICAqL1xuICBnZXQ8VCBleHRlbmRzIFZhbGlkYXRvcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIG9wdGlvbnMgdHlwZSBmb3IgYWxsIHZhbGlkYXRvcnNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byBhbGwgdmFsaWRhdG9yc1xuICogQGludGVyZmFjZSBWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVUkwgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBVUkwgdmFsaWRhdGlvbiwgaW5jbHVkaW5nIGFsbG93ZWQgVVJMIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KHN0cmluZ3xzdHJpbmdbXXx7IG5hbWU6IHN0cmluZyB9KX0gdHlwZXMgLSBTcGVjaWZpZXMgdGhlIGFsbG93ZWQgVVJMIHR5cGVzIG9yIHBhdHRlcm5zXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHR5cGUgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyBhbGxvd2VkIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFR5cGVWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhzdHJpbmd8c3RyaW5nW118eyBuYW1lOiBzdHJpbmcgfSl9IHR5cGVzIC0gU3BlY2lmaWVzIHRoZSBhbGxvd2VkIGRhdGEgdHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RlcCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHN0ZXAgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyB0aGUgc3RlcCBpbmNyZW1lbnRcbiAqIEBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxzdHJpbmcpfSBbVmFsaWRhdGlvbktleXMuU1RFUF0gLSBUaGUgc3RlcCB2YWx1ZSBmb3IgbnVtZXJpY2FsIHZhbGlkYXRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlNURVBdOiBudW1iZXIgfCBzdHJpbmc7XG4gIHR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdHRlcm4gdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBwYXR0ZXJuIHZhbGlkYXRpb24gdXNpbmcgcmVndWxhciBleHByZXNzaW9uc1xuICogQGludGVyZmFjZSBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsoUmVnRXhwfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXSAtIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dPzogUmVnRXhwIHwgc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIHZhbHVlIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWluaW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAaW50ZXJmYWNlIE1pblZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxEYXRlfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5NSU5dIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5WYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5NSU5dOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIGxlbmd0aCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIG1pbmltdW0gbGVuZ3RoIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWluTGVuZ3RoVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIXSAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbkxlbmd0aFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEhdOiBudW1iZXI7XG4gIHR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gdmFsdWUgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBtYXhpbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWF4VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsobnVtYmVyfERhdGV8c3RyaW5nKX0gW1ZhbGlkYXRpb25LZXlzLk1BWF0gLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1BWF06IG51bWJlciB8IERhdGUgfCBzdHJpbmc7XG4gIHR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbGVuZ3RoIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBNYXhMZW5ndGhWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW1ZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEhdIC0gVGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGhcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4TGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSF06IG51bWJlcjtcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGxpc3QgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBMaXN0VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gY2xhenogLSBBcnJheSBvZiBhbGxvd2VkIGNsYXNzIG5hbWVzIG9yIHR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGNsYXp6OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGF0ZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGRhdGUgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtWYWxpZGF0aW9uS2V5cy5GT1JNQVRdIC0gVGhlIGV4cGVjdGVkIGRhdGUgZm9ybWF0IHBhdHRlcm5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkZPUk1BVF0/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxzVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuRVFVQUxTXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5ESUZGXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBzdHJpbmc7XG59XG4iXX0=
package/lib/index.cjs CHANGED
@@ -32,5 +32,5 @@ __exportStar(require("./model/index.cjs"), exports);
32
32
  * @const VERSION
33
33
  * @memberOf module:decorator-validation
34
34
  */
35
- exports.VERSION = "1.7.4";
35
+ exports.VERSION = "1.7.6";
36
36
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCx3REFBNEI7QUFDNUIsb0RBQXdCO0FBQ3hCLHlEQUE2QjtBQUM3QixvREFBd0I7QUFFeEI7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBUeXBlU2NyaXB0IGRlY29yYXRvci1iYXNlZCB2YWxpZGF0aW9uIGxpYnJhcnlcbiAqIEBzdW1tYXJ5IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIGZyYW1ld29yayB1c2luZyBUeXBlU2NyaXB0IGRlY29yYXRvcnMuXG4gKiBJdCBleHBvc2VzIHV0aWxpdHkgZnVuY3Rpb25zLCB2YWxpZGF0aW9uIGRlY29yYXRvcnMsIGFuZCBtb2RlbC1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZm9yXG4gKiBpbXBsZW1lbnRpbmcgdHlwZS1zYWZlLCBkZWNsYXJhdGl2ZSB2YWxpZGF0aW9uIGluIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -15,4 +15,4 @@ export * from "./model";
15
15
  * @const VERSION
16
16
  * @memberOf module:decorator-validation
17
17
  */
18
- export declare const VERSION = "1.7.4";
18
+ export declare const VERSION = "1.7.6";
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelContextProtocol = void 0;
4
+ const fastmcp_1 = require("fastmcp");
5
+ const logging_1 = require("@decaf-ts/logging");
6
+ class ModelContextProtocol {
7
+ get log() {
8
+ return logging_1.Logging.for(this);
9
+ }
10
+ constructor(mcp) {
11
+ this.mcp = mcp;
12
+ }
13
+ static { this.Builder = class Builder {
14
+ constructor() {
15
+ this.tools = {};
16
+ this.log = logging_1.Logging.for("MCP Builder");
17
+ }
18
+ setName(value) {
19
+ this.name = value;
20
+ this.log.debug(`name set to ${value}`);
21
+ return this;
22
+ }
23
+ setVersion(value) {
24
+ this.version = ModelContextProtocol.validateVersion(value);
25
+ this.log.debug(`version set to ${value}`);
26
+ return this;
27
+ }
28
+ addTool(config) {
29
+ const { name } = config;
30
+ if (name in this.tools)
31
+ throw new Error(`tool ${name} already registered`);
32
+ this.tools[name] = config;
33
+ this.log.debug(`tool ${name} added`);
34
+ return this;
35
+ }
36
+ build() {
37
+ if (!this.name)
38
+ throw new Error("name is required");
39
+ if (!this.version)
40
+ throw new Error("version is required");
41
+ const mcp = new fastmcp_1.FastMCP({
42
+ name: this.name,
43
+ version: this.version,
44
+ });
45
+ Object.values(this.tools).forEach((tool) => {
46
+ try {
47
+ mcp.addTool(tool);
48
+ }
49
+ catch (e) {
50
+ throw new Error(`Failed to add tool ${tool.name}: ${e}`);
51
+ }
52
+ });
53
+ this.log.info(`${this.name} MCP built`);
54
+ this.log.debug(`${this.name} MCP - available tools: ${Object.keys(this.tools).join(", ")}`);
55
+ return new ModelContextProtocol(mcp);
56
+ }
57
+ }; }
58
+ static get builder() {
59
+ return new ModelContextProtocol.Builder();
60
+ }
61
+ static validateVersion(version) {
62
+ const regexp = /(\d+)\.(\d+)\.(\d+)/g;
63
+ const match = regexp.exec(version);
64
+ if (!match)
65
+ throw new Error(`Invalid version string. should obey semantic versioning: ${version}`);
66
+ return `${match[1]}.${match[2]}.${match[3]}`;
67
+ }
68
+ }
69
+ exports.ModelContextProtocol = ModelContextProtocol;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxDb250ZXh0UHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWNwL01vZGVsQ29udGV4dFByb3RvY29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF3QztBQUN4QywrQ0FBb0Q7QUFHcEQsTUFBYSxvQkFBb0I7SUFDL0IsSUFBYyxHQUFHO1FBQ2YsT0FBTyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBK0IsR0FBa0I7UUFBbEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtJQUFHLENBQUM7YUFFckMsWUFBTyxHQUFHLE1BQU0sT0FBTztRQU9yQztZQUpBLFVBQUssR0FBbUMsRUFBRSxDQUFDO1lBRTNDLFFBQUcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsQixDQUFDO1FBRWhCLE9BQU8sQ0FBQyxLQUFhO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxVQUFVLENBQUMsS0FBYTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLENBQ0wsTUFBdUI7WUFFdkIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUN4QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUkscUJBQXFCLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsS0FBSztZQUdILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFPLENBQU87Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQztvQkFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixDQUFDO2dCQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDWixHQUFHLElBQUksQ0FBQyxJQUFJLDJCQUEyQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDNUUsQ0FBQztZQUNGLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQ0YsQ0FBQztJQUVGLE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWUsQ0FDNUIsT0FBZTtRQUVmLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUs7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLDREQUE0RCxPQUFPLEVBQUUsQ0FDdEUsQ0FBQztRQUNKLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBcUMsQ0FBQztJQUNsRixDQUFDOztBQTdFSCxvREE4RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYXN0TUNQLCBUb29sIH0gZnJvbSBcImZhc3RtY3BcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRmFzdE1DUFNlc3Npb25BdXRoIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIE1vZGVsQ29udGV4dFByb3RvY29sPEF1dGggZXh0ZW5kcyBGYXN0TUNQU2Vzc2lvbkF1dGggPSB1bmRlZmluZWQ+IHtcbiAgcHJvdGVjdGVkIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICByZXR1cm4gTG9nZ2luZy5mb3IodGhpcyBhcyBhbnkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IG1jcDogRmFzdE1DUDxBdXRoPikge31cblxuICBzdGF0aWMgcmVhZG9ubHkgQnVpbGRlciA9IGNsYXNzIEJ1aWxkZXIge1xuICAgIG5hbWUhOiBzdHJpbmc7XG4gICAgdmVyc2lvbiE6IGAke251bWJlcn0uJHtudW1iZXJ9LiR7bnVtYmVyfWA7XG4gICAgdG9vbHM6IFJlY29yZDxzdHJpbmcsIFRvb2w8YW55LCBhbnk+PiA9IHt9O1xuXG4gICAgbG9nID0gTG9nZ2luZy5mb3IoXCJNQ1AgQnVpbGRlclwiKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHNldE5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgbmFtZSBzZXQgdG8gJHt2YWx1ZX1gKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNldFZlcnNpb24odmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy52ZXJzaW9uID0gTW9kZWxDb250ZXh0UHJvdG9jb2wudmFsaWRhdGVWZXJzaW9uKHZhbHVlKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGB2ZXJzaW9uIHNldCB0byAke3ZhbHVlfWApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYWRkVG9vbDxBdXRoIGV4dGVuZHMgRmFzdE1DUFNlc3Npb25BdXRoID0gdW5kZWZpbmVkPihcbiAgICAgIGNvbmZpZzogVG9vbDxBdXRoLCBhbnk+XG4gICAgKSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGNvbmZpZztcbiAgICAgIGlmIChuYW1lIGluIHRoaXMudG9vbHMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdG9vbCAke25hbWV9IGFscmVhZHkgcmVnaXN0ZXJlZGApO1xuICAgICAgdGhpcy50b29sc1tuYW1lXSA9IGNvbmZpZztcbiAgICAgIHRoaXMubG9nLmRlYnVnKGB0b29sICR7bmFtZX0gYWRkZWRgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGJ1aWxkPFxuICAgICAgQXV0aCBleHRlbmRzIEZhc3RNQ1BTZXNzaW9uQXV0aCA9IHVuZGVmaW5lZCxcbiAgICA+KCk6IE1vZGVsQ29udGV4dFByb3RvY29sPEF1dGg+IHtcbiAgICAgIGlmICghdGhpcy5uYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgaWYgKCF0aGlzLnZlcnNpb24pIHRocm93IG5ldyBFcnJvcihcInZlcnNpb24gaXMgcmVxdWlyZWRcIik7XG4gICAgICBjb25zdCBtY3AgPSBuZXcgRmFzdE1DUDxBdXRoPih7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgfSk7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudG9vbHMpLmZvckVhY2goKHRvb2wpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtY3AuYWRkVG9vbCh0b29sKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFkZCB0b29sICR7dG9vbC5uYW1lfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYCR7dGhpcy5uYW1lfSBNQ1AgYnVpbHRgKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgICBgJHt0aGlzLm5hbWV9IE1DUCAtIGF2YWlsYWJsZSB0b29sczogJHtPYmplY3Qua2V5cyh0aGlzLnRvb2xzKS5qb2luKFwiLCBcIil9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXcgTW9kZWxDb250ZXh0UHJvdG9jb2wobWNwKTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldCBidWlsZGVyKCkge1xuICAgIHJldHVybiBuZXcgTW9kZWxDb250ZXh0UHJvdG9jb2wuQnVpbGRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVWZXJzaW9uKFxuICAgIHZlcnNpb246IHN0cmluZ1xuICApOiBgJHtudW1iZXJ9LiR7bnVtYmVyfS4ke251bWJlcn1gIHtcbiAgICBjb25zdCByZWdleHAgPSAvKFxcZCspXFwuKFxcZCspXFwuKFxcZCspL2c7XG4gICAgY29uc3QgbWF0Y2ggPSByZWdleHAuZXhlYyh2ZXJzaW9uKTtcbiAgICBpZiAoIW1hdGNoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB2ZXJzaW9uIHN0cmluZy4gc2hvdWxkIG9iZXkgc2VtYW50aWMgdmVyc2lvbmluZzogJHt2ZXJzaW9ufWBcbiAgICAgICk7XG4gICAgcmV0dXJuIGAke21hdGNoWzFdfS4ke21hdGNoWzJdfS4ke21hdGNoWzNdfWAgYXMgYCR7bnVtYmVyfS4ke251bWJlcn0uJHtudW1iZXJ9YDtcbiAgfVxufVxuIl19
@@ -0,0 +1,31 @@
1
+ import { FastMCP, Tool } from "fastmcp";
2
+ import { Logger } from "@decaf-ts/logging";
3
+ import { FastMCPSessionAuth } from "./types";
4
+ export declare class ModelContextProtocol<Auth extends FastMCPSessionAuth = undefined> {
5
+ protected readonly mcp: FastMCP<Auth>;
6
+ protected get log(): Logger;
7
+ constructor(mcp: FastMCP<Auth>);
8
+ static readonly Builder: {
9
+ new (): {
10
+ name: string;
11
+ version: `${number}.${number}.${number}`;
12
+ tools: Record<string, Tool<any, any>>;
13
+ log: Logger;
14
+ setName(value: string): /*elided*/ any;
15
+ setVersion(value: string): /*elided*/ any;
16
+ addTool<Auth_1 extends FastMCPSessionAuth = undefined>(config: Tool<Auth_1, any>): /*elided*/ any;
17
+ build<Auth_1 extends FastMCPSessionAuth = undefined>(): ModelContextProtocol<Auth_1>;
18
+ };
19
+ };
20
+ static get builder(): {
21
+ name: string;
22
+ version: `${number}.${number}.${number}`;
23
+ tools: Record<string, Tool<any, any>>;
24
+ log: Logger;
25
+ setName(value: string): /*elided*/ any;
26
+ setVersion(value: string): /*elided*/ any;
27
+ addTool<Auth extends FastMCPSessionAuth = undefined>(config: Tool<Auth, any>): /*elided*/ any;
28
+ build<Auth extends FastMCPSessionAuth = undefined>(): ModelContextProtocol<Auth>;
29
+ };
30
+ private static validateVersion;
31
+ }
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ // import { FastMCP } from "fastmcp";
3
+ // import { z } from "zod";
4
+ // import { version } from "../../package.json";
5
+ // import { ModelContextProtocol } from "./ModelContextProtocol";
6
+ // import { Model } from "../model";
7
+ // import {
8
+ // email,
9
+ // max,
10
+ // maxlength,
11
+ // min,
12
+ // minlength,
13
+ // pattern,
14
+ // required,
15
+ // } from "../validation";
16
+ // import { createModelTool } from "./tools/createModel.tool";
17
+ //
18
+ // const DecoratorValidatonMCP = ModelContextProtocol.builder
19
+ // .setName("decaf-validation-server")
20
+ // .setVersion(version)
21
+ // .addTool(createModelTool)
22
+ // .build();
23
+ //
24
+ // // Initialize FastMCP server
25
+ // const server = new FastMCP({
26
+ // name: "decaf-validation-server",
27
+ // // @ts-ignore
28
+ // version: version,
29
+ // });
30
+ //
31
+ // // Model registry for dynamic model management
32
+ // const modelRegistry = new Map<string, any>();
33
+ //
34
+ // // Tool: Validate a model instance
35
+ // server.addTool({
36
+ // name: "validate-model",
37
+ // description: "Validate a model instance against its decorators",
38
+ // parameters: z.object({
39
+ // modelName: z.string().describe("Name of the model class"),
40
+ // data: z.record(z.any()).describe("Data to validate"),
41
+ // options: z
42
+ // .object({
43
+ // partial: z.boolean().optional().describe("Allow partial validation"),
44
+ // })
45
+ // .optional(),
46
+ // }),
47
+ // execute: async (args) => {
48
+ // const { modelName, data, options } = args;
49
+ //
50
+ // const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
51
+ // if (!ModelClass) {
52
+ // throw new Error(`Model "${modelName}" not found`);
53
+ // }
54
+ //
55
+ // try {
56
+ // const instance = new ModelClass(data);
57
+ // const errors = instance.hasErrors();
58
+ //
59
+ // return {
60
+ // isValid: !errors,
61
+ // errors: errors || null,
62
+ // validatedData: errors ? null : instance.serialize(),
63
+ // };
64
+ // } catch (error) {
65
+ // return {
66
+ // isValid: false,
67
+ // errors: [{ message: error.message }],
68
+ // validatedData: null,
69
+ // };
70
+ // }
71
+ // },
72
+ // });
73
+ //
74
+ // // Tool: Get model schema information
75
+ // server.addTool({
76
+ // name: "get-model-schema",
77
+ // description: "Get the validation schema for a model",
78
+ // parameters: z.object({
79
+ // modelName: z.string().describe("Name of the model class"),
80
+ // }),
81
+ // execute: async (args) => {
82
+ // const { modelName } = args;
83
+ //
84
+ // const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
85
+ // if (!ModelClass) {
86
+ // throw new Error(`Model "${modelName}" not found`);
87
+ // }
88
+ //
89
+ // // Extract validation metadata
90
+ // const instance = new ModelClass();
91
+ // const metadata = Reflect.getMetadata("validation", instance) || {};
92
+ //
93
+ // return {
94
+ // modelName,
95
+ // properties: Object.keys(metadata).map((key) => ({
96
+ // name: key,
97
+ // validators: metadata[key] || [],
98
+ // })),
99
+ // capabilities: {
100
+ // serialization: !!instance.serialize,
101
+ // hashing: !!instance.hash,
102
+ // comparison: !!instance.equals,
103
+ // },
104
+ // };
105
+ // },
106
+ // });
107
+ //
108
+ // // Tool: Serialize model
109
+ // server.addTool({
110
+ // name: "serialize-model",
111
+ // description: "Serialize a model instance to string",
112
+ // parameters: z.object({
113
+ // modelName: z.string().describe("Name of the model class"),
114
+ // data: z.record(z.any()).describe("Model data to serialize"),
115
+ // format: z.enum(["json", "yaml"]).optional().default("json"),
116
+ // }),
117
+ // execute: async (args) => {
118
+ // const { modelName, data, format } = args;
119
+ //
120
+ // const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
121
+ // if (!ModelClass) {
122
+ // throw new Error(`Model "${modelName}" not found`);
123
+ // }
124
+ //
125
+ // const instance = new ModelClass(data);
126
+ // const errors = instance.hasErrors();
127
+ //
128
+ // if (errors) {
129
+ // throw new Error(
130
+ // `Cannot serialize invalid model: ${JSON.stringify(errors)}`
131
+ // );
132
+ // }
133
+ //
134
+ // return {
135
+ // serialized: instance.serialize(),
136
+ // format,
137
+ // modelName,
138
+ // };
139
+ // },
140
+ // });
141
+ //
142
+ // // Tool: Deserialize model
143
+ // server.addTool({
144
+ // name: "deserialize-model",
145
+ // description: "Deserialize a string to model instance",
146
+ // parameters: z.object({
147
+ // serializedData: z.string().describe("Serialized model data"),
148
+ // modelName: z
149
+ // .string()
150
+ // .optional()
151
+ // .describe("Expected model name for validation"),
152
+ // }),
153
+ // execute: async (args) => {
154
+ // const { serializedData, modelName } = args;
155
+ //
156
+ // try {
157
+ // const instance = Model.deserialize(serializedData);
158
+ //
159
+ // if (modelName && instance.constructor.name !== modelName) {
160
+ // throw new Error(
161
+ // `Expected model "${modelName}", got "${instance.constructor.name}"`
162
+ // );
163
+ // }
164
+ //
165
+ // return {
166
+ // modelName: instance.constructor.name,
167
+ // data: JSON.parse(instance.serialize()),
168
+ // isValid: !instance.hasErrors(),
169
+ // };
170
+ // } catch (error) {
171
+ // throw new Error(`Deserialization failed: ${error.message}`);
172
+ // }
173
+ // },
174
+ // });
175
+ //
176
+ // // Tool: Compare models
177
+ // server.addTool({
178
+ // name: "compare-models",
179
+ // description: "Compare two model instances for equality",
180
+ // parameters: z.object({
181
+ // modelName: z.string().describe("Name of the model class"),
182
+ // data1: z.record(z.any()).describe("First model data"),
183
+ // data2: z.record(z.any()).describe("Second model data"),
184
+ // excludeFields: z
185
+ // .array(z.string())
186
+ // .optional()
187
+ // .describe("Fields to exclude from comparison"),
188
+ // }),
189
+ // execute: async (args) => {
190
+ // const { modelName, data1, data2, excludeFields } = args;
191
+ //
192
+ // const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
193
+ // if (!ModelClass) {
194
+ // throw new Error(`Model "${modelName}" not found`);
195
+ // }
196
+ //
197
+ // const instance1 = new ModelClass(data1);
198
+ // const instance2 = new ModelClass(data2);
199
+ //
200
+ // const isEqual = excludeFields
201
+ // ? instance1.equals(instance2, ...excludeFields)
202
+ // : instance1.equals(instance2);
203
+ //
204
+ // return {
205
+ // isEqual,
206
+ // hash1: instance1.hash(),
207
+ // hash2: instance2.hash(),
208
+ // differences: isEqual ? null : await findDifferences(instance1, instance2),
209
+ // };
210
+ // },
211
+ // });
212
+ //
213
+ // // Tool: List available decorators
214
+ // server.addTool({
215
+ // name: "list-decorators",
216
+ // description: "List all available validation decorators",
217
+ // parameters: z.object({
218
+ // category: z
219
+ // .enum(["basic", "type-specific", "comparison", "all"])
220
+ // .optional()
221
+ // .default("all"),
222
+ // }),
223
+ // execute: async (args) => {
224
+ // const { category } = args;
225
+ //
226
+ // const decorators = {
227
+ // basic: [
228
+ // {
229
+ // name: "required",
230
+ // description: "Marks field as required",
231
+ // args: ["message?"],
232
+ // },
233
+ // {
234
+ // name: "min",
235
+ // description: "Minimum value validation",
236
+ // args: ["value", "message?"],
237
+ // },
238
+ // {
239
+ // name: "max",
240
+ // description: "Maximum value validation",
241
+ // args: ["value", "message?"],
242
+ // },
243
+ // {
244
+ // name: "minlength",
245
+ // description: "Minimum length validation",
246
+ // args: ["length", "message?"],
247
+ // },
248
+ // {
249
+ // name: "maxlength",
250
+ // description: "Maximum length validation",
251
+ // args: ["length", "message?"],
252
+ // },
253
+ // {
254
+ // name: "pattern",
255
+ // description: "Regex pattern validation",
256
+ // args: ["pattern", "message?"],
257
+ // },
258
+ // {
259
+ // name: "step",
260
+ // description: "Step value validation",
261
+ // args: ["step", "message?"],
262
+ // },
263
+ // ],
264
+ // "type-specific": [
265
+ // {
266
+ // name: "email",
267
+ // description: "Email format validation",
268
+ // args: ["message?"],
269
+ // },
270
+ // {
271
+ // name: "url",
272
+ // description: "URL format validation",
273
+ // args: ["message?"],
274
+ // },
275
+ // {
276
+ // name: "date",
277
+ // description: "Date format validation",
278
+ // args: ["format?", "message?"],
279
+ // },
280
+ // {
281
+ // name: "password",
282
+ // description: "Password strength validation",
283
+ // args: ["message?"],
284
+ // },
285
+ // {
286
+ // name: "type",
287
+ // description: "Type validation",
288
+ // args: ["type", "message?"],
289
+ // },
290
+ // {
291
+ // name: "list",
292
+ // description: "Array validation",
293
+ // args: ["itemType", "message?"],
294
+ // },
295
+ // {
296
+ // name: "set",
297
+ // description: "Set validation",
298
+ // args: ["itemType", "message?"],
299
+ // },
300
+ // ],
301
+ // comparison: [
302
+ // {
303
+ // name: "eq",
304
+ // description: "Equal to another field",
305
+ // args: ["fieldName", "message?"],
306
+ // },
307
+ // {
308
+ // name: "diff",
309
+ // description: "Different from another field",
310
+ // args: ["fieldName", "message?"],
311
+ // },
312
+ // {
313
+ // name: "lt",
314
+ // description: "Less than another field",
315
+ // args: ["fieldName", "message?"],
316
+ // },
317
+ // {
318
+ // name: "lte",
319
+ // description: "Less than or equal to another field",
320
+ // args: ["fieldName", "message?"],
321
+ // },
322
+ // {
323
+ // name: "gt",
324
+ // description: "Greater than another field",
325
+ // args: ["fieldName", "message?"],
326
+ // },
327
+ // {
328
+ // name: "gte",
329
+ // description: "Greater than or equal to another field",
330
+ // args: ["fieldName", "message?"],
331
+ // },
332
+ // ],
333
+ // };
334
+ //
335
+ // if (category === "all") {
336
+ // return {
337
+ // categories: decorators,
338
+ // total: Object.values(decorators).reduce(
339
+ // (sum, arr) => sum + arr.length,
340
+ // 0
341
+ // ),
342
+ // };
343
+ // }
344
+ //
345
+ // return {
346
+ // category,
347
+ // decorators: decorators[category] || [],
348
+ // count: decorators[category]?.length || 0,
349
+ // };
350
+ // },
351
+ // });
352
+ //
353
+ // // Utility function to get decorator function by name
354
+ // function getDecoratorFunction(name: string): Function | null {
355
+ // const decoratorMap = {
356
+ // required,
357
+ // email,
358
+ // min,
359
+ // max,
360
+ // minlength,
361
+ // maxlength,
362
+ // pattern,
363
+ // url,
364
+ // date,
365
+ // password,
366
+ // list,
367
+ // set,
368
+ // eq,
369
+ // diff,
370
+ // lt,
371
+ // lte,
372
+ // gt,
373
+ // gte,
374
+ // type,
375
+ // step,
376
+ // };
377
+ // return decoratorMap[name] || null;
378
+ // }
379
+ //
380
+ // // Utility function to find differences between models
381
+ // async function findDifferences(instance1: any, instance2: any): Promise<any[]> {
382
+ // const differences = [];
383
+ // const serialized1 = JSON.parse(instance1.serialize());
384
+ // const serialized2 = JSON.parse(instance2.serialize());
385
+ //
386
+ // for (const key in serialized1) {
387
+ // if (serialized1[key] !== serialized2[key]) {
388
+ // differences.push({
389
+ // field: key,
390
+ // value1: serialized1[key],
391
+ // value2: serialized2[key],
392
+ // });
393
+ // }
394
+ // }
395
+ //
396
+ // return differences;
397
+ // }
398
+ //
399
+ // // Start the server
400
+ // server.start({
401
+ // transportType: "stdio",
402
+ // });
403
+ //
404
+ // export { server };
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwMS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tY3AvbWNwMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUNBQXFDO0FBQ3JDLDJCQUEyQjtBQUMzQixnREFBZ0Q7QUFDaEQsaUVBQWlFO0FBQ2pFLG9DQUFvQztBQUNwQyxXQUFXO0FBQ1gsV0FBVztBQUNYLFNBQVM7QUFDVCxlQUFlO0FBQ2YsU0FBUztBQUNULGVBQWU7QUFDZixhQUFhO0FBQ2IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQiw4REFBOEQ7QUFDOUQsRUFBRTtBQUNGLDZEQUE2RDtBQUM3RCx3Q0FBd0M7QUFDeEMseUJBQXlCO0FBQ3pCLDhCQUE4QjtBQUM5QixjQUFjO0FBQ2QsRUFBRTtBQUNGLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0IscUNBQXFDO0FBQ3JDLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsTUFBTTtBQUNOLEVBQUU7QUFDRixpREFBaUQ7QUFDakQsZ0RBQWdEO0FBQ2hELEVBQUU7QUFDRixxQ0FBcUM7QUFDckMsbUJBQW1CO0FBQ25CLDRCQUE0QjtBQUM1QixxRUFBcUU7QUFDckUsMkJBQTJCO0FBQzNCLGlFQUFpRTtBQUNqRSw0REFBNEQ7QUFDNUQsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLHFCQUFxQjtBQUNyQixRQUFRO0FBQ1IsK0JBQStCO0FBQy9CLGlEQUFpRDtBQUNqRCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLHlCQUF5QjtBQUN6QiwyREFBMkQ7QUFDM0QsUUFBUTtBQUNSLEVBQUU7QUFDRixZQUFZO0FBQ1osK0NBQStDO0FBQy9DLDZDQUE2QztBQUM3QyxFQUFFO0FBQ0YsaUJBQWlCO0FBQ2pCLDRCQUE0QjtBQUM1QixrQ0FBa0M7QUFDbEMsK0RBQStEO0FBQy9ELFdBQVc7QUFDWCx3QkFBd0I7QUFDeEIsaUJBQWlCO0FBQ2pCLDBCQUEwQjtBQUMxQixnREFBZ0Q7QUFD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QUFXO0FBQ1gsWUFBWTtBQUNaLFlBQVk7QUFDWixPQUFPO0FBQ1AsdUNBQXVDO0FBQ3ZDLElBQUk7QUFDSixFQUFFO0FBQ0YseURBQXlEO0FBQ3pELG1GQUFtRjtBQUNuRiw0QkFBNEI7QUFDNUIsMkRBQTJEO0FBQzNELDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0YscUNBQXFDO0FBQ3JDLG1EQUFtRDtBQUNuRCwyQkFBMkI7QUFDM0Isc0JBQXNCO0FBQ3RCLG9DQUFvQztBQUNwQyxvQ0FBb0M7QUFDcEMsWUFBWTtBQUNaLFFBQVE7QUFDUixNQUFNO0FBQ04sRUFBRTtBQUNGLHdCQUF3QjtBQUN4QixJQUFJO0FBQ0osRUFBRTtBQUNGLHNCQUFzQjtBQUN0QixpQkFBaUI7QUFDakIsNEJBQTRCO0FBQzVCLE1BQU07QUFDTixFQUFFO0FBQ0YscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgRmFzdE1DUCB9IGZyb20gXCJmYXN0bWNwXCI7XG4vLyBpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuLy8gaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIjtcbi8vIGltcG9ydCB7IE1vZGVsQ29udGV4dFByb3RvY29sIH0gZnJvbSBcIi4vTW9kZWxDb250ZXh0UHJvdG9jb2xcIjtcbi8vIGltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCI7XG4vLyBpbXBvcnQge1xuLy8gICBlbWFpbCxcbi8vICAgbWF4LFxuLy8gICBtYXhsZW5ndGgsXG4vLyAgIG1pbixcbi8vICAgbWlubGVuZ3RoLFxuLy8gICBwYXR0ZXJuLFxuLy8gICByZXF1aXJlZCxcbi8vIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb25cIjtcbi8vIGltcG9ydCB7IGNyZWF0ZU1vZGVsVG9vbCB9IGZyb20gXCIuL3Rvb2xzL2NyZWF0ZU1vZGVsLnRvb2xcIjtcbi8vXG4vLyBjb25zdCBEZWNvcmF0b3JWYWxpZGF0b25NQ1AgPSBNb2RlbENvbnRleHRQcm90b2NvbC5idWlsZGVyXG4vLyAgIC5zZXROYW1lKFwiZGVjYWYtdmFsaWRhdGlvbi1zZXJ2ZXJcIilcbi8vICAgLnNldFZlcnNpb24odmVyc2lvbilcbi8vICAgLmFkZFRvb2woY3JlYXRlTW9kZWxUb29sKVxuLy8gICAuYnVpbGQoKTtcbi8vXG4vLyAvLyBJbml0aWFsaXplIEZhc3RNQ1Agc2VydmVyXG4vLyBjb25zdCBzZXJ2ZXIgPSBuZXcgRmFzdE1DUCh7XG4vLyAgIG5hbWU6IFwiZGVjYWYtdmFsaWRhdGlvbi1zZXJ2ZXJcIixcbi8vICAgLy8gQHRzLWlnbm9yZVxuLy8gICB2ZXJzaW9uOiB2ZXJzaW9uLFxuLy8gfSk7XG4vL1xuLy8gLy8gTW9kZWwgcmVnaXN0cnkgZm9yIGR5bmFtaWMgbW9kZWwgbWFuYWdlbWVudFxuLy8gY29uc3QgbW9kZWxSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4vL1xuLy8gLy8gVG9vbDogVmFsaWRhdGUgYSBtb2RlbCBpbnN0YW5jZVxuLy8gc2VydmVyLmFkZFRvb2woe1xuLy8gICBuYW1lOiBcInZhbGlkYXRlLW1vZGVsXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIlZhbGlkYXRlIGEgbW9kZWwgaW5zdGFuY2UgYWdhaW5zdCBpdHMgZGVjb3JhdG9yc1wiLFxuLy8gICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4vLyAgICAgbW9kZWxOYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTmFtZSBvZiB0aGUgbW9kZWwgY2xhc3NcIiksXG4vLyAgICAgZGF0YTogei5yZWNvcmQoei5hbnkoKSkuZGVzY3JpYmUoXCJEYXRhIHRvIHZhbGlkYXRlXCIpLFxuLy8gICAgIG9wdGlvbnM6IHpcbi8vICAgICAgIC5vYmplY3Qoe1xuLy8gICAgICAgICBwYXJ0aWFsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQWxsb3cgcGFydGlhbCB2YWxpZGF0aW9uXCIpLFxuLy8gICAgICAgfSlcbi8vICAgICAgIC5vcHRpb25hbCgpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IG1vZGVsTmFtZSwgZGF0YSwgb3B0aW9ucyB9ID0gYXJncztcbi8vXG4vLyAgICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsUmVnaXN0cnkuZ2V0KG1vZGVsTmFtZSkgfHwgTW9kZWwuZ2V0KG1vZGVsTmFtZSk7XG4vLyAgICAgaWYgKCFNb2RlbENsYXNzKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbE5hbWV9XCIgbm90IGZvdW5kYCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICB0cnkge1xuLy8gICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTW9kZWxDbGFzcyhkYXRhKTtcbi8vICAgICAgIGNvbnN0IGVycm9ycyA9IGluc3RhbmNlLmhhc0Vycm9ycygpO1xuLy9cbi8vICAgICAgIHJldHVybiB7XG4vLyAgICAgICAgIGlzVmFsaWQ6ICFlcnJvcnMsXG4vLyAgICAgICAgIGVycm9yczogZXJyb3JzIHx8IG51bGwsXG4vLyAgICAgICAgIHZhbGlkYXRlZERhdGE6IGVycm9ycyA/IG51bGwgOiBpbnN0YW5jZS5zZXJpYWxpemUoKSxcbi8vICAgICAgIH07XG4vLyAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbi8vICAgICAgIHJldHVybiB7XG4vLyAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuLy8gICAgICAgICBlcnJvcnM6IFt7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfV0sXG4vLyAgICAgICAgIHZhbGlkYXRlZERhdGE6IG51bGwsXG4vLyAgICAgICB9O1xuLy8gICAgIH1cbi8vICAgfSxcbi8vIH0pO1xuLy9cbi8vIC8vIFRvb2w6IEdldCBtb2RlbCBzY2hlbWEgaW5mb3JtYXRpb25cbi8vIHNlcnZlci5hZGRUb29sKHtcbi8vICAgbmFtZTogXCJnZXQtbW9kZWwtc2NoZW1hXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIkdldCB0aGUgdmFsaWRhdGlvbiBzY2hlbWEgZm9yIGEgbW9kZWxcIixcbi8vICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuLy8gICAgIG1vZGVsTmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIG1vZGVsIGNsYXNzXCIpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IG1vZGVsTmFtZSB9ID0gYXJncztcbi8vXG4vLyAgICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsUmVnaXN0cnkuZ2V0KG1vZGVsTmFtZSkgfHwgTW9kZWwuZ2V0KG1vZGVsTmFtZSk7XG4vLyAgICAgaWYgKCFNb2RlbENsYXNzKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbE5hbWV9XCIgbm90IGZvdW5kYCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICAvLyBFeHRyYWN0IHZhbGlkYXRpb24gbWV0YWRhdGFcbi8vICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBNb2RlbENsYXNzKCk7XG4vLyAgICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwidmFsaWRhdGlvblwiLCBpbnN0YW5jZSkgfHwge307XG4vL1xuLy8gICAgIHJldHVybiB7XG4vLyAgICAgICBtb2RlbE5hbWUsXG4vLyAgICAgICBwcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubWFwKChrZXkpID0+ICh7XG4vLyAgICAgICAgIG5hbWU6IGtleSxcbi8vICAgICAgICAgdmFsaWRhdG9yczogbWV0YWRhdGFba2V5XSB8fCBbXSxcbi8vICAgICAgIH0pKSxcbi8vICAgICAgIGNhcGFiaWxpdGllczoge1xuLy8gICAgICAgICBzZXJpYWxpemF0aW9uOiAhIWluc3RhbmNlLnNlcmlhbGl6ZSxcbi8vICAgICAgICAgaGFzaGluZzogISFpbnN0YW5jZS5oYXNoLFxuLy8gICAgICAgICBjb21wYXJpc29uOiAhIWluc3RhbmNlLmVxdWFscyxcbi8vICAgICAgIH0sXG4vLyAgICAgfTtcbi8vICAgfSxcbi8vIH0pO1xuLy9cbi8vIC8vIFRvb2w6IFNlcmlhbGl6ZSBtb2RlbFxuLy8gc2VydmVyLmFkZFRvb2woe1xuLy8gICBuYW1lOiBcInNlcmlhbGl6ZS1tb2RlbFwiLFxuLy8gICBkZXNjcmlwdGlvbjogXCJTZXJpYWxpemUgYSBtb2RlbCBpbnN0YW5jZSB0byBzdHJpbmdcIixcbi8vICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuLy8gICAgIG1vZGVsTmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIG1vZGVsIGNsYXNzXCIpLFxuLy8gICAgIGRhdGE6IHoucmVjb3JkKHouYW55KCkpLmRlc2NyaWJlKFwiTW9kZWwgZGF0YSB0byBzZXJpYWxpemVcIiksXG4vLyAgICAgZm9ybWF0OiB6LmVudW0oW1wianNvblwiLCBcInlhbWxcIl0pLm9wdGlvbmFsKCkuZGVmYXVsdChcImpzb25cIiksXG4vLyAgIH0pLFxuLy8gICBleGVjdXRlOiBhc3luYyAoYXJncykgPT4ge1xuLy8gICAgIGNvbnN0IHsgbW9kZWxOYW1lLCBkYXRhLCBmb3JtYXQgfSA9IGFyZ3M7XG4vL1xuLy8gICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSBtb2RlbFJlZ2lzdHJ5LmdldChtb2RlbE5hbWUpIHx8IE1vZGVsLmdldChtb2RlbE5hbWUpO1xuLy8gICAgIGlmICghTW9kZWxDbGFzcykge1xuLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxOYW1lfVwiIG5vdCBmb3VuZGApO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTW9kZWxDbGFzcyhkYXRhKTtcbi8vICAgICBjb25zdCBlcnJvcnMgPSBpbnN0YW5jZS5oYXNFcnJvcnMoKTtcbi8vXG4vLyAgICAgaWYgKGVycm9ycykge1xuLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKFxuLy8gICAgICAgICBgQ2Fubm90IHNlcmlhbGl6ZSBpbnZhbGlkIG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KGVycm9ycyl9YFxuLy8gICAgICAgKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiB7XG4vLyAgICAgICBzZXJpYWxpemVkOiBpbnN0YW5jZS5zZXJpYWxpemUoKSxcbi8vICAgICAgIGZvcm1hdCxcbi8vICAgICAgIG1vZGVsTmFtZSxcbi8vICAgICB9O1xuLy8gICB9LFxuLy8gfSk7XG4vL1xuLy8gLy8gVG9vbDogRGVzZXJpYWxpemUgbW9kZWxcbi8vIHNlcnZlci5hZGRUb29sKHtcbi8vICAgbmFtZTogXCJkZXNlcmlhbGl6ZS1tb2RlbFwiLFxuLy8gICBkZXNjcmlwdGlvbjogXCJEZXNlcmlhbGl6ZSBhIHN0cmluZyB0byBtb2RlbCBpbnN0YW5jZVwiLFxuLy8gICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4vLyAgICAgc2VyaWFsaXplZERhdGE6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTZXJpYWxpemVkIG1vZGVsIGRhdGFcIiksXG4vLyAgICAgbW9kZWxOYW1lOiB6XG4vLyAgICAgICAuc3RyaW5nKClcbi8vICAgICAgIC5vcHRpb25hbCgpXG4vLyAgICAgICAuZGVzY3JpYmUoXCJFeHBlY3RlZCBtb2RlbCBuYW1lIGZvciB2YWxpZGF0aW9uXCIpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IHNlcmlhbGl6ZWREYXRhLCBtb2RlbE5hbWUgfSA9IGFyZ3M7XG4vL1xuLy8gICAgIHRyeSB7XG4vLyAgICAgICBjb25zdCBpbnN0YW5jZSA9IE1vZGVsLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWREYXRhKTtcbi8vXG4vLyAgICAgICBpZiAobW9kZWxOYW1lICYmIGluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgIT09IG1vZGVsTmFtZSkge1xuLy8gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICAgICAgYEV4cGVjdGVkIG1vZGVsIFwiJHttb2RlbE5hbWV9XCIsIGdvdCBcIiR7aW5zdGFuY2UuY29uc3RydWN0b3IubmFtZX1cImBcbi8vICAgICAgICAgKTtcbi8vICAgICAgIH1cbi8vXG4vLyAgICAgICByZXR1cm4ge1xuLy8gICAgICAgICBtb2RlbE5hbWU6IGluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUsXG4vLyAgICAgICAgIGRhdGE6IEpTT04ucGFyc2UoaW5zdGFuY2Uuc2VyaWFsaXplKCkpLFxuLy8gICAgICAgICBpc1ZhbGlkOiAhaW5zdGFuY2UuaGFzRXJyb3JzKCksXG4vLyAgICAgICB9O1xuLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbi8vICAgICB9XG4vLyAgIH0sXG4vLyB9KTtcbi8vXG4vLyAvLyBUb29sOiBDb21wYXJlIG1vZGVsc1xuLy8gc2VydmVyLmFkZFRvb2woe1xuLy8gICBuYW1lOiBcImNvbXBhcmUtbW9kZWxzXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIkNvbXBhcmUgdHdvIG1vZGVsIGluc3RhbmNlcyBmb3IgZXF1YWxpdHlcIixcbi8vICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuLy8gICAgIG1vZGVsTmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIG1vZGVsIGNsYXNzXCIpLFxuLy8gICAgIGRhdGExOiB6LnJlY29yZCh6LmFueSgpKS5kZXNjcmliZShcIkZpcnN0IG1vZGVsIGRhdGFcIiksXG4vLyAgICAgZGF0YTI6IHoucmVjb3JkKHouYW55KCkpLmRlc2NyaWJlKFwiU2Vjb25kIG1vZGVsIGRhdGFcIiksXG4vLyAgICAgZXhjbHVkZUZpZWxkczogelxuLy8gICAgICAgLmFycmF5KHouc3RyaW5nKCkpXG4vLyAgICAgICAub3B0aW9uYWwoKVxuLy8gICAgICAgLmRlc2NyaWJlKFwiRmllbGRzIHRvIGV4Y2x1ZGUgZnJvbSBjb21wYXJpc29uXCIpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IG1vZGVsTmFtZSwgZGF0YTEsIGRhdGEyLCBleGNsdWRlRmllbGRzIH0gPSBhcmdzO1xuLy9cbi8vICAgICBjb25zdCBNb2RlbENsYXNzID0gbW9kZWxSZWdpc3RyeS5nZXQobW9kZWxOYW1lKSB8fCBNb2RlbC5nZXQobW9kZWxOYW1lKTtcbi8vICAgICBpZiAoIU1vZGVsQ2xhc3MpIHtcbi8vICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsTmFtZX1cIiBub3QgZm91bmRgKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIGNvbnN0IGluc3RhbmNlMSA9IG5ldyBNb2RlbENsYXNzKGRhdGExKTtcbi8vICAgICBjb25zdCBpbnN0YW5jZTIgPSBuZXcgTW9kZWxDbGFzcyhkYXRhMik7XG4vL1xuLy8gICAgIGNvbnN0IGlzRXF1YWwgPSBleGNsdWRlRmllbGRzXG4vLyAgICAgICA/IGluc3RhbmNlMS5lcXVhbHMoaW5zdGFuY2UyLCAuLi5leGNsdWRlRmllbGRzKVxuLy8gICAgICAgOiBpbnN0YW5jZTEuZXF1YWxzKGluc3RhbmNlMik7XG4vL1xuLy8gICAgIHJldHVybiB7XG4vLyAgICAgICBpc0VxdWFsLFxuLy8gICAgICAgaGFzaDE6IGluc3RhbmNlMS5oYXNoKCksXG4vLyAgICAgICBoYXNoMjogaW5zdGFuY2UyLmhhc2goKSxcbi8vICAgICAgIGRpZmZlcmVuY2VzOiBpc0VxdWFsID8gbnVsbCA6IGF3YWl0IGZpbmREaWZmZXJlbmNlcyhpbnN0YW5jZTEsIGluc3RhbmNlMiksXG4vLyAgICAgfTtcbi8vICAgfSxcbi8vIH0pO1xuLy9cbi8vIC8vIFRvb2w6IExpc3QgYXZhaWxhYmxlIGRlY29yYXRvcnNcbi8vIHNlcnZlci5hZGRUb29sKHtcbi8vICAgbmFtZTogXCJsaXN0LWRlY29yYXRvcnNcIixcbi8vICAgZGVzY3JpcHRpb246IFwiTGlzdCBhbGwgYXZhaWxhYmxlIHZhbGlkYXRpb24gZGVjb3JhdG9yc1wiLFxuLy8gICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4vLyAgICAgY2F0ZWdvcnk6IHpcbi8vICAgICAgIC5lbnVtKFtcImJhc2ljXCIsIFwidHlwZS1zcGVjaWZpY1wiLCBcImNvbXBhcmlzb25cIiwgXCJhbGxcIl0pXG4vLyAgICAgICAub3B0aW9uYWwoKVxuLy8gICAgICAgLmRlZmF1bHQoXCJhbGxcIiksXG4vLyAgIH0pLFxuLy8gICBleGVjdXRlOiBhc3luYyAoYXJncykgPT4ge1xuLy8gICAgIGNvbnN0IHsgY2F0ZWdvcnkgfSA9IGFyZ3M7XG4vL1xuLy8gICAgIGNvbnN0IGRlY29yYXRvcnMgPSB7XG4vLyAgICAgICBiYXNpYzogW1xuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJyZXF1aXJlZFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1hcmtzIGZpZWxkIGFzIHJlcXVpcmVkXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcIm1pblwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1pbmltdW0gdmFsdWUgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcInZhbHVlXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcIm1heFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1heGltdW0gdmFsdWUgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcInZhbHVlXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcIm1pbmxlbmd0aFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1pbmltdW0gbGVuZ3RoIHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJsZW5ndGhcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwibWF4bGVuZ3RoXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcImxlbmd0aFwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJwYXR0ZXJuXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUmVnZXggcGF0dGVybiB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wicGF0dGVyblwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJzdGVwXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3RlcCB2YWx1ZSB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wic3RlcFwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgXSxcbi8vICAgICAgIFwidHlwZS1zcGVjaWZpY1wiOiBbXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRW1haWwgZm9ybWF0IHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwidXJsXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVVJMIGZvcm1hdCB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcImRhdGVcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEYXRlIGZvcm1hdCB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wiZm9ybWF0P1wiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJwYXNzd29yZFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhc3N3b3JkIHN0cmVuZ3RoIHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwidHlwZVwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlR5cGUgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcInR5cGVcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwibGlzdFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkFycmF5IHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJpdGVtVHlwZVwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJzZXRcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTZXQgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcIml0ZW1UeXBlXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICBdLFxuLy8gICAgICAgY29tcGFyaXNvbjogW1xuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJlcVwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVxdWFsIHRvIGFub3RoZXIgZmllbGRcIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJmaWVsZE5hbWVcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwiZGlmZlwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRpZmZlcmVudCBmcm9tIGFub3RoZXIgZmllbGRcIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJmaWVsZE5hbWVcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwibHRcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMZXNzIHRoYW4gYW5vdGhlciBmaWVsZFwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcImZpZWxkTmFtZVwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJsdGVcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMZXNzIHRoYW4gb3IgZXF1YWwgdG8gYW5vdGhlciBmaWVsZFwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcImZpZWxkTmFtZVwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJndFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkdyZWF0ZXIgdGhhbiBhbm90aGVyIGZpZWxkXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wiZmllbGROYW1lXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcImd0ZVwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyIGZpZWxkXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wiZmllbGROYW1lXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICBdLFxuLy8gICAgIH07XG4vL1xuLy8gICAgIGlmIChjYXRlZ29yeSA9PT0gXCJhbGxcIikge1xuLy8gICAgICAgcmV0dXJuIHtcbi8vICAgICAgICAgY2F0ZWdvcmllczogZGVjb3JhdG9ycyxcbi8vICAgICAgICAgdG90YWw6IE9iamVjdC52YWx1ZXMoZGVjb3JhdG9ycykucmVkdWNlKFxuLy8gICAgICAgICAgIChzdW0sIGFycikgPT4gc3VtICsgYXJyLmxlbmd0aCxcbi8vICAgICAgICAgICAwXG4vLyAgICAgICAgICksXG4vLyAgICAgICB9O1xuLy8gICAgIH1cbi8vXG4vLyAgICAgcmV0dXJuIHtcbi8vICAgICAgIGNhdGVnb3J5LFxuLy8gICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yc1tjYXRlZ29yeV0gfHwgW10sXG4vLyAgICAgICBjb3VudDogZGVjb3JhdG9yc1tjYXRlZ29yeV0/Lmxlbmd0aCB8fCAwLFxuLy8gICAgIH07XG4vLyAgIH0sXG4vLyB9KTtcbi8vXG4vLyAvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBkZWNvcmF0b3IgZnVuY3Rpb24gYnkgbmFtZVxuLy8gZnVuY3Rpb24gZ2V0RGVjb3JhdG9yRnVuY3Rpb24obmFtZTogc3RyaW5nKTogRnVuY3Rpb24gfCBudWxsIHtcbi8vICAgY29uc3QgZGVjb3JhdG9yTWFwID0ge1xuLy8gICAgIHJlcXVpcmVkLFxuLy8gICAgIGVtYWlsLFxuLy8gICAgIG1pbixcbi8vICAgICBtYXgsXG4vLyAgICAgbWlubGVuZ3RoLFxuLy8gICAgIG1heGxlbmd0aCxcbi8vICAgICBwYXR0ZXJuLFxuLy8gICAgIHVybCxcbi8vICAgICBkYXRlLFxuLy8gICAgIHBhc3N3b3JkLFxuLy8gICAgIGxpc3QsXG4vLyAgICAgc2V0LFxuLy8gICAgIGVxLFxuLy8gICAgIGRpZmYsXG4vLyAgICAgbHQsXG4vLyAgICAgbHRlLFxuLy8gICAgIGd0LFxuLy8gICAgIGd0ZSxcbi8vICAgICB0eXBlLFxuLy8gICAgIHN0ZXAsXG4vLyAgIH07XG4vLyAgIHJldHVybiBkZWNvcmF0b3JNYXBbbmFtZV0gfHwgbnVsbDtcbi8vIH1cbi8vXG4vLyAvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIGZpbmQgZGlmZmVyZW5jZXMgYmV0d2VlbiBtb2RlbHNcbi8vIGFzeW5jIGZ1bmN0aW9uIGZpbmREaWZmZXJlbmNlcyhpbnN0YW5jZTE6IGFueSwgaW5zdGFuY2UyOiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4vLyAgIGNvbnN0IGRpZmZlcmVuY2VzID0gW107XG4vLyAgIGNvbnN0IHNlcmlhbGl6ZWQxID0gSlNPTi5wYXJzZShpbnN0YW5jZTEuc2VyaWFsaXplKCkpO1xuLy8gICBjb25zdCBzZXJpYWxpemVkMiA9IEpTT04ucGFyc2UoaW5zdGFuY2UyLnNlcmlhbGl6ZSgpKTtcbi8vXG4vLyAgIGZvciAoY29uc3Qga2V5IGluIHNlcmlhbGl6ZWQxKSB7XG4vLyAgICAgaWYgKHNlcmlhbGl6ZWQxW2tleV0gIT09IHNlcmlhbGl6ZWQyW2tleV0pIHtcbi8vICAgICAgIGRpZmZlcmVuY2VzLnB1c2goe1xuLy8gICAgICAgICBmaWVsZDoga2V5LFxuLy8gICAgICAgICB2YWx1ZTE6IHNlcmlhbGl6ZWQxW2tleV0sXG4vLyAgICAgICAgIHZhbHVlMjogc2VyaWFsaXplZDJba2V5XSxcbi8vICAgICAgIH0pO1xuLy8gICAgIH1cbi8vICAgfVxuLy9cbi8vICAgcmV0dXJuIGRpZmZlcmVuY2VzO1xuLy8gfVxuLy9cbi8vIC8vIFN0YXJ0IHRoZSBzZXJ2ZXJcbi8vIHNlcnZlci5zdGFydCh7XG4vLyAgIHRyYW5zcG9ydFR5cGU6IFwic3RkaW9cIixcbi8vIH0pO1xuLy9cbi8vIGV4cG9ydCB7IHNlcnZlciB9O1xuIl19
File without changes