@real-life/trust-protocol 0.4.0 → 0.5.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 (88) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +47 -25
  3. package/dist/adapters/vti-mediator.d.ts +18 -3
  4. package/dist/adapters/vti-mediator.d.ts.map +1 -1
  5. package/dist/adapters/vti-mediator.js +51 -13
  6. package/dist/adapters/vti-mediator.js.map +1 -1
  7. package/dist/codec.d.ts +9 -1
  8. package/dist/codec.d.ts.map +1 -1
  9. package/dist/codec.js +107 -23
  10. package/dist/codec.js.map +1 -1
  11. package/dist/engine.d.ts +15 -3
  12. package/dist/engine.d.ts.map +1 -1
  13. package/dist/engine.js +130 -16
  14. package/dist/engine.js.map +1 -1
  15. package/dist/entropy.d.ts +1 -1
  16. package/dist/entropy.d.ts.map +1 -1
  17. package/dist/entropy.js +1 -1
  18. package/dist/entropy.js.map +1 -1
  19. package/dist/events.d.ts +21 -0
  20. package/dist/events.d.ts.map +1 -1
  21. package/dist/events.js.map +1 -1
  22. package/dist/holder-api.d.ts +29 -1
  23. package/dist/holder-api.d.ts.map +1 -1
  24. package/dist/holder-api.js +12 -2
  25. package/dist/holder-api.js.map +1 -1
  26. package/dist/holder-state-v2.d.ts +858 -0
  27. package/dist/holder-state-v2.d.ts.map +1 -0
  28. package/dist/holder-state-v2.js +2 -0
  29. package/dist/holder-state-v2.js.map +1 -0
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +10 -6
  33. package/dist/index.js.map +1 -1
  34. package/dist/internal.d.ts +2 -1
  35. package/dist/internal.d.ts.map +1 -1
  36. package/dist/internal.js +1 -1
  37. package/dist/internal.js.map +1 -1
  38. package/dist/introduction/holder.d.ts.map +1 -1
  39. package/dist/introduction/holder.js +7 -0
  40. package/dist/introduction/holder.js.map +1 -1
  41. package/dist/invariants.d.ts.map +1 -1
  42. package/dist/invariants.js +70 -0
  43. package/dist/invariants.js.map +1 -1
  44. package/dist/membership/holder.d.ts +3 -5
  45. package/dist/membership/holder.d.ts.map +1 -1
  46. package/dist/membership/holder.js +165 -88
  47. package/dist/membership/holder.js.map +1 -1
  48. package/dist/membership.d.ts +31 -0
  49. package/dist/membership.d.ts.map +1 -1
  50. package/dist/membership.js +25 -2
  51. package/dist/membership.js.map +1 -1
  52. package/dist/message/holder.d.ts +49 -0
  53. package/dist/message/holder.d.ts.map +1 -0
  54. package/dist/message/holder.js +290 -0
  55. package/dist/message/holder.js.map +1 -0
  56. package/dist/message.d.ts +43 -0
  57. package/dist/message.d.ts.map +1 -0
  58. package/dist/message.js +51 -0
  59. package/dist/message.js.map +1 -0
  60. package/dist/receive.d.ts +4 -3
  61. package/dist/receive.d.ts.map +1 -1
  62. package/dist/receive.js +23 -4
  63. package/dist/receive.js.map +1 -1
  64. package/dist/results.d.ts +17 -2
  65. package/dist/results.d.ts.map +1 -1
  66. package/dist/results.js.map +1 -1
  67. package/dist/schemas.d.ts.map +1 -1
  68. package/dist/schemas.js +9 -6
  69. package/dist/schemas.js.map +1 -1
  70. package/dist/state.d.ts +66 -5
  71. package/dist/state.d.ts.map +1 -1
  72. package/dist/state.js +2 -1
  73. package/dist/state.js.map +1 -1
  74. package/dist/trust/continuity.d.ts.map +1 -1
  75. package/dist/trust/continuity.js +7 -1
  76. package/dist/trust/continuity.js.map +1 -1
  77. package/dist/trust/entries.d.ts.map +1 -1
  78. package/dist/trust/entries.js +103 -2
  79. package/dist/trust/entries.js.map +1 -1
  80. package/dist/views.d.ts +34 -2
  81. package/dist/views.d.ts.map +1 -1
  82. package/dist/views.js +19 -1
  83. package/dist/views.js.map +1 -1
  84. package/dist/wire.d.ts +47 -6
  85. package/dist/wire.d.ts.map +1 -1
  86. package/dist/wire.js.map +1 -1
  87. package/package.json +6 -2
  88. package/schemas/holder-state-v2.schema.json +4123 -0
