@backbay/glia 0.2.0-alpha.6 → 0.2.0-alpha.8
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.
- package/dist/audio/index.js +1145 -5
- package/dist/audio/index.js.map +1 -1
- package/dist/components/index.js +3187 -10
- package/dist/components/index.js.map +1 -1
- package/dist/core.js +19714 -12
- package/dist/core.js.map +1 -1
- package/dist/emotion/index.js +1 -1
- package/dist/emotion/index.js.map +1 -1
- package/dist/hooks/index.js +941 -6
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +31841 -183
- package/dist/index.js.map +1 -1
- package/dist/primitives/index.js +21111 -57
- package/dist/primitives/index.js.map +1 -1
- package/dist/protocol/index.js +360 -2
- package/dist/protocol/index.js.map +1 -1
- package/dist/speakeasy/index.js +2786 -38
- package/dist/speakeasy/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/index.js +1150 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/vision/index.js +370 -2
- package/dist/vision/index.js.map +1 -1
- package/dist/workspace/index.js +16824 -2
- package/dist/workspace/index.js.map +1 -1
- package/package.json +16 -10
- package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
- package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
- package/dist/BentoGrid-CDARICNM.js +0 -6
- package/dist/BentoGrid-CDARICNM.js.map +0 -1
- package/dist/CommandPalette-JCWJKRBY.js +0 -6
- package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
- package/dist/Glass-H4X4ZI4P.js +0 -7
- package/dist/Glass-H4X4ZI4P.js.map +0 -1
- package/dist/GlitchText-KLQ57PPY.js +0 -6
- package/dist/GlitchText-KLQ57PPY.js.map +0 -1
- package/dist/GlowButton-VGBPMZO7.js +0 -6
- package/dist/GlowButton-VGBPMZO7.js.map +0 -1
- package/dist/Graph3D-GO7N2EZQ.js +0 -540
- package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
- package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
- package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
- package/dist/KPIStat-PBQK27ZB.js +0 -6
- package/dist/KPIStat-PBQK27ZB.js.map +0 -1
- package/dist/NeonToast-W5F7MU3U.js +0 -6
- package/dist/NeonToast-W5F7MU3U.js.map +0 -1
- package/dist/ParticleField-WK6CNHWU.js +0 -51
- package/dist/ParticleField-WK6CNHWU.js.map +0 -1
- package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
- package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
- package/dist/ThreeDCard-VH5I3SSY.js +0 -6
- package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
- package/dist/TypingAnimation-GIWOHPIX.js +0 -6
- package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
- package/dist/alert-dialog-QOSYBIIE.js +0 -19
- package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
- package/dist/avatar-N5R37PCU.js +0 -10
- package/dist/avatar-N5R37PCU.js.map +0 -1
- package/dist/badge-GTVIIGPY.js +0 -8
- package/dist/badge-GTVIIGPY.js.map +0 -1
- package/dist/button-D7IMSV2D.js +0 -8
- package/dist/button-D7IMSV2D.js.map +0 -1
- package/dist/chunk-3CMPQOMY.js +0 -69
- package/dist/chunk-3CMPQOMY.js.map +0 -1
- package/dist/chunk-3OQT6IYR.js +0 -41
- package/dist/chunk-3OQT6IYR.js.map +0 -1
- package/dist/chunk-43B2WVLS.js +0 -85
- package/dist/chunk-43B2WVLS.js.map +0 -1
- package/dist/chunk-4SRFO5W3.js +0 -121
- package/dist/chunk-4SRFO5W3.js.map +0 -1
- package/dist/chunk-5IZELOOU.js +0 -362
- package/dist/chunk-5IZELOOU.js.map +0 -1
- package/dist/chunk-6DM4ACSS.js +0 -154
- package/dist/chunk-6DM4ACSS.js.map +0 -1
- package/dist/chunk-6IGT34PC.js +0 -50
- package/dist/chunk-6IGT34PC.js.map +0 -1
- package/dist/chunk-6RKBCJHN.js +0 -194
- package/dist/chunk-6RKBCJHN.js.map +0 -1
- package/dist/chunk-6RX2WGCO.js +0 -108
- package/dist/chunk-6RX2WGCO.js.map +0 -1
- package/dist/chunk-7K4WZM3U.js +0 -189
- package/dist/chunk-7K4WZM3U.js.map +0 -1
- package/dist/chunk-7MDBHJPT.js +0 -407
- package/dist/chunk-7MDBHJPT.js.map +0 -1
- package/dist/chunk-7UQD6ROV.js +0 -9
- package/dist/chunk-7UQD6ROV.js.map +0 -1
- package/dist/chunk-AFNIVLZP.js +0 -1069
- package/dist/chunk-AFNIVLZP.js.map +0 -1
- package/dist/chunk-ANWYRO6A.js +0 -407
- package/dist/chunk-ANWYRO6A.js.map +0 -1
- package/dist/chunk-DIXPOHDO.js +0 -71
- package/dist/chunk-DIXPOHDO.js.map +0 -1
- package/dist/chunk-DWYMKYPI.js +0 -3
- package/dist/chunk-DWYMKYPI.js.map +0 -1
- package/dist/chunk-E3NVDCZG.js +0 -280
- package/dist/chunk-E3NVDCZG.js.map +0 -1
- package/dist/chunk-EBM7YBKL.js +0 -399
- package/dist/chunk-EBM7YBKL.js.map +0 -1
- package/dist/chunk-EPAM7IWW.js +0 -294
- package/dist/chunk-EPAM7IWW.js.map +0 -1
- package/dist/chunk-EXQ7GYRS.js +0 -134
- package/dist/chunk-EXQ7GYRS.js.map +0 -1
- package/dist/chunk-F4QTUZ3C.js +0 -136
- package/dist/chunk-F4QTUZ3C.js.map +0 -1
- package/dist/chunk-FEW533R2.js +0 -105
- package/dist/chunk-FEW533R2.js.map +0 -1
- package/dist/chunk-FFZLJKC7.js +0 -270
- package/dist/chunk-FFZLJKC7.js.map +0 -1
- package/dist/chunk-GEAMOBF7.js +0 -8486
- package/dist/chunk-GEAMOBF7.js.map +0 -1
- package/dist/chunk-GRTRSCTD.js +0 -74
- package/dist/chunk-GRTRSCTD.js.map +0 -1
- package/dist/chunk-IKGYOGLK.js +0 -16
- package/dist/chunk-IKGYOGLK.js.map +0 -1
- package/dist/chunk-IQ7WYWVJ.js +0 -73
- package/dist/chunk-IQ7WYWVJ.js.map +0 -1
- package/dist/chunk-IXIVWQLF.js +0 -543
- package/dist/chunk-IXIVWQLF.js.map +0 -1
- package/dist/chunk-JCJU57RC.js +0 -115
- package/dist/chunk-JCJU57RC.js.map +0 -1
- package/dist/chunk-KORSTBU4.js +0 -117
- package/dist/chunk-KORSTBU4.js.map +0 -1
- package/dist/chunk-KSEZ6UM2.js +0 -235
- package/dist/chunk-KSEZ6UM2.js.map +0 -1
- package/dist/chunk-MHPF7R3O.js +0 -1376
- package/dist/chunk-MHPF7R3O.js.map +0 -1
- package/dist/chunk-MPC5IH7E.js +0 -81
- package/dist/chunk-MPC5IH7E.js.map +0 -1
- package/dist/chunk-MQIU2NYA.js +0 -114
- package/dist/chunk-MQIU2NYA.js.map +0 -1
- package/dist/chunk-NYMBJOGR.js +0 -2192
- package/dist/chunk-NYMBJOGR.js.map +0 -1
- package/dist/chunk-OBZD2M3C.js +0 -169
- package/dist/chunk-OBZD2M3C.js.map +0 -1
- package/dist/chunk-ODM2AG6G.js +0 -176
- package/dist/chunk-ODM2AG6G.js.map +0 -1
- package/dist/chunk-ONDKF5LP.js +0 -53
- package/dist/chunk-ONDKF5LP.js.map +0 -1
- package/dist/chunk-P25YCWQB.js +0 -41
- package/dist/chunk-P25YCWQB.js.map +0 -1
- package/dist/chunk-PFYVNM6H.js +0 -14
- package/dist/chunk-PFYVNM6H.js.map +0 -1
- package/dist/chunk-PWNNSGFL.js +0 -20
- package/dist/chunk-PWNNSGFL.js.map +0 -1
- package/dist/chunk-Q2PGZVOT.js +0 -36
- package/dist/chunk-Q2PGZVOT.js.map +0 -1
- package/dist/chunk-Q2XDMV7U.js +0 -76
- package/dist/chunk-Q2XDMV7U.js.map +0 -1
- package/dist/chunk-QG7FH2FI.js +0 -45
- package/dist/chunk-QG7FH2FI.js.map +0 -1
- package/dist/chunk-R7HUOK2D.js +0 -1914
- package/dist/chunk-R7HUOK2D.js.map +0 -1
- package/dist/chunk-REUYY7G5.js +0 -773
- package/dist/chunk-REUYY7G5.js.map +0 -1
- package/dist/chunk-RHC2Z2HT.js +0 -199
- package/dist/chunk-RHC2Z2HT.js.map +0 -1
- package/dist/chunk-RMCVLIFE.js +0 -23
- package/dist/chunk-RMCVLIFE.js.map +0 -1
- package/dist/chunk-ROZLTXGR.js +0 -234
- package/dist/chunk-ROZLTXGR.js.map +0 -1
- package/dist/chunk-RSS2C2O3.js +0 -17
- package/dist/chunk-RSS2C2O3.js.map +0 -1
- package/dist/chunk-SAGCG5SH.js +0 -355
- package/dist/chunk-SAGCG5SH.js.map +0 -1
- package/dist/chunk-TM6AOUSD.js +0 -40
- package/dist/chunk-TM6AOUSD.js.map +0 -1
- package/dist/chunk-TPK4BYCO.js +0 -970
- package/dist/chunk-TPK4BYCO.js.map +0 -1
- package/dist/chunk-UNQIL4K2.js +0 -34
- package/dist/chunk-UNQIL4K2.js.map +0 -1
- package/dist/chunk-UUG6L75Y.js +0 -47
- package/dist/chunk-UUG6L75Y.js.map +0 -1
- package/dist/chunk-V2SYMV4W.js +0 -114
- package/dist/chunk-V2SYMV4W.js.map +0 -1
- package/dist/chunk-V7EN5CTH.js +0 -130
- package/dist/chunk-V7EN5CTH.js.map +0 -1
- package/dist/chunk-VITKG2HL.js +0 -1125
- package/dist/chunk-VITKG2HL.js.map +0 -1
- package/dist/chunk-VYEWU5LO.js +0 -2631
- package/dist/chunk-VYEWU5LO.js.map +0 -1
- package/dist/chunk-W67QAGSH.js +0 -178
- package/dist/chunk-W67QAGSH.js.map +0 -1
- package/dist/chunk-WWBIN6KV.js +0 -1353
- package/dist/chunk-WWBIN6KV.js.map +0 -1
- package/dist/chunk-X77Z4PFB.js +0 -224
- package/dist/chunk-X77Z4PFB.js.map +0 -1
- package/dist/chunk-X7VG7OTT.js +0 -8
- package/dist/chunk-X7VG7OTT.js.map +0 -1
- package/dist/chunk-XE4K2SGI.js +0 -74
- package/dist/chunk-XE4K2SGI.js.map +0 -1
- package/dist/chunk-YIUG7IJK.js +0 -628
- package/dist/chunk-YIUG7IJK.js.map +0 -1
- package/dist/chunk-YNVN3V4Y.js +0 -13
- package/dist/chunk-YNVN3V4Y.js.map +0 -1
- package/dist/chunk-Z2S54IZX.js +0 -198
- package/dist/chunk-Z2S54IZX.js.map +0 -1
- package/dist/chunk-ZR6AH25Z.js +0 -17
- package/dist/chunk-ZR6AH25Z.js.map +0 -1
- package/dist/dialog-SPM3DTTI.js +0 -17
- package/dist/dialog-SPM3DTTI.js.map +0 -1
- package/dist/dropdown-menu-HMTWKWGK.js +0 -21
- package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
- package/dist/input-BH4P4S26.js +0 -6
- package/dist/input-BH4P4S26.js.map +0 -1
- package/dist/label-5Z4Q6VER.js +0 -8
- package/dist/label-5Z4Q6VER.js.map +0 -1
- package/dist/popover-IFOUXYLI.js +0 -18
- package/dist/popover-IFOUXYLI.js.map +0 -1
- package/dist/scroll-area-DJXNW6QX.js +0 -14
- package/dist/scroll-area-DJXNW6QX.js.map +0 -1
- package/dist/select-FZ277C3G.js +0 -22
- package/dist/select-FZ277C3G.js.map +0 -1
- package/dist/separator-BTMLN4NB.js +0 -8
- package/dist/separator-BTMLN4NB.js.map +0 -1
- package/dist/skeleton-DXIWBH4W.js +0 -6
- package/dist/skeleton-DXIWBH4W.js.map +0 -1
- package/dist/switch-4MCXIZBY.js +0 -13
- package/dist/switch-4MCXIZBY.js.map +0 -1
- package/dist/tabs-O7AW3APK.js +0 -17
- package/dist/tabs-O7AW3APK.js.map +0 -1
- package/dist/textarea-IB5WAFDO.js +0 -6
- package/dist/textarea-IB5WAFDO.js.map +0 -1
- package/dist/toggle-XVPPG6P4.js +0 -10
- package/dist/toggle-XVPPG6P4.js.map +0 -1
- package/dist/tooltip-JICZTD4F.js +0 -18
- package/dist/tooltip-JICZTD4F.js.map +0 -1
package/dist/audio/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/BBProvider.tsx","../../src/hooks/useRunStream.ts","../../src/audio/hooks/useRunSpeechCues.ts","../../src/cognition/types.ts","../../src/cognition/reducers.ts","../../src/cognition/controller.ts","../../src/cognition/hooks/useCognition.ts","../../src/audio/types.ts","../../src/audio/planner.ts","../../src/audio/schema.ts","../../src/audio/hooks/useAudioPlayer.ts","../../src/audio/hooks/useBargeIn.ts","../../src/audio/hooks/useSpeechSynthesis.ts","../../src/audio/hooks/useCognitionSpeech.ts"],"names":["useState","useCallback","useEffect","useRef","clamp01","useMemo"],"mappings":";;;;;;AAwDA,IAAM,SAAA,GAAY,cAAqC,IAAI,CAAA;AA4GpD,SAAS,YAAA,GAA+B;AAC7C,EAAA,MAAM,OAAA,GAAU,WAAW,SAAS,CAAA;AACpC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,OAAA;AACT;;;AChHO,SAAS,YAAA,CACd,KAAA,EACA,OAAA,GAA+B,EAAC,EACZ;AACpB,EAAA,MAAM,EAAE,eAAe,GAAA,EAAM,aAAA,GAAgB,OAAO,OAAA,EAAS,UAAA,EAAY,SAAQ,GAAI,OAAA;AAErF,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,YAAA,EAAa;AAEhC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAAqB,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAA0B,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAoB,MAAM,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIA,SAA0B,IAAI,CAAA;AAEpD,EAAA,MAAM,cAAA,GAAiB,OAA2B,IAAI,CAAA;AACtD,EAAA,MAAM,kBAAA,GAAqB,OAA8C,IAAI,CAAA;AAC7E,EAAA,MAAM,WAAA,GAAc,OAAO,IAAI,CAAA;AAG/B,EAAA,MAAM,WAAA,GAAcC,WAAAA;AAAA,IAClB,CAAC,KAAA,KAAoB;AACnB,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AAE1B,MAAA,SAAA,CAAU,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,KAAK,CAAC,CAAA;AACpC,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,OAAA,GAAU,KAAK,CAAA;AAGf,MAAA,IAAI,KAAA,CAAM,MAAM,MAAA,EAAQ;AACtB,QAAA,SAAA,CAAU,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,MAC7B;AAGA,MAAA,IAAI,KAAA,CAAM,SAAS,WAAA,IAAe,KAAA,CAAM,SAAS,QAAA,IAAY,KAAA,CAAM,SAAS,WAAA,EAAa;AACvF,QAAA,MAAM,WAAA,GACJ,MAAM,IAAA,KAAS,WAAA,GACX,cACA,KAAA,CAAM,IAAA,KAAS,WACb,QAAA,GACA,WAAA;AACR,QAAA,SAAA,CAAU,WAAW,CAAA;AAErB,QAAA,IAAI,KAAA,CAAM,MAAM,GAAA,EAAK;AACnB,UAAA,MAAA,CAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACrB,UAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,YAAA,UAAA,GAAa,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS,UAAU;AAAA,GACtB;AAGA,EAAA,MAAM,gBAAA,GAAmBA,YAAY,MAAM;AACzC,IAAA,IAAI,CAAC,SAAS,aAAA,EAAe;AAE7B,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,MAAA,CAAO,UAAU,SAAS,KAAK,CAAA,OAAA,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,GAAG,CAAA;AAEvC,IAAA,WAAA,CAAY,SAAS,MAAM;AACzB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,WAAA,CAAY;AAAA,QACV,IAAA,EAAM,WAAA;AAAA,QACN,KAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,WAAA,CAAY,SAAA,GAAY,CAAC,CAAA,KAAM;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA;AAC9B,QAAA,WAAA,CAAY;AAAA,UACV,IAAA,EAAM,KAAK,IAAA,IAAQ,QAAA;AAAA,UACnB,KAAA;AAAA,UACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB;AAAA,SACD,CAAA;AAAA,MACH,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,GAAG,CAAA;AAAA,MAC7C;AAAA,IACF,CAAA;AAEA,IAAA,WAAA,CAAY,UAAU,MAAM;AAC1B,MAAA,cAAA,CAAe,KAAK,CAAA;AAEpB,MAAA,YAAA,EAAa;AAAA,IACf,CAAA;AAEA,IAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AAAA,EAC3B,GAAG,CAAC,KAAA,EAAO,OAAO,UAAA,EAAY,aAAA,EAAe,WAAW,CAAC,CAAA;AAGzD,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,IAAI,CAAC,KAAA,IAAS,kBAAA,CAAmB,OAAA,EAAS;AAE1C,IAAA,MAAM,OAAO,YAAY;AACvB,MAAA,IAAI,CAAC,WAAA,CAAY,OAAA,IAAW,CAAC,KAAA,EAAO;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI;AAAA,UACjE,SAAS,MAAA,CAAO;AAAA,SACjB,CAAA;AAED,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,QAC3C;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,QAAA,WAAA,CAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,KAAA;AAAA,UACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB,IAAA,EAAM;AAAA,YACJ,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,GAAA,EAAK;AAAA;AACP,SACD,CAAA;AAGD,QAAA,IAAI,IAAA,CAAK,WAAW,WAAA,IAAe,IAAA,CAAK,WAAW,QAAA,IAAY,IAAA,CAAK,WAAW,WAAA,EAAa;AAC1F,UAAA,WAAA,EAAY;AACZ,UAAA,WAAA,CAAY;AAAA,YACV,MAAM,IAAA,CAAK,MAAA;AAAA,YACX,KAAA;AAAA,YACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,IAAA,EAAM,EAAE,GAAA,EAAK,IAAA;AAAK,WACnB,CAAA;AAAA,QACH;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,eAAe,KAAA,EAAO;AACxB,UAAA,OAAA,GAAU,GAAG,CAAA;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAA;AAGA,IAAA,IAAA,EAAK;AAGL,IAAA,kBAAA,CAAmB,OAAA,GAAU,WAAA,CAAY,IAAA,EAAM,YAAY,CAAA;AAAA,EAC7D,GAAG,CAAC,KAAA,EAAO,QAAQ,YAAA,EAAc,WAAA,EAAa,OAAO,CAAC,CAAA;AAEtD,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,MAAA,aAAA,CAAc,mBAAmB,OAAO,CAAA;AACxC,MAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AAEtB,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,cAAA,CAAe,QAAQ,KAAA,EAAM;AAC7B,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,IAC3B;AAEA,IAAA,WAAA,EAAY;AACZ,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAA,MAAM,SAAA,GAAYA,YAAY,MAAM;AAClC,IAAA,UAAA,EAAW;AACX,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAGtB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,SAAA,CAAU,MAAM,CAAA;AAGhB,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,EAAa;AAAA,IACf,CAAA,MAAO;AACL,MAAA,gBAAA,EAAiB;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,aAAA,EAAe,YAAA,EAAc,gBAAgB,CAAC,CAAA;AAG9D,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,UAAA,EAAW;AACX,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,EAAa;AAAA,IACf,CAAA,MAAO;AACL,MAAA,gBAAA,EAAiB;AAEjB,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAI,WAAA,CAAY,OAAA,IAAW,CAAC,WAAA,EAAa;AACvC,UAAA,YAAA,EAAa;AAAA,QACf;AAAA,MACF,GAAG,GAAI,CAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,EAAW;AAAA,IACb,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACjPO,IAAM,uBAAA,GAAqD;AAAA,EAChE,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,MAAA;AAAA,EACZ,MAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAU;AACZ;AAMO,SAAS,iBAAiB,OAAA,EAAwC;AACvE,EAAA,MAAM,EAAE,OAAO,OAAA,GAAU,IAAA,EAAM,MAAM,IAAA,EAAM,UAAA,GAAa,KAAI,GAAI,OAAA;AAEhE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,YAAA,CAAa,KAAK,CAAA;AAErC,EAAA,MAAM,aAAA,GAAgBC,OAAyB,IAAI,CAAA;AACnD,EAAA,MAAM,aAAA,GAAgBA,OAAe,CAAC,CAAA;AAEtC,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,OAAO,aAAA,CAAc,OAAA;AAC3B,IAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AAExB,IAAA,IAAI,SAAS,MAAA,EAAQ;AAErB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,GAAA,GAAM,aAAA,CAAc,OAAA,GAAU,UAAA,EAAY;AAE9C,IAAA,MAAM,SAAS,EAAE,GAAG,yBAAyB,GAAI,IAAA,IAAQ,EAAC,EAAG;AAE7D,IAAA,IAAI,KAAA,GAA6B,IAAA;AACjC,IAAA,IAAI,MAAA,KAAW,SAAA,EAAW,KAAA,GAAQ,MAAA,CAAO,OAAA;AACzC,IAAA,IAAI,MAAA,KAAW,WAAA,EAAa,KAAA,GAAQ,MAAA,CAAO,UAAA;AAC3C,IAAA,IAAI,MAAA,KAAW,QAAA,EAAU,KAAA,GAAQ,MAAA,CAAO,MAAA;AACxC,IAAA,IAAI,MAAA,KAAW,WAAA,EAAa,KAAA,GAAQ,MAAA,CAAO,QAAA;AAE3C,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,aAAA,CAAc,OAAA,GAAU,GAAA;AACxB,IAAA,KAAK,IAAA,CAAK,KAAA,EAAO,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,OAAA,EAAS,KAAA,EAAO,QAAQ,IAAA,EAAM,IAAA,EAAM,UAAU,CAAC,CAAA;AACrD;;;ACkEO,SAAS,QAAQ,KAAA,EAAuB;AAC7C,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AACvC;AAEA,IAAM,cAAmB,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,GAAA,EAAK,UAAU,IAAA,EAAK;AAEhE,SAAS,4BACd,SAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,SAAA,EAAW,GAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IACV,YAAA,EAAc,CAAA;AAAA,IACd,SAAA,EAAW,CAAA;AAAA,IACX,YAAA,EAAc,CAAA;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,WAAA,EAAa,GAAA;AAAA,IACb,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,aAAA,EAAe,CAAA;AAAA,IACf,gBAAA,EAAkB,CAAA;AAAA,IAClB,OAAA,EAAS,EAAE,GAAG,WAAA,EAAY;AAAA,IAC1B,UAAA,EAAY,EAAE,GAAG,WAAA,EAAY;AAAA,IAC7B,GAAG;AAAA,GACL;AACF;;;AC7IO,IAAM,mBAAA,GAA+D;AAAA,EAC1E,mBAAA,EAAqB,WAAA;AAAA,EACrB,cAAA,EAAgB,MAAA;AAAA,EAChB,cAAA,EAAgB,WAAA;AAAA,EAChB,aAAA,EAAe,cAAA;AAAA,EACf,eAAA,EAAiB,MAAA;AAAA,EACjB,WAAA,EAAa;AACf,CAAA;AAcA,SAAS,aAAA,CACP,OACA,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,SAAA,EAAW,QAAQ,SAAA,KAAc,MAAA,GAAY,QAAQ,OAAA,CAAQ,SAAS,IAAI,KAAA,CAAM,SAAA;AAAA,IAChF,QAAA,EAAU,QAAQ,QAAA,KAAa,MAAA,GAAY,QAAQ,OAAA,CAAQ,QAAQ,IAAI,KAAA,CAAM,QAAA;AAAA,IAC7E,IAAA,EAAM,QAAQ,IAAA,KAAS,MAAA,GAAY,QAAQ,OAAA,CAAQ,IAAI,IAAI,KAAA,CAAM,IAAA;AAAA,IACjE,YAAA,EAAc,QAAQ,YAAA,KAAiB,MAAA,GAAY,QAAQ,OAAA,CAAQ,YAAY,IAAI,KAAA,CAAM,YAAA;AAAA,IACzF,WAAA,EAAa,QAAQ,WAAA,KAAgB,MAAA,GAAY,QAAQ,OAAA,CAAQ,WAAW,IAAI,KAAA,CAAM,WAAA;AAAA,IACtF,SAAA,EAAW,QAAQ,SAAA,KAAc,MAAA,GAAY,QAAQ,OAAA,CAAQ,SAAS,IAAI,KAAA,CAAM,SAAA;AAAA,IAChF,YAAA,EAAc,QAAQ,YAAA,KAAiB,MAAA,GAAY,QAAQ,OAAA,CAAQ,YAAY,IAAI,KAAA,CAAM,YAAA;AAAA,IACzF,WAAA,EAAa,QAAQ,WAAA,KAAgB,MAAA,GAAY,QAAQ,OAAA,CAAQ,WAAW,IAAI,KAAA,CAAM,WAAA;AAAA,IACtF,UAAA,EAAY,QAAQ,UAAA,KAAe,MAAA,GAAY,QAAQ,OAAA,CAAQ,UAAU,IAAI,KAAA,CAAM;AAAA,GACrF;AACF;AAKA,SAAS,oBAAA,CACP,OACA,QAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH;AAAA,GACF;AACF;AAKA,SAAS,kBAAA,CACP,KAAA,EACA,MAAA,EACA,WAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAA,EAAQ,UAAU,KAAA,CAAM,MAAA;AAAA,IACxB,WAAA,EAAa,eAAe,KAAA,CAAM;AAAA,GACpC;AACF;AAKA,SAAS,oBAAA,CACP,OACA,KAAA,EACgB;AAChB,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA;AACtB,EAAA,MAAM,OAAA,GAAU,oBAAoB,OAAO,CAAA;AAE3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,KAAA,CAAM,UAAA;AACvB,EAAA,IAAI,cAAc,KAAA,CAAM,WAAA;AACxB,EAAA,IAAI,IAAA,GAAO,OAAA;AAGX,EAAA,IAAI,KAAA,CAAM,SAAS,aAAA,EAAe;AAChC,IAAA,UAAA,GAAa,KAAA,CAAM,KAAA;AAAA,EACrB,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,eAAA,EAAiB;AACzC,IAAA,UAAA,GAAa,MAAA;AACb,IAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,MAAA,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,GAAG,CAAA;AAC7C,MAAA,IAAA,GAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,WAAA,EAAa;AACrC,IAAA,UAAA,GAAa,KAAA,CAAM,KAAA;AAAA,EACrB;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,IAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,WAAA,CACd,OACA,OAAA,EACgB;AAChB,EAAA,MAAM,WAAW,OAAA,GAAU,GAAA;AAG3B,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,WAAA,GAAc,IAAA,CAAK,IAAI,OAA2B,QAAQ;AAAA,GAClE;AACA,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,MAAM,YAAA,GAAe,IAAA,CAAK,IAAI,QAA4B,QAAQ;AAAA,GACpE;AACA,EAAA,MAAM,SAAA,GAAY,OAAA;AAAA,IAChB,MAAM,SAAA,GAAY,IAAA,CAAK,IAAI,QAAyB,QAAQ;AAAA,GAC9D;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,WAAA,CACd,OACA,KAAA,EACgB;AAChB,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,gBAAA;AACH,MAAA,OAAO,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAAA,IAE3C,KAAK,kBAAA;AACH,MAAA,OAAO,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,MAAM,CAAA;AAAA,IAE1C,KAAK,iBAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,KAAA,CAAM,QAAQ,CAAA;AAAA,IAEnD,KAAK,eAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,MAAM,WAAW,CAAA;AAAA,IAElE,KAAK,MAAA;AACH,MAAA,OAAO,WAAA,CAAY,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAAA,IAEzC,KAAK,mBAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,OAAO,KAAK,CAAA;AAAA,IAE1C,KAAK,mBAAA,EAAqB;AAGxB,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,EAAC;AACxC,MAAA,MAAM,SAAA,GAAY,UAAA,CAAW,QAAA,CAAS,iBAAiB,CAAA,GACnD,MACA,UAAA,CAAW,QAAA,CAAS,uBAAuB,CAAA,GACzC,GAAA,GACA,CAAA;AAGN,MAAA,MAAM,mBAAA,GAAsB,OAAA;AAAA,QAC1B,KAAA,CAAM,gBAAA,GAAmB,GAAA,GAAM,SAAA,GAAY;AAAA,OAC7C;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,IAAA,EAAM,WAAA;AAAA,QACN,gBAAA,EAAkB;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,SAAS;AAGP,MAAA,OAAO,KAAA;AAAA,IACT;AAAA;AAEJ;;;ACrMO,IAAM,cAAA,GAAqD;AAAA,EAChE,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,UAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,YAAA;AAAA,EACZ,UAAA,EAAY,YAAA;AAAA,EACZ,OAAA,EAAS;AACX,CAAA;AAMO,IAAM,WAAA,GAA0C;AAAA,EACrD,MAAM,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,GAAA,EAAM,UAAU,IAAA,EAAK;AAAA,EACrD,WAAW,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,GAAA,EAAM,UAAU,IAAA,EAAK;AAAA,EAC1D,cAAc,EAAE,OAAA,EAAS,KAAM,OAAA,EAAS,GAAA,EAAM,UAAU,GAAA,EAAK;AAAA,EAC7D,QAAQ,EAAE,OAAA,EAAS,KAAM,OAAA,EAAS,GAAA,EAAM,UAAU,GAAA,EAAK;AAAA,EACvD,YAAY,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,GAAA,EAAM,UAAU,IAAA,EAAK;AAAA,EAC3D,YAAY,EAAE,OAAA,EAAS,KAAM,OAAA,EAAS,IAAA,EAAM,UAAU,GAAA,EAAK;AAAA,EAC3D,SAAS,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,GAAA,EAAM,UAAU,GAAA;AACrD,CAAA;AA8BO,IAAM,sBAAN,MAA0B;AAAA,EACvB,MAAA;AAAA,EACA,UAAA,uBAAmF,GAAA,EAAI;AAAA,EACvF,SAAA,GAAqB,KAAA;AAAA,EAE7B,WAAA,CAAY,OAAA,GAAsC,EAAC,EAAG;AACpD,IAAA,IAAA,CAAK,MAAA,GAAS,2BAAA,CAA4B,OAAA,CAAQ,OAAO,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA2B;AACzB,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAA,GAAkC;AAChC,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAG5C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,mBAAA,CAAoB,OAAO,CAAA;AAE5C,IAAA,OAAO,EAAE,QAAQ,GAAA,EAAI;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAA,GAAwD;AACtD,IAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK,OAAO,GAAA,EAAI;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,KAAA,EAA6B;AACvC,IAAA,IAAI,KAAK,SAAA,EAAW;AAEpB,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,IAAA;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAE5C,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACjC,MAAA,IAAA,CAAK,UAAA,CAAW,cAAc,EAAE,IAAA,EAAM,UAAU,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,IACxE;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,KAAA,EAA6B;AAChC,IAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,OAAA,EAAuB;AAC1B,IAAA,IAAI,KAAK,SAAA,EAAW;AAEpB,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AAG9C,IAAA,IACE,SAAA,CAAU,WAAA,KAAgB,IAAA,CAAK,MAAA,CAAO,eACtC,SAAA,CAAU,YAAA,KAAiB,IAAA,CAAK,MAAA,CAAO,YAAA,IACvC,SAAA,CAAU,SAAA,KAAc,IAAA,CAAK,OAAO,SAAA,EACpC;AACA,MAAA,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,EAAA,CACE,OACA,OAAA,EACY;AACZ,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG;AAC/B,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAA,kBAAO,IAAI,KAAK,CAAA;AAAA,IACtC;AACA,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,CAAG,IAAI,OAAgC,CAAA;AAEhE,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,OAAgC,CAAA;AAAA,IACrE,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,OAAA,EAAmB;AAC7C,IAAA,MAAM,EAAE,aAAa,QAAA,EAAU,YAAA,EAAc,aAAa,UAAA,EAAY,gBAAA,KAAqB,IAAA,CAAK,MAAA;AAGhG,IAAA,MAAM,YAAA,GAAgB,QAAA,GAAW,GAAA,GAAQ,YAAA,GAAe,OAAS,WAAA,GAAc,GAAA;AAG/E,IAAA,MAAM,YAAA,GAAgB,WAAA,GAAc,GAAA,GAAQ,WAAA,GAAc,IAAA;AAC1D,IAAA,MAAM,YAAA,GAAA,CAAgB,aAAa,GAAA,IAAO,GAAA;AAI1C,IAAA,MAAM,eAAe,gBAAA,GAAmB,GAAA;AAExC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,CAAQ,OAAA,GAAU,YAAY,CAAC,CAAA;AAAA,MAChE,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,OAAA,GAAU,YAAA,GAAe,YAAY,CAAC,CAAA;AAAA,MAC/E,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,CAAQ,QAAA,GAAW,YAAY,CAAC;AAAA,KACpE;AAAA,EACF;AAAA,EAEQ,UAAA,CACN,OACA,IAAA,EACM;AACN,IAAA,IAAA,CAAK,UAAA,CAAW,IAAI,KAAK,CAAA,EAAG,QAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,EAChE;AACF,CAAA;;;ACnLO,SAAS,YAAA,CAAa,OAAA,GAA+B,EAAC,EAAuB;AAClF,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,QAAA,GAAW,MAAK,GAAI,OAAA;AAG/C,EAAA,MAAM,aAAA,GAAgBC,OAAmC,IAAI,CAAA;AAE7D,EAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,IAAA,aAAA,CAAc,OAAA,GAAU,IAAI,mBAAA,CAAoB,EAAE,SAAS,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,aAAa,aAAA,CAAc,OAAA;AAGjC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAIH,QAAAA,CAAyB,UAAA,CAAW,UAAU,CAAA;AACxE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,QAAAA;AAAA,IAC5B,WAAW,gBAAA;AAAiB,GAC9B;AAGA,EAAA,MAAM,WAAA,GAAcG,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAGtB,EAAAD,UAAU,MAAM;AACd,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,EAAA,CAAG,QAAA,EAAU,CAAC,QAAA,KAAa;AAClD,MAAA,QAAA,CAAS,EAAE,GAAG,QAAA,EAAU,CAAA;AACxB,MAAA,UAAA,CAAW,UAAA,CAAW,kBAAkB,CAAA;AACxC,MAAA,WAAA,CAAY,UAAU,QAAQ,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,EAAM;AAAA,IACR,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,IAAI,QAAA,GAAW,YAAY,GAAA,EAAI;AAC/B,IAAA,IAAI,KAAA;AAEJ,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAiB;AAC/B,MAAA,MAAM,QAAQ,IAAA,GAAO,QAAA;AACrB,MAAA,QAAA,GAAW,IAAA;AAEX,MAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AAErB,MAAA,KAAA,GAAQ,sBAAsB,MAAM,CAAA;AAAA,IACtC,CAAA;AAEA,IAAA,KAAA,GAAQ,sBAAsB,MAAM,CAAA;AAEpC,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAGzB,EAAAA,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,CAAW,OAAA,EAAQ;AAAA,IACrB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,WAAA,GAAcD,WAAAA;AAAA,IAClB,CAAC,KAAA,KAA0B;AACzB,MAAA,UAAA,CAAW,YAAY,KAAK,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,IAAA,GAAOA,WAAAA;AAAA,IACX,CAAC,OAAA,KAAoB;AACnB,MAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAGA,EAAA,MAAM,IAAA,GAAO,WAAA;AAEb,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACzHO,IAAM,kBAAA,GAA0B;AAAA;AAAA,EAErC,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AA6NO,SAASG,SAAQ,KAAA,EAAuB;AAC7C,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AACvC;AAEO,SAAS,aAAA,GAAwB;AACtC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,YAAA,IAAgB,MAAA,EAAQ;AAC3D,IAAA,OAAO,OAAO,UAAA,EAAW;AAAA,EAC3B;AACA,EAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACnE;;;ACxMA,SAAS,uBAAA,CAAwB,QAAsB,eAAA,EAA2C;AAChG,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,EAAK;AACzB,EAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,IAAA,IAAI,CAAC,eAAA,IAAmB,eAAA,CAAgB,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,EAAG;AAC/D,MAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAKH;AAChB,EAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAiB,gBAAA,EAAkB,aAAY,GAAI,IAAA;AAEnE,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,gBAAgB,CAAA;AACzC,IAAA,IAAI,UAAU,CAAC,eAAA,IAAmB,gBAAgB,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI;AAC1E,MAAA,IAAI,CAAC,gBAAgB,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG,QAAA,CAAS,WAAW,CAAA,EAAG;AAC5D,QAAA,OAAO,KAAA,CAAM,OAAA;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,EAAK,EAAG;AACjC,IAAA,IAAI,mBAAmB,CAAC,eAAA,CAAgB,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,EAAG;AACjE,IAAA,IAAI,WAAA,IAAe,EAAE,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9D,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAuB,IAAA,EAAsB;AACpD,EAAA,OACE,IAAA,CAEG,OAAA,CAAQ,WAAA,EAAa,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,IAAK,GAAG,CAAA,CACvC,OAAA,CAAQ,SAAA,EAAW,QAAG,CAAA;AAE7B;AAEA,SAAS,uBAAuB,IAAA,EAAsB;AAEpD,EAAA,OAAO,sBAAA,CAAuB,IAAI,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AACvD;AAWO,SAAS,WAAW,KAAA,EAAkD;AAC3E,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,gBAAA,GAAmBA,QAAAA,CAAQ,OAAA,EAAS,gBAAA,IAAoB,CAAC,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAaA,QAAAA,CAAQ,OAAA,EAAS,UAAA,IAAc,GAAG,CAAA;AACrD,EAAA,MAAM,IAAA,GAAOA,QAAAA,CAAQ,OAAA,EAAS,IAAA,IAAS,IAAI,UAAW,CAAA;AAEtD,EAAA,MAAM,gBAAA,GAAmB,UAAU,gBAAA,IAAoB,UAAA;AACvD,EAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,IAAmB,SAAA;AAErD,EAAA,MAAM,kBACJ,MAAA,CAAO,UAAA,IAAc,oBAAoB,GAAA,IAAQ,IAAA,IAAQ,OAAO,UAAA,IAAc,GAAA;AAEhF,EAAA,MAAM,OAAA,GAAA,CACH,kBACG,WAAA,CAAY;AAAA,IACV,MAAA;AAAA,IACA,iBAAiB,MAAA,CAAO,eAAA;AAAA,IACxB,kBAAkB,QAAA,EAAU,OAAA;AAAA,IAC5B,WAAA,EAAa;AAAA,GACd,IACD,WAAA,CAAY;AAAA,IACV,MAAA;AAAA,IACA,iBAAiB,MAAA,CAAO,eAAA;AAAA,IACxB,kBAAkB,QAAA,EAAU,OAAA;AAAA,IAC5B,WAAA,EAAa;AAAA,GACd,MACL,WAAA,CAAY;AAAA,IACV,MAAA;AAAA,IACA,iBAAiB,MAAA,CAAO,eAAA;AAAA,IACxB,kBAAkB,QAAA,EAAU;AAAA,GAC7B,CAAA,IACD,uBAAA,CAAwB,MAAA,EAAQ,OAAO,eAAe,CAAA;AAExD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AAEA,EAAA,MAAM,eAAA,GAAkBA,QAAAA,CAAQ,QAAA,EAAU,WAAA,IAAe,IAAI,CAAA;AAC7D,EAAA,MAAM,cAAc,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,IAAI,CAAA,GAAI,eAAA;AAExE,EAAA,MAAM,QAAA,GAA2B;AAAA,IAC/B;AAAA,GACF;AAEA,EAAA,MAAM,WAAA,GACJ,OAAO,UAAA,IAAc,gBAAA,IAAoB,MACrC,sBAAA,CAAuB,IAAI,CAAA,GAC3B,sBAAA,CAAuB,IAAI,CAAA;AAEjC,EAAA,OAAO;AAAA,IACL,SAAS,aAAA,EAAc;AAAA,IACvB,KAAA;AAAA,IACA,IAAA,EAAM,WAAA;AAAA,IACN,QAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAc,YAAA,IAAgB,kBAAA;AAAA,IAC9B,QAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,qBAAqB,MAAA,CAAO;AAAA;AAC9B,GACF;AACF;AA0BO,SAAS,wBACd,KAAA,EACwB;AACxB,EAAA,MAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,GAAI,KAAA;AAE/B,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,kBAAkB,SAAA,CAAU,gBAAA;AAAA,IAC5B,YAAY,SAAA,CAAU,UAAA;AAAA,IACtB,MAAM,SAAA,CAAU;AAAA,GAClB;AAEA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,IAAgB,SAAA,CAAU,UAAA;AAEpD,EAAA,OAAO,UAAA,CAAW;AAAA,IAChB,GAAG,IAAA;AAAA,IACH,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AClNO,IAAM,uBAAA,GAA0B,CAAA,CAAE,IAAA,CAAK,CAAC,KAAK,CAAC,CAAA;AAC9C,IAAM,iBAAA,GAAoB,EAAE,IAAA,CAAK,CAAC,OAAO,WAAA,EAAa,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAC,CAAA;AAC5E,IAAM,0BAAA,GAA6B,EAAE,IAAA,CAAK,CAAC,OAAO,OAAA,EAAS,UAAA,EAAY,QAAA,EAAU,SAAS,CAAC,CAAA;AAM3F,IAAM,SAAA,GAAY,EAAE,MAAA,CAAO;AAAA,EAChC,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAChC,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAChC,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC;AACnC,CAAC,CAAA;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,MAAA,EAAQ,iBAAA;AAAA,EACR,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,EAAE,CAAA;AAAA,EACzB,YAAA,EAAc,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,YAAY,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,IAAI,CAAC;AACpC,CAAC,CAAA;AAEM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,MAAA,EAAQ,EAAE,OAAA,EAAQ;AAAA,EAClB,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrB,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACvC,OAAA,EAAS,qBAAA;AAAA,EACT,QAAA,EAAU,qBAAA;AAAA,EACV,MAAA,EAAQ,qBAAA;AAAA,EAER,qBAAA,EAAuB,sBAAsB,QAAA,EAAS;AAAA,EACtD,SAAA,EAAW,sBAAsB,QAAA,EAAS;AAAA,EAC1C,kBAAA,EAAoB,sBAAsB,QAAA,EAAS;AAAA,EACnD,SAAA,EAAW,sBAAsB,QAAA,EAAS;AAAA,EAC1C,GAAA,EAAK,sBAAsB,QAAA,EAAS;AAAA,EACpC,UAAA,EAAY,sBAAsB,QAAA,EAAS;AAAA,EAC3C,WAAA,EAAa,sBAAsB,QAAA;AACrC,CAAC,CAAA;AAEM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAM,EAAE,IAAA,CAAK,CAAC,OAAO,aAAA,EAAe,UAAA,EAAY,IAAI,CAAC,CAAA;AAAA,EACrD,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,CAAA;AAMM,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACvC,OAAA,EAAS,uBAAA;AAAA,EACT,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAE/B,QAAA,EAAU,EAAE,MAAA,CAAO;AAAA,IACjB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC7B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC3B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,IACtB,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC9B,YAAA,EAAc,SAAA;AAAA,IACd,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,MACf,UAAA,EAAY,EAAE,OAAA,EAAQ;AAAA,MACtB,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC/B,mBAAA,EAAqB,EAAE,OAAA;AAAQ,KAChC,CAAA;AAAA,IACD,iBAAA,EAAmB,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAAS,GAC/D,CAAA;AAAA,EAED,KAAA,EAAO,EAAE,MAAA,CAAO;AAAA,IACd,SAAA,EAAW,EAAE,MAAA,CAAO;AAAA,MAClB,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,MAC5B,KAAA,EAAO,EAAE,MAAA,CAAO;AAAA,QACd,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,QACpB,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,QAC9B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,OAC7B,CAAA;AAAA,MACD,KAAA,EAAO,EAAE,MAAA,CAAO;AAAA,QACd,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,QACzB,eAAA,EAAiB,0BAAA;AAAA,QACjB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,QACjC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,OAC7B,CAAA;AAAA,MACD,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,MACrD,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA;AAAS,KACxC,CAAA;AAAA,IAED,UAAU,CAAA,CACP,KAAA;AAAA,MACC,EAAE,MAAA,CAAO;AAAA,QACP,SAAS,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,IAAI,CAAC,CAAA;AAAA,QAC/B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,QAC7B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,QAC3B,KAAA,EAAO;AAAA,OACR;AAAA,MAEF,QAAA,EAAS;AAAA,IAEZ,WAAW,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IAC7C,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,iBAAiB,EAAE,QAAA;AAAS,GAC/C,CAAA;AAAA,EAED,OAAA,EAAS,EAAE,MAAA,CAAO;AAAA,IAChB,MAAA,EAAQ,EAAE,OAAA,EAAQ;AAAA,IAClB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC5B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC5B;AACH,CAAC,CAAA;AASM,SAAS,mBAAmB,UAAA,EAAiD;AAClF,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,CAAU,UAAU,CAAA;AACpD,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,EAC5C;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,OAAO,KAAA,EAAM;AAChD;ACtHO,SAAS,cAAA,CAAe,OAAA,GAAiC,EAAC,EAAyB;AACxF,EAAA,MAAM,EAAE,MAAA,GAAS,CAAA,EAAG,OAAA,EAAS,SAAQ,GAAI,OAAA;AAEzC,EAAA,MAAM,QAAA,GAAWD,OAAgC,IAAI,CAAA;AACrD,EAAA,MAAM,YAAA,GAAeA,OAAsB,IAAI,CAAA;AAE/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIH,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAGtD,EAAA,IAAI,CAAC,QAAA,CAAS,OAAA,IAAW,OAAO,UAAU,WAAA,EAAa;AACrD,IAAA,QAAA,CAAS,OAAA,GAAU,IAAI,KAAA,EAAM;AAAA,EAC/B;AAEA,EAAA,MAAM,IAAA,GAAOC,YAAY,MAAM;AAC7B,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAOA,WAAAA;AAAA,IACX,OAAO,MAAA,KAA0B;AAC/B,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,MACpE;AAEA,MAAA,QAAA,CAAS,IAAI,CAAA;AAGb,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,GAAA,CAAI,eAAA,CAAgB,aAAa,OAAO,CAAA;AACxC,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AAAA,MACzB;AAEA,MAAA,MAAM,MAAM,OAAO,MAAA,KAAW,WAAW,MAAA,GAAS,GAAA,CAAI,gBAAgB,MAAM,CAAA;AAC5E,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,YAAA,CAAa,OAAA,GAAU,GAAA;AAAA,MACzB;AAEA,MAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,MAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AAEZ,MAAA,IAAI;AACF,QAAA,MAAM,MAAM,IAAA,EAAK;AACjB,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,OAAA,GAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,sBAAA;AACrD,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,QAAA,CAAS,OAAO,CAAA;AAChB,QAAA,OAAA,GAAU,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AACzD,QAAA,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,OAAO,CAAA;AAAA,MACtD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,OAAA,IAAU;AAAA,IACZ,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAM,OAAA,GAAU,qBAAA;AAChB,MAAA,QAAA,CAAS,OAAO,CAAA;AAChB,MAAA,OAAA,GAAU,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,IAC9B,CAAA;AAEA,IAAA,KAAA,CAAM,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAC3C,IAAA,KAAA,CAAM,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAE3C,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,CAAM,mBAAA,CAAoB,SAAS,WAAW,CAAA;AAC9C,MAAA,KAAA,CAAM,mBAAA,CAAoB,SAAS,WAAW,CAAA;AAAA,IAChD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAAA,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,EAAK;AACL,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,GAAA,CAAI,eAAA,CAAgB,aAAa,OAAO,CAAA;AACxC,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAc,QAAA,CAAS;AAAA,GACzB;AACF;AC1FO,SAAS,WAAW,OAAA,EAA8C;AACvE,EAAA,MAAM,EAAE,QAAQ,OAAA,GAAU,IAAA,EAAM,YAAY,IAAA,EAAM,UAAA,GAAa,GAAA,EAAK,SAAA,EAAU,GAAI,OAAA;AAElF,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIF,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,CAAC,CAAA;AAE1C,EAAA,MAAM,MAAA,GAASG,OAAsB,IAAI,CAAA;AACzC,EAAA,MAAM,YAAA,GAAeA,OAAe,CAAC,CAAA;AACrC,EAAA,MAAM,eAAA,GAAkBA,OAAO,KAAK,CAAA;AAEpC,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ;AACvB,MAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,MAAA,WAAA,CAAY,CAAC,CAAA;AACb,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AAEvC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,IAAI,YAAA,EAAa;AACtC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,uBAAA,CAAwB,MAAM,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,aAAa,cAAA,EAAe;AAC7C,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,IAAA,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAEvB,IAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAEhD,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,QAAA,CAAS,uBAAuB,MAAM,CAAA;AACtC,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,QAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,QAAA,GAAA,IAAO,CAAA,GAAI,CAAA;AAAA,MACb;AACA,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,OAAO,MAAM,CAAA;AACzC,MAAA,WAAA,CAAY,GAAG,CAAA;AAEf,MAAA,MAAM,GAAA,GAAM,YAAY,GAAA,EAAI;AAE5B,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,YAAA,CAAa,OAAA,GAAU,GAAA;AAAA,MACzB;AAEA,MAAA,MAAM,QAAA,GAAW,GAAA,IAAO,SAAA,IAAa,GAAA,GAAM,aAAa,OAAA,IAAW,UAAA;AACnE,MAAA,iBAAA,CAAkB,QAAQ,CAAA;AAE1B,MAAA,IAAI,CAAC,eAAA,CAAgB,OAAA,IAAW,QAAA,EAAU;AACxC,QAAA,SAAA,IAAY;AAAA,MACd;AACA,MAAA,eAAA,CAAgB,OAAA,GAAU,QAAA;AAE1B,MAAA,MAAA,CAAO,OAAA,GAAU,sBAAsB,IAAI,CAAA;AAAA,IAC7C,CAAA;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,sBAAsB,IAAI,CAAA;AAE3C,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,MAAA,CAAO,OAAA,EAAS,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAA;AACvD,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,UAAA,EAAW;AAClB,QAAA,QAAA,CAAS,UAAA,EAAW;AAAA,MACtB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,YAAA,CAAa,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACrC,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,SAAS,SAAA,EAAW,UAAA,EAAY,SAAS,CAAC,CAAA;AAEtD,EAAA,OAAO,EAAE,gBAAgB,QAAA,EAAS;AACpC;;;AC1BO,SAAS,mBAAmB,OAAA,EAA8D;AAC/F,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA,GAAS,CAAA;AAAA,IACT,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,yBAAA,GAA4BG,QAAQ,MAAM;AAC9C,IAAA,IAAI,kBAAkB,OAAO,gBAAA;AAC7B,IAAA,IAAI,MAAA,CAAO,4BAA4B,OAAO,iBAAA;AAC9C,IAAA,IAAI,UAAU,OAAO,gBAAA;AACrB,IAAA,OAAO,OAAA;AAAA,EACT,GAAG,CAAC,gBAAA,EAAkB,MAAA,CAAO,0BAAA,EAA4B,QAAQ,CAAC,CAAA;AAElE,EAAA,MAAM,QAAA,GAAWF,OAA+B,IAAI,CAAA;AAEpD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIH,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAwC,IAAI,CAAA;AAClF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAuC,IAAI,CAAA;AAC/E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAA4B,IAAI,CAAA;AAElE,EAAA,MAAM,SAAS,cAAA,CAAe;AAAA,IAC5B,MAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACpB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAA,MAAM,eAAe,UAAA,CAAW;AAAA,IAC9B,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA,IAC3B,OAAA,EAAS,CAAC,CAAC,OAAA,EAAS,MAAA;AAAA,IACpB,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,YAAY,OAAA,EAAS,UAAA;AAAA,IACrB,WAAW,MAAM;AACf,MAAA,SAAA,IAAY;AAAA,IACd;AAAA,GACD,CAAA;AAED,EAAA,MAAM,MAAA,GAASC,YAAY,MAAM;AAC/B,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AACxB,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,IAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,IAAA,MAAA,CAAO,IAAA,EAAK;AAAA,EACd,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,aAAa,cAAA,EAAgB;AAElC,IAAA,MAAA,EAAO;AAAA,EACT,GAAG,CAAC,OAAA,EAAS,QAAQ,YAAA,CAAa,cAAA,EAAgB,MAAM,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQD,WAAAA;AAAA,IACZ,OAAO,MAAc,YAAA,KAAgC;AACnD,MAAA,MAAA,EAAO;AACP,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAEtB,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,QAAA,CAAS,OAAA,GAAU,UAAA;AAEnB,MAAA,IAAI;AACF,QAAA,MAAM,UAAU,UAAA,CAAW;AAAA,UACzB,IAAA;AAAA,UACA,UAAU,YAAA,EAAc,QAAA;AAAA,UACxB,OAAO,YAAA,EAAc,KAAA;AAAA,UACrB,cAAc,YAAA,EAAc,YAAA;AAAA,UAC5B,MAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAA,cAAA,CAAe,OAAO,CAAA;AAEtB,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,gBAAA,CAAiB,SAAS,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,CAAA;AACrF,QAAA,aAAA,CAAc,MAAM,CAAA;AAGpB,QAAA,IAAI,QAAgC,MAAA,CAAO,KAAA;AAC3C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,MAAA,GAAS,mBAAmB,KAAK,CAAA;AACvC,UAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,YAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,UACxD;AACA,UAAA,KAAA,GAAQ,MAAA,CAAO,IAAA;AAAA,QACjB;AAEA,QAAA,MAAM,SAAA,GACJ,yBAAA,KAA8B,iBAAA,KAC7B,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,OAAA,EAAS,MAAA,CAAA,IAC3B,CAAC,CAAC,QAAA;AAEJ,QAAA,IAAI,aAAa,QAAA,EAAU;AACzB,UAAA,KAAA,GAAQ,MAAM,QAAA,CAAS,YAAA,CAAa,EAAE,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AAC/D,UAAA,MAAM,MAAA,GAAS,mBAAmB,KAAK,CAAA;AACvC,UAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,YAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,UACxD;AACA,UAAA,KAAA,GAAQ,MAAA,CAAO,IAAA;AAAA,QACjB;AAEA,QAAA,IAAI,OAAO,0BAAA,KAA+B,CAAC,SAAS,KAAA,CAAM,OAAA,CAAQ,WAAW,IAAA,CAAA,EAAO;AAClF,UAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,QAC7E;AAGA,QAAA,MAAM,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAG9B,QAAA,IAAI,yBAAA,KAA8B,gBAAA,IAAoB,QAAA,IAAY,CAAC,KAAA,EAAO;AACxE,UAAA,KAAA,CAAM,YAAY;AAChB,YAAA,IAAI;AACF,cAAA,MAAM,CAAA,GAAI,MAAM,QAAA,CAAS,YAAA,CAAa,EAAE,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AACjE,cAAA,MAAM,MAAA,GAAS,mBAAmB,CAAC,CAAA;AACnC,cAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACrB,cAAA,YAAA,CAAa,OAAO,IAAkB,CAAA;AACtC,cAAA,OAAA,GAAU,OAAO,IAAkB,CAAA;AAAA,YACrC,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF,CAAA,GAAG;AAAA,QACL;AAEA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,OAAA,GAAU,KAAK,CAAA;AAAA,QACjB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,OAAA,GAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,yBAAA;AACrD,QAAA,QAAA,CAAS,OAAO,CAAA;AAChB,QAAA,OAAA,GAAU,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AACzD,QAAA,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,OAAO,CAAA;AAAA,MACtD,CAAA,SAAE;AACA,QAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,MACrB;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,yBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,YAAY,MAAA,CAAO,SAAA;AAAA,IACnB,KAAA;AAAA,IAEA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IAEA,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;AChLO,SAAS,mBACd,OAAA,EAC0B;AAC1B,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA,GAAW,IAAA;AAAA,IACX,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAGJ,EAAA,MAAM,kBAAkB,YAAA,CAAa;AAAA,IACnC,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACX,CAAA;AAGD,EAAA,MAAM,eAAe,kBAAA,CAAmB;AAAA,IACtC,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,MAC5B,gBAAA,EAAkB,gBAAgB,KAAA,CAAM,gBAAA;AAAA,MACxC,UAAA,EAAY,gBAAgB,KAAA,CAAM,UAAA;AAAA,MAClC,IAAA,EAAM,gBAAgB,KAAA,CAAM;AAAA,KAC9B;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAW,MAAM;AAEf,MAAA,eAAA,CAAgB,WAAA,CAAY,EAAE,IAAA,EAAM,cAAA,EAAgB,CAAA;AACpD,MAAA,SAAA,IAAY;AAAA,IACd,CAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,KAAA,GAAQA,WAAAA;AAAA,IACZ,OAAO,MAAc,YAAA,KAA6C;AAEhE,MAAA,MAAM,UAAU,uBAAA,CAAwB;AAAA,QACtC,IAAA;AAAA,QACA,UAAU,YAAA,EAAc,QAAA;AAAA,QACxB,OAAO,YAAA,EAAc,KAAA;AAAA,QACrB,cAAc,YAAA,EAAc,YAAA;AAAA,QAC5B,WAAW,eAAA,CAAgB,KAAA;AAAA,QAC3B,MAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACD,CAAA;AAGD,MAAA,MAAM,YAAA,CAAa,MAAM,IAAA,EAAM;AAAA,QAC7B,GAAG,YAAA;AAAA,QACH,cAAc,OAAA,CAAQ;AAAA,OACvB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,UAAU,YAAY;AAAA,GAChE;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,WAAW,eAAA,CAAgB,KAAA;AAAA,IAC3B,SAAS,eAAA,CAAgB,OAAA;AAAA,IACzB,iBAAiB,eAAA,CAAgB,WAAA;AAAA,IACjC,eAAe,eAAA,CAAgB,WAAA;AAAA;AAAA,IAC/B,eAAe,eAAA,CAAgB,IAAA;AAAA;AAAA,IAG/B,gBAAgB,YAAA,CAAa,cAAA;AAAA,IAC7B,YAAY,YAAA,CAAa,UAAA;AAAA,IACzB,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,aAAa,YAAA,CAAa,WAAA;AAAA,IAC1B,YAAY,YAAA,CAAa,UAAA;AAAA,IACzB,WAAW,YAAA,CAAa,SAAA;AAAA,IAExB,KAAA;AAAA,IACA,QAAQ,YAAA,CAAa;AAAA,GACvB;AACF","file":"index.js","sourcesContent":["/**\n * BBProvider - Root context provider for bb-ui\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useMemo,\n type ReactNode,\n} from 'react';\nimport type { Agent, AgentRun, BBConfig, SyncStatus } from '../protocol/types.js';\nimport { GliaErrorBoundary } from '../primitives/atoms/GliaErrorBoundary';\n\n// =============================================================================\n// Context Types\n// =============================================================================\n\ninterface BBContextValue {\n /** Configuration */\n config: BBConfig;\n\n /** Available agents */\n agents: Agent[];\n\n /** Currently executing runs */\n activeRuns: AgentRun[];\n\n /** All runs in this session */\n runHistory: AgentRun[];\n\n /** Session cost accumulator */\n totalCost: number;\n\n /** Global sync status */\n syncStatus: SyncStatus;\n\n /** Add a run to tracking */\n addRun: (run: AgentRun) => void;\n\n /** Update a run */\n updateRun: (runId: string, updates: Partial<AgentRun>) => void;\n\n /** Set global sync status */\n setSyncStatus: (status: SyncStatus) => void;\n\n /** Get an agent by ID */\n getAgent: (agentId: string) => Agent | undefined;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst BBContext = createContext<BBContextValue | null>(null);\n\n// =============================================================================\n// Provider Props\n// =============================================================================\n\nexport interface BBProviderProps {\n children: ReactNode;\n\n /** Configuration for bb-ui */\n config: BBConfig;\n\n /** Available agents */\n agents?: Agent[];\n\n /** Initial sync status */\n initialSyncStatus?: SyncStatus;\n}\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\nexport function BBProvider({\n children,\n config,\n agents = [],\n initialSyncStatus = 'synced',\n}: BBProviderProps) {\n const [activeRuns, setActiveRuns] = useState<AgentRun[]>([]);\n const [runHistory, setRunHistory] = useState<AgentRun[]>([]);\n const [syncStatus, setSyncStatus] = useState<SyncStatus>(initialSyncStatus);\n\n // Calculate total cost from run history\n const totalCost = useMemo(() => {\n return runHistory.reduce((sum, run) => sum + (run.cost ?? 0), 0);\n }, [runHistory]);\n\n // Add a new run\n const addRun = useCallback((run: AgentRun) => {\n setActiveRuns((prev) => [...prev, run]);\n setRunHistory((prev) => [...prev, run]);\n }, []);\n\n // Update an existing run\n const updateRun = useCallback((runId: string, updates: Partial<AgentRun>) => {\n const updateInList = (runs: AgentRun[]) =>\n runs.map((run) => (run.id === runId ? { ...run, ...updates } : run));\n\n setActiveRuns((prev) => {\n const updated = updateInList(prev);\n // Remove completed/failed/cancelled runs from active\n return updated.filter(\n (run) => run.status === 'idle' || run.status === 'running'\n );\n });\n\n setRunHistory(updateInList);\n }, []);\n\n // Get agent by ID\n const getAgent = useCallback(\n (agentId: string) => agents.find((a) => a.id === agentId),\n [agents]\n );\n\n const value = useMemo<BBContextValue>(\n () => ({\n config,\n agents,\n activeRuns,\n runHistory,\n totalCost,\n syncStatus,\n addRun,\n updateRun,\n setSyncStatus,\n getAgent,\n }),\n [\n config,\n agents,\n activeRuns,\n runHistory,\n totalCost,\n syncStatus,\n addRun,\n updateRun,\n getAgent,\n ]\n );\n\n return (\n <BBContext.Provider value={value}>\n <GliaErrorBoundary variant=\"fullscreen\">\n {children}\n </GliaErrorBoundary>\n </BBContext.Provider>\n );\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Access the bb-ui context\n */\nexport function useBBContext(): BBContextValue {\n const context = useContext(BBContext);\n if (!context) {\n throw new Error('useBBContext must be used within a BBProvider');\n }\n return context;\n}\n\n/**\n * Check if we're inside a BBProvider\n */\nexport function useBBContextOptional(): BBContextValue | null {\n return useContext(BBContext);\n}\n","/**\n * useRunStream - Hook for streaming run events\n *\n * Implements dual EventSource + polling pattern for resilient real-time updates.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { RunEvent, RunStatus, AgentRun } from '../protocol/types.js';\nimport { useBBContext } from '../components/BBProvider.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseRunStreamOptions {\n /** Polling interval in ms (default: 4000) */\n pollInterval?: number;\n\n /** Whether to use polling as primary (if EventSource unavailable) */\n preferPolling?: boolean;\n\n /** Called on each event */\n onEvent?: (event: RunEvent) => void;\n\n /** Called when run completes */\n onComplete?: (run: AgentRun) => void;\n\n /** Called on error */\n onError?: (error: Error) => void;\n}\n\nexport interface UseRunStreamReturn {\n /** All received events */\n events: RunEvent[];\n\n /** Most recent event */\n latestEvent: RunEvent | null;\n\n /** Derived run status */\n status: RunStatus;\n\n /** Whether EventSource is connected */\n isConnected: boolean;\n\n /** Current run data (if available) */\n run: AgentRun | null;\n\n /** Manually disconnect */\n disconnect: () => void;\n\n /** Manually reconnect */\n reconnect: () => void;\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function useRunStream(\n runId: string | null,\n options: UseRunStreamOptions = {}\n): UseRunStreamReturn {\n const { pollInterval = 4000, preferPolling = false, onEvent, onComplete, onError } = options;\n\n const { config } = useBBContext();\n\n const [events, setEvents] = useState<RunEvent[]>([]);\n const [latestEvent, setLatestEvent] = useState<RunEvent | null>(null);\n const [status, setStatus] = useState<RunStatus>('idle');\n const [isConnected, setIsConnected] = useState(false);\n const [run, setRun] = useState<AgentRun | null>(null);\n\n const eventSourceRef = useRef<EventSource | null>(null);\n const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const isActiveRef = useRef(true);\n\n // Handle incoming event\n const handleEvent = useCallback(\n (event: RunEvent) => {\n if (!isActiveRef.current) return;\n\n setEvents((prev) => [...prev, event]);\n setLatestEvent(event);\n onEvent?.(event);\n\n // Update status from event\n if (event.data?.status) {\n setStatus(event.data.status);\n }\n\n // Handle completion events\n if (event.type === 'completed' || event.type === 'failed' || event.type === 'cancelled') {\n const finalStatus =\n event.type === 'completed'\n ? 'completed'\n : event.type === 'failed'\n ? 'failed'\n : 'cancelled';\n setStatus(finalStatus);\n\n if (event.data?.run) {\n setRun(event.data.run);\n if (event.type === 'completed') {\n onComplete?.(event.data.run);\n }\n }\n }\n },\n [onEvent, onComplete]\n );\n\n // Setup EventSource\n const setupEventSource = useCallback(() => {\n if (!runId || preferPolling) return;\n\n const url = `${config.apiBaseUrl}/runs/${runId}/events`;\n const eventSource = new EventSource(url);\n\n eventSource.onopen = () => {\n setIsConnected(true);\n handleEvent({\n type: 'connected',\n runId,\n timestamp: Date.now(),\n });\n };\n\n eventSource.onmessage = (e) => {\n try {\n const data = JSON.parse(e.data);\n handleEvent({\n type: data.type ?? 'status',\n runId,\n timestamp: Date.now(),\n data,\n });\n } catch (err) {\n console.error('Failed to parse event:', err);\n }\n };\n\n eventSource.onerror = () => {\n setIsConnected(false);\n // EventSource will auto-reconnect, but we'll start polling as fallback\n startPolling();\n };\n\n eventSourceRef.current = eventSource;\n }, [runId, config.apiBaseUrl, preferPolling, handleEvent]);\n\n // Setup polling\n const startPolling = useCallback(() => {\n if (!runId || pollingIntervalRef.current) return;\n\n const poll = async () => {\n if (!isActiveRef.current || !runId) return;\n\n try {\n const response = await fetch(`${config.apiBaseUrl}/runs/${runId}`, {\n headers: config.headers,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n handleEvent({\n type: 'status',\n runId,\n timestamp: Date.now(),\n data: {\n status: data.status,\n output: data.output,\n run: data,\n },\n });\n\n // Stop polling if run is complete\n if (data.status === 'completed' || data.status === 'failed' || data.status === 'cancelled') {\n stopPolling();\n handleEvent({\n type: data.status,\n runId,\n timestamp: Date.now(),\n data: { run: data },\n });\n }\n } catch (err) {\n if (err instanceof Error) {\n onError?.(err);\n }\n }\n };\n\n // Initial poll\n poll();\n\n // Setup interval\n pollingIntervalRef.current = setInterval(poll, pollInterval);\n }, [runId, config, pollInterval, handleEvent, onError]);\n\n const stopPolling = useCallback(() => {\n if (pollingIntervalRef.current) {\n clearInterval(pollingIntervalRef.current);\n pollingIntervalRef.current = null;\n }\n }, []);\n\n // Disconnect everything\n const disconnect = useCallback(() => {\n isActiveRef.current = false;\n\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n }\n\n stopPolling();\n setIsConnected(false);\n }, [stopPolling]);\n\n // Reconnect\n const reconnect = useCallback(() => {\n disconnect();\n isActiveRef.current = true;\n\n // Reset state\n setEvents([]);\n setLatestEvent(null);\n setStatus('idle');\n\n // Restart\n if (preferPolling) {\n startPolling();\n } else {\n setupEventSource();\n }\n }, [disconnect, preferPolling, startPolling, setupEventSource]);\n\n // Effect: Setup on mount / runId change\n useEffect(() => {\n if (!runId) {\n disconnect();\n return;\n }\n\n isActiveRef.current = true;\n setEvents([]);\n setLatestEvent(null);\n setStatus('running');\n\n if (preferPolling) {\n startPolling();\n } else {\n setupEventSource();\n // Also start polling as fallback with longer interval\n setTimeout(() => {\n if (isActiveRef.current && !isConnected) {\n startPolling();\n }\n }, 2000);\n }\n\n return () => {\n disconnect();\n };\n }, [runId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n events,\n latestEvent,\n status,\n isConnected,\n run,\n disconnect,\n reconnect,\n };\n}\n\n// =============================================================================\n// Utility: Subscribe to run events (non-hook version)\n// =============================================================================\n\nexport function subscribeToRunEvents(\n apiBaseUrl: string,\n runId: string,\n callback: (event: RunEvent) => void,\n options: { headers?: Record<string, string> } = {}\n): () => void {\n const url = `${apiBaseUrl}/runs/${runId}/events`;\n const eventSource = new EventSource(url);\n\n eventSource.onopen = () => {\n callback({\n type: 'connected',\n runId,\n timestamp: Date.now(),\n });\n };\n\n eventSource.onmessage = (e) => {\n try {\n const data = JSON.parse(e.data);\n callback({\n type: data.type ?? 'status',\n runId,\n timestamp: Date.now(),\n data,\n });\n } catch (err) {\n console.error('Failed to parse event:', err);\n }\n };\n\n eventSource.onerror = () => {\n // EventSource handles reconnection automatically\n };\n\n return () => eventSource.close();\n}\n","import { useEffect, useRef } from 'react';\nimport { useRunStream } from '../../hooks/useRunStream.js';\nimport type { RunStatus } from '../../protocol/types.js';\nimport type { OverlayToken } from '../overlay.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface RunSpeechCueMap {\n onStart?: OverlayToken;\n onComplete?: OverlayToken;\n onFail?: OverlayToken;\n onCancel?: OverlayToken;\n}\n\nexport interface UseRunSpeechCuesOptions {\n runId: string | null;\n enabled?: boolean;\n\n /**\n * Called with the selected overlay token. Typical implementation calls\n * `overlay.speakToken(token, { runId })`.\n */\n emit: (token: OverlayToken, args: { runId: string; status: RunStatus }) => void | Promise<void>;\n\n cues?: RunSpeechCueMap;\n\n /**\n * Minimum time between cue emissions (prevents spam on flappy status updates).\n */\n cooldownMs?: number;\n}\n\n// =============================================================================\n// Defaults\n// =============================================================================\n\nexport const DEFAULT_RUN_SPEECH_CUES: Required<RunSpeechCueMap> = {\n onStart: 'hold',\n onComplete: 'done',\n onFail: 'error',\n onCancel: 'warning',\n};\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useRunSpeechCues(options: UseRunSpeechCuesOptions): void {\n const { runId, enabled = true, emit, cues, cooldownMs = 800 } = options;\n\n const { status } = useRunStream(runId);\n\n const prevStatusRef = useRef<RunStatus | null>(null);\n const lastEmitAtRef = useRef<number>(0);\n\n useEffect(() => {\n if (!enabled) return;\n if (!runId) return;\n\n const prev = prevStatusRef.current;\n prevStatusRef.current = status;\n\n if (prev === status) return;\n\n const now = Date.now();\n if (now - lastEmitAtRef.current < cooldownMs) return;\n\n const cueMap = { ...DEFAULT_RUN_SPEECH_CUES, ...(cues ?? {}) };\n\n let token: OverlayToken | null = null;\n if (status === 'running') token = cueMap.onStart;\n if (status === 'completed') token = cueMap.onComplete;\n if (status === 'failed') token = cueMap.onFail;\n if (status === 'cancelled') token = cueMap.onCancel;\n\n if (!token) return;\n\n lastEmitAtRef.current = now;\n void emit(token, { runId, status });\n }, [enabled, runId, status, emit, cues, cooldownMs]);\n}\n\n","import type { AVO } from '../emotion/types.js';\n\n// =============================================================================\n// Cognitive Mode\n// =============================================================================\n\nexport type CognitiveMode =\n | 'idle'\n | 'listening'\n | 'deliberating'\n | 'acting'\n | 'explaining'\n | 'recovering'\n | 'blocked';\n\nexport type CognitiveSubmode =\n | 'reading'\n | 'searching'\n | 'verifying'\n | 'waiting'\n | 'writing'\n | 'tool_call';\n\n// =============================================================================\n// Continuous Signals (all normalized 0..1)\n// =============================================================================\n\nexport interface CognitionSignals {\n attention: number;\n workload: number;\n timePressure: number;\n planDrift: number;\n costPressure: number;\n risk: number;\n uncertainty: number;\n confidence: number;\n errorStress: number;\n}\n\n// =============================================================================\n// Persona Signals\n// =============================================================================\n\nexport interface PersonaSignals {\n personaAnchor: number;\n personaDriftRisk: number;\n personaStyle?: string[];\n}\n\n// =============================================================================\n// Dynamics (kernel integration)\n// =============================================================================\n\nexport interface TrapWarning {\n stateId: string;\n reason: string;\n recommendation: string;\n severity?: 'info' | 'warning' | 'danger';\n}\n\nexport interface DetailedBalance {\n chi2PerNdf: number;\n passed: boolean;\n threshold: number;\n}\n\nexport interface DynamicsState {\n potentialV?: number;\n actionRate?: number;\n detailedBalance?: DetailedBalance;\n traps?: TrapWarning[];\n}\n\n// =============================================================================\n// Personality + Policy (cockpit integration)\n// =============================================================================\n\nexport interface PersonalityConfig {\n style: 'professional' | 'casual' | 'terse' | 'verbose';\n riskTolerance: 'conservative' | 'moderate' | 'aggressive';\n autonomy: 'low' | 'medium' | 'high' | 'full';\n}\n\nexport interface PolicyConfig {\n safetyMode: boolean;\n trustTier?: string;\n}\n\n// =============================================================================\n// Evidence (verification-first)\n// =============================================================================\n\nexport type EvidenceRef =\n | { type: 'run'; runId: string }\n | { type: 'run_receipt'; receiptHash: string }\n | { type: 'artifact'; path: string; digest?: string }\n | { type: 'ui'; componentId: string; note?: string };\n\n// =============================================================================\n// Full Cognition State\n// =============================================================================\n\nexport interface CognitionState extends CognitionSignals, PersonaSignals {\n mode: CognitiveMode;\n submode?: CognitiveSubmode;\n focusRunId?: string;\n\n dynamics?: DynamicsState;\n personality?: PersonalityConfig;\n policy?: PolicyConfig;\n\n moodAVO: AVO;\n emotionAVO: AVO;\n}\n\n// =============================================================================\n// Cognition Events\n// =============================================================================\n\nexport type CognitionEvent =\n | { type: 'ui.input_received'; intensity?: number }\n | { type: 'ui.user_idle' }\n | { type: 'ui.interrupt'; intensity?: number }\n | { type: 'run.event'; runId: string; status: string; progress?: number }\n | { type: 'run.started'; runId: string }\n | { type: 'run.completed'; runId: string; success: boolean }\n | { type: 'intensity.update'; values: Partial<CognitionSignals> }\n | { type: 'signals.update'; signals: Partial<CognitionSignals> }\n | { type: 'dynamics.update'; dynamics: DynamicsState }\n | { type: 'policy.update'; policy?: PolicyConfig; personality?: PersonalityConfig }\n | { type: 'text.user_message'; text: string; categories?: string[] }\n | { type: 'tick'; deltaMs: number };\n\n// =============================================================================\n// Cognition Snapshot (serialization)\n// =============================================================================\n\nexport interface CognitionSnapshot {\n version: '1.0';\n timestamp: number;\n state: CognitionState;\n recentEvents?: Array<{ t: number; event: CognitionEvent }>;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nconst DEFAULT_AVO: AVO = { arousal: 0.25, valence: 0.6, openness: 0.35 };\n\nexport function createInitialCognitionState(\n overrides?: Partial<CognitionState>\n): CognitionState {\n return {\n mode: 'idle',\n attention: 0.3,\n workload: 0,\n timePressure: 0,\n planDrift: 0,\n costPressure: 0,\n risk: 0,\n uncertainty: 0.2,\n confidence: 0.8,\n errorStress: 0,\n personaAnchor: 1,\n personaDriftRisk: 0,\n moodAVO: { ...DEFAULT_AVO },\n emotionAVO: { ...DEFAULT_AVO },\n ...overrides,\n };\n}\n","// packages/bb-ui/src/cognition/reducers.ts\n\n/**\n * Cognition State Reducers\n *\n * Pure functions for updating cognition state based on events and time decay.\n */\n\nimport type {\n CognitionState,\n CognitionEvent,\n CognitiveMode,\n CognitionSignals,\n DynamicsState,\n PolicyConfig,\n PersonalityConfig,\n} from './types.js';\nimport { clamp01 } from './types.js';\n\n/**\n * Trigger types that cause mode transitions\n */\nexport type CognitionTrigger =\n | 'ui.input_received'\n | 'ui.user_idle'\n | 'ui.interrupt'\n | 'run.started'\n | 'run.completed'\n | 'run.event';\n\n/**\n * Maps trigger events to resulting cognitive modes\n */\nexport const MODE_TRANSITION_MAP: Record<CognitionTrigger, CognitiveMode> = {\n 'ui.input_received': 'listening',\n 'ui.user_idle': 'idle',\n 'ui.interrupt': 'listening',\n 'run.started': 'deliberating',\n 'run.completed': 'idle',\n 'run.event': 'deliberating',\n};\n\n/**\n * Decay rates per second for various signals\n */\nexport const DECAY_RATES: Record<'errorStress' | 'timePressure' | 'planDrift', number> = {\n errorStress: 0.1, // Decays 10% per second\n timePressure: 0.05, // Decays 5% per second\n planDrift: 0.08, // Decays 8% per second\n};\n\n/**\n * Reduce signals from a signals.update event\n */\nfunction reduceSignals(\n state: CognitionState,\n signals: Partial<CognitionSignals>\n): CognitionState {\n return {\n ...state,\n attention: signals.attention !== undefined ? clamp01(signals.attention) : state.attention,\n workload: signals.workload !== undefined ? clamp01(signals.workload) : state.workload,\n risk: signals.risk !== undefined ? clamp01(signals.risk) : state.risk,\n timePressure: signals.timePressure !== undefined ? clamp01(signals.timePressure) : state.timePressure,\n errorStress: signals.errorStress !== undefined ? clamp01(signals.errorStress) : state.errorStress,\n planDrift: signals.planDrift !== undefined ? clamp01(signals.planDrift) : state.planDrift,\n costPressure: signals.costPressure !== undefined ? clamp01(signals.costPressure) : state.costPressure,\n uncertainty: signals.uncertainty !== undefined ? clamp01(signals.uncertainty) : state.uncertainty,\n confidence: signals.confidence !== undefined ? clamp01(signals.confidence) : state.confidence,\n };\n}\n\n/**\n * Reduce dynamics state update\n */\nfunction reduceDynamicsUpdate(\n state: CognitionState,\n dynamics: DynamicsState\n): CognitionState {\n return {\n ...state,\n dynamics,\n };\n}\n\n/**\n * Reduce policy/personality update\n */\nfunction reducePolicyUpdate(\n state: CognitionState,\n policy?: PolicyConfig,\n personality?: PersonalityConfig\n): CognitionState {\n return {\n ...state,\n policy: policy ?? state.policy,\n personality: personality ?? state.personality,\n };\n}\n\n/**\n * Reduce mode transitions based on events\n */\nfunction reduceModeTransition(\n state: CognitionState,\n event: CognitionEvent\n): CognitionState {\n const trigger = event.type as CognitionTrigger;\n const newMode = MODE_TRANSITION_MAP[trigger];\n\n if (!newMode) {\n return state;\n }\n\n let focusRunId = state.focusRunId;\n let errorStress = state.errorStress;\n let mode = newMode;\n\n // Handle run-related events\n if (event.type === 'run.started') {\n focusRunId = event.runId;\n } else if (event.type === 'run.completed') {\n focusRunId = undefined;\n if (!event.success) {\n errorStress = clamp01(state.errorStress + 0.2);\n mode = 'recovering';\n }\n } else if (event.type === 'run.event') {\n focusRunId = event.runId;\n }\n\n return {\n ...state,\n mode,\n focusRunId,\n errorStress,\n };\n}\n\n/**\n * Apply exponential decay to time-based signals\n */\nexport function reduceDecay(\n state: CognitionState,\n deltaMs: number\n): CognitionState {\n const deltaSec = deltaMs / 1000;\n\n // Exponential decay: value * e^(-rate * time)\n const errorStress = clamp01(\n state.errorStress * Math.exp(-DECAY_RATES.errorStress * deltaSec)\n );\n const timePressure = clamp01(\n state.timePressure * Math.exp(-DECAY_RATES.timePressure * deltaSec)\n );\n const planDrift = clamp01(\n state.planDrift * Math.exp(-DECAY_RATES.planDrift * deltaSec)\n );\n\n return {\n ...state,\n errorStress,\n timePressure,\n planDrift,\n };\n}\n\n/**\n * Main event reducer - handles all cognition events\n */\nexport function reduceEvent(\n state: CognitionState,\n event: CognitionEvent\n): CognitionState {\n switch (event.type) {\n case 'signals.update':\n return reduceSignals(state, event.signals);\n\n case 'intensity.update':\n return reduceSignals(state, event.values);\n\n case 'dynamics.update':\n return reduceDynamicsUpdate(state, event.dynamics);\n\n case 'policy.update':\n return reducePolicyUpdate(state, event.policy, event.personality);\n\n case 'tick':\n return reduceDecay(state, event.deltaMs);\n\n case 'ui.input_received':\n case 'ui.user_idle':\n case 'ui.interrupt':\n case 'run.started':\n case 'run.completed':\n case 'run.event':\n return reduceModeTransition(state, event);\n\n case 'text.user_message': {\n // Text messages transition to listening mode and update persona drift risk\n // based on message categories per spec section 7.5\n const categories = event.categories ?? [];\n const driftRisk = categories.includes('meta_reflection')\n ? 0.3\n : categories.includes('vulnerable_disclosure')\n ? 0.4\n : 0;\n\n // Exponential smoothing: 70% previous, 30% new\n const newPersonaDriftRisk = clamp01(\n state.personaDriftRisk * 0.7 + driftRisk * 0.3\n );\n\n return {\n ...state,\n mode: 'listening',\n personaDriftRisk: newPersonaDriftRisk,\n };\n }\n\n default: {\n // Exhaustive check - TypeScript will error if we miss a case\n const _exhaustive: never = event;\n return state;\n }\n }\n}\n","// packages/bb-ui/src/cognition/controller.ts\n\n/**\n * CognitionController manages the cognitive state lifecycle for the Glyph character.\n *\n * It handles:\n * - Cognitive mode transitions (idle, listening, deliberating, acting, etc.)\n * - Continuous signal processing (attention, workload, risk, etc.)\n * - Event-driven state changes from UI and kernel events\n * - Emotion bridge (mood and emotion AVO dimensions)\n * - Time-based decay of stress signals\n */\n\nimport type { AVO, AnchorState } from '../emotion/types.js';\nimport type {\n CognitionState,\n CognitionEvent,\n CognitiveMode,\n} from './types.js';\nimport { createInitialCognitionState } from './types.js';\nimport { reduceEvent, reduceDecay } from './reducers.js';\n\n// =============================================================================\n// Mode Mappings\n// =============================================================================\n\n/**\n * Maps cognitive modes to emotion anchor states for visual representation\n */\nexport const MODE_TO_ANCHOR: Record<CognitiveMode, AnchorState> = {\n idle: 'idle',\n listening: 'listening',\n deliberating: 'thinking',\n acting: 'focused',\n explaining: 'explaining',\n recovering: 'recovering',\n blocked: 'concerned',\n};\n\n/**\n * Default AVO values for each cognitive mode\n * These are the target emotional states for each mode\n */\nexport const MODE_TO_AVO: Record<CognitiveMode, AVO> = {\n idle: { arousal: 0.25, valence: 0.60, openness: 0.35 },\n listening: { arousal: 0.45, valence: 0.70, openness: 0.05 },\n deliberating: { arousal: 0.60, valence: 0.60, openness: 0.40 },\n acting: { arousal: 0.70, valence: 0.70, openness: 0.50 },\n explaining: { arousal: 0.55, valence: 0.80, openness: 0.85 },\n recovering: { arousal: 0.40, valence: 0.45, openness: 0.40 },\n blocked: { arousal: 0.55, valence: 0.30, openness: 0.30 },\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype EventHandler<T> = (data: T) => void;\n\nexport interface CognitionControllerEvents {\n /** Emitted when any state change occurs */\n change: CognitionState;\n /** Emitted when mode changes */\n modeChange: { from: CognitiveMode; to: CognitiveMode };\n}\n\nexport interface CognitionControllerOptions {\n /** Initial state overrides */\n initial?: Partial<CognitionState>;\n}\n\nexport interface EmotionTarget {\n /** The anchor state name for the current mode */\n anchor: AnchorState;\n /** The target AVO values adjusted by signals */\n avo: AVO;\n}\n\n/**\n * CognitionController manages the cognitive state lifecycle for the Glyph character.\n */\nexport class CognitionController {\n private _state: CognitionState;\n private _listeners: Map<keyof CognitionControllerEvents, Set<EventHandler<unknown>>> = new Map();\n private _disposed: boolean = false;\n\n constructor(options: CognitionControllerOptions = {}) {\n this._state = createInitialCognitionState(options.initial);\n }\n\n /**\n * Get current cognition state\n */\n getState(): CognitionState {\n return { ...this._state };\n }\n\n /**\n * Get the emotion target for the current cognitive state\n * Returns anchor state and AVO values adjusted by signals\n */\n getEmotionTarget(): EmotionTarget {\n const anchor = MODE_TO_ANCHOR[this._state.mode];\n const baseAVO = MODE_TO_AVO[this._state.mode];\n\n // Adjust AVO based on signals\n const avo = this._adjustAVOBySignals(baseAVO);\n\n return { anchor, avo };\n }\n\n /**\n * Get emotion bridge - derives anchor and AVO from cognitive state\n * @deprecated Use getEmotionTarget() instead\n */\n getEmotionBridge(): { anchor?: AnchorState; avo?: AVO } {\n const target = this.getEmotionTarget();\n return { anchor: target.anchor, avo: target.avo };\n }\n\n /**\n * Handle a cognition event and update state\n */\n handleEvent(event: CognitionEvent): void {\n if (this._disposed) return;\n\n const prevMode = this._state.mode;\n this._state = reduceEvent(this._state, event);\n\n if (this._state.mode !== prevMode) {\n this._emitEvent('modeChange', { from: prevMode, to: this._state.mode });\n }\n\n this._emitEvent('change', this._state);\n }\n\n /**\n * Process an event and update state\n * @deprecated Use handleEvent() instead\n */\n emit(event: CognitionEvent): void {\n this.handleEvent(event);\n }\n\n /**\n * Update tick - call each frame with delta time in milliseconds\n * Applies time-based decay to stress signals\n */\n tick(deltaMs: number): void {\n if (this._disposed) return;\n\n const prevState = this._state;\n this._state = reduceDecay(this._state, deltaMs);\n\n // Only emit change if state actually changed\n if (\n prevState.errorStress !== this._state.errorStress ||\n prevState.timePressure !== this._state.timePressure ||\n prevState.planDrift !== this._state.planDrift\n ) {\n this._emitEvent('change', this._state);\n }\n }\n\n /**\n * Subscribe to controller events\n * Returns unsubscribe function\n */\n on<K extends keyof CognitionControllerEvents>(\n event: K,\n handler: EventHandler<CognitionControllerEvents[K]>\n ): () => void {\n if (!this._listeners.has(event)) {\n this._listeners.set(event, new Set());\n }\n this._listeners.get(event)!.add(handler as EventHandler<unknown>);\n\n return () => {\n this._listeners.get(event)?.delete(handler as EventHandler<unknown>);\n };\n }\n\n /**\n * Dispose controller and clean up resources\n */\n dispose(): void {\n this._disposed = true;\n this._listeners.clear();\n }\n\n /**\n * Adjust AVO values based on current signal levels\n */\n private _adjustAVOBySignals(baseAVO: AVO): AVO {\n const { errorStress, workload, timePressure, uncertainty, confidence, personaDriftRisk } = this._state;\n\n // Arousal increases with workload, time pressure, and error stress\n const arousalBoost = (workload * 0.2) + (timePressure * 0.15) + (errorStress * 0.1);\n\n // Valence decreases with error stress and uncertainty\n const valenceDrops = (errorStress * 0.3) + (uncertainty * 0.15);\n const valenceBoost = (confidence - 0.5) * 0.2; // Confidence above 0.5 boosts valence\n\n // Openness decreases with persona drift risk (more grounded when drift risk is high)\n // Per spec section 7.6: high drift risk should reduce openness to signal groundedness\n const opennessDrop = personaDriftRisk * 0.3;\n\n return {\n arousal: Math.max(0, Math.min(1, baseAVO.arousal + arousalBoost)),\n valence: Math.max(0, Math.min(1, baseAVO.valence - valenceDrops + valenceBoost)),\n openness: Math.max(0, Math.min(1, baseAVO.openness - opennessDrop)),\n };\n }\n\n private _emitEvent<K extends keyof CognitionControllerEvents>(\n event: K,\n data: CognitionControllerEvents[K]\n ): void {\n this._listeners.get(event)?.forEach((handler) => handler(data));\n }\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { AVO, AnchorState } from '../../emotion/types.js';\nimport type { CognitionState, CognitionEvent } from '../types.js';\nimport { CognitionController, type CognitionControllerOptions, type EmotionTarget } from '../controller.js';\n\nexport interface UseCognitionOptions extends CognitionControllerOptions {\n onChange?: (state: CognitionState) => void;\n autoTick?: boolean;\n}\n\nexport interface UseCognitionResult {\n state: CognitionState;\n emotion: EmotionTarget;\n handleEvent: (event: CognitionEvent) => void;\n tick: (deltaMs: number) => void;\n /** @deprecated Use handleEvent instead */\n emit: (event: CognitionEvent) => void;\n}\n\n/**\n * React hook for managing Glyph cognition state.\n *\n * Creates a CognitionController and provides reactive state updates.\n * Automatically handles RAF-based animation when autoTick is true (default).\n *\n * @example\n * ```tsx\n * const { state, emotion, emit, tick } = useCognition({\n * initial: { mode: 'idle' },\n * onChange: (state) => console.log('Cognition changed:', state),\n * });\n *\n * // Handle agent events\n * emit({ type: 'run.started', runId: 'r1' });\n *\n * // Access emotion bridge for rendering\n * console.log(emotion.anchor, emotion.avo);\n * ```\n */\nexport function useCognition(options: UseCognitionOptions = {}): UseCognitionResult {\n const { initial, onChange, autoTick = true } = options;\n\n // Create controller ref (stable across renders)\n const controllerRef = useRef<CognitionController | null>(null);\n\n if (!controllerRef.current) {\n controllerRef.current = new CognitionController({ initial });\n }\n\n const controller = controllerRef.current;\n\n // State for React reactivity\n const [state, setState] = useState<CognitionState>(controller.getState());\n const [emotion, setEmotion] = useState<EmotionTarget>(\n controller.getEmotionTarget()\n );\n\n // Store onChange in ref to avoid effect dependency changes\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Subscribe to controller events\n useEffect(() => {\n const unsub = controller.on('change', (newState) => {\n setState({ ...newState });\n setEmotion(controller.getEmotionTarget());\n onChangeRef.current?.(newState);\n });\n\n return () => {\n unsub();\n };\n }, [controller]);\n\n // Auto-tick with RAF\n useEffect(() => {\n if (!autoTick) return;\n\n let lastTime = performance.now();\n let rafId: number;\n\n const tickFn = (time: number) => {\n const delta = time - lastTime;\n lastTime = time;\n\n controller.tick(delta);\n\n rafId = requestAnimationFrame(tickFn);\n };\n\n rafId = requestAnimationFrame(tickFn);\n\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, [controller, autoTick]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n controller.dispose();\n };\n }, [controller]);\n\n // Stable callbacks\n const handleEvent = useCallback(\n (event: CognitionEvent) => {\n controller.handleEvent(event);\n },\n [controller]\n );\n\n const tick = useCallback(\n (deltaMs: number) => {\n controller.tick(deltaMs);\n },\n [controller]\n );\n\n // Deprecated alias for backwards compatibility\n const emit = handleEvent;\n\n return {\n state,\n emotion,\n handleEvent,\n tick,\n emit,\n };\n}\n","import type { AVO } from '../emotion/types.js';\n\n// =============================================================================\n// Core Types\n// =============================================================================\n\nexport type AudioFormat = 'wav' | 'pcm_s16le' | 'opus' | 'mp3' | 'flac';\n\nexport type VoiceLicenseCategory = 'cc0' | 'cc-by' | 'cc-by-nc' | 'custom' | 'unknown';\n\nexport const DEFAULT_TARGET_AVO: AVO = {\n // Match the emotion system's \"idle\" anchor for a stable neutral baseline.\n arousal: 0.25,\n valence: 0.6,\n openness: 0.35,\n};\n\nexport interface VoiceCatalogEntry {\n voiceId: string;\n displayName?: string;\n language?: string;\n tags?: string[];\n licenseCategory: VoiceLicenseCategory;\n licenseText?: string;\n source?: string;\n}\n\nexport interface VoiceCatalog {\n get: (voiceId: string) => VoiceCatalogEntry | null;\n list: () => VoiceCatalogEntry[];\n}\n\n// =============================================================================\n// Policy\n// =============================================================================\n\nexport interface AudioPolicy {\n safetyMode: boolean;\n trustTier?: string;\n voiceCloningAllowed: boolean;\n\n /**\n * If true, callers should avoid playing unverified audio.\n * Typically derived from trust tier and safety mode.\n */\n requireProofBeforePlayback?: boolean;\n\n /**\n * Optional allowlist; if set, speech plans must use one of these voice IDs.\n */\n allowedVoiceIds?: string[];\n}\n\n// =============================================================================\n// Planning + Synthesis\n// =============================================================================\n\nexport type AudioPlannerMode =\n | 'idle'\n | 'listening'\n | 'deliberating'\n | 'acting'\n | 'explaining'\n | 'recovering'\n | 'blocked';\n\nexport interface SpeechControls {\n /**\n * Expressiveness/diversity knob, when supported by the backend.\n * Recommended range: 0..1 (provider may map differently).\n */\n temperature?: number;\n\n /**\n * Decode quality / steps knob, when supported by the backend.\n */\n quality?: number;\n\n /**\n * Free-form provider-specific controls.\n */\n [key: string]: unknown;\n}\n\nexport interface SpeechSynthesisRequest {\n traceId: string;\n runId?: string;\n\n text: string;\n language?: string;\n\n voiceId: string;\n targetAffect: AVO;\n controls?: SpeechControls;\n\n /**\n * Optional client policy context. Including this enables the server to emit a more accurate\n * `AudioProof.manifest.policy` without having to guess.\n */\n policy?: {\n safetyMode: boolean;\n trustTier?: string;\n voiceCloningAllowed: boolean;\n };\n}\n\nexport interface AudioArtifact {\n id: string;\n uri?: string;\n format: AudioFormat;\n sha256: string;\n durationMs: number;\n sampleRateHz?: number;\n channels?: number;\n}\n\nexport interface SpeechSynthesisResult {\n audio: Blob;\n artifact: AudioArtifact;\n proof?: AudioProof;\n}\n\nexport interface SpeechSynthesisProvider {\n providerId: string;\n synthesizeSpeech: (\n request: SpeechSynthesisRequest,\n options?: { signal?: AbortSignal }\n ) => Promise<SpeechSynthesisResult>;\n}\n\nexport interface AudioVerifier {\n verifierId: string;\n verifySpeech: (args: {\n request: SpeechSynthesisRequest;\n result: SpeechSynthesisResult;\n policy: AudioPolicy;\n }) => Promise<AudioProof>;\n}\n\n// =============================================================================\n// AudioProof (verification-first artifact)\n// =============================================================================\n\nexport interface AudioGateResult {\n passed: boolean;\n metrics?: Record<string, unknown>;\n reason?: string;\n}\n\nexport interface AudioGates {\n quality: AudioGateResult;\n semantic: AudioGateResult;\n affect: AudioGateResult;\n\n multimodalConsistency?: AudioGateResult;\n watermark?: AudioGateResult;\n speakerConsistency?: AudioGateResult;\n antiSpoof?: AudioGateResult;\n mos?: AudioGateResult;\n safetyText?: AudioGateResult;\n safetyAudio?: AudioGateResult;\n}\n\nexport interface EvidenceRef {\n type: 'run' | 'run_receipt' | 'artifact' | 'ui';\n runId?: string;\n receiptHash?: string;\n path?: string;\n digest?: string;\n componentId?: string;\n note?: string;\n}\n\nexport interface AudioProof {\n version: '1.0';\n createdAt: string;\n\n manifest: {\n traceId?: string;\n runId?: string;\n text: string;\n language?: string;\n targetAffect: AVO;\n policy: {\n safetyMode: boolean;\n trustTier?: string;\n voiceCloningAllowed: boolean;\n };\n cognitionSnapshot?: {\n snapshotVersion?: string;\n snapshotId?: string;\n [key: string]: unknown;\n };\n };\n\n proof: {\n synthesis: {\n providerId: string;\n model: {\n id: string;\n revision?: string;\n sha256?: string;\n };\n voice: {\n voiceId: string;\n licenseCategory: VoiceLicenseCategory;\n licenseText?: string;\n source?: string;\n };\n controls?: SpeechControls;\n seed?: number;\n };\n\n attempts?: Array<{\n attempt: number;\n artifactRef: string;\n notes?: string;\n gates: AudioGates;\n }>;\n\n artifacts: AudioArtifact[];\n gates: AudioGates;\n evidence?: EvidenceRef[];\n };\n\n verdict: {\n passed: boolean;\n reason?: string;\n score?: number;\n };\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function createTraceId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return `trace_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n}\n","import type { AVO } from '../emotion/types.js';\nimport type { CognitionState } from '../cognition/types.js';\nimport type {\n AudioPolicy,\n AudioPlannerMode,\n SpeechControls,\n SpeechSynthesisRequest,\n VoiceCatalog,\n} from './types.js';\nimport { clamp01, createTraceId, DEFAULT_TARGET_AVO } from './types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface AudioPlannerSignals {\n mode?: AudioPlannerMode;\n personaDriftRisk?: number;\n confidence?: number;\n risk?: number;\n}\n\nexport interface AudioPlannerInput {\n text: string;\n language?: string;\n runId?: string;\n\n targetAffect?: AVO;\n\n policy: AudioPolicy;\n voices: VoiceCatalog;\n\n signals?: AudioPlannerSignals;\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n}\n\n// =============================================================================\n// Planning Helpers\n// =============================================================================\n\nfunction pickFirstAllowedVoiceId(voices: VoiceCatalog, allowedVoiceIds?: string[]): string | null {\n const list = voices.list();\n for (const entry of list) {\n if (!allowedVoiceIds || allowedVoiceIds.includes(entry.voiceId)) {\n return entry.voiceId;\n }\n }\n return null;\n}\n\nfunction pickVoiceId(args: {\n voices: VoiceCatalog;\n allowedVoiceIds?: string[];\n preferredVoiceId?: string;\n requiredTag?: string;\n}): string | null {\n const { voices, allowedVoiceIds, preferredVoiceId, requiredTag } = args;\n\n if (preferredVoiceId) {\n const entry = voices.get(preferredVoiceId);\n if (entry && (!allowedVoiceIds || allowedVoiceIds.includes(entry.voiceId))) {\n if (!requiredTag || (entry.tags ?? []).includes(requiredTag)) {\n return entry.voiceId;\n }\n }\n }\n\n for (const entry of voices.list()) {\n if (allowedVoiceIds && !allowedVoiceIds.includes(entry.voiceId)) continue;\n if (requiredTag && !(entry.tags ?? []).includes(requiredTag)) continue;\n return entry.voiceId;\n }\n\n return null;\n}\n\nfunction stripExcessPunctuation(text: string): string {\n return (\n text\n // Collapse repeated punctuation which can cause prosody weirdness.\n .replace(/[!?]{2,}/g, (m) => m[0] ?? '!')\n .replace(/\\.{3,}/g, '…')\n );\n}\n\nfunction clampTextForSafetyMode(text: string): string {\n // Keep semantics unchanged; only reduce overly-emphatic punctuation.\n return stripExcessPunctuation(text).replace(/!/g, '.');\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Default planner for Architecture A (modular pipeline).\n *\n * Produces a `SpeechSynthesisRequest` that a self-hosted backend can execute.\n */\nexport function planSpeech(input: AudioPlannerInput): SpeechSynthesisRequest {\n const {\n text,\n language,\n runId,\n targetAffect,\n policy,\n voices,\n signals,\n defaults,\n } = input;\n\n const personaDriftRisk = clamp01(signals?.personaDriftRisk ?? 0);\n const confidence = clamp01(signals?.confidence ?? 0.8);\n const risk = clamp01(signals?.risk ?? (1 - confidence));\n\n const groundedVoiceTag = defaults?.groundedVoiceTag ?? 'grounded';\n const defaultVoiceTag = defaults?.defaultVoiceTag ?? 'default';\n\n const requireGrounded =\n policy.safetyMode || personaDriftRisk >= 0.6 || (risk >= 0.7 && confidence <= 0.5);\n\n const voiceId =\n (requireGrounded\n ? pickVoiceId({\n voices,\n allowedVoiceIds: policy.allowedVoiceIds,\n preferredVoiceId: defaults?.voiceId,\n requiredTag: groundedVoiceTag,\n })\n : pickVoiceId({\n voices,\n allowedVoiceIds: policy.allowedVoiceIds,\n preferredVoiceId: defaults?.voiceId,\n requiredTag: defaultVoiceTag,\n })) ??\n pickVoiceId({\n voices,\n allowedVoiceIds: policy.allowedVoiceIds,\n preferredVoiceId: defaults?.voiceId,\n }) ??\n pickFirstAllowedVoiceId(voices, policy.allowedVoiceIds);\n\n if (!voiceId) {\n throw new Error('No available voices (voice catalog is empty or policy blocks all voices)');\n }\n\n const baseTemperature = clamp01(defaults?.temperature ?? 0.65);\n const temperature = requireGrounded ? Math.min(baseTemperature, 0.25) : baseTemperature;\n\n const controls: SpeechControls = {\n temperature,\n };\n\n const plannedText =\n policy.safetyMode || personaDriftRisk >= 0.7\n ? clampTextForSafetyMode(text)\n : stripExcessPunctuation(text);\n\n return {\n traceId: createTraceId(),\n runId,\n text: plannedText,\n language,\n voiceId,\n targetAffect: targetAffect ?? DEFAULT_TARGET_AVO,\n controls,\n policy: {\n safetyMode: policy.safetyMode,\n trustTier: policy.trustTier,\n voiceCloningAllowed: policy.voiceCloningAllowed,\n },\n };\n}\n\n// =============================================================================\n// CognitionState Integration\n// =============================================================================\n\nexport interface AudioPlannerCognitionInput {\n text: string;\n language?: string;\n runId?: string;\n targetAffect?: AVO;\n cognition: CognitionState;\n policy: AudioPolicy;\n voices: VoiceCatalog;\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n}\n\n/**\n * Plan speech from full CognitionState.\n * Extracts relevant signals and delegates to planSpeech.\n */\nexport function planSpeechFromCognition(\n input: AudioPlannerCognitionInput\n): SpeechSynthesisRequest {\n const { cognition, ...rest } = input;\n\n const signals: AudioPlannerSignals = {\n mode: cognition.mode,\n personaDriftRisk: cognition.personaDriftRisk,\n confidence: cognition.confidence,\n risk: cognition.risk,\n };\n\n const targetAffect = rest.targetAffect ?? cognition.emotionAVO;\n\n return planSpeech({\n ...rest,\n targetAffect,\n signals,\n });\n}\n","/**\n * Zod schemas for audio proof validation.\n *\n * This is the runtime counterpart of `docs/schemas/audio-proof.schema.json`.\n */\n\nimport { z } from 'zod';\n\n// =============================================================================\n// Enums\n// =============================================================================\n\nexport const AudioProofVersionSchema = z.enum(['1.0']);\nexport const AudioFormatSchema = z.enum(['wav', 'pcm_s16le', 'opus', 'mp3', 'flac']);\nexport const VoiceLicenseCategorySchema = z.enum(['cc0', 'cc-by', 'cc-by-nc', 'custom', 'unknown']);\n\n// =============================================================================\n// Nested Schemas\n// =============================================================================\n\nexport const AvoSchema = z.object({\n valence: z.number().min(0).max(1),\n arousal: z.number().min(0).max(1),\n openness: z.number().min(0).max(1),\n});\n\nexport const AudioArtifactSchema = z.object({\n id: z.string().min(1),\n uri: z.string().optional(),\n format: AudioFormatSchema,\n sha256: z.string().min(32),\n sampleRateHz: z.number().int().min(8000).optional(),\n channels: z.number().int().min(1).max(8).optional(),\n durationMs: z.number().int().min(1),\n});\n\nexport const AudioGateResultSchema = z.object({\n passed: z.boolean(),\n metrics: z.record(z.string(), z.unknown()).optional(),\n reason: z.string().optional(),\n});\n\nexport const AudioGatesSchema = z.object({\n quality: AudioGateResultSchema,\n semantic: AudioGateResultSchema,\n affect: AudioGateResultSchema,\n\n multimodalConsistency: AudioGateResultSchema.optional(),\n watermark: AudioGateResultSchema.optional(),\n speakerConsistency: AudioGateResultSchema.optional(),\n antiSpoof: AudioGateResultSchema.optional(),\n mos: AudioGateResultSchema.optional(),\n safetyText: AudioGateResultSchema.optional(),\n safetyAudio: AudioGateResultSchema.optional(),\n});\n\nexport const EvidenceRefSchema = z.object({\n type: z.enum(['run', 'run_receipt', 'artifact', 'ui']),\n runId: z.string().optional(),\n receiptHash: z.string().optional(),\n path: z.string().optional(),\n digest: z.string().optional(),\n componentId: z.string().optional(),\n note: z.string().optional(),\n});\n\n// =============================================================================\n// Main Schema\n// =============================================================================\n\nexport const AudioProofSchema = z.object({\n version: AudioProofVersionSchema,\n createdAt: z.string().datetime(),\n\n manifest: z.object({\n traceId: z.string().optional(),\n runId: z.string().optional(),\n text: z.string().min(1),\n language: z.string().optional(),\n targetAffect: AvoSchema,\n policy: z.object({\n safetyMode: z.boolean(),\n trustTier: z.string().optional(),\n voiceCloningAllowed: z.boolean(),\n }),\n cognitionSnapshot: z.record(z.string(), z.unknown()).optional(),\n }),\n\n proof: z.object({\n synthesis: z.object({\n providerId: z.string().min(1),\n model: z.object({\n id: z.string().min(1),\n revision: z.string().optional(),\n sha256: z.string().optional(),\n }),\n voice: z.object({\n voiceId: z.string().min(1),\n licenseCategory: VoiceLicenseCategorySchema,\n licenseText: z.string().optional(),\n source: z.string().optional(),\n }),\n controls: z.record(z.string(), z.unknown()).optional(),\n seed: z.number().int().min(0).optional(),\n }),\n\n attempts: z\n .array(\n z.object({\n attempt: z.number().int().min(1),\n artifactRef: z.string().min(1),\n notes: z.string().optional(),\n gates: AudioGatesSchema,\n })\n )\n .optional(),\n\n artifacts: z.array(AudioArtifactSchema).min(1),\n gates: AudioGatesSchema,\n evidence: z.array(EvidenceRefSchema).optional(),\n }),\n\n verdict: z.object({\n passed: z.boolean(),\n reason: z.string().optional(),\n score: z.number().optional(),\n }),\n});\n\nexport type AudioProofInput = z.input<typeof AudioProofSchema>;\nexport type AudioProofOutput = z.output<typeof AudioProofSchema>;\n\nexport type AudioProofValidationResult =\n | { success: true; data: AudioProofOutput }\n | { success: false; errors: z.ZodError };\n\nexport function validateAudioProof(audioProof: unknown): AudioProofValidationResult {\n const result = AudioProofSchema.safeParse(audioProof);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, errors: result.error };\n}\n\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseAudioPlayerOptions {\n volume?: number;\n onEnded?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport interface UseAudioPlayerReturn {\n isPlaying: boolean;\n error: string | null;\n play: (source: Blob | string) => Promise<void>;\n stop: () => void;\n audioElement: HTMLAudioElement | null;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useAudioPlayer(options: UseAudioPlayerOptions = {}): UseAudioPlayerReturn {\n const { volume = 1, onEnded, onError } = options;\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const objectUrlRef = useRef<string | null>(null);\n\n const [isPlaying, setIsPlaying] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Ensure we have an audio element.\n if (!audioRef.current && typeof Audio !== 'undefined') {\n audioRef.current = new Audio();\n }\n\n const stop = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n try {\n audio.pause();\n audio.currentTime = 0;\n } catch {\n // Ignore.\n } finally {\n setIsPlaying(false);\n }\n }, []);\n\n const play = useCallback(\n async (source: Blob | string) => {\n const audio = audioRef.current;\n if (!audio) {\n throw new Error('Audio playback not supported in this environment');\n }\n\n setError(null);\n\n // Clean up previous object URL.\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n\n const src = typeof source === 'string' ? source : URL.createObjectURL(source);\n if (typeof source !== 'string') {\n objectUrlRef.current = src;\n }\n\n audio.volume = volume;\n audio.src = src;\n\n try {\n await audio.play();\n setIsPlaying(true);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to play audio';\n setIsPlaying(false);\n setError(message);\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n },\n [volume, onError]\n );\n\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const handleEnded = () => {\n setIsPlaying(false);\n onEnded?.();\n };\n\n const handleError = () => {\n setIsPlaying(false);\n const message = 'Audio element error';\n setError(message);\n onError?.(new Error(message));\n };\n\n audio.addEventListener('ended', handleEnded);\n audio.addEventListener('error', handleError);\n\n return () => {\n audio.removeEventListener('ended', handleEnded);\n audio.removeEventListener('error', handleError);\n };\n }, [onEnded, onError]);\n\n useEffect(() => {\n return () => {\n stop();\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n };\n }, [stop]);\n\n return {\n isPlaying,\n error,\n play,\n stop,\n audioElement: audioRef.current,\n };\n}\n\n","import { useEffect, useRef, useState } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseBargeInOptions {\n /**\n * Microphone or remote user stream.\n * You must request user consent in the host app (getUserMedia) and pass it in.\n */\n stream: MediaStream | null;\n\n enabled?: boolean;\n\n /**\n * RMS threshold in 0..1.\n * Typical values are small; start around 0.02 and calibrate per environment.\n */\n threshold?: number;\n\n /**\n * Keep \"speaking\" true for this long after signal drops below threshold.\n */\n hangoverMs?: number;\n\n /**\n * Called on the rising edge (silence -> speaking).\n */\n onBargeIn?: () => void;\n}\n\nexport interface UseBargeInReturn {\n isUserSpeaking: boolean;\n levelRms: number;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useBargeIn(options: UseBargeInOptions): UseBargeInReturn {\n const { stream, enabled = true, threshold = 0.02, hangoverMs = 250, onBargeIn } = options;\n\n const [isUserSpeaking, setIsUserSpeaking] = useState(false);\n const [levelRms, setLevelRms] = useState(0);\n\n const rafRef = useRef<number | null>(null);\n const lastAboveRef = useRef<number>(0);\n const prevSpeakingRef = useRef(false);\n\n useEffect(() => {\n if (!enabled || !stream) {\n setIsUserSpeaking(false);\n setLevelRms(0);\n return;\n }\n\n if (typeof AudioContext === 'undefined') {\n // Cannot compute RMS without Web Audio; degrade gracefully.\n return;\n }\n\n const audioContext = new AudioContext();\n const source = audioContext.createMediaStreamSource(stream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n\n const buffer = new Float32Array(analyser.fftSize);\n\n const tick = () => {\n analyser.getFloatTimeDomainData(buffer);\n let sum = 0;\n for (let i = 0; i < buffer.length; i++) {\n const x = buffer[i];\n sum += x * x;\n }\n const rms = Math.sqrt(sum / buffer.length);\n setLevelRms(rms);\n\n const now = performance.now();\n\n if (rms >= threshold) {\n lastAboveRef.current = now;\n }\n\n const speaking = rms >= threshold || now - lastAboveRef.current <= hangoverMs;\n setIsUserSpeaking(speaking);\n\n if (!prevSpeakingRef.current && speaking) {\n onBargeIn?.();\n }\n prevSpeakingRef.current = speaking;\n\n rafRef.current = requestAnimationFrame(tick);\n };\n\n rafRef.current = requestAnimationFrame(tick);\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n try {\n source.disconnect();\n analyser.disconnect();\n } catch {\n // Ignore.\n }\n audioContext.close().catch(() => {});\n };\n }, [stream, enabled, threshold, hangoverMs, onBargeIn]);\n\n return { isUserSpeaking, levelRms };\n}\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AVO } from '../../emotion/types.js';\nimport { planSpeech, type AudioPlannerSignals } from '../planner.js';\nimport { validateAudioProof } from '../schema.js';\nimport type {\n AudioPolicy,\n AudioProof,\n AudioVerifier,\n SpeechSynthesisProvider,\n SpeechSynthesisRequest,\n SpeechSynthesisResult,\n VoiceCatalog,\n} from '../types.js';\nimport { useAudioPlayer } from './useAudioPlayer.js';\nimport { useBargeIn } from './useBargeIn.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseSpeechSynthesisOptions {\n provider: SpeechSynthesisProvider;\n verifier?: AudioVerifier;\n\n voices: VoiceCatalog;\n policy: AudioPolicy;\n\n signals?: AudioPlannerSignals;\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n\n /**\n * If provided, enables barge-in (user speech cancels synthesis and playback).\n */\n bargeIn?: {\n stream: MediaStream | null;\n threshold?: number;\n hangoverMs?: number;\n };\n\n /**\n * Playback volume 0..1\n */\n volume?: number;\n\n /**\n * Controls when verification happens.\n *\n * - \"before_playback\": verify first; only play if verified (best for high-trust lanes)\n * - \"after_playback\": play immediately; verify in background (best UX when trust allows)\n * - \"never\": do not verify (not recommended)\n *\n * Default: derived from policy (`requireProofBeforePlayback`).\n */\n verificationMode?: 'before_playback' | 'after_playback' | 'never';\n\n onProof?: (proof: AudioProof) => void;\n onBargeIn?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport interface SpeakOptions {\n runId?: string;\n language?: string;\n targetAffect?: AVO;\n}\n\nexport interface UseSpeechSynthesisReturn {\n isSynthesizing: boolean;\n isSpeaking: boolean;\n error: string | null;\n\n lastRequest: SpeechSynthesisRequest | null;\n lastResult: SpeechSynthesisResult | null;\n lastProof: AudioProof | null;\n\n speak: (text: string, options?: SpeakOptions) => Promise<void>;\n cancel: () => void;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useSpeechSynthesis(options: UseSpeechSynthesisOptions): UseSpeechSynthesisReturn {\n const {\n provider,\n verifier,\n voices,\n policy,\n signals,\n defaults,\n bargeIn,\n volume = 1,\n verificationMode,\n onProof,\n onBargeIn,\n onError,\n } = options;\n\n const effectiveVerificationMode = useMemo(() => {\n if (verificationMode) return verificationMode;\n if (policy.requireProofBeforePlayback) return 'before_playback';\n if (verifier) return 'after_playback';\n return 'never';\n }, [verificationMode, policy.requireProofBeforePlayback, verifier]);\n\n const abortRef = useRef<AbortController | null>(null);\n\n const [isSynthesizing, setIsSynthesizing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const [lastRequest, setLastRequest] = useState<SpeechSynthesisRequest | null>(null);\n const [lastResult, setLastResult] = useState<SpeechSynthesisResult | null>(null);\n const [lastProof, setLastProof] = useState<AudioProof | null>(null);\n\n const player = useAudioPlayer({\n volume,\n onError: (err) => {\n setError(err.message);\n onError?.(err);\n },\n });\n\n const bargeInState = useBargeIn({\n stream: bargeIn?.stream ?? null,\n enabled: !!bargeIn?.stream,\n threshold: bargeIn?.threshold,\n hangoverMs: bargeIn?.hangoverMs,\n onBargeIn: () => {\n onBargeIn?.();\n },\n });\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n abortRef.current = null;\n setIsSynthesizing(false);\n player.stop();\n }, [player]);\n\n useEffect(() => {\n if (!bargeIn?.stream) return;\n if (!bargeInState.isUserSpeaking) return;\n\n cancel();\n }, [bargeIn?.stream, bargeInState.isUserSpeaking, cancel]);\n\n const speak = useCallback(\n async (text: string, speakOptions?: SpeakOptions) => {\n cancel();\n setError(null);\n setIsSynthesizing(true);\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const request = planSpeech({\n text,\n language: speakOptions?.language,\n runId: speakOptions?.runId,\n targetAffect: speakOptions?.targetAffect,\n policy,\n voices,\n signals,\n defaults,\n });\n\n setLastRequest(request);\n\n const result = await provider.synthesizeSpeech(request, { signal: controller.signal });\n setLastResult(result);\n\n // If provider included proof, validate it before trusting it.\n let proof: AudioProof | undefined = result.proof;\n if (proof) {\n const parsed = validateAudioProof(proof);\n if (!parsed.success) {\n throw new Error('Provider returned invalid AudioProof');\n }\n proof = parsed.data as AudioProof;\n }\n\n const verifyNow =\n effectiveVerificationMode === 'before_playback' &&\n (!proof || !proof.verdict?.passed) &&\n !!verifier;\n\n if (verifyNow && verifier) {\n proof = await verifier.verifySpeech({ request, result, policy });\n const parsed = validateAudioProof(proof);\n if (!parsed.success) {\n throw new Error('Verifier returned invalid AudioProof');\n }\n proof = parsed.data as AudioProof;\n }\n\n if (policy.requireProofBeforePlayback && (!proof || proof.verdict.passed !== true)) {\n throw new Error('Playback blocked by policy: missing or failing AudioProof');\n }\n\n // Playback\n await player.play(result.audio);\n\n // Background verification (if allowed).\n if (effectiveVerificationMode === 'after_playback' && verifier && !proof) {\n void (async () => {\n try {\n const p = await verifier.verifySpeech({ request, result, policy });\n const parsed = validateAudioProof(p);\n if (!parsed.success) return;\n setLastProof(parsed.data as AudioProof);\n onProof?.(parsed.data as AudioProof);\n } catch {\n // Ignore background verification errors.\n }\n })();\n }\n\n if (proof) {\n setLastProof(proof);\n onProof?.(proof);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Speech synthesis failed';\n setError(message);\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n } finally {\n setIsSynthesizing(false);\n abortRef.current = null;\n }\n },\n [\n cancel,\n policy,\n voices,\n signals,\n defaults,\n provider,\n verifier,\n effectiveVerificationMode,\n player,\n onProof,\n onError,\n ]\n );\n\n return {\n isSynthesizing,\n isSpeaking: player.isPlaying,\n error,\n\n lastRequest,\n lastResult,\n lastProof,\n\n speak,\n cancel,\n };\n}\n\n","'use client';\n\nimport { useCallback } from 'react';\nimport type { AVO } from '../../emotion/types.js';\nimport type { CognitionState, CognitionEvent } from '../../cognition/types.js';\nimport { useCognition, type UseCognitionOptions } from '../../cognition/hooks/useCognition.js';\nimport type { EmotionTarget } from '../../cognition/controller.js';\nimport { planSpeechFromCognition } from '../planner.js';\nimport type {\n AudioPolicy,\n AudioProof,\n AudioVerifier,\n SpeechSynthesisProvider,\n SpeechSynthesisRequest,\n SpeechSynthesisResult,\n VoiceCatalog,\n} from '../types.js';\nimport { useSpeechSynthesis, type UseSpeechSynthesisOptions } from './useSpeechSynthesis.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseCognitionSpeechOptions {\n // Speech synthesis options\n provider: SpeechSynthesisProvider;\n verifier?: AudioVerifier;\n voices: VoiceCatalog;\n policy: AudioPolicy;\n volume?: number;\n verificationMode?: 'before_playback' | 'after_playback' | 'never';\n\n // Cognition options\n initialCognition?: Partial<CognitionState>;\n autoTick?: boolean;\n onCognitionChange?: (state: CognitionState) => void;\n\n // Barge-in\n bargeIn?: {\n stream: MediaStream | null;\n threshold?: number;\n hangoverMs?: number;\n };\n\n // Voice defaults\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n\n // Callbacks\n onProof?: (proof: AudioProof) => void;\n onBargeIn?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport interface SpeakWithCognitionOptions {\n runId?: string;\n language?: string;\n targetAffect?: AVO;\n}\n\nexport interface UseCognitionSpeechReturn {\n // Cognition\n cognition: CognitionState;\n emotion: EmotionTarget;\n handleCognition: (event: CognitionEvent) => void;\n /** @deprecated Use handleCognition instead */\n emitCognition: (event: CognitionEvent) => void;\n tickCognition: (deltaMs: number) => void;\n\n // Speech\n isSynthesizing: boolean;\n isSpeaking: boolean;\n error: string | null;\n lastRequest: SpeechSynthesisRequest | null;\n lastResult: SpeechSynthesisResult | null;\n lastProof: AudioProof | null;\n\n speak: (text: string, options?: SpeakWithCognitionOptions) => Promise<void>;\n cancel: () => void;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useCognitionSpeech(\n options: UseCognitionSpeechOptions\n): UseCognitionSpeechReturn {\n const {\n provider,\n verifier,\n voices,\n policy,\n volume,\n verificationMode,\n initialCognition,\n autoTick = true,\n onCognitionChange,\n bargeIn,\n defaults,\n onProof,\n onBargeIn,\n onError,\n } = options;\n\n // Cognition state\n const cognitionResult = useCognition({\n initial: initialCognition,\n autoTick,\n onChange: onCognitionChange,\n });\n\n // Speech synthesis - uses signals derived from cognition\n const speechResult = useSpeechSynthesis({\n provider,\n verifier,\n voices,\n policy,\n volume,\n verificationMode,\n signals: {\n mode: cognitionResult.state.mode,\n personaDriftRisk: cognitionResult.state.personaDriftRisk,\n confidence: cognitionResult.state.confidence,\n risk: cognitionResult.state.risk,\n },\n defaults,\n bargeIn,\n onProof,\n onBargeIn: () => {\n // On barge-in, emit interrupt to cognition\n cognitionResult.handleEvent({ type: 'ui.interrupt' });\n onBargeIn?.();\n },\n onError,\n });\n\n // Speak using full cognition state\n const speak = useCallback(\n async (text: string, speakOptions?: SpeakWithCognitionOptions) => {\n // Plan using full cognition state\n const request = planSpeechFromCognition({\n text,\n language: speakOptions?.language,\n runId: speakOptions?.runId,\n targetAffect: speakOptions?.targetAffect,\n cognition: cognitionResult.state,\n policy,\n voices,\n defaults,\n });\n\n // Synthesize and play\n await speechResult.speak(text, {\n ...speakOptions,\n targetAffect: request.targetAffect,\n });\n },\n [cognitionResult.state, policy, voices, defaults, speechResult]\n );\n\n return {\n // Cognition\n cognition: cognitionResult.state,\n emotion: cognitionResult.emotion,\n handleCognition: cognitionResult.handleEvent,\n emitCognition: cognitionResult.handleEvent, // deprecated alias\n tickCognition: cognitionResult.tick,\n\n // Speech\n isSynthesizing: speechResult.isSynthesizing,\n isSpeaking: speechResult.isSpeaking,\n error: speechResult.error,\n lastRequest: speechResult.lastRequest,\n lastResult: speechResult.lastResult,\n lastProof: speechResult.lastProof,\n\n speak,\n cancel: speechResult.cancel,\n };\n}\n"]}
|