{"version":3,"sources":["jsdelivr-header.js","/npm/cdom@0.0.17/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCNA,WAEI,MAAM,EAAoB,IAAI,IAAI,CAC9B,CAAC,IAAK,OAAQ,CAAC,IAAK,YAAa,CAAC,IAAK,YAAa,CAAC,IAAK,UAC1D,CAAC,KAAM,MAAO,CAAC,KAAM,OAAQ,CAAC,IAAK,MAAO,CAAC,IAAK,MAAO,CAAC,KAAM,OAAQ,CAAC,KAAM,OAC7E,CAAC,KAAM,OAAQ,CAAC,KAAM,MAAO,CAAC,IAAK,OAAQ,CAAC,KAAM,aAAc,CAAC,KAAM,eAGrE,EAAW,IAAI,IACf,EAAY,IAAI,IAChB,EAAU,IAAI,IAEd,GADkB,IAAI,IACP,IAAI,KACzB,IAAI,EAAoB,KACpB,GAAkB,EACtB,MAAM,EAAuB,IAAI,IAC3B,EAAe,IAAI,QACnB,EAAiB,IAAI,IACrB,EAAgB,IAAI,IACpB,EAAU,IAAI,IAEpB,SAAS,EAAO,GACZ,OAAI,GAAsB,iBAAR,GAAoB,UAAW,EAAY,EAAI,MAC1D,CACX,CAEA,MAAM,EAAc,IAChB,IAAK,EAAG,OAAO,KACf,GAAiB,iBAAN,EAAgB,OAAO,EAClC,IACI,GAAU,iBAAN,GAA8B,wBAAN,EAA6B,OAAO,WAAW,aAC3E,GAAU,mBAAN,GAAgC,0BAAN,EAA+B,OAAO,WAAW,cACnF,CAAE,MAAO,GAAoC,CAC7C,OAAO,IAAI,EAIf,SAAS,EAAS,GACd,MAAM,EAAa,sJACb,EAAU,GAChB,IAAI,EACJ,KAA0C,QAAlC,EAAQ,EAAW,KAAK,KAC5B,EAAQ,KAAK,EAAM,IAEvB,OAAO,CACX,CAEA,SAAS,EAAiB,GACtB,IAAI,EAAK,EACT,MAAM,EAAS,EAAS,GAExB,SAAS,EAAK,EAAS,GAAK,OAAO,EAAO,EAAK,EAAS,CACxD,SAAS,IAAS,OAAO,EAAO,IAAO,CACvC,SAAS,EAAQ,GACb,MAAM,EAAI,IACV,GAAI,IAAM,EAAU,MAAM,IAAI,MAAM,aAAa,iBAAwB,MACzE,OAAO,CACX,CAEA,SAAS,IACL,IAAI,EAYR,WACI,IAAI,EAAO,IACX,KAAkB,OAAX,KAAiB,CACpB,IACA,MAAM,EAAQ,IACR,EAAO,EACb,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,IAAO,EAAM,EAAK,EACpD,CACA,OAAO,CACX,CArBe,GACX,GAAe,MAAX,IAAgB,CAChB,IACA,MAAM,EAAO,IACb,EAAQ,KACR,MAAM,EAAQ,IACR,EAAO,EACb,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAK,EAAK,GAAM,EAAM,EAAK,EACnE,CACA,OAAO,CACX,CAaA,SAAS,IACL,IAAI,EAAO,IACX,KAAkB,OAAX,KAAiB,CACpB,IACA,MAAM,EAAQ,IACR,EAAO,EACb,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,IAAO,EAAM,EAAK,EACpD,CACA,OAAO,CACX,CAEA,SAAS,IACL,IAAI,EAAO,IACX,KAAkB,OAAX,KAA8B,OAAX,KAAiB,CACvC,MAAM,EAAK,IACL,EAAQ,IACR,EAAO,EACI,EAAN,OAAP,EAAoB,CAAC,EAAK,IAAO,EAAK,EAAK,IAAO,EAAM,EAAK,GACrD,CAAC,EAAK,IAAO,EAAK,EAAK,IAAO,EAAM,EAAK,EACzD,CACA,OAAO,CACX,CAEA,SAAS,IACL,IAAI,EAcR,WACI,IAAI,EAAO,IACX,KAAkB,MAAX,KAA6B,MAAX,KAAgB,CACrC,MAAM,EAAK,IACL,EAAQ,IACR,EAAO,EACG,EAAL,MAAP,EAAmB,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,GACnD,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,EACxD,CACA,OAAO,CACX,CAxBe,GACX,MAAM,EAAS,CAAC,IAAK,IAAK,KAAM,MAChC,KAAO,EAAO,SAAS,MAAS,CAC5B,MAAM,EAAK,IACL,EAAQ,IACR,EAAO,EACF,MAAP,EAAY,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,GAC/C,MAAP,EAAY,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,GACpD,OAAP,EAAa,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,IAAO,EAAM,EAAK,GACtD,OAAP,IAAa,EAAO,CAAC,EAAK,IAAO,EAAK,EAAK,IAAO,EAAM,EAAK,GAC1E,CACA,OAAO,CACX,CAcA,SAAS,IACL,IAAI,EAAO,IACX,KAAkB,MAAX,KAA6B,MAAX,KAA6B,MAAX,KAAgB,CACvD,MAAM,EAAK,IACL,EAAQ,IACR,EAAO,EACG,EAAL,MAAP,EAAmB,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,GAC/C,MAAP,EAAmB,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,GACxD,CAAC,EAAK,IAAO,EAAK,EAAK,GAAM,EAAM,EAAK,EACxD,CACA,OAAO,CACX,CAEA,SAAS,IACL,MAAM,EAAK,IACX,GAAW,MAAP,GAAqB,MAAP,GAAqB,MAAP,EAAY,CACxC,IACA,MAAM,EAAQ,IACd,GAAW,MAAP,EAAY,MAAO,CAAC,EAAK,KAAQ,EAAM,EAAK,GAChD,GAAW,MAAP,EAAY,MAAO,CAAC,EAAK,KAAQ,EAAM,EAAK,GAChD,GAAW,MAAP,EAAY,MAAO,CAAC,EAAK,KAAQ,EAAM,EAAK,EACpD,CACA,OAGJ,WACI,IAAI,EA4CR,WACI,MAAM,EAAI,IACV,IAAK,EAAG,MAAO,KAAe,EAC9B,GAAU,MAAN,EAAW,CACX,MAAM,EAAO,IAEb,OADA,EAAQ,KACD,CACX,CACA,GAAU,MAAN,EAAW,CACX,MAAM,EAAU,GAChB,GAAe,MAAX,IACA,OAAa,CACT,IAAI,EACJ,MAAM,EAAK,IACmC,EAA1C,EAAG,WAAW,MAAQ,EAAG,WAAW,KAAY,EAAG,MAAM,GAAI,GACtD,EACX,EAAQ,KACR,MAAM,EAAQ,IAEd,GADA,EAAQ,KAAK,CAAE,MAAK,UACL,MAAX,IAAgB,MACpB,EAAQ,IACZ,CAGJ,OADA,EAAQ,KACD,CAAC,EAAK,KACT,MAAM,EAAM,CAAC,EACb,IAAK,MAAM,IAAE,EAAG,MAAE,KAAW,EAAS,EAAI,GAAO,EAAO,EAAM,EAAK,IACnE,OAAO,CAAG,CAElB,CACA,GAAU,MAAN,EAAW,CACX,MAAM,EAAU,GAChB,GAAe,MAAX,IACA,KACI,EAAQ,KAAK,KACE,MAAX,KACJ,EAAQ,KAIhB,OADA,EAAQ,KACD,CAAC,EAAK,IAAO,EAAQ,KAAI,GAAK,EAAO,EAAE,EAAK,KACvD,CACA,GAAI,EAAE,WAAW,MAAQ,EAAE,WAAW,KAAM,MAAO,IAAM,EAAE,MAAM,GAAI,GAAG,QAAQ,SAAU,MAC1F,GAAI,KAAK,KAAK,GAAI,MAAO,IAAM,OAAO,GACtC,GAAU,SAAN,EAAc,MAAO,KAAM,EAC/B,GAAU,UAAN,EAAe,MAAO,KAAM,EAChC,GAAU,SAAN,EAAc,MAAO,IAAM,KAG/B,GAAU,OAAN,EAAY,CACZ,IAAI,EAAO,GAEX,OAAa,CACT,MAAM,EAAI,IACV,GAAI,GAAK,SAAS,KAAK,GACnB,GAAQ,QACL,IAAU,MAAN,EASP,MATkB,CAClB,MAAM,EAAU,EAAK,GACrB,IAAI,IAAW,SAAS,KAAK,GAIzB,MAHA,GAAQ,IACR,GAAQ,GAIhB,CAEA,CACJ,CACA,OAAO,EAAmB,EAAM,QACpC,CAGA,GAAU,WAAN,GAAwB,YAAN,EAAiB,CACnC,IAAI,EAAO,EAAE,MAAM,GAEnB,OAAa,CACT,MAAM,EAAI,IACV,GAAI,GAAK,SAAS,KAAK,GACnB,GAAQ,QACL,IAAU,MAAN,EASP,MATkB,CAClB,MAAM,EAAU,EAAK,GACrB,IAAI,IAAW,SAAS,KAAK,GAIzB,MAHA,GAAQ,IACR,GAAQ,GAIhB,CAEA,CACJ,CACA,MAAM,EAAgB,UAAT,EAAoB,GAAQ,EAAM,CAAC,EAAK,IAAO,EAC5D,GAAa,UAAT,EAAkB,OAAO,EAC7B,GAAa,WAAT,EAAmB,OAAO,EAC9B,GAAI,EAAK,WAAW,WAAa,EAAK,WAAW,UAAW,OAAO,EAAmB,EAAK,MAAM,GAAI,SACrG,GAAI,EAAK,WAAW,YAAc,EAAK,WAAW,WAAY,OAAO,EAAmB,EAAK,MAAM,GAAI,SAC3G,CAGA,GAAU,OAAN,EAAY,CAEZ,GAAU,MADA,IACK,CACX,IACA,IAAI,EAAO,GACX,OAAa,CACT,MAAM,EAAM,IACZ,GAAI,GAAO,SAAS,KAAK,GACrB,GAAQ,QACL,IAAY,MAAR,GAAuB,MAAR,EAStB,MATmC,CACnC,MAAM,EAAU,EAAK,GACrB,IAAI,IAAW,SAAS,KAAK,GAIzB,MAHA,GAAQ,IACR,GAAQ,GAIhB,CAEA,CACJ,CACA,OAAO,EAAmB,EAAM,SACpC,CACJ,CAGA,GAAU,YAAN,EAAiB,CAEjB,GAAU,MADA,IACK,CACX,IACA,IAAI,EAAO,GACX,OAAa,CACT,MAAM,EAAM,IACZ,GAAI,GAAO,SAAS,KAAK,GACrB,GAAQ,QACL,IAAY,MAAR,GAAuB,MAAR,EAStB,MATmC,CACnC,MAAM,EAAU,EAAK,GACrB,IAAI,IAAW,SAAS,KAAK,GAIzB,MAHA,GAAQ,IACR,GAAQ,GAIhB,CAEA,CACJ,CACA,OAAO,EAAmB,EAAM,SACpC,CACA,OAAQ,GAAQ,EAAY,EAAK,gBACrC,CAGA,MAAO,CAAC,EAAK,KACT,MAAM,EAAM,EAAY,EAAK,IAAM,EAAU,GAI7C,YAHY,IAAR,GAAsB,CAAC,IAAK,KAAK,SAAS,IAC1C,EAAkB,EAAG,GAElB,CAAG,CAElB,CA3Me,GACX,OAAa,CACT,MAAM,EAAK,IACX,GAAW,MAAP,EAAY,CACZ,IACA,MAAM,EAAO,IACP,EAAQ,EACd,EAAO,CAAC,EAAK,KACT,MAAM,EAAM,EAAO,EAAM,EAAK,IAC9B,OAAO,IAAM,EAAK,CAE1B,MAAO,GAAW,MAAP,EAAY,CACnB,IACA,MAAM,EAAQ,IACd,EAAQ,KACR,MAAM,EAAQ,EACd,EAAO,CAAC,EAAK,KACT,MAAM,EAAM,EAAO,EAAM,EAAK,IACxB,EAAM,EAAO,EAAM,EAAK,IAC9B,OAAO,IAAM,EAAI,CAEzB,KAAO,IAAW,MAAP,EAkBJ,MAlBgB,CACnB,IACA,MAAM,EAAS,GACf,GAAe,MAAX,IACA,KACI,EAAO,KAAK,KACG,MAAX,KACJ,EAAQ,KAGhB,EAAQ,KACR,MAAM,EAAW,EACjB,EAAO,CAAC,EAAK,KACT,MAAM,EAAK,EAAS,EAAK,GACnB,EAAO,EAAO,KAAI,GAAK,EAAO,EAAE,EAAK,MAC3C,GAAkB,mBAAP,EAAmB,OAAO,KAAM,EAC3B,CAExB,CAAY,CAChB,CACA,OAAO,CACX,CA9CW,EACX,CAgNA,SAAS,EAAO,GACZ,OAAI,GAAsB,iBAAR,GAAoB,UAAW,EAAY,EAAI,MAC1D,CACX,CAEA,IACI,OAAO,GACX,CAAE,MAAO,GAEL,OADA,QAAQ,MAAM,0BAA0B,MAAU,GAC3C,IAAM,eACjB,CACJ,CAOA,SAAS,IACD,IACJ,GAAkB,EAClB,gBAAe,MA02BnB,WACI,IAAK,MAAM,KAAO,EACd,GAAK,EAAI,KAAK,aAAiB,EAAI,gBAAgB,MAAQ,EAAI,KAAK,cAAc,YAIlF,GAAI,EAAI,WAAY,CAChB,EAAoB,EACpB,MAAM,EAAS,EAAmB,EAAI,WAAY,EAAI,YAAa,KAAM,EAAI,QAC7E,EAAoB,KACpB,MAAM,EAAW,OAAO,GAAU,IAC9B,EAAI,gBAAgB,KAChB,EAAI,KAAK,aAAa,aAAa,EAAI,KAAK,QAAU,GACtD,EAAI,KAAK,aAAa,aAAa,EAAI,KAAK,KAAM,GAGlD,EAAI,KAAK,YAAc,IACvB,EAAI,KAAK,UAAY,EAGjC,MAAO,GAAI,EAAI,KAAM,CACjB,MAAM,GAAiC,EAAI,KAAK,MAhGjD,IAiGC,IAAI,EAAW,EAAI,KAAK,eAAiB,EAAI,KAAK,MAClD,IAAK,MAAM,KAAQ,EACf,GAAkB,MAAd,EAAK,KAAc,CACnB,MAAM,EAAM,EAAmB,EAAK,WAAY,EAAI,aAAa,EAAO,KACxE,EAAW,EAAS,QAAQ,EAAK,UAAW,OAAO,EAAI,OAC3D,CAEA,EAAI,KAAK,aAAa,aAAa,EAAI,KAAK,QAAU,GACtD,EAAI,KAAK,aAAa,aAAa,EAAI,KAAK,KAAM,EAE1D,KAAO,CACH,MAAM,EAAM,EAAmB,EAAI,WAAY,EAAI,aAAa,EAAO,KACjE,EAAW,OAAO,EAAI,OACxB,EAAI,KAAK,YAAc,IACvB,EAAI,KAAK,UAAY,EAE7B,MAnCI,EAAa,OAAO,EAqChC,CAj5BQ,GACA,GAAkB,CAAK,IAE/B,CAEA,SAAS,EAAW,EAAO,EAAM,GAC7B,IAAK,EAAM,OACX,MAAM,OAAyB,IAAV,GAAuB,IAAU,QAAU,IAAU,WAAc,KAAO,EAC1F,GAGI,EAAY,YAAW,EAAY,UAAY,CAAC,GACrD,EAAY,UAAU,GAAQ,GAH9B,EAAS,IAAI,EAAM,EAK3B,CAEA,SAAS,EAAS,EAAO,EAAQ,EAAO,IACpC,IAAK,EAAQ,OAAO,EACpB,MAAM,EAAS,GACf,GAAsB,iBAAX,EAAqB,CAC5B,MAAM,EAAW,EAAQ,IAAI,GAC7B,OAAK,GACE,EAAS,EAAO,EAAU,EACrC,CAEA,MAAM,EAAO,EAAO,KACd,EAAa,MAAM,QAAQ,GAAS,QAAqB,OAAV,EAAiB,cAAgB,EAUtF,GARI,GAAQ,IAAS,IACJ,YAAT,GAAsB,OAAO,UAAU,IACzB,WAAT,GAAsC,iBAAV,GAEjC,EAAO,KAAK,CAAE,OAAM,QAAS,OAAQ,QAAS,YAAY,UAAa,OAI5D,WAAf,OACyB,IAArB,EAAO,WAA2B,EAAM,OAAS,EAAO,WAAW,EAAO,KAAK,CAAE,OAAM,QAAS,mBAC3E,IAArB,EAAO,WAA2B,EAAM,OAAS,EAAO,WAAW,EAAO,KAAK,CAAE,OAAM,QAAS,cAChG,EAAO,UAAY,IAAI,OAAO,EAAO,SAAS,KAAK,IAAQ,EAAO,KAAK,CAAE,OAAM,QAAS,iBACzF,GAAmB,WAAf,OACgB,IAAnB,EAAO,SAAyB,EAAQ,EAAO,SAAS,EAAO,KAAK,CAAE,OAAM,QAAS,iBAClE,IAAnB,EAAO,SAAyB,EAAQ,EAAO,SAAS,EAAO,KAAK,CAAE,OAAM,QAAS,iBACtF,GAAmB,WAAf,GAAqC,OAAV,EAAgB,CAClD,GAAI,EAAO,UAAY,MAAM,QAAQ,EAAO,UACxC,IAAK,MAAM,KAAO,EAAO,SACf,KAAO,GAAQ,EAAO,KAAK,CAAE,KAAM,EAAO,GAAG,KAAQ,IAAQ,EAAK,QAAS,aAGzF,GAAI,EAAO,WACP,IAAK,MAAM,KAAO,EAAO,WACjB,KAAO,GAAO,EAAS,EAAM,GAAM,EAAO,WAAW,GAAM,EAAO,GAAG,KAAQ,IAAQ,EAGrG,KAA0B,UAAf,SACiB,IAApB,EAAO,UAA0B,EAAM,OAAS,EAAO,UAAU,EAAO,KAAK,CAAE,OAAM,QAAS,kBAC1E,IAApB,EAAO,UAA0B,EAAM,OAAS,EAAO,UAAU,EAAO,KAAK,CAAE,OAAM,QAAS,aAC9F,EAAO,OACP,EAAM,SAAQ,CAAC,EAAM,IAAM,EAAS,EAAM,EAAO,MAAO,GAAG,KAAQ,SAO3E,GAHI,EAAO,OAAS,EAAO,KAAK,SAAS,IAAQ,EAAO,KAAK,CAAE,OAAM,QAAS,cACzD,IAAjB,EAAO,OAAuB,IAAU,EAAO,OAAO,EAAO,KAAK,CAAE,OAAM,QAAS,UAEnF,EAAO,OAAS,EAAG,CACnB,MAAM,EAAM,EAAO,KAAI,GAAK,GAAG,EAAE,MAAQ,kBAAkB,EAAE,UAAU,EAAE,QAAU,KAAO,EAAE,QAAU,IAAM,OAAM,KAAK,MACvH,MAAM,IAAI,MAAM,qBAAqB,IACzC,CACA,OAAO,CACX,CAMA,SAAS,EAAO,EAAK,EAAU,CAAC,GAC5B,MAAM,EAAO,EAAQ,KACf,EAAU,EAAW,EAAQ,SAC7B,EAAS,EAAQ,OACjB,EAAY,EAAQ,UAEpB,EAAkB,IACpB,IAAK,EAAW,OAAO,EACvB,MAAM,EAA0B,mBAAd,EAA2B,EAAY,EAAU,EAAW,EAAQ,QACtF,OAAO,EAAK,EAAG,GAAK,CAAC,EAGzB,IAAI,EAAQ,EAAe,GAE3B,GAAI,GAAQ,EAAS,CACjB,MAAM,EAAS,EAAQ,QAAQ,GAC/B,GAAe,OAAX,EACA,IACI,MAAM,EAAS,KAAK,MAAM,GAC1B,EAAQ,EAAe,EAC3B,CAAE,MAAO,GAAkB,CAEnC,CACI,GAAQ,EAAS,EAAO,GAE5B,MAAM,EAAI,CACN,SAAI,GACA,GAAI,GAAQ,EAAS,CACjB,MAAM,EAAS,EAAQ,QAAQ,GAC/B,GAAe,OAAX,EACA,IACI,MAAM,EAAS,KAAK,MAAM,GACpB,EAAc,EAAe,GAC/B,IAAgB,IAChB,EAAQ,EACJ,GAAQ,EAAS,EAAO,GAEpC,CAAE,MAAO,GAAkB,CAEnC,CAEA,OADI,GAAmB,EAAmB,GACnC,CACX,EACA,SAAI,CAAM,GACN,MAAM,EAAc,EAAe,GAC/B,GAAQ,EAAS,EAAa,GAClC,EAAQ,EACJ,IACI,GACA,EAAQ,QAAQ,EAAM,KAAK,UAAU,IAEzC,EAAO,EAAM,GAErB,EACA,QAAA,GAAa,OAAO,OAAO,KAAK,MAAQ,GAG5C,OADA,EAAW,EAAQ,MAAO,EAAM,GACzB,CACX,CAQA,SAAS,EAAM,EAAK,EAAU,CAAC,GAC3B,MAAM,EAAO,EAAQ,KACf,EAAU,EAAW,EAAQ,SAC7B,EAAS,EAAQ,OACjB,EAAY,EAAQ,UAEpB,EAAkB,IACpB,IAAK,EAAW,OAAO,EACvB,MAAM,EAA0B,mBAAd,EAA2B,EAAY,EAAU,GACnE,OAAO,EAAK,EAAG,GAAK,CAAC,EAGzB,IAAI,EAEJ,GAAmB,iBAAR,GAA4B,OAAR,EAAc,CACzC,IAAI,EAAQ,EAAe,GAC3B,GAAI,GAAQ,EAAS,CACjB,MAAM,EAAS,EAAQ,QAAQ,GAC/B,GAAe,OAAX,EACA,IACI,MAAM,EAAS,KAAK,MAAM,GAC1B,EAAQ,EAAe,EAC3B,CAAE,MAAO,GAAkB,CAEnC,CACI,GAAQ,EAAS,EAAO,GAGxB,EADA,GAAQ,EACC,CACL,SAAI,GACA,MAAM,EAAS,EAAQ,QAAQ,GAC/B,GAAe,OAAX,EACA,IACI,MAAM,EAAS,KAAK,MAAM,GACpB,EAAc,EAAe,GAC/B,IAAgB,IAChB,EAAQ,EACJ,GAAQ,EAAS,EAAO,GAEpC,CAAE,MAAO,GAAkB,CAG/B,OADI,GAAmB,EAAmB,GACnC,CACX,EACA,SAAI,CAAM,GACN,MAAM,EAAc,EAAe,GAC/B,GAAQ,EAAS,EAAa,GAClC,EAAQ,EACR,EAAQ,QAAQ,EAAM,KAAK,UAAU,IACrC,EAAO,EAAM,EACjB,EACA,QAAA,GAAa,OAAO,OAAO,KAAK,MAAQ,GAGnC,CAEjB,KAAO,CAEH,MAAM,EAAe,CAAC,EAAQ,EAAO,GAAI,EAAU,KAE/C,GAAoB,IAAhB,EAAK,QAAgB,GAAQ,EAAS,CACtC,MAAM,EAAS,EAAQ,QAAQ,GAC/B,GAAe,OAAX,EACA,IACI,MAAM,EAAS,KAAK,MAAM,GACtB,GAA4B,iBAAX,GACjB,OAAO,OAAO,EAAQ,EAE9B,CAAE,MAAO,GAAkB,CAEnC,CAGA,OAFoB,IAAhB,EAAK,QAAgB,GAAQ,EAAS,EAAQ,GAE3C,IAAI,MAAM,EAAQ,CACrB,GAAA,CAAI,EAAG,GACH,GAAoB,iBAAT,GAA8B,gBAAT,GAAmC,WAAT,EAAmB,OAAO,EAAE,GACtF,GAAa,iBAAT,EAAyB,OAAO,EAEhC,GACA,EAAmB,GAGvB,MAAM,EAAa,EAAE,GAErB,OAAI,GAAoC,iBAAf,IAA4B,MAAM,QAAQ,GACxD,EAAa,EAAY,IAAI,EAAM,GAAO,GAE9C,CACX,EACA,GAAA,CAAI,EAAG,EAAM,GACT,MAAM,EAAc,EAAe,GACnC,GAAI,EAAQ,CAER,MAAM,EAAS,EAAE,GACjB,EAAE,GAAQ,EACV,IACI,EAAS,EAAS,EACtB,CAAE,MAAO,GAEL,MADA,EAAE,GAAQ,EACJ,CACV,CACJ,MACI,EAAE,GAAQ,EASd,OANI,IACI,GACA,EAAQ,QAAQ,EAAM,KAAK,UAAU,IAEzC,EAAO,EAAM,KAEV,CACX,GACF,EAEN,EAAS,EAAa,EAC1B,CAEA,OADA,EAAW,EAAQ,MAAO,EAAM,GACzB,CACX,CA7HA,EAAO,IAAM,SAAU,EAAM,EAAU,CAAC,GACpC,GAAI,EAAS,IAAI,GAAO,OAAO,EAAS,IAAI,GAE5C,OAAO,OAD8B,IAAzB,EAAQ,aAA6B,EAAQ,aAAe,KACrD,IAAK,EAAS,QACrC,EA2HA,EAAM,IAAM,SAAU,EAAM,EAAU,CAAC,GACnC,GAAI,EAAS,IAAI,GAAO,OAAO,EAAS,IAAI,GAE5C,OAAO,OAD8B,IAAzB,EAAQ,aAA6B,EAAQ,aAAe,KACtD,IAAK,EAAS,QACpC,EAEA,MAAM,EAAU,CAAC,EAAK,EAAU,CAAC,IAAM,EAAM,EAAK,IAAK,EAAS,QAAS,WAAW,iBAOpF,SAAS,EAAmB,GACxB,IAAK,IAAS,EAAmB,OACjC,IAAI,EAAO,EAAU,IAAI,GACpB,IACD,EAAO,IAAI,IACX,EAAU,IAAI,EAAM,IAExB,EAAK,IAAI,EACb,CAMA,SAAS,EAAO,EAAM,GAClB,MAAM,EAAO,EAAU,IAAI,GAC3B,GAAK,EACL,IAAK,MAAM,KAAO,EACd,EAAkB,EAE1B,CAEA,SAAS,EAAkB,GACvB,MAAM,KAAE,EAAI,KAAE,EAAI,WAAE,EAAU,YAAE,EAAW,GAAE,EAAE,UAAE,EAAS,OAAE,GAAW,EAEvE,GAAK,EAAK,aAAiB,aAAgB,MAAQ,EAAK,cAAc,YAEtE,GAAI,EAAI,CACJ,EAAoB,EACpB,MAAM,EAAS,IACf,EAAoB,KAGpB,IAAI,EAAU,EAAU,EAAQ,EAAW,EAAQ,GAEnD,GADK,IAAS,EAAU,SAAS,eAAe,KAC5C,GAAgC,KAArB,EAAQ,SAAiB,CACpC,MAAM,EAAO,SAAS,cAAc,QACpC,EAAK,MAAM,QAAU,WACrB,EAAK,YAAY,GACjB,EAAU,CACd,CAEI,IAAS,IACT,EAAK,YAAY,GACjB,EAAI,KAAO,EACX,EAAQ,QAAU,EAE1B,MAAO,GAAI,EAAM,CACb,MAAM,GAAiC,EAAK,MA0dzC,IAzdH,IAAI,EAAW,EAAK,eAAiB,EAAK,MAC1C,IAAK,MAAM,KAAQ,EACf,GAAkB,MAAd,EAAK,KAAc,CACnB,EAAoB,EACpB,MAAM,EAAM,EAAwB,EAAK,WAAY,GACrD,EAAoB,KACpB,EAAW,EAAS,QAAQ,EAAK,UAAW,OAAO,GACvD,KAAO,CACH,MAAM,EAAM,EAAmB,EAAK,WAAY,GAAa,EAAO,KACpE,EAAW,EAAS,QAAQ,EAAK,UAAW,OAAO,EAAI,OAC3D,CAEA,EAAK,aAAa,aAAa,EAAK,QAAU,GAC9C,EAAK,aAAa,aAAa,EAAK,KAAM,EAElD,MAAO,GAAI,EAAK,WAAa,KAAK,WAAgC,IAAlB,EAAK,UAAyC,aAAvB,EAAK,MAAM,QAC9E,GAAI,EAAY,CACZ,EAAoB,EACpB,MAAM,EAAS,EAAwB,EAAY,GACnD,EAAoB,KAEpB,GADe,GAA4B,iBAAX,IAAwB,MAAM,QAAQ,KAAY,EAAO,YAAc,UAAW,GACtG,CACR,MAAM,EAAU,EAAU,EAAQ,EAAW,EAAQ,GACrD,EAAK,YAAY,GACjB,EAAI,KAAO,EACX,EAAQ,QAAU,CACtB,KAAO,CACH,MAAM,EAAS,OAAQ,GAA4B,iBAAX,GAAuB,UAAW,EAAU,EAAO,MAAQ,GAC7E,IAAlB,EAAK,SAAgB,EAAK,YAAc,EACnC,EAAK,YAAc,IAAQ,EAAK,UAAY,EACzD,CACJ,KAAO,CACH,MAAM,GAAiC,EAAK,eAAiB,EAAK,UAybnE,IAxbC,IAAI,EAAO,EAAK,eAAiB,EAAK,UACtC,IAAK,MAAM,KAAQ,EAAa,CAC5B,MAAM,EAAM,EAAmB,EAAK,WAAY,GAAa,EAAO,EAAK,MACzE,EAAO,EAAK,QAAQ,EAAK,UAAW,OAAO,EAAI,OACnD,CACI,EAAK,YAAc,IAAM,EAAK,UAAY,EAClD,CAER,CAhGA,EAAQ,IAAM,SAAU,EAAM,EAAU,CAAC,GACrC,GAAI,EAAS,IAAI,GAAO,OAAO,EAAS,IAAI,GAE5C,OAAO,OAD8B,IAAzB,EAAQ,aAA6B,EAAQ,aAAe,KACtD,IAAK,EAAS,OAAM,QAAS,WAAW,gBAC9D,EAiGA,MAAM,EAAI,CAAC,EAAY,SACC,IAAhB,EAEO,KAAK,KAGT,EAAmB,EAAY,GAAa,EAAM,KAAK,MA8DlE,SAAS,EAAU,EAAM,GACrB,GAAI,EAAQ,IAAI,GAAO,OAAO,EAAQ,IAAI,GAG1C,GADiB,GAAU,GAAmB,OAChC,CACV,MAAM,EAAQ,EAAK,MAAM,KACzB,IAAI,EAAM,WACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC9B,EAAM,IAAM,EAAM,IAEtB,GAAmB,mBAAR,EAEP,OADA,EAAQ,IAAI,EAAM,GACX,CAEf,CAEA,EAAW,EAEf,CAEA,eAAe,EAAW,GACtB,GAAI,EAAQ,IAAI,GAAO,OAAO,QAAQ,QAAQ,EAAQ,IAAI,IAC1D,GAAI,EAAe,IAAI,GAAO,OAAO,EAAe,IAAI,GAExD,MAAM,EAAU,WACZ,IACI,MAAM,EAAO,EAAK,cAAc,QAAQ,MAAO,KAAO,MAChD,EAAW,EAAK,OAAS,EAAK,OAAO,IAAM,OAAO,SAAS,KAE3D,EAAM,GADC,EAAS,UAAU,EAAG,EAAS,YAAY,KAAO,GAAK,aAC9C,IAEhB,SADe,OAAO,IACV,QAElB,GAAkB,mBAAP,EAAmB,CAC1B,EAAQ,IAAI,EAAM,GAElB,MAAM,EAAQ,EAAK,MAAM,KACzB,GAAI,EAAM,OAAS,EAAG,CAClB,IAAI,EAAM,WACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAS,EAAG,IAAK,CACvC,MAAM,EAAO,EAAM,GACd,EAAI,KAAO,EAAI,GAAQ,CAAC,GAC7B,EAAM,EAAI,EACd,CACA,MAAM,EAAO,EAAM,EAAM,OAAS,QAChB,IAAd,EAAI,KAAqB,EAAI,GAAQ,EAC7C,CACJ,MACI,EAAQ,IAAI,EAAM,KAE1B,CAAE,MAAO,GACL,EAAQ,IAAI,EAAM,KACtB,CAEA,MAAM,EAAU,EAAc,IAAI,GAClC,GAAI,EAAS,CACT,IAAK,MAAM,KAAO,EAAS,EAAkB,GAC7C,EAAc,OAAO,EACzB,CACA,EAAe,OAAO,EACzB,EApCe,GAuChB,OADA,EAAe,IAAI,EAAM,GAClB,CACX,CAEA,SAAS,EAAkB,EAAM,GAC7B,IAAK,EAAK,OACV,IAAI,EAAM,EAAc,IAAI,GACvB,IACD,EAAM,IAAI,IACV,EAAc,IAAI,EAAM,IAE5B,EAAI,IAAI,EACZ,CAEA,SAAS,EAAkB,EAAK,EAAQ,IAAI,KACxC,IAAK,EAAK,OAAO,EAEjB,GAAmB,iBAAR,EAAkB,CACzB,GAAI,EAAI,WAAW,MAAQ,EAAI,OAAS,EAAG,CACvC,MAAM,EAAS,EAAS,GACxB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,MAAM,EAAI,EAAO,GACjB,GAAI,qBAAqB,KAAK,KAAO,CAAC,IAAK,OAAQ,QAAS,OAAQ,aAAa,SAAS,GAAI,CAC1F,GAAI,EAAI,GAAuB,MAAlB,EAAO,EAAI,GAAY,SACpC,EAAM,IAAI,EACd,CACJ,CACJ,CACA,OAAO,CACX,CAEA,GAAmB,iBAAR,GAAoB,EAAI,SAAU,OAAO,EAEpD,GAAI,MAAM,QAAQ,GAAM,CACpB,IAAK,MAAM,KAAQ,EAAK,EAAkB,EAAM,GAChD,OAAO,CACX,CAEA,IAAK,MAAM,KAAO,EAAK,CACnB,MAAM,EAAQ,EAAkB,IAAI,GACpC,GAAI,EAAI,WAAW,MAAQ,EAAI,OAAS,EAAG,CACvC,MAAM,EAAa,EAAI,MAAM,GACxB,CAAC,IAAK,KAAK,SAAS,IACrB,EAAM,IAAI,EAElB,MAAW,GACP,EAAM,IAAI,GAEd,EAAkB,EAAI,GAAM,EAChC,CACA,OAAO,CACX,CAGA,SAAS,EAAmB,EAAK,EAAS,EAAO,GAC7C,GAAmB,iBAAR,GAA4B,OAAR,GAAgB,EAAI,SAE/C,MAAmB,iBAAR,GAAoB,EAAI,WAAW,KACnC,EAAwB,EAAK,EAAS,GAE1C,EAIX,GAFA,EAAM,EAAO,GAET,MAAM,QAAQ,GACd,OAAO,EAAI,KAAI,GAAQ,EAAmB,EAAM,EAAS,EAAO,KAGpE,MAAM,EAAO,OAAO,KAAK,GACnB,EAAM,EAAK,GACjB,IAAK,EAAK,OAAO,EACjB,MAAM,EAAM,EAAI,GAGhB,GAAY,MAAR,EAKA,OAJI,IACA,EAAkB,WAAa,EAC/B,EAAa,IAAI,IAEd,EAAmB,EAAK,GAAS,EAAO,IAAK,GAAO,MAI/D,GAAY,MAAR,EACA,OAAO,EAAwB,EAAK,EAAS,GAIjD,MAAM,EAAQ,EAAkB,IAAI,GACpC,GAAI,EAAI,WAAW,MAAQ,EAAO,CAC9B,MAAM,EAAa,GAAS,EAAI,MAAM,GAChC,EAAW,EAAU,EAAY,GACvC,GAAI,EAAU,CAGV,IAAK,MAAM,QAAQ,IAAuB,iBAAR,GAA4B,OAAR,EAAc,CAEhE,GAAI,EAAS,qBACT,OAAO,EAAS,KAAK,EAAS,GAIlC,MAAM,EAAc,CAAC,EACrB,IAAK,MAAM,KAAK,OAAO,KAAK,GAAM,CAC9B,MAAM,EAAI,EAAI,GACc,iBAAN,IAClB,EAAE,WAAW,OACb,EAAE,WAAW,QACb,EAAE,WAAW,WACb,EAAE,WAAW,YACb,EAAE,WAAW,YAIb,EAAY,GAAK,EAAO,EAAwB,EAAG,EAAS,IACxC,iBAAN,GAAwB,OAAN,GAAe,EAAE,SAGjD,EAAY,GAAK,EAFjB,EAAY,GAAK,EAAmB,EAAG,EAAS,EAAO,EAI/D,CACA,OAAO,EAAS,KAAK,EAAS,EAClC,CAGA,MACM,GADO,MAAM,QAAQ,GAAO,EAAM,CAAC,IACf,KAAI,IAS1B,GAR8B,iBAAR,IAClB,EAAI,WAAW,OACf,EAAI,WAAW,QACf,EAAI,WAAW,WACf,EAAI,WAAW,YACf,EAAI,WAAW,YAGP,CACR,MAAM,EAAoB,CAAC,KAAM,KAAM,YAAa,aACpD,GAAI,EAAkB,SAAS,IAAQ,EAAkB,SAAS,IAAe,EAAS,QAAS,CAC/F,MAAM,EAAY,UAAR,EAAkB,QAAmB,WAAR,EAAmB,SAAY,EAAI,WAAW,MAAQ,QAAU,KACvG,GAAI,EAAG,CACH,IAAI,EAAO,EAEX,MADU,UAAN,IAAe,EAAO,EAAI,MAAM,IAC7B,EAAmB,EAAM,EAAzB,CAA4B,EAAS,EAAO,EAAQ,cAC/D,CACJ,CACA,OAAO,EAAO,EAAwB,EAAK,EAAS,GACxD,CACA,MAAmB,iBAAR,GAA4B,OAAR,GAAiB,EAAI,SAG7C,EAFI,EAAmB,EAAK,EAAS,EAAO,EAEzC,IAEd,OAAO,EAAS,MAAM,EAAS,EACnC,CAEI,OADA,EAAkB,EAAY,GACvB,WAAW,cAE1B,CAGA,MAAM,EAAS,CAAC,EAChB,IAAK,MAAM,KAAK,EAAM,CAClB,MAAM,EAAI,EAAI,GACc,iBAAN,IACZ,UAAN,GAAiB,EAAE,WAAW,WAAa,EAAE,WAAW,WAClD,WAAN,GAAkB,EAAE,WAAW,YAAc,EAAE,WAAW,YAC1D,EAAE,WAAW,OAIb,EAAO,GAAK,EAAwB,EAAG,EAAS,GAC5B,iBAAN,GAAwB,OAAN,GAAe,EAAE,SAGjD,EAAO,GAAK,EAFZ,EAAO,GAAK,EAAmB,EAAG,EAAS,EAAO,EAI1D,CACA,OAAO,CACX,CAMA,SAAS,EAAY,EAAM,GACvB,IAAI,EAAO,EACX,KAAO,GAAM,CACT,GAAI,EAAK,gBAAsC,IAAzB,EAAK,UAAU,GACjC,OAAO,EAAK,UAAU,GAE1B,EAAO,EAAK,YAAc,EAAK,MAAQ,EAAK,UAChD,CACA,OAAO,EAAS,IAAI,EACxB,CAEA,SAAS,EAAY,EAAM,GACvB,IAAI,EAAO,EACX,KAAO,GAAM,CACT,GAAI,EAAK,GAAM,OAAO,EAAK,GAC3B,EAAO,EAAK,YAAc,EAAK,MAAQ,EAAK,UAChD,CACA,OAAO,IACX,CAEA,SAAS,EAAwB,EAAY,EAAa,GACtD,IAAI,EAAW,EAAqB,IAAI,GAKxC,OAJK,IACD,EAMR,SAAgC,GAC5B,MAAM,EAAO,EAAW,OAClB,EAAW,EAAiB,GAClC,MAAO,CAAC,EAAK,KACT,IACI,OAAO,EAAS,EAAK,EACzB,CAAE,MAAO,GAEL,OADA,QAAQ,MAAM,8BAA8B,MAAU,EAAG,CAAE,YAAa,IACjE,WAAW,IACtB,EAER,CAjBmB,CAAuB,GAClC,EAAqB,IAAI,EAAY,IAElC,EAAS,EAAa,EACjC,CAeA,SAAS,EAAmB,EAAS,GACjC,GAAI,EAAQ,SAAS,MACjB,MAAM,IAAI,MAAM,iBAAiB,8KAErC,MAAM,EAAQ,EAAQ,MAAM,QAAQ,QAAO,GAAW,KAAN,IAC1C,EAAO,EAAM,GACb,EAAO,EAAM,MAAM,GAEzB,MAAO,CAAC,EAAK,KACT,IAAI,EAOJ,GANsB,EAAT,UAAT,EAAyB,EACX,WAAT,EAA0B,EACjB,WAAT,EAA0B,EAAY,EAAK,iBAClC,WAAT,EAA0B,EAAY,EAAK,iBACxC,EAAY,EAAK,IAExB,EAAM,MAAiB,UAAT,EAAoB,aAAa,UAAU,EAG9D,GAAa,WAAT,EAAmB,CACnB,GAAqB,IAAjB,EAAM,OAAc,OAAO,EAC/B,IAAI,EAAS,EACb,IAAK,MAAM,KAAQ,EAAO,CACtB,GAAI,QAAyC,OAC7C,EAAS,EAAO,EACpB,CACA,OAAO,CACX,CAGA,OAAoB,IAAhB,EAAK,QACQ,UAAT,GAAoB,GAAmB,EAAmB,GACvD,GAOnB,SAAqB,EAAM,EAAM,GAC7B,GAAoB,IAAhB,EAAK,OAAc,OAAO,EAE9B,IAAI,EAAS,EACT,GAAwB,iBAAT,GAAqB,UAAW,IAC/C,EAAS,EAAK,OAGlB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAS,EAAG,IAEjC,GADA,EAAS,EAAO,EAAK,KAChB,GAA4B,iBAAX,EAAqB,OAG/C,MAAM,EAAM,EAAK,EAAK,OAAS,GAC/B,GAAI,QAAyC,OAEzC,GAAmB,EAAmB,GAE1C,MAAO,CACH,SACA,MACA,SAAI,GAAU,OAAO,EAAO,EAAM,EAClC,SAAI,CAAM,GACN,EAAO,GAAO,EACV,GAAa,EAAO,EAC5B,EACA,OAAA,GAAY,OAAO,KAAK,KAAO,EAC/B,QAAA,GAAa,OAAO,OAAO,KAAK,MAAQ,EAEhD,CAjCe,CAAY,EAAM,EAAe,UAAT,EAAmB,EAAO,KAAK,CAEtE,CA8CA,SAAS,EAAmB,EAAY,EAAa,GAAc,EAAO,EAAO,IAAK,GAClF,MAAa,MAAT,EACO,CAAE,KAAM,QAAS,MAAO,EAAwB,EAAY,EAAa,IAXxF,SAAiB,GAMb,MALwB,CACpB,QAAS,MAAO,QAAS,UAAW,OAAQ,SAAU,UAAW,YAAa,WAC9E,WAAY,eAAgB,WAAY,UAAW,aAAc,eACjE,kBAAmB,aAAc,aAAc,cAAe,MAE3C,MAAK,GAAW,EAAQ,KAAK,IACxD,CAMW,CAAQ,GAuBnB,SAAuB,EAAY,EAAa,GAAc,GAC1D,IACI,MAAM,EAAS,SAAS,SACpB,EACA,GAAe,SACf,KACA,YAAY,SACZ,MAGJ,OAAQ,EAAO,YACX,KAAK,YAAY,YAAa,MAAO,CAAE,KAAM,QAAS,MAAO,EAAO,aACpE,KAAK,YAAY,YAAa,MAAO,CAAE,KAAM,QAAS,MAAO,EAAO,aACpE,KAAK,YAAY,aAAc,MAAO,CAAE,KAAM,QAAS,MAAO,EAAO,cACrE,KAAK,YAAY,6BACjB,KAAK,YAAY,2BACb,MAAM,EAAQ,GACd,IAAI,EAAO,EAAO,cAClB,KAAO,GACH,EAAM,KAAK,GACX,EAAO,EAAO,cAElB,OAAI,GAAe,EAAM,OAAS,EAAU,CAAE,KAAM,QAAS,MAAO,GAC7D,CAAE,KAAM,QAAS,MAAO,EAAM,KAAI,GAAK,EAAE,aAAe,EAAE,YAAW,KAAK,OACrF,KAAK,YAAY,wBACjB,KAAK,YAAY,wBACb,OAAI,GAAe,EAAO,gBAAwB,CAAE,KAAM,QAAS,MAAO,CAAC,EAAO,kBAC3E,CAAE,KAAM,QAAS,MAAO,EAAO,iBAAiB,aAAe,EAAO,iBAAiB,WAAa,IAC/G,QAAS,MAAO,CAAE,KAAM,QAAS,MAAO,IAEhD,CAAE,MAAO,GAEL,OADA,QAAQ,MAAM,wBAAwB,KAAe,EAAG,CAAE,gBACnD,CAAE,KAAM,QAAS,MAAO,iBAAiB,KACpD,CACJ,CAxDU,CAAc,EAAY,EAAa,GAIjD,SAAqB,EAAU,EAAa,GAAc,GACtD,IACI,MAAM,EAAoC,IAA1B,GAAa,SACvB,EACA,GAAa,eAAiB,SAE9B,EAAW,MAAM,KAAK,EAAQ,iBAAiB,IAErD,OAAwB,IAApB,EAAS,OAAqB,CAAE,KAAM,QAAS,MAAO,IACtD,EAAoB,CAAE,KAAM,QAAS,MAAO,GAEzC,CAAE,KAAM,QAAS,MAAO,EAAS,KAAI,GAAM,EAAG,aAAe,KAAI,KAAK,MACjF,CAAE,MAAO,GAEL,OADA,QAAQ,MAAM,sBAAsB,KAAa,EAAG,CAAE,gBAC/C,CAAE,KAAM,QAAS,MAAO,eAAe,KAClD,CACJ,CAnBU,CAAY,EAAY,EAAa,EAC/C,CAkGA,SAAS,EAAU,EAAO,EAAW,EAAQ,GACzC,GAAI,QAAuC,OAAO,KAGlD,GAAqB,mBAFrB,EAAQ,EAAO,IAEkB,CAC7B,MAAM,EAAc,SAAS,cAAc,MACrC,EAAK,IAAM,EAAM,KAAK,GACtB,EAAM,CAAE,KAAM,EAAa,KAAI,YAAa,EAAS,YAAW,UACtE,EAAY,QAAU,EACtB,EAAoB,EACpB,MAAM,EAAU,IAChB,EAAoB,KACpB,IAAI,EAAM,EAAU,EAAS,EAAW,EAAQ,GAChD,GAAI,EAAK,CACL,GAAqB,KAAjB,EAAI,SAAiB,CACrB,MAAM,EAAO,SAAS,cAAc,QACpC,EAAK,MAAM,QAAU,WACrB,EAAK,YAAY,GACjB,EAAM,CACV,CAGA,OAFA,EAAI,KAAO,EACX,EAAI,QAAU,EACP,CACX,CACA,OAAO,CACX,CAEA,GAAqB,iBAAV,EACP,MAAqB,iBAAV,GAAsB,EAAM,WAAW,MAAQ,EAAM,OAAS,EAC9D,EAAU,CAAE,IAAK,GAAS,EAAW,EAAQ,GAEjD,SAAS,eAAe,GAGnC,GAAI,MAAM,QAAQ,GAAQ,CACtB,MAAM,EAAO,SAAS,yBACtB,IAAK,MAAM,KAAQ,EAAO,CACtB,MAAM,EAAY,EAAU,EAAM,EAAW,EAAQ,GACjD,GAAW,EAAK,YAAY,EACpC,CACA,OAAO,CACX,CAEA,GAAI,EAAM,SAAU,OAAO,EAE3B,MAAM,EAAO,OAAO,KAAK,GACzB,GAAoB,IAAhB,EAAK,SAA6B,MAAZ,EAAK,IAA0B,MAAZ,EAAK,IAAc,EAAK,GAAG,WAAW,MAAQ,EAAkB,IAAI,EAAK,KAAM,CACxH,MAAM,EAAc,SAAS,eAAe,IACtC,EAAM,CACR,KAAM,EACN,YAAa,EACb,GAAK,GAAU,EAAmB,EAAO,EAAS,EAAO,GACzD,YACA,UAEJ,EAAY,QAAU,EACtB,EAAoB,EACpB,MAAM,EAAS,EAAI,KAGnB,GAFA,EAAoB,KAEhB,GAA4B,iBAAX,IAAwB,MAAM,QAAQ,KAAY,EAAO,UACtE,OAAO,KAAK,GAAQ,OAAS,EAAG,CAChC,MAAM,EAAM,EAAU,EAAQ,EAAW,EAAQ,GACjD,GAAI,EAGA,OAFA,EAAI,KAAO,EACX,EAAI,QAAU,EACP,CAEf,CAGJ,OADA,EAAY,UAAY,OAAO,GAAU,IAClC,CACX,CAEA,MAAM,EAAM,EAAK,GACjB,IAAK,EAAK,OAAO,SAAS,yBAE1B,MAAM,EAAU,EAAM,GAChB,EAAK,SAAS,cAAc,GAC9B,GAAS,OAAO,eAAe,EAAI,aAAc,CAAE,MAAO,EAAS,YAAY,EAAO,cAAc,IASxG,GAAuB,iBAAZ,GAAoC,OAAZ,GAAqB,MAAM,QAAQ,IAAa,EAAQ,UANtE,CAAC,IAClB,GAAmB,iBAAR,GAA4B,OAAR,GAAgB,MAAM,QAAQ,IAAQ,EAAI,SAAU,OAAO,EAC1F,MAAM,EAAO,OAAO,KAAK,GACzB,OAAuB,IAAhB,EAAK,SAA6B,MAAZ,EAAK,IAA0B,MAAZ,EAAK,IAAc,EAAK,GAAG,WAAW,MAAQ,EAAkB,IAAI,EAAK,IAAI,EAGzB,CAAa,GAuC9G,CACH,MAAM,EAAY,EAAU,EAAS,EAAW,EAAQ,GACpD,GAAW,EAAG,YAAY,EAClC,MAzCI,IAAK,MAAM,KAAO,EAAS,CACvB,MAAM,EAAM,EAAQ,GACpB,GAAY,aAAR,EAAoB,CACpB,MAAM,EAAW,MAAM,QAAQ,GAAO,EAAM,CAAC,GAC7C,IAAK,MAAM,KAAS,EAAU,CAC1B,MAAM,EAAY,EAAU,EAAO,EAAW,EAAQ,GAClD,GAAW,EAAG,YAAY,EAClC,CACJ,MAAO,GAAY,UAAR,EACP,EAAG,UAAY,OACZ,GAAY,UAAR,GAAkC,iBAAR,GAA4B,OAAR,EACrD,IAAK,MAAM,KAAK,EAAK,EAAG,MAAM,GAAK,EAAI,QACpC,GAAY,aAAR,GAA8B,YAAR,GAC7B,GAAmB,mBAAR,EACP,GAAY,aAAR,EAAoB,IAAM,EAAI,KAAK,EAAK,CAAE,MAAO,GAAK,MACrD,EAAG,QAAU,OACf,GAAmB,iBAAR,GAA4B,OAAR,EAClC,GAAY,aAAR,EAAoB,IAAM,EAAmB,EAAK,EAAI,KAAM,EAAS,CAAE,MAAO,GAAK,MAClF,EAAG,QAAU,IAAM,EAAmB,EAAK,EAAI,KAAM,QAE3D,GAAI,EAAI,WAAW,MACH,mBAAR,EACP,EAAG,GAAO,EACY,iBAAR,GAA4B,OAAR,IAClC,EAAG,GAAQ,GAAU,EAAmB,EAAK,EAAI,EAAO,SAG5D,GAAmB,iBAAR,GAA4B,OAAR,EAAc,CACzC,MAAM,EAAM,CAAE,KAAM,EAAI,YAAa,EAAI,GAAK,GAAU,EAAmB,EAAK,EAAI,EAAO,GAAS,UACpG,EAAoB,EACpB,MAAM,EAAU,EAAI,KACpB,EAAoB,KACpB,EAAG,aAAa,EAAK,OAAO,GAAW,IAC3C,MACI,EAAG,aAAa,EAAK,EAGjC,CAMJ,OAAO,CACX,CAKA,SAAS,EAAK,EAAM,EAAS,EAAS,SAAS,eAC3C,MAAM,SAAc,EACd,EAAqB,WAAT,GAAsB,GAAW,EAAQ,WAC3D,IAAI,EAAU,EAKd,GAJa,WAAT,IACA,EAAU,KAAK,MAAM,IAGrB,EAAS,CACT,IAAI,OAAE,EAAS,EAAM,SAAE,EAAW,aAAgB,EAClD,GAAsB,iBAAX,EAAqB,CAC5B,MAAM,EAAU,MAAM,KAAK,SAAS,iBAAiB,IACrD,IAAI,EAAW,KACf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACrC,MAAM,EAAM,EAAK,EAAS,IAAK,EAAS,OAAQ,EAAQ,GAAI,WAAY,GAAa,GAC3E,IAAN,IAAS,EAAW,EAC5B,CACA,OAAO,CACX,CAEA,MAAM,EAAM,EAAU,EAAS,EAAW,EAAQ,OAAQ,EAAQ,SAYlE,OAXA,GAAY,GAAY,aAAa,cACpB,cAAb,EAA0B,EAAO,YAAY,GAC3B,cAAb,EAA4B,EAAO,gBAAgB,GACtC,gBAAb,EAA8B,EAAO,sBAAsB,cAAe,GAC7D,eAAb,EAA6B,EAAO,sBAAsB,aAAc,GAC3D,cAAb,EAA4B,EAAO,sBAAsB,YAAa,GACzD,aAAb,EAA2B,EAAO,sBAAsB,WAAY,GACvD,WAAb,IACA,EAAO,YAAY,EAAO,aAAa,CAAE,KAAM,SACpD,EAAO,WAAW,gBAAgB,IAE/B,CACX,CACA,OAAO,EAAU,EAAS,EAC9B,CAhsBA,EAAQ,IAAI,WAAW,GAAK,SAAS,KACrC,EAAQ,IAAI,UAAU,GAAK,OAAO,KAClC,EAAQ,IAAI,UAAU,GAAK,OAAO,KAClC,EAAQ,IAAI,WAAW,KAAO,IAC9B,EAAQ,IAAI,SAAU,GACtB,EAAQ,IAAI,QAAS,GACrB,EAAQ,IAAI,UAAW,GACvB,EAAQ,IAAI,aAAc,EAAO,KACjC,EAAQ,IAAI,YAAa,EAAM,KAC/B,EAAQ,IAAI,cAAe,EAAQ,KAGnC,EAAQ,IAAI,SAAS,SAAU,GAC3B,MAAM,KAAE,EAAM,OAAQ,EAAW,KAAE,GAAS,EAC5C,IAAK,IAAS,EAEV,YADA,QAAQ,MAAM,sDAKlB,MAAM,EAAU,SAAU,GAGtB,GAAI,EACA,IACI,EAAS,EAAO,EACpB,CAAE,MAAO,GAEL,MADA,QAAQ,MAAM,iBAAiB,uBAA2B,GACpD,CACV,CAIJ,OAcR,SAA2B,EAAM,EAAS,EAAO,GAI7C,OADA,EAAQ,cAAgB,EACjB,EAAmB,EAAM,EAAS,GAAO,EACpD,CAnBe,CAAkB,EAAM,KAAM,KAAM,EAC/C,EAMA,OAHA,EAAQ,SAAU,EAElB,EAAQ,IAAI,EAAM,GACX,UAAU,eACrB,IAGA,EAAQ,IAAI,SAAS,sBAAuB,EA6P5C,EAAK,SAAW,CAAC,EAAQ,KACrB,EAAkB,IAAI,EAAQ,EAAW,EAyZ7C,MAAM,EAAgB,IAAI,IAAI,CAAC,MAAO,SAAU,SAAU,QAAS,QAAS,SAAU,QAAS,UAE/F,eAAe,EAAU,EAAS,GAC9B,MAAM,EAAM,EAAQ,QAAQ,cAC5B,GAAI,EAAc,IAAI,GAAM,OAE5B,IAAK,EAED,YADA,EAAQ,kBAOZ,KADkB,EAAS,SAAS,MAAQ,EAAS,SAAS,QAC3C,EAAS,WAAW,QACnC,IACI,MAAM,EAAS,SAAS,cAAc,GACtC,GAAI,EAEA,YADA,EAAQ,mBAAmB,MAAM,KAAK,EAAO,YAAY,KAAI,GAAK,EAAE,WAAU,KAGtF,CAAE,MAAO,GAA4C,CAIzD,IACI,MAAM,EAAS,EAAQ,aAAa,gBAAkB,MACtD,IAAI,EAAO,EAAQ,aAAa,aAChC,MAAM,EAAe,EAAQ,aAAa,sBAC1C,GAAI,EAAc,CACd,MAAM,EAAS,SAAS,cAAc,GAClC,IACA,EAAO,YAAa,EAAS,EAAO,QAAU,UAAW,EAAS,EAAO,MAAQ,EAAO,YAEhG,CACA,MAAM,EAAM,IAAI,IAAI,EAAU,OAAO,SAAS,MAE1C,IADY,CAAE,UACA,KAAO,GACzB,MAAM,QAAiB,WAAW,MAAM,EAAI,MAC5C,IAAK,EAAS,GAAI,MAAM,IAAI,MAAM,QAAQ,EAAS,UAEnD,MAAM,EAAc,EAAS,QAAQ,IAAI,iBAAmB,GACtD,QAAa,EAAS,OACtB,EAAW,EAAI,SAAS,cAGxB,EAAS,EAAS,SAAS,UAAY,EAAY,SAAS,qBAAuB,EAAY,SAAS,oBACxG,EAAS,EAAS,SAAS,UAAY,EAAS,SAAS,SAAW,EAAY,SAAS,aAE/F,GAAI,EAAQ,CACR,MAAM,EAAW,KAAK,MAAM,GACtB,EAAQ,OAAO,YAAY,EAAI,aAAa,WAClD,EAAQ,cAAgB,EACnB,EAAQ,gBAAe,EAAQ,cAAgB,GAGpD,MAAM,EAAgB,EAAkB,GACpC,EAAc,KAAO,SACf,QAAQ,IAAI,MAAM,KAAK,GAAe,KAAI,GAAQ,EAAW,MAGvE,MAAM,EAAM,EAAU,GAAU,GAAM,EAAO,GAC7C,EAAQ,gBAAgB,EAC5B,MAAO,GAAI,EACP,EAAQ,UAAY,MACjB,CAEH,MAAM,EAAM,SAAS,cAAc,OACnC,EAAI,YAAc,EAClB,EAAQ,gBAAgB,EAC5B,CACJ,CAAE,MAAO,GACL,EAAQ,UAAY,2CAA2C,KAAY,EAAE,eACjF,CACJ,CAEA,SAAS,EAAsB,GAC3B,MAAM,EAAU,EAAM,cAChB,EAAO,EAAQ,aAAa,QAClC,IAAK,EAAM,OAEX,EAAM,iBAGN,MAAM,EAAY,EAAK,QAAQ,KACzB,EAAO,GAAa,EAAI,EAAK,UAAU,EAAG,GAAa,EACvD,EAAO,GAAa,EAAI,EAAK,UAAU,EAAY,GAAK,KAGxD,EAAa,EAAQ,aAAa,WAAa,OACrD,IAAI,EAAU,GAEd,GAAmB,SAAf,EACA,EAAU,CAAC,QAEX,IACI,EAAU,MAAM,KAAK,SAAS,iBAAiB,GACnD,CAAE,MAAO,GACL,MACJ,CAIJ,IAAK,MAAM,KAAU,EACjB,EAAO,aAAa,MAAO,GAI3B,GACA,YAAW,KACP,MAAM,EAAa,SAAS,eAAe,GACvC,GACA,EAAW,eAAe,CAAE,SAAU,UAC1C,GACD,IAEX,CAGA,MAAM,EAAO,IAAI,IAAS,EAAK,KAAK,KAAU,QAAO,CAAC,EAAG,IAAM,GAAK,OAAO,IAAM,IAAI,GAU/E,EAAO,SAAU,EAAQ,GAQ3B,OAPI,GAA4B,iBAAX,GAAuB,UAAW,GAE5C,GAA4B,mBAAX,GAAyB,UAAW,EAD5D,EAAO,MAAQ,EAGR,GAA4B,iBAAX,GAAuB,GAAsB,iBAAR,GAC7D,OAAO,OAAO,EAAQ,GAEnB,CACX,EACA,EAAK,SAAU,EAEf,MAAM,EAAO,SAAU,EAAQ,EAAK,GAChC,MACM,EADW,IAA6B,iBAAX,GAAyC,mBAAX,IAA0B,UAAW,EAC3E,EAAO,MAAQ,EAC1C,OAAO,EAAK,EAAQ,OAAO,GAAW,OAAO,GACjD,EACA,EAAK,SAAU,EAEf,MAAM,EAAO,SAAU,EAAQ,EAAK,GAChC,MACM,EADW,IAA6B,iBAAX,GAAyC,mBAAX,IAA0B,UAAW,EAC3E,EAAO,MAAQ,EAC1C,OAAO,EAAK,EAAQ,OAAO,GAAW,OAAO,GACjD,EACA,EAAK,SAAU,EAEf,MAAM,EAAU,SAAU,GACtB,MACM,KADW,IAA6B,iBAAX,GAAyC,mBAAX,IAA0B,UAAW,IAC3E,EAAO,MAClC,OAAO,EAAK,GAAS,EACzB,EACA,EAAQ,SAAU,EAkBlB,EAAQ,IAAI,QAAS,GACrB,EAAQ,IAAI,SAAU,GACtB,EAAQ,IAAI,IAAK,GACjB,EAAQ,IAAI,MAAO,GACnB,EAAQ,IAAI,MAAO,GACnB,EAAQ,IAAI,YA/DC,IAAI,KACb,MAAM,EAAO,EAAK,KAAK,KAAU,KAAI,GAAK,OAAO,IAAM,IACvD,OAAoB,IAAhB,EAAK,OAAqB,EACV,IAAhB,EAAK,QAAsB,EAAK,GAC7B,EAAK,QAAO,CAAC,EAAG,IAAM,EAAI,GAAE,IA4DvC,EAAQ,IAAI,YA1DC,IAAI,IAAS,EAAK,KAAK,KAAU,QAAO,CAAC,EAAG,IAAM,GAAK,OAAO,IAAM,IAAI,KA2DrF,EAAQ,IAAI,UA1DC,CAAC,EAAG,KAAO,OAAO,IAAM,IAAM,OAAO,IAAM,KA2DxD,EAAQ,IAAI,MAAM,CAAC,EAAG,IAAM,GAAK,IACjC,EAAQ,IAAI,OAAO,CAAC,EAAG,IAAM,GAAK,IAClC,EAAQ,IAAI,MAAM,CAAC,EAAG,IAAM,EAAI,IAChC,EAAQ,IAAI,MAAM,CAAC,EAAG,IAAM,EAAI,IAChC,EAAQ,IAAI,OAAO,CAAC,EAAG,IAAM,GAAK,IAClC,EAAQ,IAAI,OAAO,CAAC,EAAG,IAAM,GAAK,IAClC,EAAQ,IAAI,OAAO,IAAI,IAAS,EAAK,MAAM,WAC3C,EAAQ,IAAI,MAAM,IAAI,IAAS,EAAK,KAAK,WACzC,EAAQ,IAAI,OAAQ,IAAO,IAC3B,EAAQ,IAAI,MAAO,GACnB,EAAQ,IAAI,YAAa,GACzB,EAAQ,IAAI,YAAa,GACzB,EAAQ,IAAI,SAAU,GACtB,EAAQ,IAAI,MArCA,CAAC,EAAG,EAAG,IAAM,EAAI,EAAI,IAsCjC,EAAQ,IAAI,OArCC,IAAI,KACb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EAAG,CACrC,GAAI,EAAI,GAAK,EAAK,OAAQ,OAAO,EAAK,GACtC,GAAI,EAAK,GAAI,OAAO,EAAK,EAAI,EACjC,KAkCJ,EAAQ,IAAI,UA/BI,CAAC,KAAQ,KACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAS,EAAG,GAAK,EACtC,GAAI,IAAQ,EAAK,GAAI,OAAO,EAAK,EAAI,GAEzC,OAAO,EAAK,OAAS,GAAM,EAAI,EAAK,EAAK,OAAS,QAAK,CAAS,IA8BpE,EAAK,SAAS,IAAK,OACnB,EAAK,SAAS,IAAK,YACnB,EAAK,SAAS,IAAK,YACnB,EAAK,SAAS,IAAK,UACnB,EAAK,SAAS,KAAM,MACpB,EAAK,SAAS,KAAM,OACpB,EAAK,SAAS,IAAK,MACnB,EAAK,SAAS,IAAK,MACnB,EAAK,SAAS,KAAM,OACpB,EAAK,SAAS,KAAM,OACpB,EAAK,SAAS,KAAM,OACpB,EAAK,SAAS,KAAM,MACpB,EAAK,SAAS,IAAK,OACnB,EAAK,SAAS,KAAM,aACpB,EAAK,SAAS,KAAM,aAGH,IAAI,kBAAkB,IACnC,IAAI,GAAU,EACd,IAAK,MAAM,KAAY,EACnB,GAAsB,cAAlB,EAAS,KAAsB,CAC/B,IAAK,MAAM,KAAQ,EAAS,WACxB,GAAsB,IAAlB,EAAK,SAAgB,CACrB,MAAM,EAAW,IAEb,GAAI,EAAG,UAAY,EAAa,IAAI,GAAK,CACrC,EAAa,IAAI,GACjB,IAAM,EAAG,QAAQ,KAAK,EAAK,CAAE,MAAO,GAAkB,CAC1D,CAGA,MAAM,EAAM,EAAG,QAAQ,cACnB,EAAG,aAAa,SAAW,EAAc,IAAI,IAC7C,EAAU,EAAI,EAAG,aAAa,QAI9B,EAAG,aAAa,SAAmB,MAAR,IACtB,EAAG,UACJ,EAAG,QAAU,GAErB,EAEJ,EAAQ,GACR,MAAM,EAAM,EAAK,iBAAiB,KAClC,IAAK,MAAM,KAAM,EAAK,EAAQ,EAClC,CAEJ,GAAU,CACd,MAAO,GAAsB,eAAlB,EAAS,KAAuB,CACvC,MAAM,EAAK,EAAS,OACpB,GAA+B,QAA3B,EAAS,cAAyB,CAClC,MAAM,EAAM,EAAG,QAAQ,cAClB,EAAc,IAAI,IACnB,EAAU,EAAI,EAAG,aAAa,OAEtC,MAAO,GAA+B,SAA3B,EAAS,cAA0B,CAE9B,MADA,EAAG,QAAQ,eAEf,EAAG,aAAa,UAAY,EAAG,UAC/B,EAAG,QAAU,EAGzB,CACA,GAAU,CACd,KAA6B,kBAAlB,EAAS,OAChB,GAAU,GAGd,GAAS,GAAgB,IAGxB,QAAQ,SAAS,MAAQ,SAAS,gBAAiB,CACxD,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,IAGnB,EAAK,OAAS,EACd,EAAK,MAAQ,EACb,EAAK,QAAU,EACf,EAAK,OAnkCL,SAAgB,EAAM,GAClB,EAAQ,IAAI,EAAM,EACtB,EAkkCA,EAAK,OA1xCL,SAAgB,EAAM,GAClB,EAAQ,IAAI,EAAM,EACtB,EAyxCA,EAAK,SAAW,EAChB,EAAK,EAAI,EACT,EAAK,OAAS,SAAS,cAEvB,WAAW,KAAO,EAClB,WAAW,EAAI,CAClB,CA3uDD","file":"/npm/cdom@0.0.17/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/cdom@0.0.17/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function () {\r\n    /* global document, window, MutationObserver, queueMicrotask, XPathResult, Node, NodeFilter, globalThis, console, URL, setTimeout, clearTimeout */\r\n    const symbolicOperators = new Map([\r\n        ['+', 'add'], ['-', 'subtract'], ['*', 'multiply'], ['/', 'divide'],\r\n        ['==', 'eq'], ['!=', 'neq'], ['>', 'gt'], ['<', 'lt'], ['>=', 'gte'], ['<=', 'lte'],\r\n        ['&&', 'and'], ['||', 'or'], ['!', 'not'], ['++', 'increment'], ['--', 'decrement']\r\n    ]);\r\n\r\n    const registry = new Map();\r\n    const listeners = new Map();\r\n    const helpers = new Map();\r\n    const expressionCache = new Map();\r\n    const domListeners = new Set();\r\n    let currentSubscriber = null;\r\n    let domChangeQueued = false;\r\n    const stateExpressionCache = new Map();\r\n    const mountedNodes = new WeakSet();\r\n    const pendingHelpers = new Map();\r\n    const helperWaiters = new Map();\r\n    const schemas = new Map();\r\n\r\n    function unwrap(val) {\r\n        if (val && typeof val === 'object' && 'value' in val) return val.value;\r\n        return val;\r\n    }\r\n\r\n    const getStorage = (s) => {\r\n        if (!s) return null;\r\n        if (typeof s === 'object') return s;\r\n        try {\r\n            if (s === 'localStorage' || s === 'window.localStorage') return globalThis.localStorage;\r\n            if (s === 'sessionStorage' || s === 'window.sessionStorage') return globalThis.sessionStorage;\r\n        } catch (e) { /* Storage might be blocked */ }\r\n        return null;\r\n    };\r\n\r\n\r\n    function tokenize(src) {\r\n        const tokenRegex = /\\s*(\\d*\\.\\d+|\\d+|\"([^\"\\\\]|\\\\.)*\"|'([^'\\\\]|\\\\.)*'|=\\/|=\\$this|=\\$event|=\\$query|=\\$|[a-zA-Z_$][\\w$]*|==|!=|<=|>=|&&|\\|\\||[-+*/%^<>!?:.,(){}[\\]])\\s*/g;\r\n        const results = [];\r\n        let match;\r\n        while ((match = tokenRegex.exec(src)) !== null) {\r\n            results.push(match[1]);\r\n        }\r\n        return results;\r\n    }\r\n\r\n    function createExpression(text) {\r\n        let at = 0;\r\n        const tokens = tokenize(text);\r\n\r\n        function peek(offset = 0) { return tokens[at + offset]; }\r\n        function next() { return tokens[at++]; }\r\n        function consume(expected) {\r\n            const t = next();\r\n            if (t !== expected) throw new Error(`Expected \"${expected}\" but found \"${t}\"`);\r\n            return t;\r\n        }\r\n\r\n        function parseTernary() {\r\n            let node = parseLogicalOR();\r\n            if (peek() === '?') {\r\n                next();\r\n                const left = parseTernary();\r\n                consume(':');\r\n                const right = parseTernary();\r\n                const cond = node;\r\n                node = (ctx, ev) => cond(ctx, ev) ? left(ctx, ev) : right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseLogicalOR() {\r\n            let node = parseLogicalAND();\r\n            while (peek() === '||') {\r\n                next();\r\n                const right = parseLogicalAND();\r\n                const left = node;\r\n                node = (ctx, ev) => left(ctx, ev) || right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseLogicalAND() {\r\n            let node = parseEquality();\r\n            while (peek() === '&&') {\r\n                next();\r\n                const right = parseEquality();\r\n                const left = node;\r\n                node = (ctx, ev) => left(ctx, ev) && right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseEquality() {\r\n            let node = parseRelational();\r\n            while (peek() === '==' || peek() === '!=') {\r\n                const op = next();\r\n                const right = parseRelational();\r\n                const left = node;\r\n                if (op === '==') node = (ctx, ev) => left(ctx, ev) == right(ctx, ev);\r\n                else node = (ctx, ev) => left(ctx, ev) != right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseRelational() {\r\n            let node = parseAdditive();\r\n            const relOps = ['<', '>', '<=', '>='];\r\n            while (relOps.includes(peek())) {\r\n                const op = next();\r\n                const right = parseRelational();\r\n                const left = node;\r\n                if (op === '<') node = (ctx, ev) => left(ctx, ev) < right(ctx, ev);\r\n                else if (op === '>') node = (ctx, ev) => left(ctx, ev) > right(ctx, ev);\r\n                else if (op === '<=') node = (ctx, ev) => left(ctx, ev) <= right(ctx, ev);\r\n                else if (op === '>=') node = (ctx, ev) => left(ctx, ev) >= right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseAdditive() {\r\n            let node = parseMultiplicative();\r\n            while (peek() === '+' || peek() === '-') {\r\n                const op = next();\r\n                const right = parseMultiplicative();\r\n                const left = node;\r\n                if (op === '+') node = (ctx, ev) => left(ctx, ev) + right(ctx, ev);\r\n                else node = (ctx, ev) => left(ctx, ev) - right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseMultiplicative() {\r\n            let node = parseUnary();\r\n            while (peek() === '*' || peek() === '/' || peek() === '%') {\r\n                const op = next();\r\n                const right = parseUnary();\r\n                const left = node;\r\n                if (op === '*') node = (ctx, ev) => left(ctx, ev) * right(ctx, ev);\r\n                else if (op === '/') node = (ctx, ev) => left(ctx, ev) / right(ctx, ev);\r\n                else node = (ctx, ev) => left(ctx, ev) % right(ctx, ev);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parseUnary() {\r\n            const op = peek();\r\n            if (op === '!' || op === '-' || op === '+') {\r\n                next();\r\n                const right = parseUnary();\r\n                if (op === '!') return (ctx, ev) => !right(ctx, ev);\r\n                if (op === '-') return (ctx, ev) => -right(ctx, ev);\r\n                if (op === '+') return (ctx, ev) => +right(ctx, ev);\r\n            }\r\n            return parseMember();\r\n        }\r\n\r\n        function parseMember() {\r\n            let node = parsePrimary();\r\n            while (true) {\r\n                const op = peek();\r\n                if (op === '.') {\r\n                    next();\r\n                    const prop = next();\r\n                    const objFn = node;\r\n                    node = (ctx, ev) => {\r\n                        const obj = unwrap(objFn(ctx, ev));\r\n                        return obj?.[prop];\r\n                    };\r\n                } else if (op === '[') {\r\n                    next();\r\n                    const keyFn = parseTernary();\r\n                    consume(']');\r\n                    const objFn = node;\r\n                    node = (ctx, ev) => {\r\n                        const obj = unwrap(objFn(ctx, ev));\r\n                        const key = unwrap(keyFn(ctx, ev));\r\n                        return obj?.[key];\r\n                    };\r\n                } else if (op === '(') {\r\n                    next();\r\n                    const argFns = [];\r\n                    if (peek() !== ')') {\r\n                        while (true) {\r\n                            argFns.push(parseTernary());\r\n                            if (peek() === ')') break;\r\n                            consume(',');\r\n                        }\r\n                    }\r\n                    consume(')');\r\n                    const fnGetter = node;\r\n                    node = (ctx, ev) => {\r\n                        const fn = fnGetter(ctx, ev);\r\n                        const args = argFns.map(f => unwrap(f(ctx, ev)));\r\n                        if (typeof fn === 'function') return fn(...args);\r\n                        return undefined;\r\n                    };\r\n                } else break;\r\n            }\r\n            return node;\r\n        }\r\n\r\n        function parsePrimary() {\r\n            const t = next();\r\n            if (!t) return () => undefined;\r\n            if (t === '(') {\r\n                const node = parseTernary();\r\n                consume(')');\r\n                return node;\r\n            }\r\n            if (t === '{') {\r\n                const entries = [];\r\n                if (peek() !== '}') {\r\n                    while (true) {\r\n                        let key;\r\n                        const kt = next();\r\n                        if (kt.startsWith('\"') || kt.startsWith(\"'\")) key = kt.slice(1, -1);\r\n                        else key = kt;\r\n                        consume(':');\r\n                        const valFn = parseTernary();\r\n                        entries.push({ key, valFn });\r\n                        if (peek() === '}') break;\r\n                        consume(',');\r\n                    }\r\n                }\r\n                consume('}');\r\n                return (ctx, ev) => {\r\n                    const obj = {};\r\n                    for (const { key, valFn } of entries) obj[key] = unwrap(valFn(ctx, ev));\r\n                    return obj;\r\n                };\r\n            }\r\n            if (t === '[') {\r\n                const itemFns = [];\r\n                if (peek() !== ']') {\r\n                    while (true) {\r\n                        itemFns.push(parseTernary());\r\n                        if (peek() === ']') break;\r\n                        consume(',');\r\n                    }\r\n                }\r\n                consume(']');\r\n                return (ctx, ev) => itemFns.map(f => unwrap(f(ctx, ev)));\r\n            }\r\n            if (t.startsWith('\"') || t.startsWith(\"'\")) return () => t.slice(1, -1).replace(/\\\\(.)/g, '$1');\r\n            if (/\\d/.test(t)) return () => Number(t);\r\n            if (t === 'true') return () => true;\r\n            if (t === 'false') return () => false;\r\n            if (t === 'null') return () => null;\r\n\r\n            // Handle =/ state reference sigil\r\n            if (t === '=/') {\r\n                let path = '';\r\n                // Consume path tokens after =/\r\n                while (true) {\r\n                    const p = peek();\r\n                    if (p && /^[\\w$]/.test(p)) {\r\n                        path += next();\r\n                    } else if (p === '/') {\r\n                        const nextTok = peek(1);\r\n                        if (nextTok && /^[\\w$]/.test(nextTok)) {\r\n                            path += next(); // eat /\r\n                            path += next(); // eat identifier\r\n                        } else {\r\n                            break;\r\n                        }\r\n                    } else {\r\n                        break;\r\n                    }\r\n                }\r\n                return createPathFunction(path, 'state');\r\n            }\r\n\r\n            // Handle =$this and =$event\r\n            if (t === '=$this' || t === '=$event') {\r\n                let path = t.slice(1); // Remove the '=' prefix\r\n                // Check for property access\r\n                while (true) {\r\n                    const p = peek();\r\n                    if (p && /^[\\w$]/.test(p)) {\r\n                        path += next();\r\n                    } else if (p === '/') {\r\n                        const nextTok = peek(1);\r\n                        if (nextTok && /^[\\w$]/.test(nextTok)) {\r\n                            path += next(); // eat /\r\n                            path += next(); // eat identifier\r\n                        } else {\r\n                            break;\r\n                        }\r\n                    } else {\r\n                        break;\r\n                    }\r\n                }\r\n                const root = path === '$this' ? (ctx) => ctx : (ctx, ev) => ev;\r\n                if (path === '$this') return root;\r\n                if (path === '$event') return root;\r\n                if (path.startsWith('$this.') || path.startsWith('$this/')) return createPathFunction(path.slice(6), '$this');\r\n                if (path.startsWith('$event.') || path.startsWith('$event/')) return createPathFunction(path.slice(7), '$event');\r\n            }\r\n\r\n            // Handle =$.propertyName\r\n            if (t === '=$') {\r\n                const p = peek();\r\n                if (p === '.') {\r\n                    next(); // consume '.'\r\n                    let path = '';\r\n                    while (true) {\r\n                        const tok = peek();\r\n                        if (tok && /^[\\w$]/.test(tok)) {\r\n                            path += next();\r\n                        } else if (tok === '.' || tok === '/') {\r\n                            const nextTok = peek(1);\r\n                            if (nextTok && /^[\\w$]/.test(nextTok)) {\r\n                                path += next(); // eat . or /\r\n                                path += next(); // eat identifier\r\n                            } else {\r\n                                break;\r\n                            }\r\n                        } else {\r\n                            break;\r\n                        }\r\n                    }\r\n                    return createPathFunction(path, '$macro');\r\n                }\r\n            }\r\n\r\n            // Handle =$query.propertyName\r\n            if (t === '=$query') {\r\n                const p = peek();\r\n                if (p === '.') {\r\n                    next(); // consume '.'\r\n                    let path = '';\r\n                    while (true) {\r\n                        const tok = peek();\r\n                        if (tok && /^[\\w$]/.test(tok)) {\r\n                            path += next();\r\n                        } else if (tok === '.' || tok === '/') {\r\n                            const nextTok = peek(1);\r\n                            if (nextTok && /^[\\w$]/.test(nextTok)) {\r\n                                path += next(); // eat . or /\r\n                                path += next(); // eat identifier\r\n                            } else {\r\n                                break;\r\n                            }\r\n                        } else {\r\n                            break;\r\n                        }\r\n                    }\r\n                    return createPathFunction(path, '$query');\r\n                }\r\n                return (ctx) => findContext(ctx, '_queryContext');\r\n            }\r\n\r\n            // Bareword: helper or error\r\n            return (ctx, ev) => {\r\n                const val = findInScope(ctx, t) || getHelper(t);\r\n                if (val === undefined && !['_', '$'].includes(t)) {\r\n                    suspendSubscriber(t, currentSubscriber);\r\n                }\r\n                return val;\r\n            };\r\n        }\r\n\r\n        function unwrap(val) {\r\n            if (val && typeof val === 'object' && 'value' in val) return val.value;\r\n            return val;\r\n        }\r\n\r\n        try {\r\n            return parseTernary();\r\n        } catch (e) {\r\n            console.error(`[cDOM] Parse Error in \"${text}\":`, e);\r\n            return () => `[Parse Error]`;\r\n        }\r\n    }\r\n\r\n    const parseLiteral = (text) => {\r\n        const fn = createExpression(text);\r\n        return fn();\r\n    };\r\n\r\n    function queueDOMChange() {\r\n        if (domChangeQueued) return;\r\n        domChangeQueued = true;\r\n        queueMicrotask(() => {\r\n            notifyDOMChange();\r\n            domChangeQueued = false;\r\n        });\r\n    }\r\n\r\n    function addToScope(scope, name, value) {\r\n        if (!name) return;\r\n        const targetScope = (scope === undefined || scope === window || scope === globalThis) ? null : scope;\r\n        if (!targetScope) {\r\n            registry.set(name, value);\r\n        } else {\r\n            if (!targetScope._lv_state) targetScope._lv_state = {};\r\n            targetScope._lv_state[name] = value;\r\n        }\r\n    }\r\n\r\n    function validate(value, schema, path = \"\") {\r\n        if (!schema) return true;\r\n        const errors = [];\r\n        if (typeof schema === 'string') {\r\n            const resolved = schemas.get(schema);\r\n            if (!resolved) return true;\r\n            return validate(value, resolved, path);\r\n        }\r\n\r\n        const type = schema.type;\r\n        const actualType = Array.isArray(value) ? 'array' : (value === null ? 'null' : typeof value);\r\n\r\n        if (type && type !== actualType) {\r\n            if (type === 'integer' && Number.isInteger(value)) { /* ok */ }\r\n            else if (type === 'number' && typeof value === 'number') { /* ok */ }\r\n            else {\r\n                errors.push({ path, keyword: 'type', message: `Expected ${type}, got ${actualType}` });\r\n            }\r\n        }\r\n\r\n        if (actualType === 'string') {\r\n            if (schema.minLength !== undefined && value.length < schema.minLength) errors.push({ path, keyword: 'minLength' });\r\n            if (schema.maxLength !== undefined && value.length > schema.maxLength) errors.push({ path, keyword: 'maxLength' });\r\n            if (schema.pattern && !new RegExp(schema.pattern).test(value)) errors.push({ path, keyword: 'pattern' });\r\n        } else if (actualType === 'number') {\r\n            if (schema.minimum !== undefined && value < schema.minimum) errors.push({ path, keyword: 'minimum' });\r\n            if (schema.maximum !== undefined && value > schema.maximum) errors.push({ path, keyword: 'maximum' });\r\n        } else if (actualType === 'object' && value !== null) {\r\n            if (schema.required && Array.isArray(schema.required)) {\r\n                for (const key of schema.required) {\r\n                    if (!(key in value)) errors.push({ path: path ? `${path}.${key}` : key, keyword: 'required' });\r\n                }\r\n            }\r\n            if (schema.properties) {\r\n                for (const key in schema.properties) {\r\n                    if (key in value) validate(value[key], schema.properties[key], path ? `${path}.${key}` : key);\r\n                }\r\n            }\r\n        } else if (actualType === 'array') {\r\n            if (schema.minItems !== undefined && value.length < schema.minItems) errors.push({ path, keyword: 'minItems' });\r\n            if (schema.maxItems !== undefined && value.length > schema.maxItems) errors.push({ path, keyword: 'maxItems' });\r\n            if (schema.items) {\r\n                value.forEach((item, i) => validate(item, schema.items, `${path}[${i}]`));\r\n            }\r\n        }\r\n\r\n        if (schema.enum && !schema.enum.includes(value)) errors.push({ path, keyword: 'enum' });\r\n        if (schema.const !== undefined && value !== schema.const) errors.push({ path, keyword: 'const' });\r\n\r\n        if (errors.length > 0) {\r\n            const msg = errors.map(e => `${e.path || 'root'}: failed ${e.keyword}${e.message ? ' (' + e.message + ')' : ''}`).join(', ');\r\n            throw new Error(`Validation Error: ${msg}`);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    function schema(name, definition) {\r\n        schemas.set(name, definition);\r\n    }\r\n\r\n    function signal(val, options = {}) {\r\n        const name = options.name;\r\n        const storage = getStorage(options.storage);\r\n        const schema = options.schema;\r\n        const transform = options.transform;\r\n\r\n        const applyTransform = (v) => {\r\n            if (!transform) return v;\r\n            const fn = typeof transform === 'function' ? transform : getHelper(transform, options.unsafe);\r\n            return fn ? fn(v) : v;\r\n        };\r\n\r\n        let value = applyTransform(val);\r\n\r\n        if (name && storage) {\r\n            const stored = storage.getItem(name);\r\n            if (stored !== null) {\r\n                try {\r\n                    const parsed = JSON.parse(stored);\r\n                    value = applyTransform(parsed);\r\n                } catch (e) { /* ignore */ }\r\n            }\r\n        }\r\n        if (schema) validate(value, schema);\r\n\r\n        const s = {\r\n            get value() {\r\n                if (name && storage) {\r\n                    const stored = storage.getItem(name);\r\n                    if (stored !== null) {\r\n                        try {\r\n                            const parsed = JSON.parse(stored);\r\n                            const transformed = applyTransform(parsed);\r\n                            if (transformed !== value) {\r\n                                value = transformed;\r\n                                if (schema) validate(value, schema);\r\n                            }\r\n                        } catch (e) { /* ignore */ }\r\n                    }\r\n                }\r\n                if (currentSubscriber) registerDependency(name);\r\n                return value;\r\n            },\r\n            set value(v) {\r\n                const transformed = applyTransform(v);\r\n                if (schema) validate(transformed, schema);\r\n                value = transformed;\r\n                if (name) {\r\n                    if (storage) {\r\n                        storage.setItem(name, JSON.stringify(value));\r\n                    }\r\n                    notify(name, value);\r\n                }\r\n            },\r\n            toString() { return String(this.value); }\r\n        };\r\n        addToScope(options.scope, name, s);\r\n        return s;\r\n    }\r\n\r\n    signal.get = function (name, options = {}) {\r\n        if (registry.has(name)) return registry.get(name);\r\n        const val = options.defaultValue !== undefined ? options.defaultValue : null;\r\n        return signal(val, { ...options, name });\r\n    };\r\n\r\n    function state(val, options = {}) {\r\n        const name = options.name;\r\n        const storage = getStorage(options.storage);\r\n        const schema = options.schema;\r\n        const transform = options.transform;\r\n\r\n        const applyTransform = (v) => {\r\n            if (!transform) return v;\r\n            const fn = typeof transform === 'function' ? transform : getHelper(transform);\r\n            return fn ? fn(v) : v;\r\n        };\r\n\r\n        let result;\r\n\r\n        if (typeof val !== 'object' || val === null) {\r\n            let value = applyTransform(val);\r\n            if (name && storage) {\r\n                const stored = storage.getItem(name);\r\n                if (stored !== null) {\r\n                    try {\r\n                        const parsed = JSON.parse(stored);\r\n                        value = applyTransform(parsed);\r\n                    } catch (e) { /* ignore */ }\r\n                }\r\n            }\r\n            if (schema) validate(value, schema);\r\n\r\n            if (name && storage) {\r\n                result = {\r\n                    get value() {\r\n                        const stored = storage.getItem(name);\r\n                        if (stored !== null) {\r\n                            try {\r\n                                const parsed = JSON.parse(stored);\r\n                                const transformed = applyTransform(parsed);\r\n                                if (transformed !== value) {\r\n                                    value = transformed;\r\n                                    if (schema) validate(value, schema);\r\n                                }\r\n                            } catch (e) { /* ignore */ }\r\n                        }\r\n                        if (currentSubscriber) registerDependency(name);\r\n                        return value;\r\n                    },\r\n                    set value(v) {\r\n                        const transformed = applyTransform(v);\r\n                        if (schema) validate(transformed, schema);\r\n                        value = transformed;\r\n                        storage.setItem(name, JSON.stringify(value));\r\n                        notify(name, value);\r\n                    },\r\n                    toString() { return String(this.value); }\r\n                };\r\n            } else {\r\n                result = value;\r\n            }\r\n        } else {\r\n            // Deep reactive proxy\r\n            const makeReactive = (target, path = [], rootObj = target) => {\r\n                // Initial load for root\r\n                if (path.length === 0 && name && storage) {\r\n                    const stored = storage.getItem(name);\r\n                    if (stored !== null) {\r\n                        try {\r\n                            const parsed = JSON.parse(stored);\r\n                            if (parsed && typeof parsed === 'object') {\r\n                                Object.assign(target, parsed);\r\n                            }\r\n                        } catch (e) { /* ignore */ }\r\n                    }\r\n                }\r\n                if (path.length === 0 && schema) validate(target, schema);\r\n\r\n                return new Proxy(target, {\r\n                    get(t, prop) {\r\n                        if (typeof prop !== 'string' || prop === 'constructor' || prop === 'toJSON') return t[prop];\r\n                        if (prop === '_lv_is_proxy') return true;\r\n\r\n                        if (currentSubscriber) {\r\n                            registerDependency(name);\r\n                        }\r\n\r\n                        const currentVal = t[prop];\r\n                        // Recursively wrap nested objects\r\n                        if (currentVal && typeof currentVal === 'object' && !Array.isArray(currentVal)) {\r\n                            return makeReactive(currentVal, [...path, prop], rootObj);\r\n                        }\r\n                        return currentVal;\r\n                    },\r\n                    set(t, prop, value) {\r\n                        const transformed = applyTransform(value);\r\n                        if (schema) {\r\n                            // Validate the entire root object after this change would be applied\r\n                            const backup = t[prop];\r\n                            t[prop] = transformed;\r\n                            try {\r\n                                validate(rootObj, schema);\r\n                            } catch (e) {\r\n                                t[prop] = backup;\r\n                                throw e;\r\n                            }\r\n                        } else {\r\n                            t[prop] = transformed;\r\n                        }\r\n\r\n                        if (name) {\r\n                            if (storage) {\r\n                                storage.setItem(name, JSON.stringify(rootObj));\r\n                            }\r\n                            notify(name, rootObj);\r\n                        }\r\n                        return true;\r\n                    }\r\n                });\r\n            };\r\n            result = makeReactive(val);\r\n        }\r\n        addToScope(options.scope, name, result);\r\n        return result;\r\n    }\r\n\r\n    state.get = function (name, options = {}) {\r\n        if (registry.has(name)) return registry.get(name);\r\n        const val = options.defaultValue !== undefined ? options.defaultValue : null;\r\n        return state(val, { ...options, name });\r\n    };\r\n\r\n    const session = (val, options = {}) => state(val, { ...options, storage: globalThis.sessionStorage });\r\n    session.get = function (name, options = {}) {\r\n        if (registry.has(name)) return registry.get(name);\r\n        const val = options.defaultValue !== undefined ? options.defaultValue : null;\r\n        return state(val, { ...options, name, storage: globalThis.sessionStorage });\r\n    };\r\n\r\n    function registerDependency(name) {\r\n        if (!name || !currentSubscriber) return;\r\n        let subs = listeners.get(name);\r\n        if (!subs) {\r\n            subs = new Set();\r\n            listeners.set(name, subs);\r\n        }\r\n        subs.add(currentSubscriber);\r\n    }\r\n\r\n    function helper(name, fn) {\r\n        helpers.set(name, fn);\r\n    }\r\n\r\n    function notify(name, value) {\r\n        const subs = listeners.get(name);\r\n        if (!subs) return;\r\n        for (const sub of subs) {\r\n            refreshSubscriber(sub);\r\n        }\r\n    }\r\n\r\n    function refreshSubscriber(sub) {\r\n        const { node, attr, expression, contextNode, fn, wasString, unsafe } = sub;\r\n\r\n        if (!node.isConnected && !(node instanceof Attr && node.ownerElement?.isConnected)) return;\r\n\r\n        if (fn) {\r\n            currentSubscriber = sub;\r\n            const result = fn();\r\n            currentSubscriber = null;\r\n\r\n            // Ensure we always have a stable node for the subscriber\r\n            let newNode = cdomToDOM(result, wasString, unsafe, contextNode);\r\n            if (!newNode) newNode = document.createTextNode('');\r\n            if (newNode && newNode.nodeType === 11) { // Fragment\r\n                const wrap = document.createElement('span');\r\n                wrap.style.display = 'contents';\r\n                wrap.appendChild(newNode);\r\n                newNode = wrap;\r\n            }\r\n\r\n            if (node !== newNode) {\r\n                node.replaceWith(newNode);\r\n                sub.node = newNode;\r\n                newNode._lv_sub = sub;\r\n            }\r\n        } else if (attr) {\r\n            const expressions = extractExpressions(attr.value);\r\n            let newValue = attr.originalValue || attr.value;\r\n            for (const expr of expressions) {\r\n                if (expr.type === '_') {\r\n                    currentSubscriber = sub;\r\n                    const res = evaluateStateExpression(expr.expression, contextNode);\r\n                    currentSubscriber = null;\r\n                    newValue = newValue.replace(expr.fullMatch, String(res));\r\n                } else {\r\n                    const res = evaluateExpression(expr.expression, contextNode, false, '$');\r\n                    newValue = newValue.replace(expr.fullMatch, String(res.value));\r\n                }\r\n            }\r\n            if (node.ownerElement.getAttribute(node.name) !== newValue) {\r\n                node.ownerElement.setAttribute(node.name, newValue);\r\n            }\r\n        } else if (node.nodeType === Node.TEXT_NODE || (node.nodeType === 1 && node.style.display === 'contents')) {\r\n            if (expression) {\r\n                currentSubscriber = sub;\r\n                const result = evaluateStateExpression(expression, contextNode);\r\n                currentSubscriber = null;\r\n                const isCDOM = result && typeof result === 'object' && !Array.isArray(result) && !result.nodeType && !('value' in result);\r\n                if (isCDOM) {\r\n                    const newNode = cdomToDOM(result, wasString, unsafe, contextNode);\r\n                    node.replaceWith(newNode);\r\n                    sub.node = newNode;\r\n                    newNode._lv_sub = sub;\r\n                } else {\r\n                    const newVal = String((result && typeof result === 'object' && 'value' in result) ? result.value : result);\r\n                    if (node.nodeType === 1) node.textContent = newVal;\r\n                    else if (node.nodeValue !== newVal) node.nodeValue = newVal;\r\n                }\r\n            } else {\r\n                const expressions = extractExpressions(node.originalValue || node.nodeValue);\r\n                let text = node.originalValue || node.nodeValue;\r\n                for (const expr of expressions) {\r\n                    const res = evaluateExpression(expr.expression, contextNode, false, expr.type);\r\n                    text = text.replace(expr.fullMatch, String(res.value));\r\n                }\r\n                if (node.nodeValue !== text) node.nodeValue = text;\r\n            }\r\n        }\r\n    }\r\n\r\n    // Callable API functions\r\n    // When called without context, these return expression strings for lazy cDOM binding\r\n    // When called with context, they evaluate immediately\r\n    const $ = (expression, contextNode) => {\r\n        if (contextNode === undefined) {\r\n            // No context = lazy binding for cDOM markup\r\n            return `$(${expression})`;\r\n        }\r\n        // With context = immediate evaluation\r\n        return evaluateExpression(expression, contextNode, true, '$').value;\r\n    };\r\n\r\n    // Legacy expression helpers removed in favor of structural reactivity\r\n\r\n\r\n    // Transformation Helpers\r\n    helpers.set('Integer', v => parseInt(v));\r\n    helpers.set('Number', v => Number(v));\r\n    helpers.set('String', v => String(v));\r\n    helpers.set('Boolean', v => !!v);\r\n    helpers.set('signal', signal);\r\n    helpers.set('state', state);\r\n    helpers.set('session', session);\r\n    helpers.set('signal.get', signal.get);\r\n    helpers.set('state.get', state.get);\r\n    helpers.set('session.get', session.get);\r\n\r\n    // Macro helper - creates reusable JSON templates\r\n    helpers.set('macro', function (definition) {\r\n        const { name, schema: macroSchema, body } = definition;\r\n        if (!name || !body) {\r\n            console.error('[cDOM] Macro definition requires \"name\" and \"body\"');\r\n            return;\r\n        }\r\n\r\n        // Register the macro as a new helper\r\n        const macroFn = function (input) {\r\n            // Note: input is already resolved by evaluateStructural\r\n            // Validate input if schema is provided\r\n            if (macroSchema) {\r\n                try {\r\n                    validate(input, macroSchema);\r\n                } catch (e) {\r\n                    console.error(`[cDOM] Macro \"${name}\" validation error:`, e);\r\n                    throw e;\r\n                }\r\n            }\r\n\r\n            // Evaluate the body with macro context\r\n            return evaluateMacroBody(body, this, null, input);\r\n        };\r\n\r\n        // Mark this as a macro so evaluateStructural knows to resolve the object first\r\n        macroFn.isMacro = true;\r\n\r\n        helpers.set(name, macroFn);\r\n        return `[Macro ${name} registered]`;\r\n    });\r\n\r\n    // Mark macro helper to skip object resolution - it needs the raw definition\r\n    helpers.get('macro').skipObjectResolution = true;\r\n\r\n    // Helper function to evaluate macro body with $ context\r\n    function evaluateMacroBody(body, context, event, macroContext) {\r\n        // Store the current macro context on the element\r\n        // This persists so async helper loading can still access it\r\n        context._macroContext = macroContext;\r\n        return evaluateStructural(body, context, event, false);\r\n    }\r\n\r\n\r\n    function getHelper(name, unsafe) {\r\n        if (helpers.has(name)) return helpers.get(name);\r\n\r\n        const isUnsafe = unsafe || currentSubscriber?.unsafe;\r\n        if (isUnsafe) {\r\n            const parts = name.split('.');\r\n            let obj = globalThis;\r\n            for (let i = 0; i < parts.length; i++) {\r\n                obj = obj?.[parts[i]];\r\n            }\r\n            if (typeof obj === 'function') {\r\n                helpers.set(name, obj);\r\n                return obj;\r\n            }\r\n        }\r\n\r\n        loadHelper(name);\r\n        return undefined;\r\n    }\r\n\r\n    async function loadHelper(name) {\r\n        if (helpers.has(name)) return Promise.resolve(helpers.get(name));\r\n        if (pendingHelpers.has(name)) return pendingHelpers.get(name);\r\n\r\n        const promise = (async () => {\r\n            try {\r\n                const path = name.toLowerCase().replace(/\\./g, '/') + '.js';\r\n                const cdomPath = cDOM.script ? cDOM.script.src : window.location.href;\r\n                const base = cdomPath.substring(0, cdomPath.lastIndexOf('/') + 1) + 'helpers/';\r\n                const url = `${base}${path}`;\r\n                const module = await import(url);\r\n                const fn = module.default;\r\n\r\n                if (typeof fn === 'function') {\r\n                    helpers.set(name, fn);\r\n\r\n                    const parts = name.split('.');\r\n                    if (parts.length > 1) {\r\n                        let obj = globalThis;\r\n                        for (let i = 0; i < parts.length - 1; i++) {\r\n                            const part = parts[i];\r\n                            if (!obj[part]) obj[part] = {};\r\n                            obj = obj[part];\r\n                        }\r\n                        const leaf = parts[parts.length - 1];\r\n                        if (obj[leaf] === undefined) obj[leaf] = fn;\r\n                    }\r\n                } else {\r\n                    helpers.set(name, null);\r\n                }\r\n            } catch (e) {\r\n                helpers.set(name, null);\r\n            }\r\n\r\n            const waiters = helperWaiters.get(name);\r\n            if (waiters) {\r\n                for (const sub of waiters) refreshSubscriber(sub);\r\n                helperWaiters.delete(name);\r\n            }\r\n            pendingHelpers.delete(name);\r\n        })();\r\n\r\n        pendingHelpers.set(name, promise);\r\n        return promise;\r\n    }\r\n\r\n    function suspendSubscriber(name, sub) {\r\n        if (!sub) return;\r\n        let set = helperWaiters.get(name);\r\n        if (!set) {\r\n            set = new Set();\r\n            helperWaiters.set(name, set);\r\n        }\r\n        set.add(sub);\r\n    }\r\n\r\n    function findNeededHelpers(obj, found = new Set()) {\r\n        if (!obj) return found;\r\n\r\n        if (typeof obj === 'string') {\r\n            if (obj.startsWith('=') && obj.length > 1) {\r\n                const tokens = tokenize(obj);\r\n                for (let i = 0; i < tokens.length; i++) {\r\n                    const t = tokens[i];\r\n                    if (/^[a-zA-Z_$][\\w$]*$/.test(t) && !['$', 'true', 'false', 'null', 'undefined'].includes(t)) {\r\n                        if (i > 0 && tokens[i - 1] === '.') continue;\r\n                        found.add(t);\r\n                    }\r\n                }\r\n            }\r\n            return found;\r\n        }\r\n\r\n        if (typeof obj !== 'object' || obj.nodeType) return found;\r\n\r\n        if (Array.isArray(obj)) {\r\n            for (const item of obj) findNeededHelpers(item, found);\r\n            return found;\r\n        }\r\n\r\n        for (const key in obj) {\r\n            const alias = symbolicOperators.get(key);\r\n            if (key.startsWith('=') && key.length > 1) {\r\n                const helperName = key.slice(1);\r\n                if (!['_', '$'].includes(helperName)) {\r\n                    found.add(helperName);\r\n                }\r\n            } else if (alias) {\r\n                found.add(alias);\r\n            }\r\n            findNeededHelpers(obj[key], found);\r\n        }\r\n        return found;\r\n    }\r\n\r\n\r\n    function evaluateStructural(obj, context, event, unsafe) {\r\n        if (typeof obj !== 'object' || obj === null || obj.nodeType) {\r\n            // Check if it's a string starting with '=' (dynamic reference)\r\n            if (typeof obj === 'string' && obj.startsWith('=')) {\r\n                return evaluateStateExpression(obj, context, event);\r\n            }\r\n            return obj;\r\n        }\r\n        obj = unwrap(obj);\r\n\r\n        if (Array.isArray(obj)) {\r\n            return obj.map(item => evaluateStructural(item, context, event, unsafe));\r\n        }\r\n\r\n        const keys = Object.keys(obj);\r\n        const key = keys[0];\r\n        if (!key) return obj;\r\n        const val = obj[key];\r\n\r\n        // 1. XPath / CSS\r\n        if (key === '$') {\r\n            if (currentSubscriber) {\r\n                currentSubscriber.structural = obj;\r\n                domListeners.add(currentSubscriber);\r\n            }\r\n            return evaluateExpression(val, context, false, '$', event).value;\r\n        }\r\n\r\n        // 2. State lookup or Math expression\r\n        if (key === '=') {\r\n            return evaluateStateExpression(val, context, event);\r\n        }\r\n\r\n        // 3. Helper call / Operator\r\n        const alias = symbolicOperators.get(key);\r\n        if (key.startsWith('=') || alias) {\r\n            const helperName = alias || key.slice(1);\r\n            const helperFn = getHelper(helperName, unsafe);\r\n            if (helperFn) {\r\n                // If val is an object (not array), treat as single named-argument object\r\n                // UNLESS the helper has skipObjectResolution flag (like macro)\r\n                if (!Array.isArray(val) && typeof val === 'object' && val !== null) {\r\n                    // If helper wants raw object, pass it directly\r\n                    if (helperFn.skipObjectResolution) {\r\n                        return helperFn.call(context, val);\r\n                    }\r\n\r\n                    // Otherwise resolve the object properties\r\n                    const resolvedObj = {};\r\n                    for (const k of Object.keys(val)) {\r\n                        const v = val[k];\r\n                        const isPath = typeof v === 'string' && (\r\n                            v.startsWith('=/') ||\r\n                            v.startsWith('=$.') ||\r\n                            v.startsWith('=$this') ||\r\n                            v.startsWith('=$event') ||\r\n                            v.startsWith('=$query')\r\n                        );\r\n\r\n                        if (isPath) {\r\n                            resolvedObj[k] = unwrap(evaluateStateExpression(v, context, event));\r\n                        } else if (typeof v === 'object' && v !== null && !v.nodeType) {\r\n                            resolvedObj[k] = evaluateStructural(v, context, event, unsafe);\r\n                        } else {\r\n                            resolvedObj[k] = v;\r\n                        }\r\n                    }\r\n                    return helperFn.call(context, resolvedObj);\r\n                }\r\n\r\n                // Otherwise, treat as array of positional arguments\r\n                const args = Array.isArray(val) ? val : [val];\r\n                const resolvedArgs = args.map(arg => {\r\n                    const isPath = typeof arg === 'string' && (\r\n                        arg.startsWith('=/') ||\r\n                        arg.startsWith('=$.') ||\r\n                        arg.startsWith('=$this') ||\r\n                        arg.startsWith('=$event') ||\r\n                        arg.startsWith('=$query')\r\n                    );\r\n\r\n                    if (isPath) {\r\n                        const mutationOperators = ['++', '--', 'increment', 'decrement'];\r\n                        if (mutationOperators.includes(key) || mutationOperators.includes(helperName) || helperFn.mutates) {\r\n                            const p = arg === '$this' ? '$this' : (arg === '$event' ? '$event' : (arg.startsWith('=/') ? 'state' : null));\r\n                            if (p) {\r\n                                let path = arg;\r\n                                if (p === 'state') path = arg.slice(2); // Remove =/ prefix\r\n                                return createPathFunction(path, p)(context, event, context._macroContext);\r\n                            }\r\n                        }\r\n                        return unwrap(evaluateStateExpression(arg, context, event));\r\n                    }\r\n                    if (typeof arg === 'object' && arg !== null && !arg.nodeType) {\r\n                        return evaluateStructural(arg, context, event, unsafe);\r\n                    }\r\n                    return arg;\r\n                });\r\n                return helperFn.apply(context, resolvedArgs);\r\n            } else {\r\n                suspendSubscriber(helperName, currentSubscriber);\r\n                return `[Helper ${helperName} undefined]`;\r\n            }\r\n        }\r\n\r\n        // 4. Plain object: Deeply resolve properties\r\n        const result = {};\r\n        for (const k of keys) {\r\n            const v = obj[k];\r\n            const isPath = typeof v === 'string' && (\r\n                v === '$this' || v.startsWith('$this/') || v.startsWith('$this.') ||\r\n                v === '$event' || v.startsWith('$event/') || v.startsWith('$event.') ||\r\n                v.startsWith('=/')\r\n            );\r\n\r\n            if (isPath) {\r\n                result[k] = evaluateStateExpression(v, context, event);\r\n            } else if (typeof v === 'object' && v !== null && !v.nodeType) {\r\n                result[k] = evaluateStructural(v, context, event, unsafe);\r\n            } else {\r\n                result[k] = v;\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    cDOM.operator = (symbol, helperName) => {\r\n        symbolicOperators.set(symbol, helperName);\r\n    };\r\n\r\n    function findInScope(node, name) {\r\n        let curr = node;\r\n        while (curr) {\r\n            if (curr._lv_state && curr._lv_state[name] !== undefined) {\r\n                return curr._lv_state[name];\r\n            }\r\n            curr = curr.parentNode || curr.host || curr._lv_parent;\r\n        }\r\n        return registry.get(name);\r\n    }\r\n\r\n    function findContext(node, key) {\r\n        let curr = node;\r\n        while (curr) {\r\n            if (curr[key]) return curr[key];\r\n            curr = curr.parentNode || curr.host || curr._lv_parent;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    function evaluateStateExpression(expression, contextNode, event) {\r\n        let compiled = stateExpressionCache.get(expression);\r\n        if (!compiled) {\r\n            compiled = compileStateExpression(expression);\r\n            stateExpressionCache.set(expression, compiled);\r\n        }\r\n        return compiled(contextNode, event);\r\n    }\r\n\r\n    function compileStateExpression(expression) {\r\n        const expr = expression.trim();\r\n        const compiled = createExpression(expr);\r\n        return (ctx, ev) => {\r\n            try {\r\n                return compiled(ctx, ev);\r\n            } catch (e) {\r\n                console.error(`[cDOM] Execution Error in \"${expr}\":`, e, { contextNode: ctx });\r\n                return `[Error: ${expr}]`;\r\n            }\r\n        };\r\n    }\r\n\r\n    function createPathFunction(pathStr, type) {\r\n        if (pathStr.includes('..')) {\r\n            throw new Error(`Invalid path '${pathStr}': Explicit parent navigation '..' is not supported in state paths. Use plain names (e.g., 'user/name') which automatically bubble up to find the nearest matching state.`);\r\n        }\r\n        const parts = pathStr.split(/[./]/).filter(p => p !== '');\r\n        const name = parts[0];\r\n        const path = parts.slice(1);\r\n\r\n        return (ctx, ev) => {\r\n            let root;\r\n            if (type === '$this') root = ctx;\r\n            else if (type === '$event') root = ev;\r\n            else if (type === '$macro') root = findContext(ctx, '_macroContext');\r\n            else if (type === '$query') root = findContext(ctx, '_queryContext');\r\n            else root = findInScope(ctx, name);\r\n\r\n            if (!root) return (type === 'state') ? `[Unknown: ${name}]` : undefined;\r\n\r\n            // For $macro, we access the property directly on the macro context\r\n            if (type === '$macro') {\r\n                if (parts.length === 0) return root;\r\n                let target = root;\r\n                for (const part of parts) {\r\n                    if (target === undefined || target === null) return undefined;\r\n                    target = target[part];\r\n                }\r\n                return target;\r\n            }\r\n\r\n            // For root-only access\r\n            if (path.length === 0) {\r\n                if (type === 'state' && currentSubscriber) registerDependency(name);\r\n                return root;\r\n            }\r\n\r\n            return resolvePath(root, path, type === 'state' ? name : null);\r\n        };\r\n    }\r\n\r\n    function resolvePath(root, path, contextName) {\r\n        if (path.length === 0) return root;\r\n\r\n        let target = root;\r\n        if (root && typeof root === 'object' && 'value' in root) {\r\n            target = root.value;\r\n        }\r\n\r\n        for (let i = 0; i < path.length - 1; i++) {\r\n            target = target[path[i]];\r\n            if (!target || typeof target !== 'object') return undefined;\r\n        }\r\n\r\n        const key = path[path.length - 1];\r\n        if (target === undefined || target === null) return undefined;\r\n\r\n        if (currentSubscriber) registerDependency(contextName);\r\n\r\n        return {\r\n            target,\r\n            key,\r\n            get value() { return target[key]; },\r\n            set value(v) {\r\n                target[key] = v;\r\n                if (contextName) notify(contextName, target);\r\n            },\r\n            valueOf() { return this.value; },\r\n            toString() { return String(this.value); }\r\n        };\r\n    }\r\n\r\n    function extractExpressions(text) {\r\n        return []; // Legacy expressions disabled\r\n    }\r\n\r\n    function isXPath(expression) {\r\n        const xpathIndicators = [\r\n            /^\\/\\//, /^\\//, /^\\.\\//, /^\\.\\.\\//, /\\.\\//, /\\.\\.\\//, /@[\\w-]+/, /\\bcount\\(/, /\\btext\\(/,\r\n            /\\bnode\\(/, /\\bposition\\(/, /\\blast\\(/, /\\bsum\\(/, /\\bconcat\\(/, /\\bcontains\\(/,\r\n            /\\bstarts-with\\(/, /\\bstring\\(/, /\\bnumber\\(/, /\\bboolean\\(/, /::/,\r\n        ];\r\n        return xpathIndicators.some(pattern => pattern.test(expression));\r\n    }\r\n\r\n    function evaluateExpression(expression, contextNode, returnNodes = false, type = '$', event) {\r\n        if (type === '_') {\r\n            return { type: 'value', value: evaluateStateExpression(expression, contextNode, event) };\r\n        }\r\n        return isXPath(expression)\r\n            ? evaluateXPath(expression, contextNode, returnNodes)\r\n            : evaluateCSS(expression, contextNode, returnNodes);\r\n    }\r\n\r\n    function evaluateCSS(selector, contextNode, returnNodes = false) {\r\n        try {\r\n            const context = contextNode?.nodeType === 1\r\n                ? contextNode\r\n                : contextNode?.parentElement || document;\r\n\r\n            const elements = Array.from(context.querySelectorAll(selector));\r\n\r\n            if (elements.length === 0) return { type: 'value', value: '' };\r\n            if (returnNodes) return { type: 'nodes', value: elements };\r\n\r\n            return { type: 'value', value: elements.map(el => el.textContent || '').join(', ') };\r\n        } catch (e) {\r\n            console.error(`[cDOM] CSS Error: \"${selector}\"`, e, { contextNode });\r\n            return { type: 'value', value: `[CSS Error: ${selector}]` };\r\n        }\r\n    }\r\n\r\n    function evaluateXPath(expression, contextNode, returnNodes = false) {\r\n        try {\r\n            const result = document.evaluate(\r\n                expression,\r\n                contextNode || document,\r\n                null,\r\n                XPathResult.ANY_TYPE,\r\n                null\r\n            );\r\n\r\n            switch (result.resultType) {\r\n                case XPathResult.NUMBER_TYPE: return { type: 'value', value: result.numberValue };\r\n                case XPathResult.STRING_TYPE: return { type: 'value', value: result.stringValue };\r\n                case XPathResult.BOOLEAN_TYPE: return { type: 'value', value: result.booleanValue };\r\n                case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:\r\n                case XPathResult.ORDERED_NODE_ITERATOR_TYPE:\r\n                    const nodes = [];\r\n                    let node = result.iterateNext();\r\n                    while (node) {\r\n                        nodes.push(node);\r\n                        node = result.iterateNext();\r\n                    }\r\n                    if (returnNodes && nodes.length > 0) return { type: 'nodes', value: nodes };\r\n                    return { type: 'value', value: nodes.map(n => n.textContent || n.nodeValue).join(', ') };\r\n                case XPathResult.FIRST_ORDERED_NODE_TYPE:\r\n                case XPathResult.ANY_UNORDERED_NODE_TYPE:\r\n                    if (returnNodes && result.singleNodeValue) return { type: 'nodes', value: [result.singleNodeValue] };\r\n                    return { type: 'value', value: result.singleNodeValue?.textContent || result.singleNodeValue?.nodeValue || '' };\r\n                default: return { type: 'value', value: '' };\r\n            }\r\n        } catch (e) {\r\n            console.error(`[cDOM] XPath Error: \"${expression}\"`, e, { contextNode });\r\n            return { type: 'value', value: `[XPath Error: ${expression}]` };\r\n        }\r\n    }\r\n\r\n    function notifyDOMChange() {\r\n        for (const sub of domListeners) {\r\n            if (!sub.node.isConnected && !(sub.node instanceof Attr && sub.node.ownerElement?.isConnected)) {\r\n                domListeners.delete(sub);\r\n                continue;\r\n            }\r\n            if (sub.structural) {\r\n                currentSubscriber = sub;\r\n                const result = evaluateStructural(sub.structural, sub.contextNode, null, sub.unsafe);\r\n                currentSubscriber = null;\r\n                const newValue = String(result ?? '');\r\n                if (sub.node instanceof Attr) {\r\n                    if (sub.node.ownerElement.getAttribute(sub.node.name) !== newValue) {\r\n                        sub.node.ownerElement.setAttribute(sub.node.name, newValue);\r\n                    }\r\n                } else {\r\n                    if (sub.node.nodeValue !== newValue) {\r\n                        sub.node.nodeValue = newValue;\r\n                    }\r\n                }\r\n            } else if (sub.attr) {\r\n                const expressions = extractExpressions(sub.attr.value);\r\n                let newValue = sub.attr.originalValue || sub.attr.value;\r\n                for (const expr of expressions) {\r\n                    if (expr.type === '$') {\r\n                        const res = evaluateExpression(expr.expression, sub.contextNode, false, '$');\r\n                        newValue = newValue.replace(expr.fullMatch, String(res.value));\r\n                    }\r\n                }\r\n                if (sub.node.ownerElement.getAttribute(sub.node.name) !== newValue) {\r\n                    sub.node.ownerElement.setAttribute(sub.node.name, newValue);\r\n                }\r\n            } else {\r\n                const res = evaluateExpression(sub.expression, sub.contextNode, false, '$');\r\n                const newValue = String(res.value);\r\n                if (sub.node.nodeValue !== newValue) {\r\n                    sub.node.nodeValue = newValue;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    function cdomToDOM(onode, wasString, unsafe, context) {\r\n        if (onode === null || onode === undefined) return null;\r\n        onode = unwrap(onode);\r\n\r\n        if (typeof onode === 'function') {\r\n            const placeholder = document.createComment('fx');\r\n            const fn = () => onode.call(context);\r\n            const sub = { node: placeholder, fn, contextNode: context, wasString, unsafe };\r\n            placeholder._lv_sub = sub;\r\n            currentSubscriber = sub;\r\n            const initial = fn();\r\n            currentSubscriber = null;\r\n            let dom = cdomToDOM(initial, wasString, unsafe, context);\r\n            if (dom) {\r\n                if (dom.nodeType === 11) { // Fragment\r\n                    const wrap = document.createElement('span');\r\n                    wrap.style.display = 'contents';\r\n                    wrap.appendChild(dom);\r\n                    dom = wrap;\r\n                }\r\n                sub.node = dom;\r\n                dom._lv_sub = sub;\r\n                return dom;\r\n            }\r\n            return placeholder;\r\n        }\r\n\r\n        if (typeof onode !== 'object') {\r\n            if (typeof onode === 'string' && onode.startsWith('=') && onode.length > 1) {\r\n                return cdomToDOM({ \"=\": onode }, wasString, unsafe, context);\r\n            }\r\n            return document.createTextNode(onode);\r\n        }\r\n\r\n        if (Array.isArray(onode)) {\r\n            const frag = document.createDocumentFragment();\r\n            for (const node of onode) {\r\n                const childNode = cdomToDOM(node, wasString, unsafe, context);\r\n                if (childNode) frag.appendChild(childNode);\r\n            }\r\n            return frag;\r\n        }\r\n\r\n        if (onode.nodeType) return onode;\r\n\r\n        const keys = Object.keys(onode);\r\n        if (keys.length === 1 && (keys[0] === '=' || keys[0] === '$' || keys[0].startsWith('=') || symbolicOperators.has(keys[0]))) {\r\n            const placeholder = document.createTextNode('');\r\n            const sub = {\r\n                node: placeholder,\r\n                contextNode: context,\r\n                fn: (event) => evaluateStructural(onode, context, event, unsafe),\r\n                wasString,\r\n                unsafe\r\n            };\r\n            placeholder._lv_sub = sub;\r\n            currentSubscriber = sub;\r\n            const result = sub.fn();\r\n            currentSubscriber = null;\r\n\r\n            if (result && typeof result === 'object' && !Array.isArray(result) && !result.nodeType) {\r\n                if (Object.keys(result).length > 0) {\r\n                    const dom = cdomToDOM(result, wasString, unsafe, context);\r\n                    if (dom) {\r\n                        sub.node = dom;\r\n                        dom._lv_sub = sub;\r\n                        return dom;\r\n                    }\r\n                }\r\n            }\r\n            placeholder.nodeValue = String(result ?? '');\r\n            return placeholder;\r\n        }\r\n\r\n        const tag = keys[0];\r\n        if (!tag) return document.createDocumentFragment();\r\n\r\n        const content = onode[tag];\r\n        const el = document.createElement(tag);\r\n        if (context) Object.defineProperty(el, '_lv_parent', { value: context, enumerable: false, configurable: true });\r\n\r\n        // Check if content is a structural reference object itself\r\n        const isStructural = (obj) => {\r\n            if (typeof obj !== 'object' || obj === null || Array.isArray(obj) || obj.nodeType) return false;\r\n            const keys = Object.keys(obj);\r\n            return keys.length === 1 && (keys[0] === '=' || keys[0] === '$' || keys[0].startsWith('=') || symbolicOperators.has(keys[0]));\r\n        };\r\n\r\n        if (typeof content === 'object' && content !== null && !Array.isArray(content) && !content.nodeType && !isStructural(content)) {\r\n            for (const key in content) {\r\n                const val = content[key];\r\n                if (key === 'children') {\r\n                    const children = Array.isArray(val) ? val : [val];\r\n                    for (const child of children) {\r\n                        const childNode = cdomToDOM(child, wasString, unsafe, el);\r\n                        if (childNode) el.appendChild(childNode);\r\n                    }\r\n                } else if (key === 'class') {\r\n                    el.className = val;\r\n                } else if (key === 'style' && typeof val === 'object' && val !== null) {\r\n                    for (const s in val) el.style[s] = val[s];\r\n                } else if (key === 'oncreate' || key === 'onmount') {\r\n                    if (typeof val === 'function') {\r\n                        if (key === 'oncreate') try { val.call(el); } catch (e) { }\r\n                        else el.onmount = val;\r\n                    } else if (typeof val === 'object' && val !== null) {\r\n                        if (key === 'oncreate') try { evaluateStructural(val, el, null, unsafe); } catch (e) { }\r\n                        else el.onmount = () => evaluateStructural(val, el, null, unsafe);\r\n                    }\r\n                } else if (key.startsWith('on')) {\r\n                    if (typeof val === 'function') {\r\n                        el[key] = val;\r\n                    } else if (typeof val === 'object' && val !== null) {\r\n                        el[key] = (event) => evaluateStructural(val, el, event, unsafe);\r\n                    }\r\n                } else {\r\n                    if (typeof val === 'object' && val !== null) {\r\n                        const sub = { node: el, contextNode: el, fn: (event) => evaluateStructural(val, el, event, unsafe), unsafe };\r\n                        currentSubscriber = sub;\r\n                        const initial = sub.fn();\r\n                        currentSubscriber = null;\r\n                        el.setAttribute(key, String(initial ?? ''));\r\n                    } else {\r\n                        el.setAttribute(key, val);\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            const childNode = cdomToDOM(content, wasString, unsafe, el);\r\n            if (childNode) el.appendChild(childNode);\r\n        }\r\n\r\n        return el;\r\n    }\r\n\r\n    // call with no options when using to simply construct a DOM element\r\n\r\n    // call with options to insert into the DOM\r\n    function cDOM(cdom, options, script = document.currentScript) {\r\n        const type = typeof cdom;\r\n        const wasString = type === 'string' || (options && options._wasString);\r\n        let cdomObj = cdom;\r\n        if (type === 'string') {\r\n            cdomObj = JSON.parse(cdom);\r\n        }\r\n\r\n        if (options) {\r\n            let { target = script, location = 'outerHTML' } = options;\r\n            if (typeof target === 'string') {\r\n                const targets = Array.from(document.querySelectorAll(target));\r\n                let firstRes = null;\r\n                for (let i = 0; i < targets.length; i++) {\r\n                    const res = cDOM(cdomObj, { ...options, target: targets[i], _wasString: wasString }, script);\r\n                    if (i === 0) firstRes = res;\r\n                }\r\n                return firstRes;\r\n            }\r\n\r\n            const dom = cdomToDOM(cdomObj, wasString, options.unsafe, options.context);\r\n            location = (location || 'outerHTML').toLowerCase();\r\n            if (location === 'outerhtml') target.replaceWith(dom);\r\n            else if (location === 'innerhtml') { target.replaceChildren(dom); }\r\n            else if (location === 'beforebegin') { target.insertAdjacentElement('beforebegin', dom); }\r\n            else if (location === 'afterbegin') { target.insertAdjacentElement('afterbegin', dom); }\r\n            else if (location === 'beforeend') { target.insertAdjacentElement('beforeend', dom); }\r\n            else if (location === 'afterend') { target.insertAdjacentElement('afterend', dom); }\r\n            else if (location === 'shadow') {\r\n                if (!target.shadowRoot) target.attachShadow({ mode: 'open' });\r\n                target.shadowRoot.replaceChildren(dom);\r\n            }\r\n            return dom;\r\n        }\r\n        return cdomToDOM(cdomObj, wasString);\r\n    }\r\n\r\n    // Standalone src/href handling\r\n    const nativeSrcTags = new Set(['img', 'script', 'iframe', 'video', 'audio', 'source', 'track', 'embed']);\r\n\r\n    async function handleSrc(element, srcValue) {\r\n        const tag = element.tagName.toLowerCase();\r\n        if (nativeSrcTags.has(tag)) return; // Don't override native behavior\r\n\r\n        if (!srcValue) {\r\n            element.replaceChildren();\r\n            return;\r\n        }\r\n\r\n        // Check if it's a CSS selector\r\n        // We avoid querySelector if it looks like a file path or URL to prevent DOMException\r\n        const isUrlLike = srcValue.includes('/') || srcValue.includes('?');\r\n        if (!isUrlLike && !srcValue.startsWith('http')) {\r\n            try {\r\n                const source = document.querySelector(srcValue);\r\n                if (source) {\r\n                    element.replaceChildren(...Array.from(source.childNodes).map(n => n.cloneNode(true)));\r\n                    return;\r\n                }\r\n            } catch (e) { /* Not a valid selector, try as URL */ }\r\n        }\r\n\r\n        // Treat as URL\r\n        try {\r\n            const method = element.getAttribute('data-method') || 'GET';\r\n            let body = element.getAttribute('data-body');\r\n            const bodySelector = element.getAttribute('data-body-selector');\r\n            if (bodySelector) {\r\n                const source = document.querySelector(bodySelector);\r\n                if (source) {\r\n                    body = 'checked' in source ? source.checked : 'value' in source ? source.value : source.textContent;\r\n                }\r\n            }\r\n            const url = new URL(srcValue, window.location.href);\r\n            const options = { method };\r\n            if (body) options.body = body;\r\n            const response = await globalThis.fetch(url.href);\r\n            if (!response.ok) throw new Error(`HTTP ${response.status}`);\r\n\r\n            const contentType = response.headers.get('content-type') || '';\r\n            const text = await response.text();\r\n            const pathname = url.pathname.toLowerCase();\r\n\r\n            // Determine how to handle content\r\n            const isCDOM = pathname.endsWith('.cdom') || contentType.includes('application/cdom') || contentType.includes('application/json');\r\n            const isHTML = pathname.endsWith('.html') || pathname.endsWith('.htm') || contentType.includes('text/html');\r\n\r\n            if (isCDOM) {\r\n                const cdomData = JSON.parse(text);\r\n                const query = Object.fromEntries(url.searchParams.entries());\r\n                element._queryContext = query;\r\n                if (!element._macroContext) element._macroContext = query;\r\n\r\n                // Pre-load all needed helpers to avoid \"suspense\" flickering during hypermedia loads\r\n                const helpersToLoad = findNeededHelpers(cdomData);\r\n                if (helpersToLoad.size > 0) {\r\n                    await Promise.all(Array.from(helpersToLoad).map(name => loadHelper(name)));\r\n                }\r\n\r\n                const dom = cdomToDOM(cdomData, true, false, element);\r\n                element.replaceChildren(dom);\r\n            } else if (isHTML) {\r\n                element.innerHTML = text;\r\n            } else {\r\n                // Other content types - display in <pre>\r\n                const pre = document.createElement('pre');\r\n                pre.textContent = text;\r\n                element.replaceChildren(pre);\r\n            }\r\n        } catch (e) {\r\n            element.innerHTML = `<div style=\"color:red;\">Failed to load: ${srcValue} ${e.message}</div>`;\r\n        }\r\n    }\r\n\r\n    function handleNonStandardHref(event) {\r\n        const element = event.currentTarget;\r\n        const href = element.getAttribute('href');\r\n        if (!href) return;\r\n\r\n        event.preventDefault();\r\n\r\n        // Parse hash if present\r\n        const hashIndex = href.indexOf('#');\r\n        const path = hashIndex >= 0 ? href.substring(0, hashIndex) : href;\r\n        const hash = hashIndex >= 0 ? href.substring(hashIndex + 1) : null;\r\n\r\n        // Determine targets\r\n        const targetAttr = element.getAttribute('target') || 'self';\r\n        let targets = [];\r\n\r\n        if (targetAttr === 'self') {\r\n            targets = [element];\r\n        } else {\r\n            try {\r\n                targets = Array.from(document.querySelectorAll(targetAttr));\r\n            } catch (e) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        // Set src on all targets\r\n        for (const target of targets) {\r\n            target.setAttribute('src', path);\r\n        }\r\n\r\n        // Scroll to hash after a brief delay to allow content to load\r\n        if (hash) {\r\n            setTimeout(() => {\r\n                const hashTarget = document.getElementById(hash);\r\n                if (hashTarget) {\r\n                    hashTarget.scrollIntoView({ behavior: 'smooth' });\r\n                }\r\n            }, 100);\r\n        }\r\n    }\r\n\r\n    // Core Library Functions (Inlined for performance/reliability)\r\n    const _sum = (...args) => args.flat(Infinity).reduce((a, b) => a + (Number(b) || 0), 0);\r\n    const _sub = (...args) => {\r\n        const flat = args.flat(Infinity).map(v => Number(v) || 0);\r\n        if (flat.length === 0) return 0;\r\n        if (flat.length === 1) return -flat[0];\r\n        return flat.reduce((a, b) => a - b);\r\n    };\r\n    const _mul = (...args) => args.flat(Infinity).reduce((a, b) => a * (Number(b) || 1), 1);\r\n    const _div = (a, b) => (Number(a) || 0) / (Number(b) || 1);\r\n\r\n    const _set = function (target, val) {\r\n        if (target && typeof target === 'object' && 'value' in target) {\r\n            target.value = val;\r\n        } else if (target && typeof target === 'function' && 'value' in target) {\r\n            target.value = val;\r\n        } else if (target && typeof target === 'object' && val && typeof val === 'object') {\r\n            Object.assign(target, val);\r\n        }\r\n        return val;\r\n    };\r\n    _set.mutates = true;\r\n\r\n    const _inc = function (target, by = 1) {\r\n        const hasValue = target && (typeof target === 'object' || typeof target === 'function') && 'value' in target;\r\n        const current = hasValue ? target.value : 0;\r\n        return _set(target, Number(current) + Number(by));\r\n    };\r\n    _inc.mutates = true;\r\n\r\n    const _dec = function (target, by = 1) {\r\n        const hasValue = target && (typeof target === 'object' || typeof target === 'function') && 'value' in target;\r\n        const current = hasValue ? target.value : 0;\r\n        return _set(target, Number(current) - Number(by));\r\n    };\r\n    _dec.mutates = true;\r\n\r\n    const _toggle = function (target) {\r\n        const hasValue = target && (typeof target === 'object' || typeof target === 'function') && 'value' in target;\r\n        const current = hasValue ? target.value : false;\r\n        return _set(target, !current);\r\n    };\r\n    _toggle.mutates = true;\r\n\r\n    const _if = (c, t, e) => c ? t : e;\r\n    const _ifs = (...args) => {\r\n        for (let i = 0; i < args.length; i += 2) {\r\n            if (i + 1 >= args.length) return args[i]; // Default case\r\n            if (args[i]) return args[i + 1];\r\n        }\r\n    };\r\n\r\n    const _switch = (exp, ...args) => {\r\n        for (let i = 0; i < args.length - 1; i += 2) {\r\n            if (exp === args[i]) return args[i + 1];\r\n        }\r\n        return args.length % 2 === 1 ? args[args.length - 1] : undefined;\r\n    };\r\n\r\n    // Register core helpers\r\n    helpers.set('state', state);\r\n    helpers.set('signal', signal);\r\n    helpers.set('$', $);\r\n    helpers.set('sum', _sum);\r\n    helpers.set('add', _sum);\r\n    helpers.set('subtract', _sub);\r\n    helpers.set('multiply', _mul);\r\n    helpers.set('divide', _div);\r\n    helpers.set('eq', (a, b) => a == b);\r\n    helpers.set('neq', (a, b) => a != b);\r\n    helpers.set('gt', (a, b) => a > b);\r\n    helpers.set('lt', (a, b) => a < b);\r\n    helpers.set('gte', (a, b) => a >= b);\r\n    helpers.set('lte', (a, b) => a <= b);\r\n    helpers.set('and', (...args) => args.every(Boolean));\r\n    helpers.set('or', (...args) => args.some(Boolean));\r\n    helpers.set('not', (a) => !a);\r\n    helpers.set('set', _set);\r\n    helpers.set('increment', _inc);\r\n    helpers.set('decrement', _dec);\r\n    helpers.set('toggle', _toggle);\r\n    helpers.set('if', _if);\r\n    helpers.set('ifs', _ifs);\r\n    helpers.set('switch', _switch);\r\n\r\n    // Default Operator Mappings\r\n    cDOM.operator('+', 'add');\r\n    cDOM.operator('-', 'subtract');\r\n    cDOM.operator('*', 'multiply');\r\n    cDOM.operator('/', 'divide');\r\n    cDOM.operator('==', 'eq');\r\n    cDOM.operator('!=', 'neq');\r\n    cDOM.operator('>', 'gt');\r\n    cDOM.operator('<', 'lt');\r\n    cDOM.operator('>=', 'gte');\r\n    cDOM.operator('<=', 'lte');\r\n    cDOM.operator('&&', 'and');\r\n    cDOM.operator('||', 'or');\r\n    cDOM.operator('!', 'not');\r\n    cDOM.operator('++', 'increment');\r\n    cDOM.operator('--', 'decrement');\r\n\r\n\r\n    const observer = new MutationObserver((mutations) => {\r\n        let changed = false;\r\n        for (const mutation of mutations) {\r\n            if (mutation.type === 'childList') {\r\n                for (const node of mutation.addedNodes) {\r\n                    if (node.nodeType === 1) { // ELEMENT_NODE\r\n                        const process = (el) => {\r\n                            // Handle onmount\r\n                            if (el.onmount && !mountedNodes.has(el)) {\r\n                                mountedNodes.add(el);\r\n                                try { el.onmount.call(el); } catch (e) { /* ignore */ }\r\n                            }\r\n\r\n                            // Handle src attribute\r\n                            const tag = el.tagName.toLowerCase();\r\n                            if (el.hasAttribute('src') && !nativeSrcTags.has(tag)) {\r\n                                handleSrc(el, el.getAttribute('src'));\r\n                            }\r\n\r\n                            // Handle href attribute (non-<a> tags only)\r\n                            if (el.hasAttribute('href') && tag !== 'a') {\r\n                                if (!el.onclick) {\r\n                                    el.onclick = handleNonStandardHref;\r\n                                }\r\n                            }\r\n                        };\r\n                        process(node);\r\n                        const all = node.querySelectorAll('*');\r\n                        for (const el of all) process(el);\r\n                    }\r\n                }\r\n                changed = true;\r\n            } else if (mutation.type === 'attributes') {\r\n                const el = mutation.target;\r\n                if (mutation.attributeName === 'src') {\r\n                    const tag = el.tagName.toLowerCase();\r\n                    if (!nativeSrcTags.has(tag)) {\r\n                        handleSrc(el, el.getAttribute('src'));\r\n                    }\r\n                } else if (mutation.attributeName === 'href') {\r\n                    const tag = el.tagName.toLowerCase();\r\n                    if (tag !== 'a') {\r\n                        if (el.hasAttribute('href') && !el.onclick) {\r\n                            el.onclick = handleNonStandardHref;\r\n                        }\r\n                    }\r\n                }\r\n                changed = true;\r\n            } else if (mutation.type === 'characterData') {\r\n                changed = true;\r\n            }\r\n        }\r\n        if (changed) queueDOMChange();\r\n    });\r\n\r\n    observer.observe(document.body || document.documentElement, {\r\n        childList: true,\r\n        subtree: true,\r\n        attributes: true,\r\n        characterData: true\r\n    });\r\n    // Export to global scope\r\n    cDOM.signal = signal;\r\n    cDOM.state = state;\r\n    cDOM.session = session;\r\n    cDOM.helper = helper;\r\n    cDOM.schema = schema;\r\n    cDOM.validate = validate;\r\n    cDOM.$ = $;\r\n    cDOM.script = document.currentScript;\r\n\r\n    globalThis.cDOM = cDOM;\r\n    globalThis.$ = $;\r\n})();\r\n"]}