package/dist/codec.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,sEAAsE;AACtE,2EAA2E;AAC3E,uEAAuE;AACvE,iEAAiE;AACjE,sEAAsE;AACtE,sCAAsC;AACtC,EAAE;AACF,0DAA0D;AAC1D,iFAAiF;AACjF,0EAA0E;AAC1E,2EAA2E;AAC3E,wEAAwE;AACxE,4EAA4E;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAI/B,qCAAqC;AACrC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAe1F,+EAA+E;AAC/E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAqB;IAClC,oDAAoD;IAC3C,IAAI,CAAS;IACtB,YAAa,IAAyB,EAAE,OAAe,EAAE,IAAa;QACpE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;QACpF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAC1C,CAAC;CACF;AAKD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,GAAW,EAAS,EAAE,GAAG,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC,CAAA;AACpG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEpH,MAAM,GAAG,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ;IAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA,CAAC,CAAC,CAAA;AAClF,MAAM,IAAI,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,SAAS;IAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA,CAAC,CAAC,CAAA;AACrF,MAAM,IAAI,GAAM,GAAG,EAAE,GAAE,CAAC,CAAA,CAAqC,wCAAwC;AACrG,MAAM,GAAG,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAA,CAAC,CAAC,CAAA;AACzI,MAAM,MAAM,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,4CAA4C,CAAC,CAAA,CAAC,CAAC,CAAA;AACxI,MAAM,OAAO,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAA,CAAC,CAAC,CAAA;AAC5H,MAAM,QAAQ,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAA,CAAC,CAAC,CAAA;AACzH,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA,CAAC,CAAC,CAAA;AAC5J,MAAM,QAAQ,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAA;AACnE,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAC/C;IAAC,CAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AACD,4CAA4C;AAC5C,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,IAAI,IAAI,GAAG,CAAE,CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAM,CAAe,CAAC,MAAM;QAAE,IAAI,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;AACrH,CAAC,CAAA;AACD,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC;QAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtF,CAAC,CAAA;AACD,sEAAsE;AACtE,MAAM,GAAG,GAAG,CAAC,GAAsB,EAAE,MAAyB,EAAE,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC/E,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACtD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,SAAQ;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;QAC9D,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC,CAAA;AACD,6DAA6D;AAC7D,mCAAmC;AACnC,MAAM,MAAM,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA,CAAC,CAAC,CAAA;AACzE,MAAM,KAAK,GAAG,CAAC,CAAI,EAAE,OAAe,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACnD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4C,CAAC;QAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAA;AAC7J,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAA;AAC1F,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;AAClG,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;AAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtD,MAAM,WAAW,GAAG,CAAC,IAAO,EAAK,EAAE,CAAC,GAAG,CAAC;IACtC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;IACtG,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;CAC7F,CAAC,CAAA;AACF,uDAAuD;AACvD,MAAM,MAAM,GAAG,CAAC,IAAO,EAAK,EAAE;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACX,MAAM,CAAC,GAAG,CAAmD,CAAA;QAC7D,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;IACzH,CAAC,CAAA;AACH,CAAC,CAAA;AACD,MAAM,KAAK,GAAG,CAAC,QAAW,EAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAChI,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAChD,MAAM,aAAa,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5G,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACtG,MAAM,aAAa,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAChG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AACD,MAAM,OAAO,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/F,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,uBAAuB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;IAChG,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;IAC1C,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnG,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;IACnL,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACrE,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC1D,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,GAAG,CAAC;IACvB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;IAC3F,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,GAAG,CAAC;IACtG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClH,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC;CACzD,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,GAAG,CAAC;IAClB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAC5G,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IACzB,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACxH,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC;CAC5B,CAAC,CAAA;AAEF,MAAM,UAAU,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClF,KAAK,oBAAoB,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACtJ,KAAK,UAAU,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,sBAAsB;YACvD,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9K,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9G,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAA;IACvD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;CAC3F,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;AAC7B,2EAA2E;AAC3E,MAAM,UAAU,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7B,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjB,MAAM,CAAC,GAAG,CAAwE,CAAA;IAClF,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY;QAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC7B,yEAAyE;AACzE,MAAM,SAAS,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5B,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtK,MAAM,CAAC,GAAG,CAAwE,CAAA;IAClF,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY;QAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,YAAY,GAAuD;IACvE,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IACvI,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE;IACvH,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE;IAC7G,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAC1K,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IACnK,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAClI,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE;CACtF,CAAA;AAED,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAO,EAAkB,EAAE,CACrD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE5F,MAAM,IAAI,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;IACtE,IAAI,WAAW,CAAC,CAAoB,CAAC;QAAE,YAAY,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,YAAY,GAAqE;IACrF,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrC,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IAC7D,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7D,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IACvE,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAClF,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnC,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACtC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAClC,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;IACpG,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IACvI,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChI,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACjD,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACvC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC/B,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACjC,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5D,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACrE,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC1E,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACrD,mBAAmB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvD,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;IAClG,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7E,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACnC,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACjD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CACjD,CAAA;AACD,MAAM,KAAK,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAI,CAA6B,CAAC,IAAI,CAAA;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;IACrG,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAoB,CAAC,CAAA;IAC1D,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxF,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAC/H,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9J,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAC1F,MAAM,UAAU,GAAG,GAAG,CAAC;IACrB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI;IACvF,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;IAC7G,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9D,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAA;AACtF;8EAC8E;AAC9E,MAAM,KAAK,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACxB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAChB,MAAM,CAAC,GAAG,CAAoE,CAAA;IAC9E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAA;IACpG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;AAC/D,MAAM,eAAe,GAAG,GAAG,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAC9H,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9F,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI;CACxH,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAG,GAAG,CAAC;IACnB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;IAChE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;IACpG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;IAC5G,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC/G,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;IACzH,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;CACpG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;AAErB,MAAM,MAAM,GAAG,GAAG,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACb,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,GAAG,CAAC;QACZ,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC;QACtC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAClH,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC;IACxC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC3C,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;QACnB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM;QACtF,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC9D,CAAC,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;IAC7K,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;IACpI,SAAS,EAAE,GAAG,CAAC;QACb,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;QACtF,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;QACtC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;QACrC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;QAChH,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;QACrB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;KACnG,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzG,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC;YACjB,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;YACtI,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM;SAClE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC;KACzC,CAAC;CACH,CAAC,CAAA;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAA6C,MAAM,CAAC,MAAM,CAAC;IAChF,CAAC,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;CACtC,CAAC,CAAA;AAEF,0EAA0E;AAE1E,6DAA6D;AAC7D,MAAM,SAAS,GAAG,CAAC,CAAU,EAAU,EAAE;IACvC,IAAI,CAAC;QAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;IAAC,CAAC;AACjG,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,CAAS,EAAkB,EAAE;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAA;IACjF,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAE,GAAY,EAAE,KAAiB;IAC1D,IAAI,CAAC,GAAG,GAAG,CAAA;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;QAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAY,CAAA;IAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IAC3C,MAAM,EAAE,GAAI,CAAyB,CAAC,KAAK,CAAA;IAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAK,EAAa,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,sCAAsC,CAAC,CAAA;IACvI,IAAK,EAAa,GAAG,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,eAAe,CAAC,aAAa,EAAE,SAAS,EAAE,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IACtH,WAAW,CAAC,KAAK,EAAE,EAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,EAAY,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAA;QACnF,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjG,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,aAAa,GAAe,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AAElG;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAE,GAAY;IACvC,OAAO,WAAW,CAAC,GAAG,EAAE,aAAa,CAAgB,CAAA;AACvD,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAE,KAAkB;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7B,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAc,EAAE,CAAc,EAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA","sourcesContent":["// codec — the HolderState storage format (lib Stage 2, note §2.2).\n//\n// decodeState is the one way in: JSON purity, then the codec version, then\n// the pure migration chain vN → vN+1, each step running between two states\n// validated by their codec's own validator (hand-written; no schema engine\n// in the published library). The validators check shape and a few local\n// consistency rules; referential and domain invariants (active heads,\n// register monotony, matching revisions) are the engine's (invariants.ts).\n// An unknown or higher codec is refused, never read best-effort. Store\n// adapters keep bytes or JSON and never migrate themselves. Wire\n// versions and the codec are independent; a migration never re-issues\n// stored documents, outbound or acks.\n//\n// Codec 1 is the format of 0.4.0: its golden fixtures are\n// lib/test/fixtures/*.json (deterministic runs, test/fixtures/gen-state-v1.mjs),\n// decoded and re-encoded byte-identically by test/codec-fixture.test.mjs.\n// The rule: codec 1 is read; a newer codec is codec-newer; a codec without\n// a validator is codec-unknown. Every later codec adds its validator, a\n// migration from the one before, and its own fixture with a migration test.\nimport { jcs } from './core.js'\nimport type { Duty, HolderState, KnownDuty } from './state.js'\nimport type { HolderEventType } from './events.js'\n\n/** The codec this library writes. */\nexport const CODEC = 1\n\n/**\n * Migrations keyed by the codec they read: MIGRATIONS[n] maps a valid\n * codec-n state to a codec-(n+1) state. Pure, never async, never keys.\n */\nexport const MIGRATIONS: Readonly<Record<number, (state: any) => any>> = Object.freeze({})\n\n/** A codec's structural validator: throws StateCodecError('shape') or returns. */\nexport type StateValidator = (raw: unknown) => void\n\n/** One codec chain: the target codec, its migrations and a validator for\n * every codec from the oldest readable one up to the target. */\nexport interface CodecChain {\n codec: number\n migrations: Readonly<Record<number, (state: any) => any>>\n validators: Readonly<Record<number, StateValidator>>\n}\n\nexport type StateCodecErrorCode = 'not-json' | 'codec-unknown' | 'codec-newer' | 'shape'\n\n/** A stored state the library will not load (or a state it will not write). */\nexport class StateCodecError extends Error {\n readonly code: StateCodecErrorCode\n /** JSON path of the offending value, for 'shape' */\n readonly path?: string\n constructor (code: StateCodecErrorCode, message: string, path?: string) {\n super(path === undefined ? `${code}: ${message}` : `${code} at ${path}: ${message}`)\n this.name = 'StateCodecError'\n this.code = code\n if (path !== undefined) this.path = path\n }\n}\n\n// ── the validator kit ──────────────────────────────────────────────────\ntype V = (x: unknown, path: string) => void\n\nconst fail = (path: string, msg: string): never => { throw new StateCodecError('shape', msg, path) }\nconst isObj = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x)\n\nconst str: V = (x, p) => { if (typeof x !== 'string') fail(p, 'string expected') }\nconst bool: V = (x, p) => { if (typeof x !== 'boolean') fail(p, 'boolean expected') }\nconst json: V = () => {} // JSON purity is checked once, up front\nconst dec: V = (x, p) => { if (typeof x !== 'string' || !/^(0|[1-9][0-9]{0,17})$/.test(x)) fail(p, 'canonical decimal string expected') }\nconst millis: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer milliseconds expected') }\nconst natural: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer expected') }\nconst positive: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 1) fail(p, 'positive integer expected') }\nconst lit = (...vals: unknown[]): V => (x, p) => { if (!vals.includes(x)) fail(p, 'one of ' + vals.map((v) => JSON.stringify(v)).join(', ') + ' expected') }\nconst nullable = (v: V): V => (x, p) => { if (x !== null) v(x, p) }\nconst arr = (v: V): V => (x, p) => {\n if (!Array.isArray(x)) fail(p, 'array expected')\n ;(x as unknown[]).forEach((e, i) => v(e, `${p}[${i}]`))\n}\n/** an array used as a set: no duplicates */\nconst set = (v: V): V => (x, p) => {\n arr(v)(x, p)\n if (new Set((x as unknown[]).map((e) => jcs(e))).size !== (x as unknown[]).length) fail(p, 'duplicate set element')\n}\nconst rec = (v: V): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n for (const [k, e] of Object.entries(x as Record<string, unknown>)) v(e, `${p}.${k}`)\n}\n/** a closed object: required fields, optional fields, nothing else */\nconst obj = (req: Record<string, V>, opt: Record<string, V> = {}): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const o = x as Record<string, unknown>\n for (const k of Object.keys(req)) {\n if (!Object.hasOwn(o, k)) fail(`${p}.${k}`, 'missing')\n req[k](o[k], `${p}.${k}`)\n }\n for (const k of Object.keys(o)) {\n if (Object.hasOwn(req, k)) continue\n if (!Object.hasOwn(opt, k)) fail(`${p}.${k}`, 'unknown field')\n opt[k](o[k], `${p}.${k}`)\n }\n}\n/** a record whose values carry their own key in `idField` */\n/** a JSON object, contents open */\nconst anyObj: V = (x, p) => { if (!isObj(x)) fail(p, 'object expected') }\nconst keyed = (v: V, idField: string): V => (x, p) => {\n rec(v)(x, p)\n for (const [k, e] of Object.entries(x as Record<string, Record<string, unknown>>)) if (e[idField] !== k) fail(`${p}.${k}.${idField}`, 'must equal its key')\n}\n\n// ── the HolderState shape (state.ts) ───────────────────────────────────\nconst setting = lit('default', 'on', 'off')\nconst trustClass = lit('star', 'groupStar', 'anchorMapping', 'sealedGroupStar', 'profile')\nconst recipient = obj({ contactId: str, rkid: str, keyAgreement: str }, { anchor: str, via: str })\nconst envelope = obj({ rkid: str, epk: str, nonce: str, ciphertext: str })\nconst assembly = obj({ salt: dec, chunks: rec(json) })\nconst seqOutShape = (item: V): V => obj({\n lastSalt: dec, exhausted: bool, hwm: dec, snapshot: nullable(arr(item)), snapshotDigest: nullable(str),\n inflight: rec(obj({ view: arr(item), viewDigest: str, digests: arr(str), acked: arr(str) })),\n})\n/** the snapshot and its digest are present together */\nconst seqOut = (item: V): V => {\n const shape = seqOutShape(item)\n return (x, p) => {\n shape(x, p)\n const o = x as { snapshot: unknown, snapshotDigest: unknown }\n if ((o.snapshot === null) !== (o.snapshotDigest === null)) fail(`${p}.snapshotDigest`, 'null exactly when snapshot is')\n }\n}\nconst seqIn = (accepted: V): V => obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly), accepted: nullable(accepted) })\nconst starPair = obj({ member: str, head: str })\nconst groupStarItem: V = (x, p) => {\n if (isObj(x) && x.mode === 'sealed') return obj({ group: str, mode: str, member: str, memberOp: str })(x, p)\n obj({ group: str, mode: lit('digest') })(x, p)\n}\nconst starOut = seqOut(starPair)\nconst starIn = seqIn(obj({ salt: dec, blinded: arr(str), matches: arr(str) }))\nconst groupStarOut = seqOut(groupStarItem)\nconst groupStarIn = seqIn(obj({ salt: dec, entries: arr(obj({ d: str, c: str })), groups: arr(str) }))\nconst continuityDue: V = (x, p) => {\n if (isObj(x) && x.kind === 'choice') return obj({ kind: str, prior: str, alts: arr(str) })(x, p)\n obj({ kind: lit('report', 'align'), prior: str })(x, p)\n}\nconst logHead: V = (x, p) => {\n if (isObj(x) && Object.hasOwn(x, 'empty')) return obj({ genesis: str, empty: lit(true) })(x, p)\n obj({ genesis: str, entryId: str, gen: positive, next: str, commit: str })(x, p)\n}\n\nconst tuple = obj({\n ownPairLabel: str, counterpartAnchor: str, counterpartKeyAgreement: str, rkid: str, entryId: str,\n priorCandidates: arr(obj({ ownPairLabel: str, counterpartAnchor: str }, { replaces: arr(str) })),\n starOut, starIn, groupStarOut, groupStarIn,\n probeOut: obj({ seq: dec, inflight: rec(obj({ digests: arr(str), acked: arr(str) })), done: bool }),\n probeIn: obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly) }),\n continuityOut: obj({ rev: dec, body: json, proof: json, sent: arr(str), align: bool, chosen: nullable(str), reported: nullable(str), aligned: bool, due: nullable(continuityDue) }),\n continuityIn: obj({ rev: dec, body: json, recordPrior: nullable(str) }),\n mappingOut: obj({ rev: dec, body: json, underAnchor: nullable(str) }),\n mappingIn: obj({ rev: dec, body: json, self: nullable(str), card: json }),\n profileOut: obj({ rev: dec }),\n profileIn: obj({ rev: dec, body: json, verifiedSeq: dec }),\n deactivated: bool,\n})\n\nconst relationship = obj({\n id: str, contactId: str, tuples: arr(tuple), activeHead: str, earliestAnchor: nullable(str),\n links: arr(obj({ prev: str, next: str })), bindings: rec(set(str)), heldCounterpartHead: nullable(str),\n memory: rec(json), provenance: obj({ kind: lit('ceremony', 'introduced'), at: millis }, { via: str, viaPin: str }),\n chainedInto: nullable(str), firstVerified: nullable(dec),\n})\n\nconst contact = obj({\n id: str, pos: nullable(dec), status: lit('none', 'admitted', 'pending'), aliases: set(str), relIds: set(str),\n anchorHead: nullable(str),\n settings: obj({ star: setting, groupStar: setting, anchorMapping: setting, sealedGroupStar: setting, profile: setting }),\n groupSettings: rec(setting),\n})\n\nconst outboxStep: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const s = x as Record<string, unknown>\n switch (s.status) {\n case 'submitted': return obj({ status: str, at: millis, attempt: positive })(x, p)\n case 'awaiting-transport': return obj({ status: str, at: millis, reason: lit('offline', 'transport-unreachable', 'carrier-refused-retriable') })(x, p)\n case 'accepted': return obj({ status: str, at: millis })(x, p)\n case 'delivered': return obj({ status: str, at: millis, late: bool })(x, p)\n case 'failed': return s.reason === 'rejected-by-receiver'\n ? obj({ status: str, at: millis, reason: str, code: lit('malformedRequest', 'unsupportedType', 'proofRequired', 'proofInvalid', 'wrongRecipient', 'identityMismatch') })(x, p)\n : obj({ status: str, at: millis, reason: lit('unroutable', 'oversize', 'expired-by-adapter-policy') })(x, p)\n default: fail(`${p}.status`, 'unknown outbox status')\n }\n}\n\nconst outboxShape = obj({\n type: str, threadId: str, recipient, envelope, attempt: positive, history: arr(outboxStep),\n}, { nextAttemptAt: millis })\n/** the envelope is sealed to the counterpart key, never to the own rkid */\nconst outboxItem: V = (x, p) => {\n outboxShape(x, p)\n const o = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (o.envelope.rkid !== o.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n}\n\nconst DUE = { dueAt: millis }\n/** a retained ack: sealed to the counterpart key, like an outbox item */\nconst storedAck: V = (x, p) => {\n obj({ digest: str, envelope, threadId: str, recipient, at: millis, attempt: positive, sent: bool }, { nextAttemptAt: millis, sentBy: lit('report', 'horizon') })(x, p)\n const a = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (a.envelope.rkid !== a.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n}\n\nconst KNOWN_DUTIES: Record<KnownDuty['kind'], { v: number, shape: V }> = {\n 'reissue-mapping': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, awaitHead: nullable(str) }, DUE) },\n 'class-on': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, cls: trustClass }, DUE) },\n profile: { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, rev: dec }, DUE) },\n continuity: { v: 1, shape: obj({ kind: str, v: positive, id: str, relId: str, tuple: str, step: lit('probe', 'mapping') }, { ...DUE, attempt: natural, lastAt: millis }) },\n merge: { v: 1, shape: obj({ kind: str, v: positive, id: str, entryIds: set(str), relId: str, witness: obj({ heads: rec(str), superseded: rec(set(str)) }) }, DUE) },\n rotation: { v: 1, shape: obj({ kind: str, v: positive, id: str, rotationId: str }, { ...DUE, attempt: natural, lastAt: millis }) },\n 'intro-ack': { v: 1, shape: obj({ kind: str, v: positive, id: str, act: str }, DUE) },\n}\n\n/** Is this a duty kind and version this library handles? Unknown ones are kept as they are. */\nexport const isKnownDuty = (d: Duty): d is KnownDuty =>\n Object.hasOwn(KNOWN_DUTIES, d.kind) && KNOWN_DUTIES[d.kind as KnownDuty['kind']].v === d.v\n\nconst duty: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const d = x as Record<string, unknown>\n str(d.kind, `${p}.kind`); natural(d.v, `${p}.v`); str(d.id, `${p}.id`)\n if (isKnownDuty(d as unknown as Duty)) KNOWN_DUTIES[d.kind as KnownDuty['kind']].shape(x, p)\n}\n\nconst EVENT_FIELDS: Record<HolderEventType, [Record<string, V>, Record<string, V>?]> = {\n 'contact.added': [{ contactId: str }],\n 'contact.verified': [{ contactId: str, relationshipId: str }],\n 'contact.chained': [{ contactId: str, from: str, into: str }],\n 'contact.merged': [{ contactId: str, merged: arr(str) }],\n 'contact.split': [{ contactId: str, leaver: str, relationshipId: str }],\n 'contact.departed': [{ contactId: str, relationshipIds: arr(str), removed: bool }],\n 'trust.given': [{ contactId: str }],\n 'trust.received': [{ contactId: str }],\n 'trust.paused': [{ contactId: str, paused: bool }],\n 'group.joined': [{ groupId: str }],\n 'prompt.opened': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction') }],\n 'prompt.decided': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), choice: lit('accept', 'decline') }],\n 'delivery.status': [{ digest: str, threadId: str, status: lit('submitted', 'accepted', 'delivered', 'failed') }, { late: bool }],\n 'profile.updated': [{ contactId: nullable(str) }],\n 'anchor.rotated': [{ generation: dec }],\n 'device.added': [{ name: str }],\n 'device.revoked': [{ name: str }],\n 'duty.unsupported': [{ dutyId: str, kind: str, v: natural }],\n 'star.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'groupStar.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'encounter.shown': [{ challenge: str, card: anyObj }],\n 'encounter.scanned': [{ contactId: str, card: anyObj }],\n 'encounter.recorded': [{ contactId: str, relationshipId: str, role: lit('scanner', 'displayer') }],\n 'encounter.accepted': [{ contactId: str, relationshipId: str, mutual: bool }],\n 'group.founded': [{ groupId: str }],\n 'group.admitted': [{ groupId: str, member: str }],\n 'group.vouched': [{ groupId: str, member: str }],\n}\nconst event: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const t = (x as Record<string, unknown>).type\n if (typeof t !== 'string' || !Object.hasOwn(EVENT_FIELDS, t)) fail(`${p}.type`, 'unknown event type')\n const [req, opt = {}] = EVENT_FIELDS[t as HolderEventType]\n obj({ type: str, eventId: str, commitSeq: dec, ...req }, { actId: str, ...opt })(x, p)\n}\n\nconst rosterEntry = obj({ anchor: str, op: str, keyAgreement: str, addedAt: millis }, { name: str, contactId: str, rkid: str })\nconst openInvitation = obj({ invitee: str, keyAgreement: str, contactId: str, rkid: str, threadId: str, credDigest: str, invite: anyObj, validUntil: millis })\nconst evidence = obj({ invite: anyObj, accept: anyObj, vouches: arr(anyObj), at: millis })\nconst groupShape = obj({\n id: str, name: str, memberLabel: str, rules: obj({ vouchThreshold: dec }), listed: bool,\n roster: keyed(rosterEntry, 'anchor'), invitations: keyed(openInvitation, 'threadId'), evidence: rec(evidence),\n preludes: rec(obj({ contactId: str, rkid: str, at: millis })),\n}, { did: str, genesis: anyObj, memberAnchor: str, memberOp: str, acceptDigest: str })\n/** a listed group carries its member anchor and memberOp: the group star\n * seals them (Trust 5400, 5430), and their absence is no filler condition */\nconst group: V = (x, p) => {\n groupShape(x, p)\n const g = x as { listed: boolean, memberAnchor?: unknown, memberOp?: unknown }\n if (g.listed && g.memberAnchor === undefined) fail(`${p}.memberAnchor`, 'missing on a listed group')\n if (g.listed && g.memberOp === undefined) fail(`${p}.memberOp`, 'missing on a listed group')\n}\n\nconst heldCredential = obj({ digest: str, credential: anyObj })\nconst enactmentRecord = obj({\n ceremony: str, own: str, tCh: millis, peer: str, counterpart: str, card: anyObj, bind: str, at: millis, label: str, relId: str,\n role: lit('scanner', 'displayer'), out: nullable(heldCredential), in: nullable(heldCredential),\n thread: nullable(str), bundleDigest: nullable(str), threads: rec(str), sentCard: nullable(anyObj), counterPending: bool,\n})\n\nconst introAct = obj({\n key: str, act: str, role: lit('requester', 'mediator', 'target'),\n status: lit('sent', 'acked', 'completed', 'failed', 'received', 'forwarded', 'consented', 'refused'),\n issuedAt: millis, request: anyObj, requestCard: anyObj, reply: nullable(anyObj), replyCard: nullable(anyObj),\n pins: obj({}, { requester: str, target: str, mediator: str }), threads: obj({ request: str }, { forward: str }),\n at: millis, ackDelayMs: natural, ownLabel: nullable(str), ack: nullable(anyObj), replyForwarded: bool, vouchersSent: bool,\n pendingVoucher: nullable(anyObj), voucher: nullable(anyObj), vouched: bool, promptId: nullable(str),\n}, { peerName: str })\n\nconst codec1 = obj({\n codec: lit(1),\n commitSeq: dec,\n lastWhen: millis,\n register: obj({\n labels: set(str), pairNonces: rec(str),\n carriers: rec(arr(obj({ nonce: str, generation: dec }))),\n devices: obj({ names: set(str), revoked: set(str) }),\n community: nullable(obj({ genesis: str, head: dec })),\n lineage: arr(anyObj),\n }),\n addresses: obj({ keys: rec(obj({ label: str, lastShown: millis }, { retiredAt: millis })), tombstones: set(str) }),\n contacts: keyed(contact, 'id'),\n relationships: keyed(relationship, 'id'),\n entryOrder: obj({ nextPos: dec, heads: set(str) }),\n groups: keyed(group, 'id'),\n profile: obj({ body: json, revision: dec }),\n effects: rec(obj({ ack: nullable(storedAck), expiresAt: millis })),\n outbox: rec(outboxItem),\n duties: keyed(duty, 'id'),\n rotations: keyed(obj({\n id: str, from: dec, to: dec, step: lit('register', 'log', 'duties'), startedAt: millis,\n entry: json, overHead: logHead, awaitHead: rec(nullable(str)),\n }), 'id'),\n prompts: keyed(obj({ id: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), openedAt: millis }, { contactId: str, groupId: str, expiresAt: millis }), 'id'),\n acts: keyed(obj({ actId: str, inputHash: str, commitSeq: dec, outboundDigests: arr(str), events: arr(event), at: millis }), 'actId'),\n encounter: obj({\n challenges: keyed(obj({ value: str, tCh: millis, label: str, card: anyObj }), 'value'),\n records: keyed(enactmentRecord, 'own'),\n introductions: keyed(introAct, 'key'),\n offers: keyed(obj({ id: str, mediatorContactId: str, pin: str, target: str, at: millis }, { label: str }), 'id'),\n designators: rec(str),\n declarations: rec(obj({ issuer: str, role: str, revision: dec, constants: rec(str), at: millis })),\n }),\n joining: obj({\n preludes: rec(obj({ group: str, inviter: str, contactId: str, rkid: str, memberLabel: str, at: millis })),\n invites: keyed(obj({\n credDigest: str, group: str, name: str, contactId: str, rkid: str, memberLabel: str, invite: anyObj, promptId: str, validUntil: millis,\n status: lit('open', 'accepted', 'declined', 'joined'), at: millis,\n }, { acceptDigest: str }), 'credDigest'),\n }),\n})\n\n/** Structural validators per codec version; every readable codec has one. */\nexport const VALIDATORS: Readonly<Record<number, StateValidator>> = Object.freeze({\n 1: (raw: unknown) => codec1(raw, '$'),\n})\n\n// ── the codec ──────────────────────────────────────────────────────────\n\n/** Canonical JSON text of a JSON-pure value, or not-json. */\nconst canonical = (x: unknown): string => {\n try { return jcs(x) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n}\n\nconst validatorOf = (chain: CodecChain, c: number): StateValidator => {\n const v = chain.validators[c]\n if (!v) throw new StateCodecError('codec-unknown', `no validator for codec ${c}`)\n return v\n}\n\n/**\n * Decode under an explicit chain: JSON purity, codec gate, then\n * validate(c) → migrate(c) → validate(c+1) … up to chain.codec. Returns\n * an independent copy. decodeState is this function over the library's\n * own chain; tests drive it with fake chains.\n */\nexport function decodeChain (raw: unknown, chain: CodecChain): unknown {\n let x = raw\n if (typeof raw === 'string') {\n try { x = JSON.parse(raw) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n }\n let s = JSON.parse(canonical(x)) as unknown\n if (!isObj(s)) fail('$', 'object expected')\n const at = (s as { codec?: unknown }).codec\n if (!Number.isSafeInteger(at) || (at as number) < 0) throw new StateCodecError('codec-unknown', 'codec must be a non-negative integer')\n if ((at as number) > chain.codec) throw new StateCodecError('codec-newer', `codec ${at} is newer than ${chain.codec}`)\n validatorOf(chain, at as number)(s)\n for (let c = at as number; c < chain.codec; c++) {\n const up = chain.migrations[c]\n if (!up) throw new StateCodecError('codec-unknown', `no migration from codec ${c}`)\n s = JSON.parse(canonical(up(JSON.parse(canonical(s)))))\n if (!isObj(s) || s.codec !== c + 1) fail('$.codec', `migration ${c} must produce codec ${c + 1}`)\n validatorOf(chain, c + 1)(s)\n }\n return s\n}\n\nconst LIBRARY_CHAIN: CodecChain = { codec: CODEC, migrations: MIGRATIONS, validators: VALIDATORS }\n\n/**\n * Load a stored state: a JSON string or an already parsed value. Returns\n * an independent copy at the current codec, or throws StateCodecError.\n */\nexport function decodeState (raw: unknown): HolderState {\n return decodeChain(raw, LIBRARY_CHAIN) as HolderState\n}\n\n/** Serialize a state for storage: canonical JSON, validated first. */\nexport function encodeState (state: HolderState): string {\n const text = canonical(state)\n validatorOf(LIBRARY_CHAIN, CODEC)(JSON.parse(text))\n return text\n}\n\n/** Deterministic equality of two states (their JCS forms). */\nexport const sameState = (a: HolderState, b: HolderState): boolean => jcs(a) === jcs(b)\n"]}
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,sEAAsE;AACtE,2EAA2E;AAC3E,uEAAuE;AACvE,iEAAiE;AACjE,sEAAsE;AACtE,sCAAsC;AACtC,EAAE;AACF,0DAA0D;AAC1D,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,qEAAqE;AACrE,4EAA4E;AAC5E,2EAA2E;AAC3E,mEAAmE;AACnE,yEAAyE;AACzE,kBAAkB;AAClB,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAI/B,qCAAqC;AACrC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;AAEtB;;;+EAG+E;AAC/E,SAAS,QAAQ,CAAE,CAAM;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAA8B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACzI,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAoC,CAAC,EAAE,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG;gBAC1G,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;QAC5G,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkD,MAAM,CAAC,MAAM,CAAC;IACrF,CAAC,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACd,GAAG,CAAC;QACJ,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxF,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;KACjF,CAAC;CACH,CAAC,CAAA;AAeF,+EAA+E;AAC/E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAqB;IAClC,oDAAoD;IAC3C,IAAI,CAAS;IACtB,YAAa,IAAyB,EAAE,OAAe,EAAE,IAAa;QACpE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;QACpF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAC1C,CAAC;CACF;AAKD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,GAAW,EAAS,EAAE,GAAG,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC,CAAA;AACpG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEpH,MAAM,GAAG,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ;IAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA,CAAC,CAAC,CAAA;AAClF,MAAM,IAAI,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,SAAS;IAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA,CAAC,CAAC,CAAA;AACrF,MAAM,IAAI,GAAM,GAAG,EAAE,GAAE,CAAC,CAAA,CAAqC,wCAAwC;AACrG,MAAM,GAAG,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAA,CAAC,CAAC,CAAA;AACzI,MAAM,MAAM,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,4CAA4C,CAAC,CAAA,CAAC,CAAC,CAAA;AACxI,MAAM,OAAO,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAA,CAAC,CAAC,CAAA;AAC5H,MAAM,QAAQ,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAA,CAAC,CAAC,CAAA;AACzH,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA,CAAC,CAAC,CAAA;AAC5J,MAAM,QAAQ,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAA;AACnE,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAC/C;IAAC,CAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AACD,4CAA4C;AAC5C,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,IAAI,IAAI,GAAG,CAAE,CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAM,CAAe,CAAC,MAAM;QAAE,IAAI,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;AACrH,CAAC,CAAA;AACD,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC;QAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtF,CAAC,CAAA;AACD,sEAAsE;AACtE,MAAM,GAAG,GAAG,CAAC,GAAsB,EAAE,MAAyB,EAAE,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC/E,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACtD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,SAAQ;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;QAC9D,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC,CAAA;AACD,6DAA6D;AAC7D,mCAAmC;AACnC,MAAM,MAAM,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA,CAAC,CAAC,CAAA;AACzE,MAAM,KAAK,GAAG,CAAC,CAAI,EAAE,OAAe,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACnD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4C,CAAC;QAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAA;AAC7J,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAA;AAC1F,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;AAClG,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;AAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtD,MAAM,WAAW,GAAG,CAAC,IAAO,EAAK,EAAE,CAAC,GAAG,CAAC;IACtC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;IACtG,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;CAC7F,CAAC,CAAA;AACF,uDAAuD;AACvD,MAAM,MAAM,GAAG,CAAC,IAAO,EAAK,EAAE;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACX,MAAM,CAAC,GAAG,CAAmD,CAAA;QAC7D,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;IACzH,CAAC,CAAA;AACH,CAAC,CAAA;AACD,MAAM,KAAK,GAAG,CAAC,QAAW,EAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAChI,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAChD,MAAM,aAAa,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5G,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACtG,MAAM,aAAa,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAChG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AACD,MAAM,OAAO,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/F,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,uBAAuB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;IAChG,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;IAC1C,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnG,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;IACnL,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACrE,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC1D,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,GAAG,CAAC;IACvB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;IAC3F,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,GAAG,CAAC;IACtG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClH,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC;CACzD,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,GAAG,CAAC;IAClB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAC5G,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IACzB,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACxH,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC;CAC5B,CAAC,CAAA;AAEF,+EAA+E;AAC/E,MAAM,YAAY,GAAG,CAAC,KAAa,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAClD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClF,KAAK,oBAAoB,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACtJ,KAAK,UAAU,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,sBAAsB;YACvD,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9K,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,2BAA2B,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACvM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAA;IACvD,CAAC;AACH,CAAC,CAAA;AAED;2EAC2E;AAC3E,MAAM,YAAY,GAAG,CAAC,KAAa,EAAK,EAAE;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC;QAChB,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACpG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;IACxF,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACX,MAAM,CAAC,GAAG,CAAwE,CAAA;QAClF,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY;YAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;IACnH,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC7B,yEAAyE;AACzE,MAAM,SAAS,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5B,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtK,MAAM,CAAC,GAAG,CAAwE,CAAA;IAClF,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY;QAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,YAAY,GAAuD;IACvE,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IACvI,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE;IACvH,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE;IAC7G,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAC1K,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IACnK,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAClI,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE;CACtF,CAAA;AAED,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAO,EAAkB,EAAE,CACrD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE5F,MAAM,IAAI,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;IACtE,IAAI,WAAW,CAAC,CAAoB,CAAC;QAAE,YAAY,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,YAAY,GAAqE;IACrF,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrC,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IAC7D,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7D,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IACvE,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAClF,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnC,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACtC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAClC,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;IACpG,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IACvI,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChI,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACjD,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACvC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC/B,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACjC,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5D,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACrE,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC1E,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACrD,mBAAmB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvD,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;IAClG,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7E,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACnC,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACjD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAChD,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtD,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC3D,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;CACvD,CAAA;AACD,gEAAgE;AAChE,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAC5G,MAAM,OAAO,GAAG,CAAC,KAAa,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAI,CAA6B,CAAC,IAAI,CAAA;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;IAC7I,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAoB,CAAC,CAAA;IAC1D,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxF,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAC/H,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9J,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAC1F,MAAM,UAAU,GAAG,GAAG,CAAC;IACrB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI;IACvF,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;IAC7G,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9D,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAA;AACtF;8EAC8E;AAC9E,MAAM,KAAK,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACxB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAChB,MAAM,CAAC,GAAG,CAAoE,CAAA;IAC9E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAA;IACpG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;AAC/D,MAAM,eAAe,GAAG,GAAG,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAC9H,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9F,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI;CACxH,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAG,GAAG,CAAC;IACnB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;IAChE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;IACpG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;IAC5G,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC/G,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;IACzH,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;CACpG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;AAErB,MAAM,OAAO,GAAsB;IACjC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACb,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,GAAG,CAAC;QACZ,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC;QACtC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAClH,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC;IACxC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC3C,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;QACnB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM;QACtF,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC9D,CAAC,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;IAC7K,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;IACzI,SAAS,EAAE,GAAG,CAAC;QACb,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;QACtF,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;QACtC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;QACrC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;QAChH,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;QACrB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;KACnG,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzG,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC;YACjB,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;YACtI,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM;SAClE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC;KACzC,CAAC;CACH,CAAA;AACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;AAE3B,8BAA8B;AAC9B,MAAM,SAAS,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACd,MAAM,CAAC,GAAG,CAAa,CAAA;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;AACxG,CAAC,CAAA;AAED;0DAC0D;AAC1D,MAAM,eAAe,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAClC,GAAG,CAAC;QACF,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;QAC3G,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM;KAClE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,CAAC,GAAG,CAA4C,CAAA;IACtD,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAA;AACjH,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,GAAG,CAAC;IACjB,GAAG,OAAO;IACV,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACb,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;IACzI,OAAO,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzG,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,YAAY,CAAC;QAC7C,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,SAAS;KACpB,CAAC;IACF,QAAQ,EAAE,GAAG,CAAC;QACZ,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChE,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;KAChH,CAAC;CACH,CAAC,CAAA;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAA6C,MAAM,CAAC,MAAM,CAAC;IAChF,CAAC,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,CAAC,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;CACtC,CAAC,CAAA;AAEF,0EAA0E;AAE1E,6DAA6D;AAC7D,MAAM,SAAS,GAAG,CAAC,CAAU,EAAU,EAAE;IACvC,IAAI,CAAC;QAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;IAAC,CAAC;AACjG,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,CAAS,EAAkB,EAAE;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAA;IACjF,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAE,GAAY,EAAE,KAAiB;IAC1D,IAAI,CAAC,GAAG,GAAG,CAAA;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;QAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAY,CAAA;IAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IAC3C,MAAM,EAAE,GAAI,CAAyB,CAAC,KAAK,CAAA;IAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAK,EAAa,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,sCAAsC,CAAC,CAAA;IACvI,IAAK,EAAa,GAAG,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,eAAe,CAAC,aAAa,EAAE,SAAS,EAAE,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IACtH,WAAW,CAAC,KAAK,EAAE,EAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,EAAY,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAA;QACnF,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjG,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,aAAa,GAAe,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AAElG;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAE,GAAY;IACvC,OAAO,WAAW,CAAC,GAAG,EAAE,aAAa,CAAgB,CAAA;AACvD,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAE,KAAkB;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7B,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAc,EAAE,CAAc,EAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA","sourcesContent":["// codec — the HolderState storage format (lib Stage 2, note §2.2).\n//\n// decodeState is the one way in: JSON purity, then the codec version, then\n// the pure migration chain vN → vN+1, each step running between two states\n// validated by their codec's own validator (hand-written; no schema engine\n// in the published library). The validators check shape and a few local\n// consistency rules; referential and domain invariants (active heads,\n// register monotony, matching revisions) are the engine's (invariants.ts).\n// An unknown or higher codec is refused, never read best-effort. Store\n// adapters keep bytes or JSON and never migrate themselves. Wire\n// versions and the codec are independent; a migration never re-issues\n// stored documents, outbound or acks.\n//\n// Codec 1 is the format of 0.4.0: its golden fixtures are\n// lib/test/fixtures/state-v1*.json (runs of lib 0.4.0, frozen), decoded and\n// re-encoded byte-identically and migrated by test/codec-fixture.test.mjs.\n// Codec 2 is the format of 0.5.0 (Message Tasks 0.1, Membership 0.20): its\n// fixtures are lib/test/fixtures/state-v2*.json (deterministic runs,\n// test/fixtures/gen-state-v2.mjs, reproduced in npm test). The rule: codecs\n// 1 and 2 are read, 1 migrated to 2; a newer codec is codec-newer; a codec\n// without a validator is codec-unknown. Every later codec adds its\n// validator, a migration from the one before, and its own fixture with a\n// migration test.\nimport { jcs } from './core.js'\nimport type { Duty, HolderState, KnownDuty } from './state.js'\nimport type { HolderEventType } from './events.js'\n\n/** The codec this library writes. */\nexport const CODEC = 2\n\n/** The tuples of a codec-1 state on which a document of the counterpart\n * was accepted, as far as the state shows it (Message Tasks 5.1): a probe,\n * a star, a group star, a continuity or anchor mapping, or a profile\n * received; or the counterparty's step credential of its enactment record. */\nfunction readyOf1 (s: any): string[] {\n const out = new Set<string>()\n const inRec = new Set<string>(Object.values(s.encounter.records as Record<string, any>).filter((r) => r.in !== null).map((r) => r.label))\n for (const r of Object.values(s.relationships as Record<string, any>)) {\n for (const t of r.tuples) {\n if (t.probeIn.hwm !== '0' || t.starIn.hwm !== '0' || t.groupStarIn.hwm !== '0' || t.continuityIn.rev !== '0' ||\n t.mappingIn.rev !== '0' || t.profileIn.rev !== '0' || inRec.has(t.ownPairLabel)) out.add(t.ownPairLabel)\n }\n }\n return [...out].sort()\n}\n\n/**\n * Migrations keyed by the codec they read: MIGRATIONS[n] maps a valid\n * codec-n state to a codec-(n+1) state. Pure, never async, never keys.\n *\n * 1 → 2 (lib 0.5.0, Message Tasks 0.1, Membership 0.20): the message\n * state starts empty (no block, no rate, no record, no inbox) but for the\n * ready tuples, read from what the state shows a counterpart's document\n * did (readyOf1); every invitation a codec-1 holder received was\n * surfaced, so their credential digests seed the permanent record of\n * RLTP-MT-3130; the register of declined invitations starts empty (codec 1\n * knew no block).\n */\nexport const MIGRATIONS: Readonly<Record<number, (state: any) => any>> = Object.freeze({\n 1: (s: any) => ({\n ...s,\n codec: 2,\n joining: { ...s.joining, surfaced: Object.keys(s.joining.invites).sort(), declined: [] },\n messages: { blocked: [], rates: {}, ready: readyOf1(s), records: {}, inbox: {} },\n }),\n})\n\n/** A codec's structural validator: throws StateCodecError('shape') or returns. */\nexport type StateValidator = (raw: unknown) => void\n\n/** One codec chain: the target codec, its migrations and a validator for\n * every codec from the oldest readable one up to the target. */\nexport interface CodecChain {\n codec: number\n migrations: Readonly<Record<number, (state: any) => any>>\n validators: Readonly<Record<number, StateValidator>>\n}\n\nexport type StateCodecErrorCode = 'not-json' | 'codec-unknown' | 'codec-newer' | 'shape'\n\n/** A stored state the library will not load (or a state it will not write). */\nexport class StateCodecError extends Error {\n readonly code: StateCodecErrorCode\n /** JSON path of the offending value, for 'shape' */\n readonly path?: string\n constructor (code: StateCodecErrorCode, message: string, path?: string) {\n super(path === undefined ? `${code}: ${message}` : `${code} at ${path}: ${message}`)\n this.name = 'StateCodecError'\n this.code = code\n if (path !== undefined) this.path = path\n }\n}\n\n// ── the validator kit ──────────────────────────────────────────────────\ntype V = (x: unknown, path: string) => void\n\nconst fail = (path: string, msg: string): never => { throw new StateCodecError('shape', msg, path) }\nconst isObj = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x)\n\nconst str: V = (x, p) => { if (typeof x !== 'string') fail(p, 'string expected') }\nconst bool: V = (x, p) => { if (typeof x !== 'boolean') fail(p, 'boolean expected') }\nconst json: V = () => {} // JSON purity is checked once, up front\nconst dec: V = (x, p) => { if (typeof x !== 'string' || !/^(0|[1-9][0-9]{0,17})$/.test(x)) fail(p, 'canonical decimal string expected') }\nconst millis: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer milliseconds expected') }\nconst natural: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer expected') }\nconst positive: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 1) fail(p, 'positive integer expected') }\nconst lit = (...vals: unknown[]): V => (x, p) => { if (!vals.includes(x)) fail(p, 'one of ' + vals.map((v) => JSON.stringify(v)).join(', ') + ' expected') }\nconst nullable = (v: V): V => (x, p) => { if (x !== null) v(x, p) }\nconst arr = (v: V): V => (x, p) => {\n if (!Array.isArray(x)) fail(p, 'array expected')\n ;(x as unknown[]).forEach((e, i) => v(e, `${p}[${i}]`))\n}\n/** an array used as a set: no duplicates */\nconst set = (v: V): V => (x, p) => {\n arr(v)(x, p)\n if (new Set((x as unknown[]).map((e) => jcs(e))).size !== (x as unknown[]).length) fail(p, 'duplicate set element')\n}\nconst rec = (v: V): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n for (const [k, e] of Object.entries(x as Record<string, unknown>)) v(e, `${p}.${k}`)\n}\n/** a closed object: required fields, optional fields, nothing else */\nconst obj = (req: Record<string, V>, opt: Record<string, V> = {}): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const o = x as Record<string, unknown>\n for (const k of Object.keys(req)) {\n if (!Object.hasOwn(o, k)) fail(`${p}.${k}`, 'missing')\n req[k](o[k], `${p}.${k}`)\n }\n for (const k of Object.keys(o)) {\n if (Object.hasOwn(req, k)) continue\n if (!Object.hasOwn(opt, k)) fail(`${p}.${k}`, 'unknown field')\n opt[k](o[k], `${p}.${k}`)\n }\n}\n/** a record whose values carry their own key in `idField` */\n/** a JSON object, contents open */\nconst anyObj: V = (x, p) => { if (!isObj(x)) fail(p, 'object expected') }\nconst keyed = (v: V, idField: string): V => (x, p) => {\n rec(v)(x, p)\n for (const [k, e] of Object.entries(x as Record<string, Record<string, unknown>>)) if (e[idField] !== k) fail(`${p}.${k}.${idField}`, 'must equal its key')\n}\n\n// ── the HolderState shape (state.ts) ───────────────────────────────────\nconst setting = lit('default', 'on', 'off')\nconst trustClass = lit('star', 'groupStar', 'anchorMapping', 'sealedGroupStar', 'profile')\nconst recipient = obj({ contactId: str, rkid: str, keyAgreement: str }, { anchor: str, via: str })\nconst envelope = obj({ rkid: str, epk: str, nonce: str, ciphertext: str })\nconst assembly = obj({ salt: dec, chunks: rec(json) })\nconst seqOutShape = (item: V): V => obj({\n lastSalt: dec, exhausted: bool, hwm: dec, snapshot: nullable(arr(item)), snapshotDigest: nullable(str),\n inflight: rec(obj({ view: arr(item), viewDigest: str, digests: arr(str), acked: arr(str) })),\n})\n/** the snapshot and its digest are present together */\nconst seqOut = (item: V): V => {\n const shape = seqOutShape(item)\n return (x, p) => {\n shape(x, p)\n const o = x as { snapshot: unknown, snapshotDigest: unknown }\n if ((o.snapshot === null) !== (o.snapshotDigest === null)) fail(`${p}.snapshotDigest`, 'null exactly when snapshot is')\n }\n}\nconst seqIn = (accepted: V): V => obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly), accepted: nullable(accepted) })\nconst starPair = obj({ member: str, head: str })\nconst groupStarItem: V = (x, p) => {\n if (isObj(x) && x.mode === 'sealed') return obj({ group: str, mode: str, member: str, memberOp: str })(x, p)\n obj({ group: str, mode: lit('digest') })(x, p)\n}\nconst starOut = seqOut(starPair)\nconst starIn = seqIn(obj({ salt: dec, blinded: arr(str), matches: arr(str) }))\nconst groupStarOut = seqOut(groupStarItem)\nconst groupStarIn = seqIn(obj({ salt: dec, entries: arr(obj({ d: str, c: str })), groups: arr(str) }))\nconst continuityDue: V = (x, p) => {\n if (isObj(x) && x.kind === 'choice') return obj({ kind: str, prior: str, alts: arr(str) })(x, p)\n obj({ kind: lit('report', 'align'), prior: str })(x, p)\n}\nconst logHead: V = (x, p) => {\n if (isObj(x) && Object.hasOwn(x, 'empty')) return obj({ genesis: str, empty: lit(true) })(x, p)\n obj({ genesis: str, entryId: str, gen: positive, next: str, commit: str })(x, p)\n}\n\nconst tuple = obj({\n ownPairLabel: str, counterpartAnchor: str, counterpartKeyAgreement: str, rkid: str, entryId: str,\n priorCandidates: arr(obj({ ownPairLabel: str, counterpartAnchor: str }, { replaces: arr(str) })),\n starOut, starIn, groupStarOut, groupStarIn,\n probeOut: obj({ seq: dec, inflight: rec(obj({ digests: arr(str), acked: arr(str) })), done: bool }),\n probeIn: obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly) }),\n continuityOut: obj({ rev: dec, body: json, proof: json, sent: arr(str), align: bool, chosen: nullable(str), reported: nullable(str), aligned: bool, due: nullable(continuityDue) }),\n continuityIn: obj({ rev: dec, body: json, recordPrior: nullable(str) }),\n mappingOut: obj({ rev: dec, body: json, underAnchor: nullable(str) }),\n mappingIn: obj({ rev: dec, body: json, self: nullable(str), card: json }),\n profileOut: obj({ rev: dec }),\n profileIn: obj({ rev: dec, body: json, verifiedSeq: dec }),\n deactivated: bool,\n})\n\nconst relationship = obj({\n id: str, contactId: str, tuples: arr(tuple), activeHead: str, earliestAnchor: nullable(str),\n links: arr(obj({ prev: str, next: str })), bindings: rec(set(str)), heldCounterpartHead: nullable(str),\n memory: rec(json), provenance: obj({ kind: lit('ceremony', 'introduced'), at: millis }, { via: str, viaPin: str }),\n chainedInto: nullable(str), firstVerified: nullable(dec),\n})\n\nconst contact = obj({\n id: str, pos: nullable(dec), status: lit('none', 'admitted', 'pending'), aliases: set(str), relIds: set(str),\n anchorHead: nullable(str),\n settings: obj({ star: setting, groupStar: setting, anchorMapping: setting, sealedGroupStar: setting, profile: setting }),\n groupSettings: rec(setting),\n})\n\n/** an outbox step of codec n: codec 2 added the failure reason task-expired */\nconst outboxStepOf = (codec: number): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const s = x as Record<string, unknown>\n switch (s.status) {\n case 'submitted': return obj({ status: str, at: millis, attempt: positive })(x, p)\n case 'awaiting-transport': return obj({ status: str, at: millis, reason: lit('offline', 'transport-unreachable', 'carrier-refused-retriable') })(x, p)\n case 'accepted': return obj({ status: str, at: millis })(x, p)\n case 'delivered': return obj({ status: str, at: millis, late: bool })(x, p)\n case 'failed': return s.reason === 'rejected-by-receiver'\n ? obj({ status: str, at: millis, reason: str, code: lit('malformedRequest', 'unsupportedType', 'proofRequired', 'proofInvalid', 'wrongRecipient', 'identityMismatch') })(x, p)\n : obj({ status: str, at: millis, reason: codec < 2 ? lit('unroutable', 'oversize', 'expired-by-adapter-policy') : lit('unroutable', 'oversize', 'expired-by-adapter-policy', 'task-expired') })(x, p)\n default: fail(`${p}.status`, 'unknown outbox status')\n }\n}\n\n/** an outbox item of codec n: codec 2 added expiresAt (the sender lifetime);\n * the envelope is sealed to the counterpart key, never to the own rkid */\nconst outboxItemOf = (codec: number): V => {\n const shape = obj({\n type: str, threadId: str, recipient, envelope, attempt: positive, history: arr(outboxStepOf(codec)),\n }, codec < 2 ? { nextAttemptAt: millis } : { nextAttemptAt: millis, expiresAt: millis })\n return (x, p) => {\n shape(x, p)\n const o = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (o.envelope.rkid !== o.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n }\n}\n\nconst DUE = { dueAt: millis }\n/** a retained ack: sealed to the counterpart key, like an outbox item */\nconst storedAck: V = (x, p) => {\n obj({ digest: str, envelope, threadId: str, recipient, at: millis, attempt: positive, sent: bool }, { nextAttemptAt: millis, sentBy: lit('report', 'horizon') })(x, p)\n const a = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (a.envelope.rkid !== a.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n}\n\nconst KNOWN_DUTIES: Record<KnownDuty['kind'], { v: number, shape: V }> = {\n 'reissue-mapping': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, awaitHead: nullable(str) }, DUE) },\n 'class-on': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, cls: trustClass }, DUE) },\n profile: { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, rev: dec }, DUE) },\n continuity: { v: 1, shape: obj({ kind: str, v: positive, id: str, relId: str, tuple: str, step: lit('probe', 'mapping') }, { ...DUE, attempt: natural, lastAt: millis }) },\n merge: { v: 1, shape: obj({ kind: str, v: positive, id: str, entryIds: set(str), relId: str, witness: obj({ heads: rec(str), superseded: rec(set(str)) }) }, DUE) },\n rotation: { v: 1, shape: obj({ kind: str, v: positive, id: str, rotationId: str }, { ...DUE, attempt: natural, lastAt: millis }) },\n 'intro-ack': { v: 1, shape: obj({ kind: str, v: positive, id: str, act: str }, DUE) },\n}\n\n/** Is this a duty kind and version this library handles? Unknown ones are kept as they are. */\nexport const isKnownDuty = (d: Duty): d is KnownDuty =>\n Object.hasOwn(KNOWN_DUTIES, d.kind) && KNOWN_DUTIES[d.kind as KnownDuty['kind']].v === d.v\n\nconst duty: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const d = x as Record<string, unknown>\n str(d.kind, `${p}.kind`); natural(d.v, `${p}.v`); str(d.id, `${p}.id`)\n if (isKnownDuty(d as unknown as Duty)) KNOWN_DUTIES[d.kind as KnownDuty['kind']].shape(x, p)\n}\n\nconst EVENT_FIELDS: Record<HolderEventType, [Record<string, V>, Record<string, V>?]> = {\n 'contact.added': [{ contactId: str }],\n 'contact.verified': [{ contactId: str, relationshipId: str }],\n 'contact.chained': [{ contactId: str, from: str, into: str }],\n 'contact.merged': [{ contactId: str, merged: arr(str) }],\n 'contact.split': [{ contactId: str, leaver: str, relationshipId: str }],\n 'contact.departed': [{ contactId: str, relationshipIds: arr(str), removed: bool }],\n 'trust.given': [{ contactId: str }],\n 'trust.received': [{ contactId: str }],\n 'trust.paused': [{ contactId: str, paused: bool }],\n 'group.joined': [{ groupId: str }],\n 'prompt.opened': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction') }],\n 'prompt.decided': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), choice: lit('accept', 'decline') }],\n 'delivery.status': [{ digest: str, threadId: str, status: lit('submitted', 'accepted', 'delivered', 'failed') }, { late: bool }],\n 'profile.updated': [{ contactId: nullable(str) }],\n 'anchor.rotated': [{ generation: dec }],\n 'device.added': [{ name: str }],\n 'device.revoked': [{ name: str }],\n 'duty.unsupported': [{ dutyId: str, kind: str, v: natural }],\n 'star.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'groupStar.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'encounter.shown': [{ challenge: str, card: anyObj }],\n 'encounter.scanned': [{ contactId: str, card: anyObj }],\n 'encounter.recorded': [{ contactId: str, relationshipId: str, role: lit('scanner', 'displayer') }],\n 'encounter.accepted': [{ contactId: str, relationshipId: str, mutual: bool }],\n 'group.founded': [{ groupId: str }],\n 'group.admitted': [{ groupId: str, member: str }],\n 'group.vouched': [{ groupId: str, member: str }],\n 'contact.blocked': [{ contactId: str, blocked: bool }],\n 'message.sent': [{ contactId: str, mid: str, digest: str }],\n 'message.received': [{ contactId: str, inboxId: str }],\n}\n/** the event types codec 2 added: codec 1 does not know them */\nconst EVENTS_SINCE_2: ReadonlySet<string> = new Set(['contact.blocked', 'message.sent', 'message.received'])\nconst eventOf = (codec: number): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const t = (x as Record<string, unknown>).type\n if (typeof t !== 'string' || !Object.hasOwn(EVENT_FIELDS, t) || (codec < 2 && EVENTS_SINCE_2.has(t))) fail(`${p}.type`, 'unknown event type')\n const [req, opt = {}] = EVENT_FIELDS[t as HolderEventType]\n obj({ type: str, eventId: str, commitSeq: dec, ...req }, { actId: str, ...opt })(x, p)\n}\n\nconst rosterEntry = obj({ anchor: str, op: str, keyAgreement: str, addedAt: millis }, { name: str, contactId: str, rkid: str })\nconst openInvitation = obj({ invitee: str, keyAgreement: str, contactId: str, rkid: str, threadId: str, credDigest: str, invite: anyObj, validUntil: millis })\nconst evidence = obj({ invite: anyObj, accept: anyObj, vouches: arr(anyObj), at: millis })\nconst groupShape = obj({\n id: str, name: str, memberLabel: str, rules: obj({ vouchThreshold: dec }), listed: bool,\n roster: keyed(rosterEntry, 'anchor'), invitations: keyed(openInvitation, 'threadId'), evidence: rec(evidence),\n preludes: rec(obj({ contactId: str, rkid: str, at: millis })),\n}, { did: str, genesis: anyObj, memberAnchor: str, memberOp: str, acceptDigest: str })\n/** a listed group carries its member anchor and memberOp: the group star\n * seals them (Trust 5400, 5430), and their absence is no filler condition */\nconst group: V = (x, p) => {\n groupShape(x, p)\n const g = x as { listed: boolean, memberAnchor?: unknown, memberOp?: unknown }\n if (g.listed && g.memberAnchor === undefined) fail(`${p}.memberAnchor`, 'missing on a listed group')\n if (g.listed && g.memberOp === undefined) fail(`${p}.memberOp`, 'missing on a listed group')\n}\n\nconst heldCredential = obj({ digest: str, credential: anyObj })\nconst enactmentRecord = obj({\n ceremony: str, own: str, tCh: millis, peer: str, counterpart: str, card: anyObj, bind: str, at: millis, label: str, relId: str,\n role: lit('scanner', 'displayer'), out: nullable(heldCredential), in: nullable(heldCredential),\n thread: nullable(str), bundleDigest: nullable(str), threads: rec(str), sentCard: nullable(anyObj), counterPending: bool,\n})\n\nconst introAct = obj({\n key: str, act: str, role: lit('requester', 'mediator', 'target'),\n status: lit('sent', 'acked', 'completed', 'failed', 'received', 'forwarded', 'consented', 'refused'),\n issuedAt: millis, request: anyObj, requestCard: anyObj, reply: nullable(anyObj), replyCard: nullable(anyObj),\n pins: obj({}, { requester: str, target: str, mediator: str }), threads: obj({ request: str }, { forward: str }),\n at: millis, ackDelayMs: natural, ownLabel: nullable(str), ack: nullable(anyObj), replyForwarded: bool, vouchersSent: bool,\n pendingVoucher: nullable(anyObj), voucher: nullable(anyObj), vouched: bool, promptId: nullable(str),\n}, { peerName: str })\n\nconst fields1: Record<string, V> = {\n codec: lit(1),\n commitSeq: dec,\n lastWhen: millis,\n register: obj({\n labels: set(str), pairNonces: rec(str),\n carriers: rec(arr(obj({ nonce: str, generation: dec }))),\n devices: obj({ names: set(str), revoked: set(str) }),\n community: nullable(obj({ genesis: str, head: dec })),\n lineage: arr(anyObj),\n }),\n addresses: obj({ keys: rec(obj({ label: str, lastShown: millis }, { retiredAt: millis })), tombstones: set(str) }),\n contacts: keyed(contact, 'id'),\n relationships: keyed(relationship, 'id'),\n entryOrder: obj({ nextPos: dec, heads: set(str) }),\n groups: keyed(group, 'id'),\n profile: obj({ body: json, revision: dec }),\n effects: rec(obj({ ack: nullable(storedAck), expiresAt: millis })),\n outbox: rec(outboxItemOf(1)),\n duties: keyed(duty, 'id'),\n rotations: keyed(obj({\n id: str, from: dec, to: dec, step: lit('register', 'log', 'duties'), startedAt: millis,\n entry: json, overHead: logHead, awaitHead: rec(nullable(str)),\n }), 'id'),\n prompts: keyed(obj({ id: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), openedAt: millis }, { contactId: str, groupId: str, expiresAt: millis }), 'id'),\n acts: keyed(obj({ actId: str, inputHash: str, commitSeq: dec, outboundDigests: arr(str), events: arr(eventOf(1)), at: millis }), 'actId'),\n encounter: obj({\n challenges: keyed(obj({ value: str, tCh: millis, label: str, card: anyObj }), 'value'),\n records: keyed(enactmentRecord, 'own'),\n introductions: keyed(introAct, 'key'),\n offers: keyed(obj({ id: str, mediatorContactId: str, pin: str, target: str, at: millis }, { label: str }), 'id'),\n designators: rec(str),\n declarations: rec(obj({ issuer: str, role: str, revision: dec, constants: rec(str), at: millis })),\n }),\n joining: obj({\n preludes: rec(obj({ group: str, inviter: str, contactId: str, rkid: str, memberLabel: str, at: millis })),\n invites: keyed(obj({\n credDigest: str, group: str, name: str, contactId: str, rkid: str, memberLabel: str, invite: anyObj, promptId: str, validUntil: millis,\n status: lit('open', 'accepted', 'declined', 'joined'), at: millis,\n }, { acceptDigest: str }), 'credDigest'),\n }),\n}\nconst codec1 = obj(fields1)\n\n/** a sorted set of strings */\nconst sortedSet: V = (x, p) => {\n set(str)(x, p)\n const a = x as string[]\n for (let i = 1; i < a.length; i++) if (!(a[i - 1] < a[i])) fail(`${p}[${i}]`, 'a sorted set expected')\n}\n\n/** an invitation received: attributed to a relationship (contactId and\n * rkid together) or to none (Membership RLTP-MT-3100) */\nconst receivedInvite2: V = (x, p) => {\n obj({\n credDigest: str, group: str, name: str, memberLabel: str, invite: anyObj, promptId: str, validUntil: millis,\n status: lit('open', 'accepted', 'declined', 'joined'), at: millis,\n }, { acceptDigest: str, contactId: str, rkid: str })(x, p)\n const i = x as { contactId?: unknown, rkid?: unknown }\n if ((i.contactId === undefined) !== (i.rkid === undefined)) fail(`${p}.rkid`, 'present exactly with contactId')\n}\n\nconst codec2 = obj({\n ...fields1,\n codec: lit(2),\n outbox: rec(outboxItemOf(2)),\n acts: keyed(obj({ actId: str, inputHash: str, commitSeq: dec, outboundDigests: arr(str), events: arr(eventOf(2)), at: millis }), 'actId'),\n joining: obj({\n preludes: rec(obj({ group: str, inviter: str, contactId: str, rkid: str, memberLabel: str, at: millis })),\n invites: keyed(receivedInvite2, 'credDigest'),\n surfaced: sortedSet,\n declined: sortedSet,\n }),\n messages: obj({\n blocked: sortedSet,\n rates: rec(obj({ invites: arr(millis), messages: arr(millis) })),\n ready: sortedSet,\n records: rec(rec(obj({ bodyDigest: str, sentAt: millis }))),\n inbox: keyed(obj({ id: str, tuple: str, mid: str, body: anyObj, receivedAt: millis, displayAt: millis }), 'id'),\n }),\n})\n\n/** Structural validators per codec version; every readable codec has one. */\nexport const VALIDATORS: Readonly<Record<number, StateValidator>> = Object.freeze({\n 1: (raw: unknown) => codec1(raw, '$'),\n 2: (raw: unknown) => codec2(raw, '$'),\n})\n\n// ── the codec ──────────────────────────────────────────────────────────\n\n/** Canonical JSON text of a JSON-pure value, or not-json. */\nconst canonical = (x: unknown): string => {\n try { return jcs(x) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n}\n\nconst validatorOf = (chain: CodecChain, c: number): StateValidator => {\n const v = chain.validators[c]\n if (!v) throw new StateCodecError('codec-unknown', `no validator for codec ${c}`)\n return v\n}\n\n/**\n * Decode under an explicit chain: JSON purity, codec gate, then\n * validate(c) → migrate(c) → validate(c+1) … up to chain.codec. Returns\n * an independent copy. decodeState is this function over the library's\n * own chain; tests drive it with fake chains.\n */\nexport function decodeChain (raw: unknown, chain: CodecChain): unknown {\n let x = raw\n if (typeof raw === 'string') {\n try { x = JSON.parse(raw) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n }\n let s = JSON.parse(canonical(x)) as unknown\n if (!isObj(s)) fail('$', 'object expected')\n const at = (s as { codec?: unknown }).codec\n if (!Number.isSafeInteger(at) || (at as number) < 0) throw new StateCodecError('codec-unknown', 'codec must be a non-negative integer')\n if ((at as number) > chain.codec) throw new StateCodecError('codec-newer', `codec ${at} is newer than ${chain.codec}`)\n validatorOf(chain, at as number)(s)\n for (let c = at as number; c < chain.codec; c++) {\n const up = chain.migrations[c]\n if (!up) throw new StateCodecError('codec-unknown', `no migration from codec ${c}`)\n s = JSON.parse(canonical(up(JSON.parse(canonical(s)))))\n if (!isObj(s) || s.codec !== c + 1) fail('$.codec', `migration ${c} must produce codec ${c + 1}`)\n validatorOf(chain, c + 1)(s)\n }\n return s\n}\n\nconst LIBRARY_CHAIN: CodecChain = { codec: CODEC, migrations: MIGRATIONS, validators: VALIDATORS }\n\n/**\n * Load a stored state: a JSON string or an already parsed value. Returns\n * an independent copy at the current codec, or throws StateCodecError.\n */\nexport function decodeState (raw: unknown): HolderState {\n return decodeChain(raw, LIBRARY_CHAIN) as HolderState\n}\n\n/** Serialize a state for storage: canonical JSON, validated first. */\nexport function encodeState (state: HolderState): string {\n const text = canonical(state)\n validatorOf(LIBRARY_CHAIN, CODEC)(JSON.parse(text))\n return text\n}\n\n/** Deterministic equality of two states (their JCS forms). */\nexport const sameState = (a: HolderState, b: HolderState): boolean => jcs(a) === jcs(b)\n"]}
package/dist/engine.d.ts CHANGED
@@ -9,8 +9,13 @@ export type { Arrival, Channel, ReceivedDocument, TaskDiscarded, TaskFailure, Ta
9
9
  type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
10
10
  /** An event as a module emits it; the engine adds eventId, commitSeq, actId. */
11
11
  export type EventDraft = DistributiveOmit<HolderEvent, 'eventId' | 'commitSeq' | 'actId'>;
12
- /** A document as a module issues it; the engine sets attempt 1 and files it in the outbox. */
13
- export type OutboundDraft = Omit<Outbound, 'attempt'>;
12
+ /** A document as a module issues it; the engine sets attempt 1 and files
13
+ * it in the outbox. `expiresAt`: the sender lifetime its type declares
14
+ * (Delivery RLTP-DEL-7020), after which resume moves it to
15
+ * failed(task-expired) and never hands it out again (6110, 6115). */
16
+ export type OutboundDraft = Omit<Outbound, 'attempt'> & {
17
+ expiresAt?: Millis;
18
+ };
14
19
  /** What a WebCrypto handle must offer; resolved at construction. The
15
20
  * default entropy also needs getRandomValues and randomUUID from it. */
16
21
  export type CryptoHandle = {
@@ -205,7 +210,7 @@ export interface HolderModule {
205
210
  /** own rkids the module still needs although no live tuple carries
206
211
  * them: tick does not tombstone them. Trusted as registered, like
207
212
  * ownRetries: no check that the module has any claim to the keys */
208
- keepKeys?: (state: Readonly<HolderState>) => Iterable<string>;
213
+ keepKeys?: (state: Readonly<HolderState>, when: Millis) => Iterable<string>;
209
214
  /** the module's own retention, run by tick after the engine's: pure and
210
215
  * synchronous, returning the same state object where nothing goes */
211
216
  retain?: (state: Readonly<HolderState>, when: Millis) => HolderState;
@@ -215,6 +220,13 @@ export interface HolderModule {
215
220
  /** at most one handler per prompt kind across all modules; collected by
216
221
  * createHolder for the prompts module (prompts.ts) */
217
222
  decisions?: Partial<Record<PromptKind, DecisionHandler>>;
223
+ /** run in the stage-9 transaction of every document disposed `unique`
224
+ * (through a task handler, after it; or a verified delivery-ack, after
225
+ * its ack handler), on the state it left: pure and
226
+ * synchronous, returning the same object where nothing changes; it must
227
+ * not write the effect cache (the readiness of a tuple, Message Tasks
228
+ * 5.1) */
229
+ accepted?: (state: Readonly<HolderState>, doc: ReceivedDocument, arrival: Arrival) => HolderState;
218
230
  }
219
231
  /** The ports of a holder (note §3); retry fields fall back to ENGINE_DEFAULTS. */
220
232
  export interface EnginePorts {
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/engine.js CHANGED
@@ -37,19 +37,26 @@
37
37
  // act whose apply returns the identical state object and nothing else
38
38
  // commits nothing only when lastWhen stays too. A human act always
39
39
  // commits, because its journal entry is the result. Refusals and
40
- // journal replays commit nothing, lastWhen included
40
+ // journal replays commit nothing, lastWhen included — but for a replay
41
+ // that finds one of its documents past its lifetime or the horizon:
42
+ // that give-up runs first as an operation of its own on the one commit
43
+ // path (resume's CommitOp, its timer carried to the replay's answer)
41
44
  // - outbound of an act starts at attempt 1 with nextAttemptAt =
42
45
  // when + ceil(backoff(1)); resume() re-emits only items that are due
43
46
  // and pauses re-emission while the last step is awaiting-transport
44
47
  // (the adapter holds the item) and never re-emits an accepted one. It
45
48
  // gives up every non-terminal item (submitted, held or accepted) at
46
49
  // first submission + horizonMs, never by attempt
47
- // count; nextDueAt is the earliest due re-emission or horizon expiry
48
- // - the holder's give-up is failed(expired-by-adapter-policy); a later
50
+ // count, or earlier at the sender lifetime its type declared
51
+ // (expiresAt, Delivery 7020); nextDueAt is the earliest due
52
+ // re-emission, horizon or lifetime
53
+ // - the holder's give-up is failed(expired-by-adapter-policy), at a
54
+ // lifetime failed(task-expired) (Delivery 6110); a later
49
55
  // delivered report is late by that history, whatever the adapter says
50
56
  // - replay of a human act returns the journaled events and the outbound
51
- // of its documents that are not terminal (delivered, failed), at their
52
- // current attempt. Idempotency is bounded by the journal's retention:
57
+ // of its documents that are not terminal (delivered, failed) and not
58
+ // due for the give-up, at their current attempt; one due for it is
59
+ // given up in a commit of its own first (6115: never handed out again). Idempotency is bounded by the journal's retention:
53
60
  // max(P90D, retry.horizonMs), the key-retention of Delivery §7 that
54
61
  // bounds effects and their acks; after it the same actId is a new act
55
62
  // - KeyProvider, Log and Access rejections inside a preparation become
@@ -388,6 +395,7 @@ class HolderEngine {
388
395
  #ownRetries;
389
396
  #keepKeys;
390
397
  #retain;
398
+ #accepted;
391
399
  #deadlines;
392
400
  #builtins;
393
401
  #check;
@@ -442,6 +450,7 @@ class HolderEngine {
442
450
  const ownRetries = new Set();
443
451
  const keepKeys = [];
444
452
  const retain = [];
453
+ const accepted = [];
445
454
  const deadlines = [];
446
455
  const names = new Set();
447
456
  for (const m of modules) {
@@ -530,6 +539,11 @@ class HolderEngine {
530
539
  throw new TypeError(`deadlines (module ${m.name}) must be a function`);
531
540
  deadlines.push(m.deadlines);
532
541
  }
542
+ if (m.accepted !== undefined) {
543
+ if (typeof m.accepted !== 'function')
544
+ throw new TypeError(`accepted (module ${m.name}) must be a function`);
545
+ accepted.push(m.accepted);
546
+ }
533
547
  }
534
548
  this.#commands = commands;
535
549
  this.#tasks = tasks;
@@ -541,6 +555,7 @@ class HolderEngine {
541
555
  this.#keepKeys = Object.freeze(keepKeys);
542
556
  this.#deadlines = Object.freeze(deadlines);
543
557
  this.#retain = Object.freeze(retain);
558
+ this.#accepted = Object.freeze(accepted);
544
559
  this.#builtins = Object.freeze({ tick: this.#tickDef(), resume: this.#resumeDef(), report: this.#reportDef(), receive: this.#receiveDef() });
545
560
  this.registry = Object.freeze({
546
561
  commands: Object.freeze([...commands.keys()]),
@@ -615,6 +630,11 @@ class HolderEngine {
615
630
  // ── the four steps ───────────────────────────────────────────────────
616
631
  /** `input` is already bound (bindInput); `inputHash` its journal hash for human acts. */
617
632
  async #run(def, op, input, when, actId, inputHash) {
633
+ /** a replay's give-up work (below): its timer, carried to the replay's answer */
634
+ let replayWake;
635
+ /** give-ups a replay ran: each moves at least one of its finitely many
636
+ * journaled documents to failed, so they are bounded by that number */
637
+ let gaveUp = 0;
618
638
  for (let attempt = 1; attempt <= this.#policy.commitAttempts; attempt++) {
619
639
  // 1 — snapshot, when
620
640
  const { state, version } = await this.#read();
@@ -623,9 +643,35 @@ class HolderEngine {
623
643
  const rec = state.acts[actId];
624
644
  if (rec.inputHash !== inputHash)
625
645
  return { ok: false, code: 'actid-conflict' };
626
- const live = rec.outboundDigests.filter((d) => { const t = triasOf(this.#itemOf(state, d)); return t !== 'delivered' && t !== 'failed'; });
627
646
  const events = structuredClone(rec.events);
628
- return { ok: true, outbound: live.map((d) => this.#outboundOf(state, d)), events: freezeDeep(events) };
647
+ // the act's documents are handed out again only while live; one past
648
+ // its sender lifetime or the horizon is given up first, in an
649
+ // operation of its own on the engine's one commit path (as resume's
650
+ // give-up: Delivery 6110, 6115), and is never handed out — the
651
+ // journal's events are not announced again
652
+ const live = [];
653
+ const expired = [];
654
+ for (const d of rec.outboundDigests) {
655
+ const it = this.#itemOf(state, d);
656
+ const t = triasOf(it);
657
+ if (t === 'delivered' || t === 'failed')
658
+ continue;
659
+ if (this.#giveUp(it, at))
660
+ expired.push(d);
661
+ else
662
+ live.push(d);
663
+ }
664
+ if (expired.length) {
665
+ const g = await this.#run(this.#giveUpDef(), { kind: 'resume' }, expired, at);
666
+ if (!isHalt(g) && g.ok && g.nextDueAt !== undefined)
667
+ replayWake = replayWake === undefined ? g.nextDueAt : Math.min(replayWake, g.nextDueAt);
668
+ // re-read: the act's documents as the give-up left them, outside
669
+ // the CAS budget (no conflict happened); bounded by the act's documents
670
+ if (gaveUp++ <= rec.outboundDigests.length)
671
+ attempt--;
672
+ continue;
673
+ }
674
+ return { ok: true, outbound: live.map((d) => this.#outboundOf(state, d)), events: freezeDeep(events), ...(replayWake !== undefined ? { nextDueAt: replayWake } : {}) };
629
675
  }
630
676
  // 2 — prepare, bound to this snapshot
631
677
  const ctx = Object.freeze({
@@ -679,12 +725,16 @@ class HolderEngine {
679
725
  freezeDeep(events);
680
726
  const outbound = drafts.map((o) => ({ digest: o.digest, envelope: o.envelope, type: o.type, threadId: o.threadId, recipient: o.recipient, attempt: 1 }));
681
727
  const outbox = { ...r.state.outbox };
682
- for (const o of outbound) {
728
+ for (const [i, o] of outbound.entries()) {
683
729
  if (Object.hasOwn(outbox, o.digest))
684
730
  throw new Error(`engine: outbound ${o.digest} is already in the outbox`);
731
+ const life = drafts[i].expiresAt;
732
+ if (life !== undefined && (!Number.isSafeInteger(life) || life <= at))
733
+ throw new Error(`engine: outbound ${o.digest} expires at ${life}, not after ${at}`);
685
734
  outbox[o.digest] = {
686
735
  type: o.type, threadId: o.threadId, recipient: o.recipient, envelope: o.envelope, attempt: 1,
687
736
  history: [{ status: 'submitted', at, attempt: 1 }], nextAttemptAt: dueAt(at, this.#policy.backoff(1)),
737
+ ...(life !== undefined ? { expiresAt: life } : {}),
688
738
  };
689
739
  }
690
740
  const duties = { ...r.state.duties };
@@ -819,6 +869,50 @@ class HolderEngine {
819
869
  }
820
870
  return { state: cur, events };
821
871
  }
872
+ /** The give-up of the outbox items named (a replay found them due, see
873
+ * #run): as resume's, the failed step, the status event, the failure
874
+ * handlers in the same transaction; items no longer due are left alone. */
875
+ #giveUpDef() {
876
+ const giveUp = (it, when) => this.#giveUp(it, when);
877
+ const failed = (st, digests, when) => this.#failed(st, digests, when);
878
+ return {
879
+ human: false,
880
+ apply(state, _p, digests, when) {
881
+ const outbox = { ...state.outbox };
882
+ const events = [];
883
+ const gave = [];
884
+ for (const d of digests) {
885
+ const it = state.outbox[d];
886
+ const t = triasOf(it);
887
+ if (t === 'delivered' || t === 'failed')
888
+ continue;
889
+ const why = giveUp(it, when);
890
+ if (!why)
891
+ continue;
892
+ const { nextAttemptAt: _, ...rest } = it;
893
+ outbox[d] = { ...rest, history: [...rest.history, { status: 'failed', at: when, reason: why }] };
894
+ events.push({ type: 'delivery.status', digest: d, threadId: it.threadId, status: 'failed' });
895
+ gave.push(d);
896
+ }
897
+ if (!gave.length)
898
+ return { state: state };
899
+ const f = failed({ ...state, outbox }, gave, when);
900
+ return { state: f.state, events: [...events, ...f.events] };
901
+ },
902
+ };
903
+ }
904
+ /** Why a non-terminal outbox item is given up at `when`, or null: its
905
+ * sender lifetime, where it ends no later than the horizon
906
+ * (failed(task-expired), Delivery 6110), else the horizon
907
+ * (failed(expired-by-adapter-policy)). */
908
+ #giveUp(it, when) {
909
+ const first = it.history.length ? it.history[0].at : when;
910
+ const expiry = Math.min(first + this.#policy.horizonMs, Number.MAX_SAFE_INTEGER);
911
+ const life = it.expiresAt;
912
+ if (life !== undefined && when >= life && life <= expiry)
913
+ return 'task-expired';
914
+ return when >= expiry ? 'expired-by-adapter-policy' : null;
915
+ }
822
916
  #itemOf(state, digest) {
823
917
  if (!Object.hasOwn(state.outbox, digest))
824
918
  throw new Error(`engine: journaled outbound ${digest} is missing from the outbox`);
@@ -882,8 +976,9 @@ class HolderEngine {
882
976
  if (!t.deactivated)
883
977
  live.add(t.rkid);
884
978
  // and the rkids a module still needs (a deactivated prior whose continuity flow is open)
979
+ // (at this tick's time: a claim that ends now ends in this tick)
885
980
  for (const k of keepers())
886
- for (const rkid of k(held))
981
+ for (const rkid of k(held, when))
887
982
  live.add(rkid);
888
983
  const tombstones = [...held.addresses.tombstones];
889
984
  let gone = false;
@@ -935,6 +1030,7 @@ class HolderEngine {
935
1030
  const sweeps = () => this.#sweeps;
936
1031
  const failed = (st, digests, when) => this.#failed(st, digests, when);
937
1032
  const ownRetries = () => this.#ownRetries;
1033
+ const giveUp = (it, when) => this.#giveUp(it, when);
938
1034
  return {
939
1035
  human: false,
940
1036
  // the due duties' and the sweeps' preparations, against the snapshot apply will see
@@ -963,17 +1059,20 @@ class HolderEngine {
963
1059
  const trias = triasOf(it);
964
1060
  if (trias === 'delivered' || trias === 'failed')
965
1061
  continue;
966
- // the horizon applies to every non-terminal item: held, accepted or not
967
- const first = it.history.length ? it.history[0].at : when;
968
- const expiry = Math.min(first + p.horizonMs, Number.MAX_SAFE_INTEGER);
969
- if (when >= expiry) {
1062
+ // the horizon applies to every non-terminal item: held, accepted or
1063
+ // not; a sender lifetime the type declares ends it earlier, as
1064
+ // failed(task-expired), never handed out again (Delivery 6110, 6115)
1065
+ const why = giveUp(it, when);
1066
+ if (why) {
970
1067
  const { nextAttemptAt: _, ...rest } = it;
971
- outbox[digest] = { ...rest, history: [...it.history, { status: 'failed', at: when, reason: 'expired-by-adapter-policy' }] };
1068
+ outbox[digest] = { ...rest, history: [...it.history, { status: 'failed', at: when, reason: why }] };
972
1069
  events.push({ type: 'delivery.status', digest, threadId: it.threadId, status: 'failed' });
973
1070
  gaveUp.push(digest);
974
1071
  continue;
975
1072
  }
976
- due(expiry);
1073
+ const first = it.history.length ? it.history[0].at : when;
1074
+ const expiry = Math.min(first + p.horizonMs, Number.MAX_SAFE_INTEGER);
1075
+ due(it.expiresAt !== undefined ? Math.min(it.expiresAt, expiry) : expiry);
977
1076
  // never re-emitted: an accepted item (the service has it) and one the
978
1077
  // adapter holds (awaiting-transport, until it reports again)
979
1078
  if (trias === 'accepted' || it.history[it.history.length - 1]?.status === 'awaiting-transport')
@@ -1199,6 +1298,7 @@ class HolderEngine {
1199
1298
  #receiveDef() {
1200
1299
  const tasks = () => this.#tasks;
1201
1300
  const acks = () => this.#acks;
1301
+ const acceptedHooks = () => this.#accepted;
1202
1302
  const policy = () => this.#policy;
1203
1303
  return {
1204
1304
  human: false,
@@ -1228,6 +1328,13 @@ class HolderEngine {
1228
1328
  next = r.state;
1229
1329
  events.push(...(r.events ?? []));
1230
1330
  }
1331
+ // a verified ack is an accepted document of its issuer too: the
1332
+ // modules' accepted hooks, in the same transaction
1333
+ for (const hook of acceptedHooks()) {
1334
+ next = hook(next, plan.doc, plan.arrival);
1335
+ if (next.effects !== state.effects)
1336
+ throw new Error('engine: an accepted hook wrote the effect cache');
1337
+ }
1231
1338
  return {
1232
1339
  state: { ...next, effects: { ...next.effects, [plan.digest]: cached(null) } },
1233
1340
  events,
@@ -1253,8 +1360,15 @@ class HolderEngine {
1253
1360
  }
1254
1361
  if (r.state.effects !== state.effects)
1255
1362
  throw new Error(`engine: the handler of ${plan.type} wrote the effect cache; the core writes it`);
1363
+ // the modules' accepted hooks, in the same transaction
1364
+ let after = r.state;
1365
+ for (const hook of acceptedHooks()) {
1366
+ after = hook(after, plan.doc, plan.arrival);
1367
+ if (after.effects !== state.effects)
1368
+ throw new Error('engine: an accepted hook wrote the effect cache');
1369
+ }
1256
1370
  return {
1257
- state: { ...r.state, effects: { ...state.effects, [plan.digest]: cached({ ...plan.ack, at: when, attempt: 1, nextAttemptAt: dueAt(when, policy().backoff(1)), sent: false }) } },
1371
+ state: { ...after, effects: { ...state.effects, [plan.digest]: cached({ ...plan.ack, at: when, attempt: 1, nextAttemptAt: dueAt(when, policy().backoff(1)), sent: false }) } },
1258
1372
  ...(r.outbound ? { outbound: r.outbound } : {}),
1259
1373
  ...(r.events ? { events: r.events } : {}),
1260
1374
  ...(r.duties ? { duties: r.duties } : {}),