@eturnity/eturnity_3d 7.20.1 → 7.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/package.json +2 -2
  2. package/src/EventManager/EventManager.js +48 -0
  3. package/src/Item/Item.js +12 -0
  4. package/src/Layer/Layer.js +119 -0
  5. package/src/Overlay/AirTeamOverlay.js +605 -0
  6. package/src/Overlay/ImageOverlay.js +309 -0
  7. package/src/Overlay/Overlay.js +255 -0
  8. package/src/Overlay/OverlayFactory.js +19 -0
  9. package/src/Overlay/OverlayLayer.js +36 -0
  10. package/src/components/ThreeCanvasViewer.vue +17 -6
  11. package/src/config.js +120 -17
  12. package/src/helper/UpdateRoofModuleFieldRelations.js +65 -25
  13. package/src/helper/cameraMixin.js +25 -0
  14. package/src/helper/materialMixin.js +14 -1
  15. package/src/helper/projectedMaterial.js +662 -0
  16. package/src/helper/render/base.js +5 -5
  17. package/src/helper/render/clear.js +0 -17
  18. package/src/helper/render/edge.js +2 -0
  19. package/src/helper/render/geometryHandler.js +60 -31
  20. package/src/helper/render/imageOverlay.js +25 -144
  21. package/src/helper/render/index.js +2 -0
  22. package/src/helper/render/mergedGeometry.js +11 -2
  23. package/src/helper/render/obstacle.js +2 -1
  24. package/src/helper/render/overlay.js +41 -0
  25. package/src/helper/render/projectionMaterial.js +17 -19
  26. package/src/helper/render/roof.js +49 -52
  27. package/src/helper/render/texture.js +25 -0
  28. package/src/helper/render/tile.js +84 -24
  29. package/src/helper/render/tileProjection.js +23 -14
  30. package/src/helper/renderMixin.js +22 -8
  31. package/src/helper/threeMixin.js +5 -2
  32. package/src/store/hydrateData.js +23 -11
  33. package/src/store/nodesEdgesCreation.js +78 -4
  34. package/src/store/three-d-module.js +1 -1
  35. package/dist/css/app.58568098.css +0 -1
  36. package/dist/img/reneSola_Virtus_2_JC320S_24_Bbw.85a0cb6d.png +0 -0
  37. package/dist/index.html +0 -15
  38. package/dist/js/app-legacy.aa792c98.js +0 -2
  39. package/dist/js/app-legacy.aa792c98.js.map +0 -1
  40. package/dist/js/chunk-vendors-legacy.9bb3863d.js +0 -41
  41. package/dist/js/chunk-vendors-legacy.9bb3863d.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/app-legacy.aa792c98.js","mappings":"iFAEIA,MAAM,oBACNC,IAAI,oBACHC,MAAO,4CACRC,YAAA,I,0CAJF,QAKE,MALF,EAKE,S,yDCNSC,G,OAAyB,CACpCC,aAAc,CAEZC,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXC,yBAA0B,CAExBH,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXE,0BAA2B,CAEzBJ,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXG,0BAA2B,CAEzBL,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXI,oCAAqC,CAEnCN,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXK,iCAAkC,CAEhCP,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXM,mBAAoB,CAElBR,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXO,yBAA0B,CAExBT,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXQ,kBAAmB,CAEjBV,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXS,uBAAwB,CAEtBX,QAAS,GACTC,cAAe,GACfC,QAAS,GAEXU,UAAW,CACTZ,QAAS,GACTC,cAAe,GACfC,QAAS,KC5Db,SAASW,IACP,IAAMC,EAAcC,EAAAA,UAAYC,aAAa,CAC3CC,KAAM,SACNC,aAAc,cACdjB,cAAe,GACfD,QAAS,KAELmB,EAAqBJ,EAAAA,UAAYC,aAAa,CAClDC,KAAM,UACNC,aAAc,qBACdjB,cAAe,GACfD,QAAS,KAELoB,EAAqBL,EAAAA,UAAYC,aAAa,CAClDC,KAAM,UACNC,aAAc,qBACdjB,cAAe,GACfD,QAAS,KAGLD,EAAegB,EAAAA,UACnB,iFACA,CACEM,GAAI,UACJC,WAAY,CAAC,OAAQ,QAAS,QAAS,QAAS,SAChDC,YACE,+DAEFrB,QAASJ,EAAuB,gBAAgB,WAChDE,QAASF,EAAuB,gBAAgB,WAChDG,cAAeH,EAAuB,gBAAgB,iBACtDoB,aAAc,iBAGZf,EAA2BY,EAAAA,UAC/B,qFACA,CACEM,GAAI,4BACJC,WAAY,CAAC,OAAQ,QAAS,QAAS,QAAS,SAChDC,YACE,+DAEFrB,QAASJ,EAAuB,4BAA4B,WAC5DE,QAASF,EAAuB,4BAA4B,WAC5DG,cACEH,EAAuB,4BAA4B,iBACrDoB,aAAc,6BAGZd,EAA4BW,EAAAA,UAChC,kGACA,CACEM,GAAI,uBACJC,WAAY,CAAC,OAAQ,QAAS,QAAS,QAAS,SAChDC,YACE,mEACFvB,QAASF,EAAuB,6BAA6B,WAC7DG,cACEH,EAAuB,6BAA6B,iBACtDoB,aAAc,8BAGZb,EAA4BU,EAAAA,UAChC,wGACA,CACEM,GAAI,uBACJC,WAAY,CAAC,OAAQ,QAAS,QAAS,QAAS,SAChDC,YACE,mEACFvB,QAASF,EAAuB,6BAA6B,WAC7DG,cACEH,EAAuB,6BAA6B,iBACtDoB,aAAc,8BAGZZ,EAAsCS,EAAAA,UAC1C,8GACA,CACEM,GAAI,iCAEJE,YACE,mEACFvB,QACEF,EAAuB,uCACrB,WAEJG,cACEH,EAAuB,uCACrB,iBAEJoB,aAAc,wCAGZX,EAAmCQ,EAAAA,UACvC,6GACA,CACEM,GAAI,8BAEJE,YACE,mEACFvB,QACEF,EAAuB,oCAAoC,WAC7DG,cACEH,EAAuB,oCACrB,iBAEJoB,aAAc,qCAGZV,EAAqBO,EAAAA,UACzB,qDACA,CACEM,GAAI,MACJE,YACE,qFACFrB,QAASJ,EAAuB,sBAAsB,WACtDE,QAASF,EAAuB,sBAAsB,WACtDG,cACEH,EAAuB,sBAAsB,iBAC/CoB,aAAc,uBAGZM,EAAoBT,EAAAA,UACxB,gLACA,CACEU,MAAO,wBACPC,cAAe,YACfC,OAAQ,aACRN,GAAI,WACJE,YACE,gEACFvB,QAASF,EAAuB,4BAA4B,WAC5DG,cACEH,EAAuB,4BAA4B,iBACrDoB,aAAc,6BAGZU,EAAcb,EAAAA,UAClB,iLACA,CACEU,MAAO,cACPC,cAAe,YACfC,OAAQ,aACRN,GAAI,UACJE,YACE,6EACFvB,QAASF,EAAuB,qBAAqB,WACrDG,cACEH,EAAuB,qBAAqB,iBAC9CoB,aAAc,sBAGZW,EAAkBd,EAAAA,UAAYe,IAClC,iEACA,CACEC,OAAQ,MACRV,GAAI,YACJE,YACE,uGACFvB,QAASF,EAAuB,0BAA0B,WAC1DG,cACEH,EAAuB,0BAA0B,iBACnDoB,aAAc,2BAGZc,EAAcjB,EAAAA,UAClB,gNASA,CACEgB,OAAQ,8BACRV,GAAI,8BACJE,YAAa,4BACbrB,QAASJ,EAAuB,aAAa,WAC7CE,QAASF,EAAuB,aAAa,WAC7CG,cAAeH,EAAuB,aAAa,iBACnDmC,SAAU,IACVf,aAAc,mCAIlB,MAAO,CACL,CACEgB,KAAM,wBACNC,IAAK,4BACLC,UAAWhC,GAEb,CACE8B,KAAM,kBACNC,IAAK,4BACLC,UAAW/B,GAEb,CACE6B,KAAM,iDACNC,IAAK,mCACLC,UAAW7B,GAEb,CACE2B,KAAM,kDACNC,IAAK,sCACLC,UAAW9B,GAEb,CACE4B,KAAM,gBACNC,IAAK,qBACLC,UAAW5B,GAEb,CACE0B,KAAM,mBACNC,IAAK,qBACLC,UAAWhB,GAEb,CACEc,KAAM,mBACNC,IAAK,qBACLC,UAAWjB,GAEb,CACEe,KAAM,qBACNC,IAAK,cACLC,UAAWtB,GAEb,CACEoB,KAAM,uBACNC,IAAK,eACLC,UAAWrC,GAEb,CACEmC,KAAM,yBACNC,IAAK,2BACLC,UAAWjC,GAEb,CACE+B,KAAM,6BACNC,IAAK,2BACLC,UAAWZ,GAEb,CACEU,KAAM,gBACNC,IAAK,oBACLC,UAAWR,GAEb,CACEM,KAAM,sBACNC,IAAK,yBACLC,UAAWP,GAEb,CACEK,KAAM,+BACNC,IAAK,iCACLC,UAAWJ,GAGjB,CACA,Q,opECtQO,IAAMK,EAAc,SAAAC,GAAAC,EAAAF,EAAAC,GAAA,IAAAE,EAAAC,EAAAJ,GACzB,SAAAA,EAAYK,EAASC,GAAW,IAAAC,EAAAC,EAAA,KAAAR,GAC9BO,EAAAJ,EAAAM,KAAA,MAEA,IAAMrB,EAAQZ,IAAYkC,MAAK,SAACtB,GAAK,OAAKA,EAAMU,KAAOQ,CAAS,IAW1C,OAVtBC,EAAKnB,MAAQA,EACbmB,EAAKI,SAAWL,EAChBC,EAAK5C,QAAU4C,EAAKnB,MAAMW,UAAUa,QAAQhD,eAAiB,GAC7D2C,EAAK1C,QAAU0C,EAAKnB,MAAMW,UAAUa,QAAQ/C,SAAW,GACvD0C,EAAKM,aAAeC,SAASC,cAAc,OAC3CR,EAAKM,aAAaG,IAAMC,EAAQ,KAChCV,EAAKM,aAAaK,YAAc,YAChCX,EAAKY,IAAM/B,EACPA,EAAMW,UAAUqB,KAChB,mDACJb,EAAKF,QAAUA,EAAOE,CACxB,CAsDC,OAtDAc,EAAArB,EAAA,EAAAF,IAAA,YAAAwB,MAED,SAAUC,EAAMC,EAAGC,GAAG,IAAAC,EAAA,KACdC,EAAeC,KAAKxC,MAAMW,UAAUa,QAAQ/C,SAAW,EACvDgE,EAAeD,KAAKxC,MAAMW,UAAUa,QAAQhD,eAAiB,GACnE,OAAO,IAAIkE,SAAQ,SAACC,EAASC,GAC3B,GAAIT,EAAOI,EACTI,EAAQL,EAAKb,mBACR,GAAIU,EAAOM,OACX,CACL,IAAII,EAAQnB,SAASC,cAAc,OACnCkB,EAAMC,OAAS,WACbD,EAAM1E,MAAM4E,gBAAkB,MAC9BJ,EAAQE,EACV,EACAA,EAAMG,QAAU,WACdL,EAAQH,KAAKf,aACf,EAEAoB,EAAMf,YAAc,YACpB,IAAImB,EAAWX,EAAKP,IACpB,GAAsB,0BAAlBO,EAAKtC,MAAMU,IAAiC,CAC9C,IAAMwC,EAAWC,KAAKC,IAAI,EAAGjB,GACvBkB,EAAQjB,EACRkB,EAAQJ,EAAW,EAAIb,EACvBkB,EAAiB,QAAUJ,KAAKK,GAAK,EACrCC,EAAsBF,EAAiBL,EAEvCQ,EAAOL,EAAQI,EAAsBF,EAAiB,EACtDI,EAAOD,EAAOD,EACdG,EAAON,EAAQG,EAAsBF,EAAiB,EACtDM,EAAOD,EAAOH,EAEpBR,GAAY,iMAAJa,OAAqMJ,EAAI,KAAAI,OAAIF,EAAI,KAAAE,OAAIH,EAAI,KAAAG,OAAID,EACvO,KAAO,CAKL,GAJAZ,EAAWA,EAASc,QAAQ,MAAO3B,GACnCa,EAAWA,EAASc,QAAQ,MAAO1B,GACnCY,EAAWA,EAASc,QAAQ,MAAO5B,GAE/BG,EAAKtC,MAAMW,UAAUa,QAAQ3B,WAAY,CAC3C,IAAMmE,EACJ1B,EAAKtC,MAAMW,UAAUa,QAAQ3B,WAC3BsD,KAAKc,KAAK7B,GAAKD,GAAQE,GACrBC,EAAKtC,MAAMW,UAAUa,QAAQ3B,WAAWqE,QAE9CjB,EAAWA,EAASc,QAAQ,MAAOC,EACrC,CACAf,EAAWA,EAASc,QAAQ,WAAY,cAExCd,EAAWA,EAASc,QAAQ,kBAAmB,KACjD,CACAlB,EAAMjB,IAAMqB,CACd,CACF,GACF,KAACrC,CAAA,CAtEwB,CAASuD,EAAAA,ICF9BC,EAAQ,CACZC,OAAQ,CACNC,QAAS,UACTC,UAAW,UACXC,SAAU,UACVC,MAAO,UACPC,OAAQ,UACRC,SAAU,UACVC,WAAY,UACZC,UAAW,UACXC,MAAO,OACPC,KAAM,UACNC,IAAK,UACLC,MAAO,UACPC,MAAO,UACPC,MAAO,OACPC,MAAO,UACPC,MAAO,UACPC,MAAO,UACPC,MAAO,UACPC,MAAO,UACPC,UAAW,UACXC,MAAO,UACPC,OAAQ,UACRC,SAAU,UACVC,kBAAmB,YACnBC,kBAAmB,YACnBC,iBAAkB,YAClBC,aAAc,UACdC,aAAc,WAGhBC,OAAQ,CACNC,YAAa,QACbC,OAAQ,QACRC,YAAa,QACbC,OAAQ,QACRC,YAAa,SAEfC,aAAc,OAGhB,IClCaC,EAAc,QACdC,EAA2C,EA0G3CC,GAtGIvC,EAAMC,OAAO2B,aAaL5B,EAAMC,OAAOW,IAarBZ,EAAMC,OAAOU,KASWX,EAAMC,OAAOU,KAGrCX,EAAMC,OAAOU,KAKbX,EAAMC,OAAOU,KAebX,EAAMC,OAAOU,KAKbX,EAAMC,OAAOU,KAUbX,EAAMC,OAAO2B,aAKb5B,EAAMC,OAAOU,KASfX,EAAMC,OAAOyB,kBAIb1B,EAAMC,OAAOyB,kBAUS1B,EAAMC,OAAO2B,aACnB,KAElBY,EAAiB,CAC5B,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAcWC,GAZaD,EAAeE,KAAI,SAACC,GAAC,OAAKA,EAAI,IAAI,IAYnC,WAEZC,EAAc,GAIrBC,GAD2BpF,EAAQ,KACd,oCACdqF,EAAqB,CAChCD,EAAqB,+CACrBA,EAAqB,wCACrBA,EAAqB,yCC9IvB,GDuJ0B9D,KAAKgE,IAAIhE,KAAKiE,IAAI,GAAK,ICvJjD,CACEC,KAAI,WACF,MAAO,CAAC,CACV,EACAC,QAAO,WACL9E,KAAK+E,SAAW,CAAC,EACjB,IAAIC,EAAY,SACZhF,KAAKgF,YACPA,EAAY,IAAIC,EAAAA,IAAYjF,KAAKgF,YAGnChF,KAAK+E,SAASG,UAAY,IAAID,EAAAA,IAA0B,CACtDE,MAAO,SACPC,KAAMH,EAAAA,MAGRjF,KAAK+E,SAASM,KAAO,IAAIJ,EAAAA,IAA0B,CACjDE,MAAOH,EACPI,KAAMH,EAAAA,MAGRjF,KAAK+E,SAASO,SAAW,IAAIL,EAAAA,IAAwB,CACnDE,MAAO,SACPC,KAAMH,EAAAA,MAGRjF,KAAK+E,SAASQ,KAAO,IAAIN,EAAAA,IAAwB,CAC/CE,MAAOd,EACPmB,aAAa,EACbC,QAASjB,IAGX,IAAMkB,EAASxG,SAASC,cAAc,UACpCwG,EAAMD,EAAOE,WAAW,MAC1BF,EAAOG,MAAQ,GACfH,EAAOI,OAAS,GAChBH,EAAII,UAAY,QAChBJ,EAAIK,SAAS,EAAG,EAAG,GAAI,IACvBL,EAAIM,YAAc,QAClBN,EAAIO,YACJP,EAAIQ,UAAY,GAChBR,EAAIS,IAAI,GAAI,GAAI,GAAI,EAAa,EAAVzF,KAAKK,IAC5B2E,EAAIU,SACJ,IAAMC,EAAU,IAAIrB,EAAAA,IAAoBS,GAExC1F,KAAK+E,SAASwB,KAAO,IAAItB,EAAAA,IAAqB,CAC5CuB,SAAUF,EACVG,KAAM,GACNC,iBAAiB,EACjBlB,aAAa,EACbL,MAAO,SACPM,QAAS,IAGXzF,KAAK+E,SAAS4B,MAAQ,CAAC,EAEvB,IAAK,IAAIC,EAAI,EAAGA,EAAIlC,EAAmBhD,OAAQkF,IAAK,CAClD,IAAIN,EAAUtG,KAAK6G,OAAOC,KACxBpC,EAAmBkC,IACnB,SAAUN,GAAU,IAEtBtG,KAAK+E,SAAS4B,MAAM,WAAaC,GAAK,IAAI3B,EAAAA,IAAwB,CAChEX,IAAKgC,EACLlB,KAAMH,EAAAA,KAEV,CACAjF,KAAK+E,SAAS4B,MAAM,wBAA0B,IAAI1B,EAAAA,IAAwB,CACxEE,MAAO,SACPK,aAAa,EACbuB,UAAW,EACXtB,QAAS,GACTL,KAAMH,EAAAA,MAERjF,KAAK+E,SAASiC,KAAO,CAAChH,KAAK+E,SAASM,MAEpCrF,KAAK+E,SAASkC,SAAW,IAAIhC,EAAAA,IAAwB,CACnDE,MAAO,MACP+B,SAAU,MACVC,UAAW,EACXC,aAAa,EACbhC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,KAGXzF,KAAK+E,SAASsC,UAAY,IAAIpC,EAAAA,IAAwB,CACpDE,MAAO,SACP+B,SAAU,MACVC,UAAW,EACXC,aAAa,EACbhC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,GACTsB,UAAW,KAEb/G,KAAK+E,SAASuC,SAAW,IAAIrC,EAAAA,IAAwB,CACnDE,MAAO,QACP+B,SAAU,MACVC,UAAW,EACXC,aAAa,EACbhC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,GACTsB,UAAW,KAEb/G,KAAK+E,SAASwC,OAAS,IAAItC,EAAAA,IAAwB,CACjDE,MAAO,SACPK,aAAa,EACbuB,UAAW,EACXtB,QAAS,GACTL,KAAMH,EAAAA,MAERjF,KAAK+E,SAASyC,YAAc,IAAIvC,EAAAA,IAAwB,CACtDE,MAAO,SACPC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,KAEXzF,KAAK+E,SAAS0C,4BAA8B,IAAIxC,EAAAA,IAAwB,CACtEE,MAAO,SACPC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,KAEXzF,KAAK+E,SAAS2C,WAAa,IAAIzC,EAAAA,IAAwB,CACrDE,MAAO,SACP+B,SAAU,MACVC,UAAW,EACXC,aAAa,EACbhC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,IAEb,EACAkC,MAAO,CACL3C,UAAS,SAACG,GACR,IAAIH,EAAY,IAAIC,EAAAA,IAAYE,GAChCnF,KAAK+E,SAASM,KAAKF,MAAMyC,IAAI5C,EAC/B,KCjJJ,GACE6C,QAAS,CACPC,YAAW,WACT,GAAK9H,KAAK+H,aAAV,CAOA,IAAIC,EACAhI,KAAKiI,OAAOC,YACdlI,KAAKiI,OAAOC,WAAWC,SAAU,EACjCH,EAAWhI,KAAKiI,OAAOC,WAAWF,SAClCA,EAASI,WAAWC,SAASC,aAAc,GAE3CN,EAAW,IAAI/C,EAAAA,IAGjB,IAAMsD,EAAW,GAOjB,GANAvI,KAAKwI,MACFC,QAAO,SAAClC,GAAI,MAAmB,QAAdA,EAAK/I,KAAe,IACrCkL,SAAQ,SAACnC,GACRgC,EAASI,KAAKpC,EAAK3G,EAAI,IAAM2G,EAAK1G,EAAI,IAAM0G,EAAKqC,EAAI,IACvD,IAGAZ,EAASI,WAAWC,UACpBL,EAASI,WAAWC,SAASQ,MAAMnH,QAAU6G,EAAS7G,OACtD,CACA,IAAIoH,EAAYd,EAASI,WAAWC,SAASQ,MAC7C,IAAK,IAAIjC,KAAK2B,EACZO,EAAUlC,GAAK2B,EAAS3B,GAE1BoB,EAASe,aAAa,EAAGR,EAAS7G,OAAS,EAC7C,MACEsG,EAASgB,aACP,WACA,IAAI/D,EAAAA,IAA6BsD,EAAU,IAG/C,IAAIxD,EAAW/E,KAAK+E,SAASwB,KACvB2B,EAAa,IAAIjD,EAAAA,IAAa+C,EAAUjD,GAC9CmD,EAAWe,SAASC,QAAU,EAC9BhB,EAAWe,SAASjM,KAAO,aAC3BkL,EAAWe,SAASE,OAAS,KAC7BjB,EAAWe,SAASG,UAAY,KAChClB,EAAWmB,kBAAmB,EAC9BnB,EAAWoB,YAAc,GACzBtJ,KAAKiI,OAAOC,WAAaA,EACrBlI,KAAKuJ,cACPvJ,KAAKuJ,aAAaC,IAAItB,EA3CxB,MAJMlI,KAAKiI,OAAOC,aACdlI,KAAKiI,OAAOC,WAAWC,SAAU,EAgDvC,I,kgECzCG,SAASsB,GACdC,GAEA,IADAC,EAAaC,UAAAlI,OAAA,QAAAmI,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAEhB,GAA6B,GAAzBF,EAAehI,OACjB,OAAO,IAAIoI,aAAa,IAE1B,IAAIC,EAAeL,EAChBpF,KAAI,SAAC0F,GACJ,MAAO,CAACA,EAAEpK,EAAI,IAAMoK,EAAEnK,EAAI,IAAMmK,EAAEpB,EAAI,IACxC,IACCqB,OACCC,EAAuB,GACvBC,EAAgB,GAEpB,GAAIR,EAAcjI,OAAS,EAAG,CAC5B,IAAM0I,EAAkBL,EAAarI,OAAS,EAAI,EAClDwI,EAAqBvB,KAAKyB,GAE1B,IADA,IAAIC,EAAYD,EACPxD,EAAI,EAAGA,EAAI+C,EAAcjI,OAAS,EAAGkF,IAAK,CACjD,IAAI0D,EAAWD,EAAYV,EAAc/C,GAAGlF,OAC5CwI,EAAqBvB,KAAK2B,GAC1BD,EAAYC,CACd,CACAJ,EAAoBK,EAAO,IAAIC,IAAIN,IACnCC,EAAgBR,EACbrF,KAAI,SAACmG,GACJ,OAAOA,EAAYnG,KAAI,SAAC0F,GACtB,MAAO,CAACA,EAAEpK,EAAI,IAAMoK,EAAEnK,EAAI,IAAMmK,EAAEpB,EAAI,IACxC,GACF,IACCqB,OACAA,MACL,CACA,IAAIS,EAAYhB,EAAeA,EAAehI,OAAS,GACnDiJ,EAAa,CAACD,EAAU9K,EAAI,IAAM8K,EAAU7K,EAAI,IAAM6K,EAAU9B,EAAI,KACxEmB,EAAapB,KAAIiC,MAAjBb,EAAqBY,GACrBZ,EAAapB,KAAIiC,MAAjBb,EAAYQ,EAASJ,IAErB,IAAIU,EAAY,GAChB,IACEA,EAAYC,IAAOf,EAAcG,EAAsB,EACzD,CAAE,MAAOa,GACPC,QAAQC,MAAMF,EAChB,CACA,IAAMG,EAAmB,GAQzB,OAPAL,EAAUnC,SAAQ,SAACyC,GACjBD,EAAiBvC,KACfoB,EAAa,EAAIoB,GACjBpB,EAAa,EAAIoB,EAAQ,GACzBpB,EAAa,EAAIoB,EAAQ,GAE7B,IACOD,CACT,CACO,SAASE,GACd1B,GAGA,IAFA2B,EAAYzB,UAAAlI,OAAA,QAAAmI,IAAAD,UAAA,GAAAA,UAAA,GAAG,GACf5B,EAAQ4B,UAAAlI,OAAA,EAAAkI,UAAA,QAAAC,EAGFqB,EAAmBzB,GACvBC,EACA2B,GAEF,IAAIC,EAAAA,EAAAA,IAAOJ,GACT,OAAO,KAET,IAAM3C,EAAW,IAAIuB,aAAaoB,GAClC,GACElD,EAASI,WAAWC,UACpBL,EAASI,WAAWC,SAASQ,MAAMnH,QAAU6G,EAAS7G,OACtD,CACA,IAAIoH,EAAYd,EAASI,WAAWC,SAASQ,MAC7C,IAAK,IAAIjC,KAAK2B,EACZO,EAAUlC,GAAK2B,EAAS3B,EAE5B,MACEoB,EAASuD,UACTvD,EAAW,KACXA,EAAW,IAAI/C,EAAAA,IACf+C,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IAMxE,OAJAP,EAASe,aAAa,EAAGR,EAAS7G,OAAS,GAC3CsG,EAASI,WAAWC,SAASC,aAAc,EAC3CN,EAASwD,uBACTxD,EAASM,aAAc,EAChBN,CACT,CAEO,SAASyD,GAAsB/B,GAAmC,IAAnB2B,EAAYzB,UAAAlI,OAAA,QAAAmI,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC7D5B,EAAW,IAAI/C,EAAAA,IAEfiG,EAAmBzB,GACvBC,EACA2B,GAEF,IAAIC,EAAAA,EAAAA,IAAOJ,GACT,OAAO,KAET,IAAM3C,EAAW,IAAIuB,aAAaoB,GAE9BQ,EAAM,IAAI5B,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAI7D,OAHA9B,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASgB,aAAa,KAAM,IAAI/D,EAAAA,IAAsByG,EAAK,IAC3D1D,EAASwD,uBACFxD,CACT,CAEO,SAAS2D,GAAgBC,GAC9B,IAAMlK,EAASkK,EAAQC,QAAQnK,OACzBoK,EAAoB,GAyE1B,GAxEAF,EAAQC,QAAQnD,SAAQ,SAACqD,EAAQZ,GAC/B,IAAMa,EAASJ,EAAQC,SAASV,EAAQ,GAAKzJ,GACvCuK,EAAUC,EAAAA,EAAA,GAAQH,GAAM,IAAEnD,EAAG,IAC7BuD,EAAUD,EAAAA,EAAA,GAAQF,GAAM,IAAEpD,EAAG,IAEnCkD,EAAkBnD,KAAIiC,MAAtBkB,EACK,CACDC,EAAOnM,EAAI,IACXmM,EAAOlM,EAAI,IACXkM,EAAOnD,EAAI,IACXoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfuD,EAAWvM,EAAI,IACfuM,EAAWtM,EAAI,IACfsM,EAAWvD,EAAI,KAGrB,IAEAgD,EAAQQ,MAAM1D,SAAQ,SAAC2D,GACrB,IAAIC,GACFC,EAAAA,EAAAA,IAAkBF,EAAKR,QAASD,EAAQC,SAAS,IAAM,GACzDS,EAAsBA,EAAoBhI,KAAI,SAAC0F,GAC7C,OAAAkC,EAAAA,EAAA,GACKlC,GAAC,IACJpB,GAAG4D,EAAAA,EAAAA,IACDxC,EACA4B,EAAQa,aACRb,EAAQc,YAAY,IACpB9D,GAEN,IACA,IAAM+D,EAAaL,EAAoB5K,OACvC4K,EAAoB5D,SAAQ,SAACqD,EAAQZ,GACnC,IAAMa,EAASM,GAAqBnB,EAAQ,GAAKwB,GAC3CV,EAAUC,EAAAA,EAAA,GAAQH,GAAM,IAAEnD,EAAG,IAC7BuD,EAAUD,EAAAA,EAAA,GAAQF,GAAM,IAAEpD,EAAG,IAEnCkD,EAAkBnD,KAAIiC,MAAtBkB,EACK,CACDC,EAAOnM,EAAI,IACXmM,EAAOlM,EAAI,IACXkM,EAAOnD,EAAI,IACXoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfuD,EAAWvM,EAAI,IACfuM,EAAWtM,EAAI,IACfsM,EAAWvD,EAAI,KAGrB,GACF,KACI0C,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAAMvD,EAAW,IAAIuB,aAAagC,GAClC,OAAOvD,CACT,CACO,SAASqE,GAAyBhB,EAAS5D,GAGhD,IAAMO,EAAWoD,GAAgBC,GAGjC,GACE5D,EAASI,WAAWC,UACpBL,EAASI,WAAWC,SAASQ,MAAMnH,QAAU6G,EAAS7G,OACtD,CACA,IAAIoH,EAAYd,EAASI,WAAWC,SAASQ,MAC7C,IAAK,IAAIjC,KAAK2B,EACZO,EAAUlC,GAAK2B,EAAS3B,GAE1BoB,EAASe,aAAa,EAAGR,EAAS7G,OAAS,EAC7C,MACEsG,EAASuD,UACTvD,EAAW,KACXA,EAAW,IAAI/C,EAAAA,IACf+C,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IAIxE,OAFAP,EAASwD,uBACTxD,EAASI,WAAWC,SAASC,aAAc,EACpCN,CACT,CAEO,SAAS6E,GAAsBjB,GACpC,IAAM5D,EAAW,IAAI/C,EAAAA,IAEfsD,EAAWoD,GAAgBC,GAKjC,OAHA5D,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASwD,uBAEFxD,CACT,CAEO,SAAS8E,GAA0BC,EAAiBC,GACzD,IAAIC,EAEFA,EADEF,EAAgBG,WACDC,SAASJ,EAAgBjH,QAAU,GAEnCqH,SACfJ,EAAgBK,gBAAkBL,EAAgBjH,QAAU,GAKhE,IAAM2G,EAAeO,EAAYP,aAC3BY,EAAcL,EAAYN,YAAY,GAQtCY,EAAYL,EAEZjF,EAAW,IAAI/C,EAAAA,IACfsI,GACJhB,EAAAA,EAAAA,IAAkBQ,EAAgBlB,QAASmB,EAAYnB,SAAS,IAAM,GAGlEC,EAAoB,GACpB0B,EAAqB,GAmB3B,GAlBAD,EAAkB7E,SAAQ,SAACsB,GACzB,IAEI+B,EAFEE,GAAaO,EAAAA,EAAAA,IAA0BxC,EAAGyC,EAAcY,GAG9D,GAAKN,EAAgBG,WAEd,CACL,IAAMO,GAAwBC,EAAAA,EAAAA,IAAeT,EAAgB,CAC3DrN,EAAG,EACHC,EAAG,EACH+I,EAAG,IAELmD,GAAS4B,EAAAA,EAAAA,IAAU1B,EAAYwB,EACjC,MARE1B,EAAMG,EAAAA,EAAA,GAAQD,GAAU,IAAErD,EAAG0E,IAS/BE,EAAmB7E,KAAKoD,EAC1B,IACAD,EAAkBnD,KAAIiC,MAAtBkB,EAAiBvB,EAASd,GAA+B+D,MAErDlC,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAAMvD,EAAW,IAAIuB,aAAagC,GAIlC,OAFA9D,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASwD,uBACFxD,CACT,CAEO,SAAS4F,GAA8Bb,EAAiBC,GAC7D,IAAIC,EAEFA,EADEF,EAAgBG,WACDC,SAASJ,EAAgBjH,QAAU,GAEnCqH,SACfJ,EAAgBK,gBAAkBL,EAAgBjH,QAAU,GAIhE,IAAM2G,EAAeO,EAAYP,aAC3BY,EAAcL,EAAYN,YAAY,GAQtCY,EAAYL,EAEZjF,EAAW,IAAI/C,EAAAA,IACfsI,GACJhB,EAAAA,EAAAA,IAAkBQ,EAAgBlB,QAASmB,EAAYnB,SAAS,IAAM,GAElEgC,EAAiBN,EAAkB7L,OACnCoK,EAAoB,GAgD1B,GA9CAyB,EAAkB7E,SAAQ,SAACsB,EAAGmB,GAC5B,IAMIY,EACAC,EAPEC,GAAaO,EAAAA,EAAAA,IAA0BxC,EAAGyC,EAAcY,GACxDlB,GAAaK,EAAAA,EAAAA,IACjBe,GAAmBpC,EAAQ,GAAK0C,GAChCpB,EACAY,GAIF,GAAKN,EAAgBG,WAGd,CAEL,IAAMO,GAAwBC,EAAAA,EAAAA,IAAeT,EAAgB,CAC3DrN,EAAG,EACHC,EAAG,EACH+I,EAAG,IAELmD,GAAS4B,EAAAA,EAAAA,IAAU1B,EAAYwB,GAC/BzB,GAAS2B,EAAAA,EAAAA,IAAUxB,EAAYsB,EACjC,MAXE1B,EAAMG,EAAAA,EAAA,GAAQD,GAAU,IAAErD,EAAG0E,IAC7BtB,EAAME,EAAAA,EAAA,GAAQC,GAAU,IAAEvD,EAAG0E,IAW/BxB,EAAkBnD,KAAIiC,MAAtBkB,EACK,CACDC,EAAOnM,EAAI,IACXmM,EAAOlM,EAAI,IACXkM,EAAOnD,EAAI,IACXoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfuD,EAAWvM,EAAI,IACfuM,EAAWtM,EAAI,IACfsM,EAAWvD,EAAI,KAGrB,KAEI0C,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAAMvD,EAAW,IAAIuB,aAAagC,GAIlC,OAFA9D,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASwD,uBACFxD,CACT,CAEO,SAAS8F,GAA6BC,GAC3C,IAAMf,EAAce,EAAmB/G,KACjCgH,EAAe,GAEfvB,EAAeO,EAAYP,aAE3BwB,EAAwB,GACxBjG,EAAW,IAAI/C,EAAAA,IAEf6G,EAAoB,GAS1B,GARAiC,EAAmBlC,QAAQnD,SAAQ,SAACsB,GAClC,IAAMyD,GAAwBC,EAAAA,EAAAA,IAAeM,EAAcvB,GACvDV,GAAS4B,EAAAA,EAAAA,IAAU3D,EAAGyD,GAC1BQ,EAAsBtF,KAAKoD,EAC7B,IACAD,EAAkBnD,KAAIiC,MAAtBkB,EAAiBvB,EACZd,GAA+BwE,MAEhC3C,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAAMvD,EAAW,IAAIuB,aAAagC,GAC9BJ,EAAM,IAAI5B,aAAa,CACzB,EAAG,EAAG,EAAG,EAAG,EAAG,EAEf,EAAG,EAAG,EAAG,EAAG,EAAG,IAOjB,OAJA9B,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASgB,aAAa,KAAM,IAAI/D,EAAAA,IAAsByG,EAAK,IAE3D1D,EAASwD,uBACFxD,CACT,CAEO,SAASkG,GAA8BC,GAC5CA,EAAQzF,SAAQ,SAACsB,GAAC,OAAMA,EAAEpB,EAAI,CAAC,IAC/B,IAAI6D,GAAe2B,EAAAA,EAAAA,IACjBD,EAAQ,GACRA,EAAQ,GACRA,EAAQ,IAEN1B,EAAa7D,EAAI,IACnB6D,GAAeiB,EAAAA,EAAAA,KAAgB,EAAGjB,IAGpC,IAAMzE,EAAW,IAAI/C,EAAAA,IAEf6G,EAAoB,GAE1B,GADAA,EAAkBnD,KAAIiC,MAAtBkB,EAAiBvB,EAASd,GAA+B0E,MACrD7C,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAOIJ,EAPEnD,EAAW,IAAIuB,aAAagC,GAC9BuC,EAAIF,EAAQ,GACZG,EAAIH,EAAQ,GACZI,EAAIJ,EAAQ,GAEVK,GADEL,EAAQ,IACLM,EAAAA,EAAAA,IAAyBJ,EAAGC,IACjCI,GAAKD,EAAAA,EAAAA,IAAyBJ,EAAGE,GAkBvC,OAfE7C,EADE8C,EAAKE,EACD,IAAI5E,aAAa,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAEf,EAAG,EAAG,EAAG,EAAG,EAAG,IAGX,IAAIA,aAAa,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAEf,EAAG,EAAG,EAAG,EAAG,EAAG,IAGnB9B,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASgB,aAAa,KAAM,IAAI/D,EAAAA,IAAsByG,EAAK,IAC3D1D,EAASwD,uBACFxD,CACT,CACO,SAAS2G,GAAgCC,GAC9C,IAAIC,GAAoBT,EAAAA,EAAAA,IACtBQ,EAAa/C,QAAQ,GACrB+C,EAAa/C,QAAQ,GACrB+C,EAAa/C,QAAQ,IAEnBgD,EAAkBjG,EAAI,IACxBiG,GAAoBnB,EAAAA,EAAAA,KAAgB,EAAGmB,IAEzC,IAAMC,EAAc3B,SAASyB,EAAa9I,QAAU,IAG9CiJ,EAAkB,GAOxB,OANAH,EAAa/C,QAAQnD,SAAQ,SAACsB,GAC5B,IAAMyD,GAAwBC,EAAAA,EAAAA,IAAeoB,EAAaD,GACtD9C,GAAS4B,EAAAA,EAAAA,IAAU3D,EAAGyD,GAE1BsB,EAAgBpG,KAAKoD,EACvB,IACOgD,CACT,CACO,SAASC,GAAuBJ,GACrC,IAAM5G,EAAW,IAAI/C,EAAAA,IAEf6G,EAAoB,GACpBiD,EAAkBJ,GAAgCC,GAGxD,GAFA9C,EAAkBnD,KAAIiC,MAAtBkB,EAAiBvB,EAASd,GAA+BsF,MAErDzD,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAOIJ,EAPEnD,EAAW,IAAIuB,aAAagC,GAC9BuC,EAAIO,EAAa/C,QAAQ,GACzByC,EAAIM,EAAa/C,QAAQ,GACzB0C,EAAIK,EAAa/C,QAAQ,GAEvB2C,GADEI,EAAa/C,QAAQ,IAClB4C,EAAAA,EAAAA,IAAyBJ,EAAGC,IACjCI,GAAKD,EAAAA,EAAAA,IAAyBJ,EAAGE,GAoBvC,OAjBE7C,EADE8C,EAAKE,EACD,IAAI5E,aAAa,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAEf,EAAG,EAAG,EAAG,EAAG,EAAG,IAGX,IAAIA,aAAa,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAEf,EAAG,EAAG,EAAG,EAAG,EAAG,IAInB9B,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASgB,aAAa,KAAM,IAAI/D,EAAAA,IAAsByG,EAAK,IAE3D1D,EAASwD,uBACFxD,CACT,CACO,SAASiH,GAA0BL,EAAc5G,GACtD,IAAM+G,EAAkBJ,GAAgCC,GAExD,OADA5G,EAAWoD,GAAyB2D,EAAiB,GAAI/G,GAClDA,CACT,CAEO,SAASkH,GAAiCC,EAAeC,GAG9D,IAFA,IAAMlE,EAAmB,GACnBxJ,EAASyN,EAAczN,OACpByJ,EAAQ,EAAGA,EAAQzJ,EAAQyJ,IAAS,CAE3C,IAAMkE,GAAalE,EAAQ,GAAKzJ,EAC1BuK,EAAakD,EAAchE,GAC3BgB,EAAagD,EAAcE,GAC7BtD,EAASqD,EAAUjE,GACnBa,EAASoD,EAAUC,GACvBnE,EAAiBvC,KAAIiC,MAArBM,EACK,CACDa,EAAOnM,EAAI,IACXmM,EAAOlM,EAAI,IACXkM,EAAOnD,EAAI,IACXoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfqD,EAAWrM,EAAI,IACfqM,EAAWpM,EAAI,IACfoM,EAAWrD,EAAI,IACfoD,EAAOpM,EAAI,IACXoM,EAAOnM,EAAI,IACXmM,EAAOpD,EAAI,IACXuD,EAAWvM,EAAI,IACfuM,EAAWtM,EAAI,IACfsM,EAAWvD,EAAI,KAGrB,CACA,OAAOsC,CACT,CACO,SAASoE,GAA8BV,EAAc5G,GAC1D,IAAM+G,EAAkBJ,GAAgCC,GAClD1D,EAAmBgE,GACvBN,EAAa/C,QACbkD,GAGF,IAAIzD,EAAAA,EAAAA,IAAOJ,GACT,OAAO,KAET,IAAM3C,EAAW,IAAIuB,aAAaoB,GAClC,GACElD,EAASI,WAAWC,UACpBL,EAASI,WAAWC,SAASQ,MAAMnH,QAAU6G,EAAS7G,OACtD,CACA,IAAIoH,EAAYd,EAASI,WAAWC,SAASQ,MAC7C,IAAK,IAAIjC,KAAK2B,EACZO,EAAUlC,GAAK2B,EAAS3B,EAE5B,MACEoB,EAASuD,UACTvD,EAAW,KACXA,EAAW,IAAI/C,EAAAA,IACf+C,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IAOxE,OALAP,EAASe,aAAa,EAAGR,EAAS7G,OAAS,GAC3CsG,EAASI,WAAWC,SAASC,aAAc,EAC3CN,EAASwD,uBACTxD,EAASM,aAAc,EAEhBN,CACT,CACO,SAASuH,GAA2BX,GACzC,IAAMG,EAAkBJ,GAAgCC,GAClD5G,EAAW,IAAI/C,EAAAA,IAEf6G,EAAoBoD,GACxBN,EAAa/C,QACbkD,GAEF,IAAIzD,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAGT,IAAMvD,EAAW,IAAIuB,aAAagC,GAKlC,OAFA9D,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASwD,uBACFxD,CACT,CAEO,SAASwH,GAA4B5D,GAA6B,IAApBoB,EAAWpD,UAAAlI,OAAA,QAAAmI,IAAAD,UAAA,GAAAA,UAAA,GAAG,KAC3D6F,EAAa,GACb/N,EAASkK,EAAQ8D,QAAQC,aAAajO,OAiD5C,OA/CAkK,EAAQ8D,QAAQC,aAAajH,SAAQ,SAACkH,EAAGzE,GAEvC,IAAInD,EACE6H,EAAWjE,EAAQ8D,QAAQI,aAC7BlE,EAAQ8D,QAAQK,WAChBnE,EAAQ8D,QAAQM,UAAU7E,GAC9B,GAAI0E,GAAY,EACd7H,EAAW,SACN,CACL,IAAMqG,EAAIzC,EAAQ8D,QAAQO,cAAc9E,GAClCmD,EAAI1C,EAAQ8D,QAAQO,eAAe9E,EAAQ,GAAKzJ,GAChDwO,EAAItE,EAAQ8D,QAAQC,cAAcxE,EAAQ,GAAKzJ,GAEjDyO,EAAgB,CAAC9B,EAAGC,EAAG4B,EAAGN,GAC1B5C,IACFmD,GACE5D,EAAAA,EAAAA,IAAkB4D,EAAenD,EAAYN,aAAa,IAAM,GAClEyD,EAAgBA,EAAc7L,KAAI,SAAC0F,GACjC,MAAO,CACLpK,EAAGoK,EAAEpK,EACLC,EAAGmK,EAAEnK,EACL+I,GAAG4D,EAAAA,EAAAA,IACDxC,EACAgD,EAAYP,aACZO,EAAYN,YAAY,IACxB9D,EAEN,KAEFuH,EAAgBA,EAAc7L,KAAI,SAAC0F,GACjC,MAAO,CAAEpK,EAAGoK,EAAEpK,EAAGC,EAAGmK,EAAEnK,EAAG+I,EAAGoB,EAAEpB,EAAI,GACpC,IACAZ,EAAW,IAAI/C,EAAAA,IAEf,IAAM6G,EAAoB,GAG1B,GADAA,EAAkBnD,KAAIiC,MAAtBkB,EAAiBvB,EAASd,GAA+B0G,MACrD7E,EAAAA,EAAAA,IAAOQ,GACT,OAAO,KAET,IAAMvD,EAAW,IAAIuB,aAAagC,GAElC9D,EAASgB,aAAa,WAAY,IAAI/D,EAAAA,IAAsBsD,EAAU,IACtEP,EAASwD,sBACX,CACAiE,EAAW9G,KAAKX,EAClB,IACOyH,CACT,CCnpBA,QACE5H,QAAS,CACPhD,KAAI,WACF,MAAO,CACLuL,eAAe,KAEnB,EACAC,WAAU,WAAG,IAGPrI,EACAsI,EAJO3R,EAAA,KAEXqB,KAAKuQ,iBAAiB,cAGtB,IAAIC,EAAe,GACnBxQ,KAAKyQ,MAAM/H,SAAQ,SAACsE,GAGhBrO,EAAKsJ,OAAOyI,WAAW1D,EAAY5P,KACnCuB,EAAKsJ,OAAOyI,WAAW1D,EAAY5P,IAAI6L,SAASC,QAC9C8D,EAAY9D,UAEdoH,EAAO3R,EAAKsJ,OAAOyI,WAAW1D,EAAY5P,IAC1C4K,EAAWsI,EAAKtI,SAChBA,EAAW4E,GAAyBI,EAAahF,GACjDsI,EAAKtI,SAAWA,EAChBsI,EAAKK,gBAEFhS,EAAKsJ,OAAOyI,WAAW1D,EAAY5P,MAEtC4K,EAAW6E,GAAsBG,GACjCsD,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUrJ,EAAKoG,SAASM,MAC9CiL,EAAKrH,SAASC,QAAU8D,EAAY9D,QACpCoH,EAAKrH,SAASjM,KAAO,aACrBsT,EAAKrH,SAASE,OAAS6D,EAAY5P,GACnCkT,EAAKrH,SAASG,UAAY4D,EAAY5P,GACtCkT,EAAKjH,kBAAmB,EACxBiH,EAAKM,eAAgB,EACrBjS,EAAKsJ,OAAOyI,WAAW1D,EAAY5P,IAAMkT,GAE3CE,EAAe7H,KAAKhK,EAAKsJ,OAAOyI,WAAW1D,EAAY5P,IAAI4K,SAC7D,IAEAhI,KAAKoQ,eAAepQ,KAAK6Q,yBACvB7Q,KAAKoQ,eACLI,EACAxQ,KAAK+E,SAASM,KAGlB,ICpDJ,IACEwC,QAAS,CACPiJ,kBAAiB,SAACC,GAChB,GAAKA,EAAL,CAGA,MAAOA,EAAIC,SAAStP,OAAS,EAC3B1B,KAAK8Q,kBAAkBC,EAAIC,SAAS,IACpCD,EAAIE,OAAOF,EAAIC,SAAS,IAEtBD,EAAI/I,UAAU+I,EAAI/I,SAASuD,UAC3BwF,EAAIzK,SAASyK,EAAIzK,QAAQiF,UAEzBwF,EAAIhM,WAENmM,OAAOC,KAAKJ,EAAIhM,UAAU2D,SAAQ,SAAC0I,GAC5BL,EAAIhM,SAASqM,EAOpB,IACIL,EAAIhM,SAASwG,SAASwF,EAAIhM,SAASwG,UAnBzC,CAqBF,EACA8F,6BAA4B,SAACC,GAAS,IAAA3S,EAAA,KAC9B8R,EAAQzQ,KAAKuR,SAAS9I,QAAO,SAACmD,GAAO,OACzC0F,EAAQE,SAAS5F,EAAQxO,GAAG,IAE9BqT,EAAM/H,SAAQ,SAAC1B,GAAI,OACjBA,EAAKyK,aAAa/I,SAAQ,SAACgJ,GAAE,OAC3BA,EAAGC,OAAOjJ,SAAQ,SAAC/B,GACjB,IAAIiL,EAAUjT,EAAKsJ,OAAO4J,aAAalL,EAAMvJ,GAAK,QAC9C0U,EAAWnT,EAAKsJ,OAAO4J,aAAalL,EAAMvJ,GAAK,UAC/CwU,GAAWE,KACbnT,EAAKoT,mBAAmBH,EAASjT,EAAKqT,OACtCrT,EAAKoT,mBAAmBD,EAAUnT,EAAKqT,OAE3C,GAAE,GACH,GAEL,EACAD,mBAAkB,SAACzB,EAAM0B,GAClB1B,GAAS0B,IAGdA,EAAMf,OAAOX,GACTA,EAAKtI,UAAYsI,EAAKtI,SAASuD,UACjC+E,EAAKtI,SAASuD,UACd+E,EAAKtI,SAAW,MAEdsI,EAAKhK,SAAWgK,EAAKhK,QAAQiF,UAC/B+E,EAAKhK,QAAQiF,UACb+E,EAAKhK,QAAU,MAEbgK,EAAKvL,UAAYuL,EAAKvL,SAASwG,UACjC+E,EAAKvL,SAASwG,UACd+E,EAAKvL,SAAW,MAGhBuL,EAAKrH,SAASE,QACdnJ,KAAKiI,OAAOqI,EAAKrH,SAASjM,MAAMsT,EAAKrH,SAASE,eAEvCnJ,KAAKiI,OAAOqI,EAAKrH,SAASjM,MAAMsT,EAAKrH,SAASE,QAErDnJ,KAAKiI,OAAOqI,EAAKrH,SAASjM,MAAQ,KAEpCsT,EAAO,KACT,EACA2B,sBAAqB,WAAG,IAAAnS,EAAA,KACtBoR,OAAOgB,OAAOlS,KAAKiI,OAAO,eAAeS,SAAQ,SAAC4H,GAC3CxQ,EAAKqS,QAAQX,SAASlB,EAAKrH,SAASmJ,SACvCtS,EAAKiS,mBAAmBzB,EAAMxQ,EAAKkS,MAEvC,GACF,EACAzB,iBAAgB,SAACvT,GAAM,IAAAqV,EAAA,KACrBnB,OAAOgB,OAAOlS,KAAKiI,OAAOjL,IAAO0L,SAAQ,SAAC4H,GACnC+B,EAAKC,WAAWd,SAASlB,EAAKrH,SAASG,YAC1CiJ,EAAKN,mBAAmBzB,EAAM+B,EAAKL,MAEvC,GACF,EACAO,YAAW,SAACvV,GAAM,IAAAwV,EAAA,KAChBtB,OAAOgB,OAAOlS,KAAKiI,OAAOjL,IAAO0L,SAAQ,SAAC4H,GACxCA,EAAKtI,SAASuD,UACd+E,EAAKtI,SAAW,KACZsI,EAAKvL,UAAYuL,EAAKvL,SAASwG,SACjC+E,EAAKvL,SAASwG,UAEhB+E,EAAKvL,SAAW,KAChByN,EAAKR,MAAMf,OAAOX,EACpB,IACAtQ,KAAKiI,OAAOjL,GAAQ,CAAC,EACjBgD,KAAKyS,UACPzS,KAAKyS,SAASC,YAAYnH,SAE9B,IChGJ,IACE1D,QAAS,CACP8K,oBAAmB,SAACC,EAAUrN,GAC5B,IAAMsN,EAAU,IAAI5N,EAAAA,IAClBM,EAAKsG,QAAQ,GAAGjM,EAAI,IACpB2F,EAAKsG,QAAQ,GAAGhM,EAAI,IACpB0F,EAAKsG,QAAQ,GAAGjD,EAAI,KAEhBkK,EAAU,IAAI7N,EAAAA,IAClBM,EAAKsG,QAAQ,GAAGjM,EAAI,IACpB2F,EAAKsG,QAAQ,GAAGhM,EAAI,IACpB0F,EAAKsG,QAAQ,GAAGjD,EAAI,KAGhBmK,EAAWF,EAAQG,QAAQxJ,IAAIsJ,GAASG,eAAe,IACzDC,GAAY,IAAIjO,EAAAA,KAAgBkO,WAAWL,EAASD,GACpDnR,EAASwR,EAAUxR,SAGnB0R,EAAO,IAAInO,EAAAA,IAAc,EAAG,EAAG,GACnC2N,EAASS,WAAWC,mBAClBF,EACAF,EAAUF,QAAQO,aAGpBX,EAASvK,SAASmL,KAAKT,EAASC,SAChC,IAAIS,EAAYb,EAAS3J,SAASyK,eAC9BC,EAAYjS,EAMhB,OALK+R,GAA0B,GAAbA,IAChBb,EAASgB,MAAMhM,IAAI,EAAG+L,EAAW,GACjCf,EAAS3J,SAASyK,eAAiBC,GAErCf,EAASjC,eACFiC,CACT,EACAiB,YAAW,WAAG,IAKRjB,EALQjU,EAAA,KACZqB,KAAKiS,sBAAsB,cACvBjS,KAAK8T,iBACP9T,KAAK8T,kBAGP,IAAM/O,EAAW/E,KAAK+E,SAASQ,KAC/BvF,KAAK+T,MAAMrL,SAAQ,SAACnD,GAKlB,GAJAqN,EAAWjU,EAAKsJ,OAAO+L,WAAWzO,EAAKnI,IACnCwV,IACFA,EAASzK,SAAU,IAEjB,CAAC,WAAY,gBAAgBqJ,SAASjM,EAAK/H,UAE7C,CAAC,cAAcgU,SAAS7S,EAAKsV,eACf,QAAd1O,EAAK/H,UAKL,CAAC,qBAAqBgU,SAAS7S,EAAKsV,eACrB,eAAd1O,EAAK/H,OACHmB,EAAKuV,qBACL3O,EAAK4O,UACH7P,KAAI,SAAC8P,GAAC,OAAKA,EAAEhL,SAAS,IACtBoI,SAAS7S,EAAKuV,oBAAoB9W,KAKzC,GADAwV,EAAWjU,EAAKsJ,OAAO+L,WAAWzO,EAAKnI,IACnCwV,EAEFA,EAASzK,SAAU,EACnBxJ,EAAKgU,oBAAoBC,EAAUrN,OAE9B,CACL,IAAM8O,EAAa1V,EAAK0V,YAAc,GAChCrM,EAAW,IAAI/C,EAAAA,IACnBoP,EACAA,EACA,EACA,QAEsBxK,GAApBlL,EAAK2V,cACPvP,EAASU,QAAU9G,EAAK2V,aAE1B1B,EAAW,IAAI3N,EAAAA,IAAW+C,EAAUjD,EAASiO,SAC7CJ,EAAWjU,EAAKgU,oBAAoBC,EAAUrN,GAC9CqN,EAAS3J,SAASE,OAAS5D,EAAKnI,GAChCwV,EAAS3J,SAASmJ,OAAS7M,EAAKnI,GAChCwV,EAAS3J,SAASjM,KAAO,aACzB4V,EAAS3J,SAASzL,MAAQ+H,EAAK/H,MAE/BoV,EAAShC,eAAgB,EACzBgC,EAAStJ,YAAc,GACvB3K,EAAKsJ,OAAO+L,WAAWzO,EAAKnI,IAAMwV,EAClCjU,EAAKqT,MAAMxI,IAAIoJ,EACjB,CACF,GACF,I,qZChGJ2B,GAAA,kBAAAC,CAAA,MAAAA,EAAA,GAAAC,EAAAvD,OAAAwD,UAAAC,EAAAF,EAAAG,eAAAC,EAAA3D,OAAA2D,gBAAA,SAAA9D,EAAA7S,EAAA4W,GAAA/D,EAAA7S,GAAA4W,EAAApV,KAAA,EAAAqV,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAxE,EAAA7S,EAAAwB,GAAA,OAAAwR,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,EAAA,KAAAqX,EAAA,aAAAxK,GAAAwK,EAAA,SAAAxE,EAAA7S,EAAAwB,GAAA,OAAAqR,EAAA7S,GAAAwB,CAAA,WAAAiW,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,IAAAC,EAAAH,GAAAA,EAAAnB,qBAAAuB,EAAAJ,EAAAI,EAAAC,EAAAhF,OAAAiF,OAAAH,EAAAtB,WAAA0B,EAAA,IAAAC,EAAAN,GAAA,WAAAlB,EAAAqB,EAAA,WAAAxW,MAAA4W,EAAAV,EAAAE,EAAAM,KAAAF,CAAA,UAAAK,EAAAC,EAAAzF,EAAA0F,GAAA,WAAAzZ,KAAA,SAAAyZ,IAAAD,EAAA3X,KAAAkS,EAAA0F,GAAA,OAAA1L,GAAA,OAAA/N,KAAA,QAAAyZ,IAAA1L,EAAA,EAAAyJ,EAAAmB,KAAAA,EAAA,IAAAe,EAAA,YAAAT,IAAA,UAAAU,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAtB,EAAAsB,EAAA5B,GAAA,8BAAA6B,EAAA5F,OAAA6F,eAAAC,EAAAF,GAAAA,EAAAA,EAAA5E,EAAA,MAAA8E,GAAAA,IAAAvC,GAAAE,EAAA9V,KAAAmY,EAAA/B,KAAA4B,EAAAG,GAAA,IAAAC,EAAAL,EAAAlC,UAAAuB,EAAAvB,UAAAxD,OAAAiF,OAAAU,GAAA,SAAAK,EAAAxC,GAAA,0BAAAhM,SAAA,SAAAyO,GAAA5B,EAAAb,EAAAyC,GAAA,SAAAV,GAAA,YAAAW,QAAAD,EAAAV,EAAA,gBAAAY,EAAAnB,EAAAoB,GAAA,SAAAC,EAAAJ,EAAAV,EAAAtW,EAAAC,GAAA,IAAAoX,EAAAjB,EAAAL,EAAAiB,GAAAjB,EAAAO,GAAA,aAAAe,EAAAxa,KAAA,KAAAya,EAAAD,EAAAf,IAAA/W,EAAA+X,EAAA/X,MAAA,OAAAA,GAAA,UAAAgY,GAAAhY,IAAAiV,EAAA9V,KAAAa,EAAA,WAAA4X,EAAAnX,QAAAT,EAAAiY,SAAAC,MAAA,SAAAlY,GAAA6X,EAAA,OAAA7X,EAAAS,EAAAC,EAAA,aAAA2K,GAAAwM,EAAA,QAAAxM,EAAA5K,EAAAC,EAAA,IAAAkX,EAAAnX,QAAAT,GAAAkY,MAAA,SAAAC,GAAAJ,EAAA/X,MAAAmY,EAAA1X,EAAAsX,EAAA,aAAAxM,GAAA,OAAAsM,EAAA,QAAAtM,EAAA9K,EAAAC,EAAA,IAAAA,EAAAoX,EAAAf,IAAA,KAAAqB,EAAAjD,EAAA,gBAAAnV,MAAA,SAAAyX,EAAAV,GAAA,SAAAsB,IAAA,WAAAT,GAAA,SAAAnX,EAAAC,GAAAmX,EAAAJ,EAAAV,EAAAtW,EAAAC,EAAA,WAAA0X,EAAAA,EAAAA,EAAAF,KAAAG,EAAAA,GAAAA,GAAA,aAAAzB,EAAAV,EAAAE,EAAAM,GAAA,IAAA4B,EAAA,iCAAAb,EAAAV,GAAA,iBAAAuB,EAAA,UAAAC,MAAA,iDAAAD,EAAA,cAAAb,EAAA,MAAAV,EAAA,OAAAyB,GAAA,KAAA9B,EAAAe,OAAAA,EAAAf,EAAAK,IAAAA,IAAA,KAAA0B,EAAA/B,EAAA+B,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA/B,GAAA,GAAAgC,EAAA,IAAAA,IAAA1B,EAAA,gBAAA0B,CAAA,cAAAhC,EAAAe,OAAAf,EAAAkC,KAAAlC,EAAAmC,MAAAnC,EAAAK,SAAA,aAAAL,EAAAe,OAAA,uBAAAa,EAAA,MAAAA,EAAA,YAAA5B,EAAAK,IAAAL,EAAAoC,kBAAApC,EAAAK,IAAA,gBAAAL,EAAAe,QAAAf,EAAAqC,OAAA,SAAArC,EAAAK,KAAAuB,EAAA,gBAAAR,EAAAjB,EAAAX,EAAAE,EAAAM,GAAA,cAAAoB,EAAAxa,KAAA,IAAAgb,EAAA5B,EAAAsC,KAAA,6BAAAlB,EAAAf,MAAAC,EAAA,gBAAAhX,MAAA8X,EAAAf,IAAAiC,KAAAtC,EAAAsC,KAAA,WAAAlB,EAAAxa,OAAAgb,EAAA,YAAA5B,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAA,YAAA4B,EAAAF,EAAA/B,GAAA,IAAAuC,EAAAvC,EAAAe,OAAAA,EAAAgB,EAAAjD,SAAAyD,GAAA,QAAA9O,IAAAsN,EAAA,OAAAf,EAAA+B,SAAA,eAAAQ,GAAAR,EAAAjD,SAAA0D,SAAAxC,EAAAe,OAAA,SAAAf,EAAAK,SAAA5M,EAAAwO,EAAAF,EAAA/B,GAAA,UAAAA,EAAAe,SAAA,WAAAwB,IAAAvC,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAF,EAAA,aAAAjC,EAAA,IAAAc,EAAAjB,EAAAY,EAAAgB,EAAAjD,SAAAkB,EAAAK,KAAA,aAAAe,EAAAxa,KAAA,OAAAoZ,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAAL,EAAA+B,SAAA,KAAAzB,EAAA,IAAAoC,EAAAtB,EAAAf,IAAA,OAAAqC,EAAAA,EAAAJ,MAAAtC,EAAA+B,EAAAY,YAAAD,EAAApZ,MAAA0W,EAAA4C,KAAAb,EAAAc,QAAA,WAAA7C,EAAAe,SAAAf,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,GAAAuM,EAAA+B,SAAA,KAAAzB,GAAAoC,GAAA1C,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAzC,EAAA+B,SAAA,KAAAzB,EAAA,UAAAwC,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAA9Q,KAAAyQ,EAAA,UAAAM,EAAAN,GAAA,IAAA5B,EAAA4B,EAAAO,YAAA,GAAAnC,EAAAxa,KAAA,gBAAAwa,EAAAf,IAAA2C,EAAAO,WAAAnC,CAAA,UAAAnB,EAAAN,GAAA,KAAA0D,WAAA,EAAAJ,OAAA,SAAAtD,EAAArN,QAAAwQ,EAAA,WAAAU,OAAA,YAAA1H,EAAA2H,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAA5E,GAAA,GAAA6E,EAAA,OAAAA,EAAAjb,KAAAgb,GAAA,sBAAAA,EAAAb,KAAA,OAAAa,EAAA,IAAAE,MAAAF,EAAAnY,QAAA,KAAA0S,GAAA,EAAA4E,EAAA,SAAAA,IAAA,OAAA5E,EAAAyF,EAAAnY,QAAA,GAAAiT,EAAA9V,KAAAgb,EAAAzF,GAAA,OAAA4E,EAAAtZ,MAAAma,EAAAzF,GAAA4E,EAAAN,MAAA,EAAAM,EAAA,OAAAA,EAAAtZ,WAAAmK,EAAAmP,EAAAN,MAAA,EAAAM,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAd,EAAA,UAAAA,IAAA,OAAAxY,WAAAmK,EAAA6O,MAAA,UAAA/B,EAAAjC,UAAAkC,EAAA/B,EAAAoC,EAAA,eAAAvX,MAAAkX,EAAAnB,cAAA,IAAAZ,EAAA+B,EAAA,eAAAlX,MAAAiX,EAAAlB,cAAA,IAAAkB,EAAAqD,YAAAzE,EAAAqB,EAAAvB,EAAA,qBAAAb,EAAAyF,oBAAA,SAAAC,GAAA,IAAAC,EAAA,mBAAAD,GAAAA,EAAAE,YAAA,QAAAD,IAAAA,IAAAxD,GAAA,uBAAAwD,EAAAH,aAAAG,EAAAlc,MAAA,EAAAuW,EAAA6F,KAAA,SAAAH,GAAA,OAAAhJ,OAAAoJ,eAAApJ,OAAAoJ,eAAAJ,EAAAtD,IAAAsD,EAAAK,UAAA3D,EAAArB,EAAA2E,EAAA7E,EAAA,sBAAA6E,EAAAxF,UAAAxD,OAAAiF,OAAAc,GAAAiD,CAAA,EAAA1F,EAAAgG,MAAA,SAAA/D,GAAA,OAAAkB,QAAAlB,EAAA,EAAAS,EAAAG,EAAA3C,WAAAa,EAAA8B,EAAA3C,UAAAS,GAAA,0BAAAX,EAAA6C,cAAAA,EAAA7C,EAAAiG,MAAA,SAAA7E,EAAAC,EAAAC,EAAAC,EAAAuB,QAAA,IAAAA,IAAAA,EAAApX,SAAA,IAAAwa,EAAA,IAAArD,EAAA1B,EAAAC,EAAAC,EAAAC,EAAAC,GAAAuB,GAAA,OAAA9C,EAAAyF,oBAAApE,GAAA6E,EAAAA,EAAA1B,OAAApB,MAAA,SAAAH,GAAA,OAAAA,EAAAiB,KAAAjB,EAAA/X,MAAAgb,EAAA1B,MAAA,KAAA9B,EAAAD,GAAA1B,EAAA0B,EAAA5B,EAAA,aAAAE,EAAA0B,EAAAhC,GAAA,0BAAAM,EAAA0B,EAAA,qDAAAzC,EAAArD,KAAA,SAAAwJ,GAAA,IAAAC,EAAA1J,OAAAyJ,GAAAxJ,EAAA,WAAAjT,KAAA0c,EAAAzJ,EAAAxI,KAAAzK,GAAA,OAAAiT,EAAA0J,UAAA,SAAA7B,IAAA,KAAA7H,EAAAzP,QAAA,KAAAxD,EAAAiT,EAAA2J,MAAA,GAAA5c,KAAA0c,EAAA,OAAA5B,EAAAtZ,MAAAxB,EAAA8a,EAAAN,MAAA,EAAAM,CAAA,QAAAA,EAAAN,MAAA,EAAAM,CAAA,GAAAxE,EAAAtC,OAAAA,EAAAmE,EAAA3B,UAAA,CAAA0F,YAAA/D,EAAAuD,MAAA,SAAAmB,GAAA,QAAAC,KAAA,OAAAhC,KAAA,OAAAV,KAAA,KAAAC,WAAA1O,EAAA,KAAA6O,MAAA,OAAAP,SAAA,UAAAhB,OAAA,YAAAV,SAAA5M,EAAA,KAAA4P,WAAA/Q,QAAAgR,IAAAqB,EAAA,QAAA9c,KAAA,WAAAA,EAAAgd,OAAA,IAAAtG,EAAA9V,KAAA,KAAAZ,KAAA8b,OAAA9b,EAAAid,MAAA,WAAAjd,QAAA4L,EAAA,EAAAsR,KAAA,gBAAAzC,MAAA,MAAA0C,EAAA,KAAA3B,WAAA,GAAAE,WAAA,aAAAyB,EAAApe,KAAA,MAAAoe,EAAA3E,IAAA,YAAA4E,IAAA,EAAA7C,kBAAA,SAAA8C,GAAA,QAAA5C,KAAA,MAAA4C,EAAA,IAAAlF,EAAA,cAAAmF,EAAAC,EAAAC,GAAA,OAAAjE,EAAAxa,KAAA,QAAAwa,EAAAf,IAAA6E,EAAAlF,EAAA4C,KAAAwC,EAAAC,IAAArF,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,KAAA4R,CAAA,SAAArH,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAAoD,EAAA4B,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAkC,EAAA,UAAAnC,EAAAC,QAAA,KAAA2B,KAAA,KAAAU,EAAA/G,EAAA9V,KAAAua,EAAA,YAAAuC,EAAAhH,EAAA9V,KAAAua,EAAA,iBAAAsC,GAAAC,EAAA,SAAAX,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,WAAA0B,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,SAAAmC,GAAA,QAAAV,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,YAAAqC,EAAA,UAAA1D,MAAA,kDAAA+C,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,KAAAd,OAAA,SAAAzb,EAAAyZ,GAAA,QAAArC,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,QAAA,KAAA2B,MAAArG,EAAA9V,KAAAua,EAAA,oBAAA4B,KAAA5B,EAAAG,WAAA,KAAAqC,EAAAxC,EAAA,OAAAwC,IAAA,UAAA5e,GAAA,aAAAA,IAAA4e,EAAAvC,QAAA5C,GAAAA,GAAAmF,EAAArC,aAAAqC,EAAA,UAAApE,EAAAoE,EAAAA,EAAAjC,WAAA,UAAAnC,EAAAxa,KAAAA,EAAAwa,EAAAf,IAAAA,EAAAmF,GAAA,KAAAzE,OAAA,YAAA6B,KAAA4C,EAAArC,WAAA7C,GAAA,KAAAmF,SAAArE,EAAA,EAAAqE,SAAA,SAAArE,EAAAgC,GAAA,aAAAhC,EAAAxa,KAAA,MAAAwa,EAAAf,IAAA,gBAAAe,EAAAxa,MAAA,aAAAwa,EAAAxa,KAAA,KAAAgc,KAAAxB,EAAAf,IAAA,WAAAe,EAAAxa,MAAA,KAAAqe,KAAA,KAAA5E,IAAAe,EAAAf,IAAA,KAAAU,OAAA,cAAA6B,KAAA,kBAAAxB,EAAAxa,MAAAwc,IAAA,KAAAR,KAAAQ,GAAA9C,CAAA,EAAAoF,OAAA,SAAAvC,GAAA,QAAAnF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAG,aAAAA,EAAA,YAAAsC,SAAAzC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA1C,CAAA,GAAAqF,MAAA,SAAA1C,GAAA,QAAAjF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,SAAAA,EAAA,KAAA7B,EAAA4B,EAAAO,WAAA,aAAAnC,EAAAxa,KAAA,KAAAgf,EAAAxE,EAAAf,IAAAiD,EAAAN,EAAA,QAAA4C,CAAA,YAAA/D,MAAA,0BAAAgE,cAAA,SAAApC,EAAAd,EAAAE,GAAA,YAAAd,SAAA,CAAAjD,SAAAhD,EAAA2H,GAAAd,WAAAA,EAAAE,QAAAA,GAAA,cAAA9B,SAAA,KAAAV,SAAA5M,GAAA6M,CAAA,GAAAlC,CAAA,UAAA0H,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAAne,EAAAuY,GAAA,QAAAqC,EAAAqD,EAAAje,GAAAuY,GAAA/W,EAAAoZ,EAAApZ,KAAA,OAAAuL,GAAA,YAAA7K,EAAA6K,EAAA,CAAA6N,EAAAJ,KAAAvY,EAAAT,GAAAQ,QAAAC,QAAAT,GAAAkY,KAAAwE,EAAAC,EAAA,UAAAC,GAAA9F,GAAA,sBAAAV,EAAA,KAAAyG,EAAA3S,UAAA,WAAA1J,SAAA,SAAAC,EAAAC,GAAA,IAAA+b,EAAA3F,EAAA5L,MAAAkL,EAAAyG,GAAA,SAAAH,EAAA1c,GAAAwc,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,OAAA3c,EAAA,UAAA2c,EAAAtR,GAAAmR,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,QAAAtR,EAAA,CAAAqR,OAAAvS,EAAA,KAEA,QACEhC,QAAS,CACP2U,qBAAoB,WAAG,IAAA7d,EAAA,KACrBuS,OAAOgB,OAAOlS,KAAKyc,YAAY/T,SAAQ,SAACgU,GACtC,IAAMC,EAAOD,EAAUtf,GACvB,IAAKuB,EAAKoG,SAAS4B,MAAMgW,GACvB,GAAKD,EAAUE,gBAER,CACL,IAAMtW,EAAU3H,EAAKkI,OAAOC,KAAK4V,EAAUE,iBAC3Cje,EAAKoG,SAAS4B,MAAMgW,GAAQ,IAAI1X,EAAAA,IAAwB,CACtDX,IAAKgC,EACLlB,KAAMH,EAAAA,IACNO,aAAa,GAEjB,MARE7G,EAAKoG,SAAS4B,MAAMgW,GAAQhe,EAAKoG,SAAS4B,MAAMkW,OAUtD,GACF,EACMC,kBAAiB,WAAG,IAAAhd,EAAA,YAAAwc,GAAA/H,KAAA8F,MAAA,SAAA0C,IAAA,IAAAC,EAAApW,EAAA,OAAA2N,KAAAoB,MAAA,SAAAsH,GAAA,eAAAA,EAAAjC,KAAAiC,EAAAjE,MAAA,OAAAgE,EAAAzI,KAAA8F,MAAA,SAAA2C,IAAA,IAAAtL,EAAAiL,EAAA,OAAApI,KAAAoB,MAAA,SAAAuH,GAAA,eAAAA,EAAAlC,KAAAkC,EAAAlE,MAAA,OAGqB,GADvCtH,EAAK5R,EAAK2R,aAAa7K,GACrB+V,EAAOjL,EAAG7M,KAAKsY,uBAChBrd,EAAKiF,SAAS4B,MAAMgW,GAAO,CAAFO,EAAAlE,KAAA,WACvBtH,EAAG7M,KAAK+X,gBAAiB,CAAFM,EAAAlE,KAAA,QAC1BlZ,EAAKiF,SAAS4B,MAAMgW,GAClB7c,EAAKiF,SAAS4B,MAAM,WAADrF,OAAYxB,EAAKsd,yBAAyBF,EAAAlE,KAAA,sBAAAkE,EAAAlE,KAAA,EAEzD,IAAI9Y,SAAQ,SAACC,GACjBL,EAAK+G,OAAOC,KAAK4K,EAAG7M,KAAK+X,iBAAiB,SAACtW,GACzCxG,EAAKiF,SAAS4B,MAAMgW,GAAQ,IAAI1X,EAAAA,IAAwB,CACtDX,IAAKgC,EACLlB,KAAMH,EAAAA,IACNO,aAAa,IAEfrF,EAAQmG,EACV,GACF,IAAE,wBAAA4W,EAAA/B,OAAA,GAAA6B,EAAA,IAjBCpW,EAAI,EAAC,YAAEA,EAAI9G,EAAK2R,aAAa/P,QAAM,CAAAub,EAAAjE,KAAA,eAAAiE,EAAAhB,cAAAe,IAAA,eAAEpW,IAAGqW,EAAAjE,KAAA,gCAAAiE,EAAA9B,OAAA,GAAA4B,EAAA,IADzBT,EAsB1B,ICxCJ,IACEzU,QAAS,CACPwV,kBAAiB,WAAG,IAAA1e,EAAA,KAGlB,GAFAqB,KAAKuS,YAAY,oBAGd,CACC,eACA,oBACA,WACA,gBACAf,SAASxR,KAAKiU,cANlB,CAUA,IAAIqJ,EAAgB,GAChB,CAAC,WAAY,gBAAgB9L,SAASxR,KAAKiU,eACzCjU,KAAKud,eACPD,EAAgB,CAACtd,KAAKud,eAEpBvd,KAAKwd,mBACPF,EAAgBtd,KAAKwd,iBAAiB/M,QAGxC6M,EAAgBtd,KAAKyQ,MAEvB6M,EAAc5U,SAAQ,SAACsE,GACrB,IAAMyC,EAAaD,GAA4BxC,GAE/CyC,EAAW/G,SAAQ,SAACV,EAAUmD,GAC5B,GAAInD,EAAU,CACZ,IAAMyV,EAAczQ,EAAY0C,QAAQI,aACpC1L,EAAe,GACfA,EAAe+G,EAAQ/G,EAAe1C,QACtCqD,EAAW,IAAIE,EAAAA,IAAwB,CACzCE,MAAOsY,EACPvW,SAAU,MACVC,UAAW,EACXC,aAAa,EACbhC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,KAEL6K,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUjD,GACtCiD,EAASuD,UACT5M,EAAKqT,MAAMxI,IAAI8G,GACf3R,EAAKsJ,OAAOyV,iBAAiB1Q,EAAY5P,GAAK,IAAM+N,GAASmF,CAC/D,CACF,IACAtD,EAAYZ,MAAM1D,SAAQ,SAACqE,GACzB,IAAM0C,EAAaD,GACjBzC,EACAC,GAEFyC,EAAW/G,SAAQ,SAACV,EAAUmD,GAC5B,GAAInD,EAAU,CACZ,IAAMyV,EAAc1Q,EAAgB2C,QAAQI,aACxC1L,EAAe,GACfA,EAAe+G,EAAQ/G,EAAe1C,QACtCqD,EAAW,IAAIE,EAAAA,IAAwB,CACzCE,MAAOsY,EACPvW,SAAU,MACVC,UAAW,EACXC,aAAa,EACbhC,KAAMH,EAAAA,IACNO,aAAa,EACbC,QAAS,KAEL6K,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUjD,GACtCiD,EAASuD,UACTvD,EAAW,KACXjD,EAASwG,UACTxG,EAAW,KACXpG,EAAKqT,MAAMxI,IAAI8G,GACf3R,EAAKsJ,OAAOyV,iBACV3Q,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,IAAM+N,GAChDmF,CACN,CACF,GACF,GACF,GAlEA,CAmEF,IClFJ,IACEzI,QAAS,CACP8V,mBAAkB,WAAG,IAAAhf,EAAA,KACnBqB,KAAKuS,YAAY,sBACjB,IAAMqL,EAAsB5d,KAAKuR,SAAS9I,QAAO,SAACuB,GAAC,MACjD,CAAC,cAAe,kBAAkBwH,SAASxH,EAAExM,MAAM,IAErDogB,EAAoBlV,SAAQ,SAACqF,GAC3B,IAAIhJ,EACJ,GAAIgJ,EAAmBlJ,KAAKgZ,0BAC1B9Y,EAAWpG,EAAKoG,SAAS0C,gCACpB,KAAI9I,EAAKmf,uBAGd,OAFA/Y,EAAWpG,EAAKoG,SAASyC,WAG3B,CACA,IAAMQ,EAAW8F,GAA6BC,GAC9C,GAAI/F,EAAU,CACZ,IAAMsI,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUjD,GACtCuL,EAAKjH,kBAAmB,EACxBiH,EAAKrH,SAASC,QAAU6E,EAAmB7E,QAC3CoH,EAAKrH,SAASjM,KAAO,qBACrBsT,EAAKrH,SAASzL,MAAQuQ,EAAmBvQ,MACzC8S,EAAKrH,SAASE,OAAS4E,EAAmB3Q,GAC1CkT,EAAKrH,SAASG,UAAY2E,EAAmB3Q,GAC7CuB,EAAKqT,MAAMxI,IAAI8G,GACf3R,EAAKsJ,OAAO8V,mBAAmBhQ,EAAmB3Q,IAAMkT,CAC1D,CACF,GACF,IC1BJ,IACEzI,QAAS,CACPhD,KAAI,WACF,MAAO,CACLmZ,mBAAoB,KACpBC,uBAAwB,KAE5B,EACAC,wBAAuB,WAAgC,IAA/BnZ,EAAQ6E,UAAAlI,OAAA,QAAAmI,IAAAD,UAAA,GAAAA,UAAA,GAAG5J,KAAK+E,SAASiC,KAC/ChH,KAAKme,uBACDne,KAAKge,oBACPhe,KAAKoe,mBAAmBrZ,EAAU/E,KAAKge,mBAE3C,EACAK,gBAAe,WAAG,IAAA1f,EAAA,KAChBqB,KAAKuS,YAAY,kBACjB,IAAI+L,EAAqB,GACrBC,EAAyB,GAC7Bve,KAAKyQ,MAAM/H,SAAQ,SAACsE,GAClBA,EAAYZ,MACT3D,QAAO,SAAC+V,GAAI,MAAmB,YAAdA,EAAKhhB,KAAmB,IACzCkL,SAAQ,SAACqE,GACR,IAAM/E,EAAW8E,GACfC,EACAC,GAGIyR,EAAe7Q,GACnBb,EACAC,GAEF,GAAIhF,GAAYyW,EAAc,CAC5B,IAAMnO,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUrJ,EAAKoG,SAASwC,QAE9CuK,EAAW,IAAI7M,EAAAA,IAAWwZ,EAAc9f,EAAKoG,SAASM,MAG5DiL,EAAKrH,SAASC,QAAU6D,EAAgB7D,QACxCoH,EAAKrH,SAASjM,KAAO,iBACrBsT,EAAKrH,SAASE,OACZ4D,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,OAC9CkT,EAAKrH,SAASG,UAAY2D,EAAgB3P,GAC1C0U,EAAS7I,SAASC,QAAU6D,EAAgB7D,QAC5C4I,EAAS7I,SAASjM,KAAO,iBACzB8U,EAAS7I,SAASE,OAChB4D,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,QAC9C0U,EAAS7I,SAASG,UAAY2D,EAAgB3P,GAE9CuB,EAAKsJ,OAAOyW,eACV3R,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,QAC1CkT,EACJ3R,EAAKsJ,OAAOyW,eACV3R,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,SAC1C0U,EACJnT,EAAKqT,MAAMxI,IAAI8G,EACjB,CACAgO,EAAmB3V,KACjBhK,EAAKsJ,OAAOyW,eACV3R,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,QAC5C4K,UAEJuW,EAAuB5V,KACrBhK,EAAKsJ,OAAOyW,eACV3R,EAAgB3P,GAAK,IAAM4P,EAAY5P,GAAK,SAC5C4K,SAEN,GACJ,IAGAhI,KAAKge,mBAAqBhe,KAAK6Q,yBAC7B7Q,KAAKge,mBACLM,EACAte,KAAK+E,SAASiC,MAEhBhH,KAAKie,uBAAyBje,KAAK6Q,yBACjC7Q,KAAKie,uBACLM,EACAve,KAAK+E,SAASM,MAEhBrF,KAAKke,wBAAwBle,KAAK+E,SAASiC,KAC7C,I,irDChFJ,QACEnC,KAAI,WACF,MAAO,CACL8Z,oBAAqB,KACrBC,iBAAiB,EAErB,EACA9Z,QAAO,WACL9E,KAAK6e,qBAAuB,CAAC,CAC/B,EACAhX,QAAS,CACPiX,WAAU,WACR9e,KAAK4e,iBAAkB,EACnB5e,KAAK6e,sBACP3N,OAAOgB,OAAOlS,KAAK6e,sBAAsBnW,SAAQ,SAAC4H,GAChDA,EAAKnI,SAAU,CACjB,IAEEnI,KAAK2e,sBACP3e,KAAK2e,oBAAoBxW,SAAU,EAEvC,EACA4W,WAAU,WACR/e,KAAK4e,iBAAkB,EACnB5e,KAAK6e,sBACP3N,OAAOgB,OAAOlS,KAAK6e,sBAAsBnW,SAAQ,SAAC4H,GAChDA,EAAKnI,SAAU,CACjB,IAEEnI,KAAK2e,sBACP3e,KAAK2e,oBAAoBxW,SAAU,EAEvC,EACA6W,aAAY,WAAG,IAAArgB,EAAA,KACbqB,KAAKuQ,iBAAiB,gBAEtBW,OAAOgB,OAAOlS,KAAKiI,OAAO4J,cAAcnJ,SAAQ,SAAC4H,IAE5C3R,EAAKsgB,iCACNtgB,EAAK4S,SAASzS,MACZ,SAAC0f,GAAI,OACHA,EAAKphB,IAAMkT,EAAKrH,SAASG,WACX,0BAAdoV,EAAKhhB,KAAiC,KAG1CmB,EAAKoT,mBAAmBzB,EAAM3R,EAAKqT,OAGrC,IAAIrL,EAAQhI,EAAK4S,SAASzS,MACxB,SAAC0f,GAAI,OAAKlO,EAAKrH,SAASG,WAAaoV,EAAKphB,EAAE,IAEzCuJ,IAASA,EAAMa,YAAY3C,KAAKgZ,2BACnClf,EAAKoT,mBAAmBzB,EAAM3R,EAAKqT,MAEvC,IAEA,IAAIkN,EAAsB,GACtBC,EAAqB,CAAC,EACtBxN,EAAS3R,KAAK2R,OACd3R,KAAKif,kCACPtN,EAAS3R,KAAKuR,SAAS9I,QAAO,SAACmD,GAC7B,MAAO,CAAC,QAAS,0BAA0B4F,SAAS5F,EAAQpO,MAC9D,KAEFmU,EAAOjJ,SAAQ,SAACkG,GAKd,GAAKA,EAAazG,UAGdyG,EAAapH,YAAY3C,KAAKgZ,0BAAlC,CAIA,IAAI9Y,EACAqa,EACJ,GAA0B,0BAAtBxQ,EAAapR,MACf4hB,EAAa,uBACbra,EAAWpG,EAAKoG,SAAS4B,MAAMyY,GAC/Bra,EAASU,QAAU9G,EAAK0gB,iBACnB,CACL,IAAMC,EACJ1Q,EAAapH,YAAY+X,OAAO3K,eAC9B,8BACGhG,EAAapH,YAAY+X,OAAOC,0BACjC5Q,EAAapH,YAAY+X,OAAOC,0BAChC,EAENJ,EAAa,WAAaE,EAC1Bva,EAAWpG,EAAKoG,SAAS4B,MAAMyY,GAE3BxQ,EAAapH,YAAY3C,KAEzBlG,EAAKoG,SAAS4B,MACZiI,EAAapH,YAAY3C,KAAKsY,0BAGhCiC,EAAaxQ,EAAapH,YAAY3C,KAAKsY,uBAC3CpY,EAAWpG,EAAKoG,SAAS4B,MAAMyY,IAExBxQ,EAAapH,YAAY+X,QAC9B5gB,EAAKoG,SAAS4B,MAAMiI,EAAapH,YAAY+X,OAAOniB,MACtDgiB,EAAaxQ,EAAapH,YAAY+X,OAAOniB,GAC7C2H,EAAWpG,EAAKoG,SAAS4B,MAAMyY,IAGnCra,EAASS,aAAc,EACvBT,EAASU,QAAU9G,EAAK0gB,YAC1B,CAGA,GAAI1gB,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,QAAS,CACtD,IAAMqiB,EAAU9gB,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,QAC3D,GAAIwR,EAAa1F,QAAUuW,EAAQxW,SAASC,QAAS,CACnD,IAAIwW,EAAczQ,GAChBL,EACA6Q,EAAQzX,UAEVyX,EAAQzX,SAAW0X,CACrB,CAEKP,EAAmBC,KACtBD,EAAmBC,GAAc,IAEnCD,EAAmBC,GAAYzW,KAAK8W,EAAQzX,UAC5CyX,EAAQ1a,SAAWA,CACrB,CACA,GAAIpG,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,SAAU,CACvD,IAAMuiB,EAAWhhB,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,SAC5D,GAAIwR,EAAa1F,QAAUyW,EAAS1W,SAASC,QAAS,CACpD,IAAI0W,EAAetQ,GACjBV,EACA+Q,EAAS3X,UAEX2X,EAAS3X,SAAW4X,CACtB,CAC0B,0BAAtBhR,EAAapR,OACf0hB,EAAoBvW,KAAKgX,EAAS3X,SAEtC,CAGA,IAAKrJ,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,QAAS,CAEvD,IAAM4K,EAAWgH,GAAuBJ,GAKxC,GAJKuQ,EAAmBC,KACtBD,EAAmBC,GAAc,IAEnCD,EAAmBC,GAAYzW,KAAKX,GAChCA,EAAU,CACZ,IAAMsI,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUrJ,EAAKoG,SAASwC,QACpD+I,EAAKrH,SAASC,QAAU0F,EAAa1F,QACrCoH,EAAKrH,SAASjM,KAAO,eACrBsT,EAAKrH,SAASE,OAASyF,EAAaxR,GAAK,OACzCkT,EAAKrH,SAASG,UAAYwF,EAAaxR,GAEvCkT,EAAKjH,kBAAmB,EACxB1K,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,QAAUkT,CACvD,CACF,CACA,IAAK3R,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,SAAU,CAExD,IAAMqhB,EAAelP,GAA2BX,GAIhD,GAH0B,0BAAtBA,EAAapR,OACf0hB,EAAoBvW,KAAK8V,GAEvBA,EAAc,CAChB,IAAM3M,EAAW,IAAI7M,EAAAA,IACnBwZ,EACA9f,EAAKoG,SAASG,WAEhB4M,EAAS7I,SAASC,QAAU0F,EAAa1F,QACzC4I,EAAS7I,SAASjM,KAAO,eACzB8U,EAAS7I,SAASE,OAASyF,EAAaxR,GAAK,QAC7C0U,EAAS7I,SAASG,UAAYwF,EAAaxR,GAC3C0U,EAASzI,kBAAmB,EAC5B1K,EAAKsJ,OAAO4J,aAAajD,EAAaxR,GAAK,SAAW0U,CACxD,CACF,CA1GA,CA2GF,IAGA,IAK0C+N,EALpCC,EAAc5O,OAAOC,KAAKgO,GAC1BY,EAAsB7O,OAAOC,KAAKnR,KAAK6e,sBAAsBpW,QACjE,SAACvK,GAAG,OAAM4hB,EAAYtO,SAAStT,EAAI,IAErC8hB,EAAAC,GACuBF,GAAmB,IAA1C,IAAAC,EAAAE,MAAAL,EAAAG,EAAAG,KAAAzH,MAA4C,KAAnC0G,EAAUS,EAAAngB,MACjBM,KAAK+R,mBACH/R,KAAK6e,qBAAqBO,GAC1Bpf,KAAKgS,cAEAhS,KAAK6e,qBAAqBO,EACnC,CAAC,OAAArU,GAAAiV,EAAAI,EAAArV,EAAA,SAAAiV,EAAAK,GAAA,CACDrgB,KAAK2e,oBAAsB3e,KAAK6Q,yBAC9B7Q,KAAK2e,oBACLO,EACAlf,KAAK+E,SAASG,UACd,aAEF,IAAK,IAALob,EAAA,EAAAC,EAA8BrP,OAAOsP,QAAQrB,GAAmBmB,EAAAC,EAAA7e,OAAA4e,IAAE,CAA7D,IAAAG,EAAAC,GAAAH,EAAAD,GAAA,GAAKpiB,EAAGuiB,EAAA,GAAEhR,EAAUgR,EAAA,GACvBzgB,KAAK6e,qBAAqB3gB,GAAO8B,KAAK6Q,yBACpC7Q,KAAK6e,qBAAqB3gB,GAC1BuR,EACAzP,KAAK+E,SAAS4B,MAAMzI,GACpB,YAAcA,GAEhB8B,KAAK6e,qBAAqB3gB,GAAKoL,YAAc,EAC/C,CACItJ,KAAK4e,gBACP5e,KAAK+e,aAEL/e,KAAK8e,YAET,I,UCnNJ,IACEja,KAAI,WACF,MAAO,CACL8b,eAAgB,KAEpB,EACA9Y,QAAS,CACP+Y,mBAAkB,SAAC5Y,EAAUgF,GAC3B,IAAM6T,EAAc7T,EAAYnB,QAC5BiV,EAAqB9T,EAAYZ,MAClC3D,QAAO,SAACsY,GAAC,MAAgB,YAAXA,EAAEvjB,KAAmB,IACnC8G,KAAI,SAACyc,GAEJ,IAAMxT,GACJhB,EAAAA,EAAAA,IAAkBwU,EAAElV,QAASmB,EAAYnB,SAAS,IAAM,GACpDA,EAAU0B,EAAkBjJ,KAAI,SAAC0F,GACrC,MAAO,CACLpK,EAAGoK,EAAEpK,EACLC,EAAGmK,EAAEnK,EACL+I,GAAG4D,EAAAA,EAAAA,IACDxC,EACAgD,EAAYP,aACZO,EAAYN,YAAY,IACxB9D,EAEN,IACA,OAAOiD,CACT,IASF,OAPAiV,EAAqBA,EAAmBrY,QAAO,SAACoD,GAAO,QAAOA,CAAO,IACrE7D,EAAWoD,GACTyV,EACAC,EACA9Y,GAGKA,CACT,EACAgZ,mBAAkB,SAAChU,GACjB,IAAM6T,EAAc7T,EAAYnB,QAC5BiV,EAAqB9T,EAAYZ,MAClC3D,QAAO,SAACsY,GAAC,MAAgB,YAAXA,EAAEvjB,KAAmB,IACnC8G,KAAI,SAACyc,GAEJ,IAAMxT,GACJhB,EAAAA,EAAAA,IAAkBwU,EAAElV,QAASmB,EAAYnB,SAAS,IAAM,GACpDA,EAAU0B,EAAkBjJ,KAAI,SAAC0F,GACrC,MAAO,CACLpK,EAAGoK,EAAEpK,EACLC,EAAGmK,EAAEnK,EACL+I,GAAG4D,EAAAA,EAAAA,IACDxC,EACAgD,EAAYP,aACZO,EAAYN,YAAY,IACxB9D,EAEN,IACA,OAAOiD,CACT,IAEFiV,EAAqBA,EAAmBrY,QAAO,SAACoD,GAAO,QAAOA,CAAO,IACrE,IAAI7D,EAAWyD,GAAsBoV,EAAaC,GAElD,OAAO9Y,CACT,EAEAiZ,oBAAmB,WACjB,IAAMlc,EAAW/E,KAAK+E,SAASiC,KAC/BhH,KAAKme,uBACDne,KAAK2gB,iBACP3gB,KAAKoe,mBAAmBrZ,EAAU/E,KAAK2gB,gBACvC3gB,KAAKkhB,SAET,EACAC,YAAW,WAAG,IAAAxiB,EAAA,KACZqB,KAAKuQ,iBAAiB,cACtB,IAAI6Q,EAAiB,GACrBphB,KAAKyQ,MAAM/H,SAAQ,SAACsE,GAClB,IAAIsD,EACAtI,EAEFrJ,EAAKsJ,OAAOoZ,WAAWrU,EAAY5P,KACnCuB,EAAKsJ,OAAOoZ,WAAWrU,EAAY5P,IAAI6L,SAASC,QAC9C8D,EAAY9D,UAGdoH,EAAO3R,EAAKsJ,OAAOoZ,WAAWrU,EAAY5P,IAC1CkT,EAAKrH,SAASC,QAAU8D,EAAY9D,QACpClB,EAAWsI,EAAKtI,SAChBA,EAAWrJ,EAAKiiB,mBAAmB5Y,EAAUgF,GAE7CsD,EAAKtI,SAAWA,EAChBsI,EAAKK,gBAGFhS,EAAKsJ,OAAOoZ,WAAWrU,EAAY5P,MAEtC4K,EAAWrJ,EAAKqiB,mBAAmBhU,GAC/BhF,IAEFsI,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUrJ,EAAKoG,SAASwC,QAC9C+I,EAAKrH,SAASC,QAAU8D,EAAY9D,QACpCoH,EAAKrH,SAASjM,KAAO,aACrBsT,EAAKrH,SAASE,OAAS6D,EAAY5P,GACnCkT,EAAKrH,SAASG,UAAY4D,EAAY5P,GACtCuB,EAAKsJ,OAAOoZ,WAAWrU,EAAY5P,IAAMkT,EACzC3R,EAAKqT,MAAMxI,IAAI8G,KAGnB8Q,EAAezY,KAAKhK,EAAKsJ,OAAOoZ,WAAWrU,EAAY5P,IAAI4K,SAC7D,IAEAhI,KAAK2gB,eAAiB3gB,KAAK6Q,yBACzB7Q,KAAK2gB,eACLS,EACAphB,KAAK+E,SAASiC,MAEhBhH,KAAK2gB,eAAe1X,SAASjM,KAAO,iBACpCgD,KAAKoe,mBAAmBpe,KAAK+E,SAASiC,KAAMhH,KAAK2gB,eACnD,EACAW,gBAAe,WAAG,IAEZtZ,EAFYlI,EAAA,KAChBE,KAAKuQ,iBAAiB,kBAEtBvQ,KAAKyQ,MAAM/H,SAAQ,SAACsE,GAClB,IAAIsD,EAAOxQ,EAAKmI,OAAOsZ,eAAevU,EAAY5P,IAClD,GAAIkT,EACEA,EAAKrH,SAASC,QAAU8D,EAAY9D,UACtClB,EAAWoD,GACT4B,EAAYN,YACZ,GACA4D,EAAKtI,UAEPsI,EAAKtI,SAAWA,EAChBsI,EAAKrH,SAASC,QAAU8D,EAAY9D,SAEtCoH,EAAKnI,QAAU6E,EAAYwU,WAAard,OAGxC,GADA6D,EAAWyD,GAAsBuB,EAAYN,aACzC1E,EAAU,CACZ,IAAMjD,EAAWjF,EAAKiF,SAAS2C,WAC/B4I,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUjD,GAChCuL,EAAKrH,SAASG,UAAY4D,EAAY5P,GACtCkT,EAAKrH,SAASC,QAAU8D,EAAY9D,QACpCoH,EAAKrH,SAASjM,KAAO,iBACrBsT,EAAKrH,SAASE,OAAS6D,EAAY5P,GAEnCkT,EAAKnI,QAAU6E,EAAYwU,WAAard,EACxCrE,EAAKkS,MAAMxI,IAAI8G,GACfxQ,EAAKmI,OAAOsZ,eAAevU,EAAY5P,IAAMkT,CAC/C,CAEJ,GACF,I,2YCnKJiE,GAAA,kBAAAC,CAAA,MAAAA,EAAA,GAAAC,EAAAvD,OAAAwD,UAAAC,EAAAF,EAAAG,eAAAC,EAAA3D,OAAA2D,gBAAA,SAAA9D,EAAA7S,EAAA4W,GAAA/D,EAAA7S,GAAA4W,EAAApV,KAAA,EAAAqV,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAxE,EAAA7S,EAAAwB,GAAA,OAAAwR,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,EAAA,KAAAqX,EAAA,aAAAxK,GAAAwK,EAAA,SAAAxE,EAAA7S,EAAAwB,GAAA,OAAAqR,EAAA7S,GAAAwB,CAAA,WAAAiW,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,IAAAC,EAAAH,GAAAA,EAAAnB,qBAAAuB,EAAAJ,EAAAI,EAAAC,EAAAhF,OAAAiF,OAAAH,EAAAtB,WAAA0B,EAAA,IAAAC,EAAAN,GAAA,WAAAlB,EAAAqB,EAAA,WAAAxW,MAAA4W,EAAAV,EAAAE,EAAAM,KAAAF,CAAA,UAAAK,EAAAC,EAAAzF,EAAA0F,GAAA,WAAAzZ,KAAA,SAAAyZ,IAAAD,EAAA3X,KAAAkS,EAAA0F,GAAA,OAAA1L,GAAA,OAAA/N,KAAA,QAAAyZ,IAAA1L,EAAA,EAAAyJ,EAAAmB,KAAAA,EAAA,IAAAe,EAAA,YAAAT,IAAA,UAAAU,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAtB,EAAAsB,EAAA5B,GAAA,8BAAA6B,EAAA5F,OAAA6F,eAAAC,EAAAF,GAAAA,EAAAA,EAAA5E,EAAA,MAAA8E,GAAAA,IAAAvC,GAAAE,EAAA9V,KAAAmY,EAAA/B,KAAA4B,EAAAG,GAAA,IAAAC,EAAAL,EAAAlC,UAAAuB,EAAAvB,UAAAxD,OAAAiF,OAAAU,GAAA,SAAAK,EAAAxC,GAAA,0BAAAhM,SAAA,SAAAyO,GAAA5B,EAAAb,EAAAyC,GAAA,SAAAV,GAAA,YAAAW,QAAAD,EAAAV,EAAA,gBAAAY,EAAAnB,EAAAoB,GAAA,SAAAC,EAAAJ,EAAAV,EAAAtW,EAAAC,GAAA,IAAAoX,EAAAjB,EAAAL,EAAAiB,GAAAjB,EAAAO,GAAA,aAAAe,EAAAxa,KAAA,KAAAya,EAAAD,EAAAf,IAAA/W,EAAA+X,EAAA/X,MAAA,OAAAA,GAAA,UAAAgY,GAAAhY,IAAAiV,EAAA9V,KAAAa,EAAA,WAAA4X,EAAAnX,QAAAT,EAAAiY,SAAAC,MAAA,SAAAlY,GAAA6X,EAAA,OAAA7X,EAAAS,EAAAC,EAAA,aAAA2K,GAAAwM,EAAA,QAAAxM,EAAA5K,EAAAC,EAAA,IAAAkX,EAAAnX,QAAAT,GAAAkY,MAAA,SAAAC,GAAAJ,EAAA/X,MAAAmY,EAAA1X,EAAAsX,EAAA,aAAAxM,GAAA,OAAAsM,EAAA,QAAAtM,EAAA9K,EAAAC,EAAA,IAAAA,EAAAoX,EAAAf,IAAA,KAAAqB,EAAAjD,EAAA,gBAAAnV,MAAA,SAAAyX,EAAAV,GAAA,SAAAsB,IAAA,WAAAT,GAAA,SAAAnX,EAAAC,GAAAmX,EAAAJ,EAAAV,EAAAtW,EAAAC,EAAA,WAAA0X,EAAAA,EAAAA,EAAAF,KAAAG,EAAAA,GAAAA,GAAA,aAAAzB,EAAAV,EAAAE,EAAAM,GAAA,IAAA4B,EAAA,iCAAAb,EAAAV,GAAA,iBAAAuB,EAAA,UAAAC,MAAA,iDAAAD,EAAA,cAAAb,EAAA,MAAAV,EAAA,OAAAyB,GAAA,KAAA9B,EAAAe,OAAAA,EAAAf,EAAAK,IAAAA,IAAA,KAAA0B,EAAA/B,EAAA+B,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA/B,GAAA,GAAAgC,EAAA,IAAAA,IAAA1B,EAAA,gBAAA0B,CAAA,cAAAhC,EAAAe,OAAAf,EAAAkC,KAAAlC,EAAAmC,MAAAnC,EAAAK,SAAA,aAAAL,EAAAe,OAAA,uBAAAa,EAAA,MAAAA,EAAA,YAAA5B,EAAAK,IAAAL,EAAAoC,kBAAApC,EAAAK,IAAA,gBAAAL,EAAAe,QAAAf,EAAAqC,OAAA,SAAArC,EAAAK,KAAAuB,EAAA,gBAAAR,EAAAjB,EAAAX,EAAAE,EAAAM,GAAA,cAAAoB,EAAAxa,KAAA,IAAAgb,EAAA5B,EAAAsC,KAAA,6BAAAlB,EAAAf,MAAAC,EAAA,gBAAAhX,MAAA8X,EAAAf,IAAAiC,KAAAtC,EAAAsC,KAAA,WAAAlB,EAAAxa,OAAAgb,EAAA,YAAA5B,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAA,YAAA4B,EAAAF,EAAA/B,GAAA,IAAAuC,EAAAvC,EAAAe,OAAAA,EAAAgB,EAAAjD,SAAAyD,GAAA,QAAA9O,IAAAsN,EAAA,OAAAf,EAAA+B,SAAA,eAAAQ,GAAAR,EAAAjD,SAAA0D,SAAAxC,EAAAe,OAAA,SAAAf,EAAAK,SAAA5M,EAAAwO,EAAAF,EAAA/B,GAAA,UAAAA,EAAAe,SAAA,WAAAwB,IAAAvC,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAF,EAAA,aAAAjC,EAAA,IAAAc,EAAAjB,EAAAY,EAAAgB,EAAAjD,SAAAkB,EAAAK,KAAA,aAAAe,EAAAxa,KAAA,OAAAoZ,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAAL,EAAA+B,SAAA,KAAAzB,EAAA,IAAAoC,EAAAtB,EAAAf,IAAA,OAAAqC,EAAAA,EAAAJ,MAAAtC,EAAA+B,EAAAY,YAAAD,EAAApZ,MAAA0W,EAAA4C,KAAAb,EAAAc,QAAA,WAAA7C,EAAAe,SAAAf,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,GAAAuM,EAAA+B,SAAA,KAAAzB,GAAAoC,GAAA1C,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAzC,EAAA+B,SAAA,KAAAzB,EAAA,UAAAwC,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAA9Q,KAAAyQ,EAAA,UAAAM,EAAAN,GAAA,IAAA5B,EAAA4B,EAAAO,YAAA,GAAAnC,EAAAxa,KAAA,gBAAAwa,EAAAf,IAAA2C,EAAAO,WAAAnC,CAAA,UAAAnB,EAAAN,GAAA,KAAA0D,WAAA,EAAAJ,OAAA,SAAAtD,EAAArN,QAAAwQ,EAAA,WAAAU,OAAA,YAAA1H,EAAA2H,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAA5E,GAAA,GAAA6E,EAAA,OAAAA,EAAAjb,KAAAgb,GAAA,sBAAAA,EAAAb,KAAA,OAAAa,EAAA,IAAAE,MAAAF,EAAAnY,QAAA,KAAA0S,GAAA,EAAA4E,EAAA,SAAAA,IAAA,OAAA5E,EAAAyF,EAAAnY,QAAA,GAAAiT,EAAA9V,KAAAgb,EAAAzF,GAAA,OAAA4E,EAAAtZ,MAAAma,EAAAzF,GAAA4E,EAAAN,MAAA,EAAAM,EAAA,OAAAA,EAAAtZ,WAAAmK,EAAAmP,EAAAN,MAAA,EAAAM,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAd,EAAA,UAAAA,IAAA,OAAAxY,WAAAmK,EAAA6O,MAAA,UAAA/B,EAAAjC,UAAAkC,EAAA/B,EAAAoC,EAAA,eAAAvX,MAAAkX,EAAAnB,cAAA,IAAAZ,EAAA+B,EAAA,eAAAlX,MAAAiX,EAAAlB,cAAA,IAAAkB,EAAAqD,YAAAzE,EAAAqB,EAAAvB,EAAA,qBAAAb,EAAAyF,oBAAA,SAAAC,GAAA,IAAAC,EAAA,mBAAAD,GAAAA,EAAAE,YAAA,QAAAD,IAAAA,IAAAxD,GAAA,uBAAAwD,EAAAH,aAAAG,EAAAlc,MAAA,EAAAuW,EAAA6F,KAAA,SAAAH,GAAA,OAAAhJ,OAAAoJ,eAAApJ,OAAAoJ,eAAAJ,EAAAtD,IAAAsD,EAAAK,UAAA3D,EAAArB,EAAA2E,EAAA7E,EAAA,sBAAA6E,EAAAxF,UAAAxD,OAAAiF,OAAAc,GAAAiD,CAAA,EAAA1F,EAAAgG,MAAA,SAAA/D,GAAA,OAAAkB,QAAAlB,EAAA,EAAAS,EAAAG,EAAA3C,WAAAa,EAAA8B,EAAA3C,UAAAS,GAAA,0BAAAX,EAAA6C,cAAAA,EAAA7C,EAAAiG,MAAA,SAAA7E,EAAAC,EAAAC,EAAAC,EAAAuB,QAAA,IAAAA,IAAAA,EAAApX,SAAA,IAAAwa,EAAA,IAAArD,EAAA1B,EAAAC,EAAAC,EAAAC,EAAAC,GAAAuB,GAAA,OAAA9C,EAAAyF,oBAAApE,GAAA6E,EAAAA,EAAA1B,OAAApB,MAAA,SAAAH,GAAA,OAAAA,EAAAiB,KAAAjB,EAAA/X,MAAAgb,EAAA1B,MAAA,KAAA9B,EAAAD,GAAA1B,EAAA0B,EAAA5B,EAAA,aAAAE,EAAA0B,EAAAhC,GAAA,0BAAAM,EAAA0B,EAAA,qDAAAzC,EAAArD,KAAA,SAAAwJ,GAAA,IAAAC,EAAA1J,OAAAyJ,GAAAxJ,EAAA,WAAAjT,KAAA0c,EAAAzJ,EAAAxI,KAAAzK,GAAA,OAAAiT,EAAA0J,UAAA,SAAA7B,IAAA,KAAA7H,EAAAzP,QAAA,KAAAxD,EAAAiT,EAAA2J,MAAA,GAAA5c,KAAA0c,EAAA,OAAA5B,EAAAtZ,MAAAxB,EAAA8a,EAAAN,MAAA,EAAAM,CAAA,QAAAA,EAAAN,MAAA,EAAAM,CAAA,GAAAxE,EAAAtC,OAAAA,EAAAmE,EAAA3B,UAAA,CAAA0F,YAAA/D,EAAAuD,MAAA,SAAAmB,GAAA,QAAAC,KAAA,OAAAhC,KAAA,OAAAV,KAAA,KAAAC,WAAA1O,EAAA,KAAA6O,MAAA,OAAAP,SAAA,UAAAhB,OAAA,YAAAV,SAAA5M,EAAA,KAAA4P,WAAA/Q,QAAAgR,IAAAqB,EAAA,QAAA9c,KAAA,WAAAA,EAAAgd,OAAA,IAAAtG,EAAA9V,KAAA,KAAAZ,KAAA8b,OAAA9b,EAAAid,MAAA,WAAAjd,QAAA4L,EAAA,EAAAsR,KAAA,gBAAAzC,MAAA,MAAA0C,EAAA,KAAA3B,WAAA,GAAAE,WAAA,aAAAyB,EAAApe,KAAA,MAAAoe,EAAA3E,IAAA,YAAA4E,IAAA,EAAA7C,kBAAA,SAAA8C,GAAA,QAAA5C,KAAA,MAAA4C,EAAA,IAAAlF,EAAA,cAAAmF,EAAAC,EAAAC,GAAA,OAAAjE,EAAAxa,KAAA,QAAAwa,EAAAf,IAAA6E,EAAAlF,EAAA4C,KAAAwC,EAAAC,IAAArF,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,KAAA4R,CAAA,SAAArH,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAAoD,EAAA4B,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAkC,EAAA,UAAAnC,EAAAC,QAAA,KAAA2B,KAAA,KAAAU,EAAA/G,EAAA9V,KAAAua,EAAA,YAAAuC,EAAAhH,EAAA9V,KAAAua,EAAA,iBAAAsC,GAAAC,EAAA,SAAAX,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,WAAA0B,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,SAAAmC,GAAA,QAAAV,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,YAAAqC,EAAA,UAAA1D,MAAA,kDAAA+C,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,KAAAd,OAAA,SAAAzb,EAAAyZ,GAAA,QAAArC,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,QAAA,KAAA2B,MAAArG,EAAA9V,KAAAua,EAAA,oBAAA4B,KAAA5B,EAAAG,WAAA,KAAAqC,EAAAxC,EAAA,OAAAwC,IAAA,UAAA5e,GAAA,aAAAA,IAAA4e,EAAAvC,QAAA5C,GAAAA,GAAAmF,EAAArC,aAAAqC,EAAA,UAAApE,EAAAoE,EAAAA,EAAAjC,WAAA,UAAAnC,EAAAxa,KAAAA,EAAAwa,EAAAf,IAAAA,EAAAmF,GAAA,KAAAzE,OAAA,YAAA6B,KAAA4C,EAAArC,WAAA7C,GAAA,KAAAmF,SAAArE,EAAA,EAAAqE,SAAA,SAAArE,EAAAgC,GAAA,aAAAhC,EAAAxa,KAAA,MAAAwa,EAAAf,IAAA,gBAAAe,EAAAxa,MAAA,aAAAwa,EAAAxa,KAAA,KAAAgc,KAAAxB,EAAAf,IAAA,WAAAe,EAAAxa,MAAA,KAAAqe,KAAA,KAAA5E,IAAAe,EAAAf,IAAA,KAAAU,OAAA,cAAA6B,KAAA,kBAAAxB,EAAAxa,MAAAwc,IAAA,KAAAR,KAAAQ,GAAA9C,CAAA,EAAAoF,OAAA,SAAAvC,GAAA,QAAAnF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAG,aAAAA,EAAA,YAAAsC,SAAAzC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA1C,CAAA,GAAAqF,MAAA,SAAA1C,GAAA,QAAAjF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,SAAAA,EAAA,KAAA7B,EAAA4B,EAAAO,WAAA,aAAAnC,EAAAxa,KAAA,KAAAgf,EAAAxE,EAAAf,IAAAiD,EAAAN,EAAA,QAAA4C,CAAA,YAAA/D,MAAA,0BAAAgE,cAAA,SAAApC,EAAAd,EAAAE,GAAA,YAAAd,SAAA,CAAAjD,SAAAhD,EAAA2H,GAAAd,WAAAA,EAAAE,QAAAA,GAAA,cAAA9B,SAAA,KAAAV,SAAA5M,GAAA6M,CAAA,GAAAlC,CAAA,UAAA0H,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAAne,EAAAuY,GAAA,QAAAqC,EAAAqD,EAAAje,GAAAuY,GAAA/W,EAAAoZ,EAAApZ,KAAA,OAAAuL,GAAA,YAAA7K,EAAA6K,EAAA,CAAA6N,EAAAJ,KAAAvY,EAAAT,GAAAQ,QAAAC,QAAAT,GAAAkY,KAAAwE,EAAAC,EAAA,UAAAC,GAAA9F,GAAA,sBAAAV,EAAA,KAAAyG,EAAA3S,UAAA,WAAA1J,SAAA,SAAAC,EAAAC,GAAA,IAAA+b,EAAA3F,EAAA5L,MAAAkL,EAAAyG,GAAA,SAAAH,EAAA1c,GAAAwc,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,OAAA3c,EAAA,UAAA2c,EAAAtR,GAAAmR,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,QAAAtR,EAAA,CAAAqR,OAAAvS,EAAA,cAAA4X,GAAA7G,EAAA8G,GAAA,IAAAvQ,EAAAD,OAAAC,KAAAyJ,GAAA,GAAA1J,OAAAyQ,sBAAA,KAAAC,EAAA1Q,OAAAyQ,sBAAA/G,GAAA8G,IAAAE,EAAAA,EAAAnZ,QAAA,SAAAoZ,GAAA,OAAA3Q,OAAA4Q,yBAAAlH,EAAAiH,GAAArM,UAAA,KAAArE,EAAAxI,KAAAiC,MAAAuG,EAAAyQ,EAAA,QAAAzQ,CAAA,UAAAjF,GAAA6V,GAAA,QAAA3N,EAAA,EAAAA,EAAAxK,UAAAlI,OAAA0S,IAAA,KAAA4N,EAAA,MAAApY,UAAAwK,GAAAxK,UAAAwK,GAAA,GAAAA,EAAA,EAAAqN,GAAAvQ,OAAA8Q,IAAA,GAAAtZ,SAAA,SAAAxK,GAAA+jB,GAAAF,EAAA7jB,EAAA8jB,EAAA9jB,GAAA,IAAAgT,OAAAgR,0BAAAhR,OAAAiR,iBAAAJ,EAAA7Q,OAAAgR,0BAAAF,IAAAP,GAAAvQ,OAAA8Q,IAAAtZ,SAAA,SAAAxK,GAAAgT,OAAA2D,eAAAkN,EAAA7jB,EAAAgT,OAAA4Q,yBAAAE,EAAA9jB,GAAA,WAAA6jB,CAAA,UAAAE,GAAAlR,EAAA7S,EAAAwB,GAAA,OAAAxB,EAAAkkB,GAAAlkB,GAAAA,KAAA6S,EAAAG,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,GAAAwB,EAAAqR,CAAA,UAAAqR,GAAA3L,GAAA,IAAAvY,EAAAmkB,GAAA5L,EAAA,2BAAAiB,GAAAxZ,GAAAA,EAAAokB,OAAApkB,EAAA,UAAAmkB,GAAAE,EAAAC,GAAA,cAAA9K,GAAA6K,IAAA,OAAAA,EAAA,OAAAA,EAAA,IAAAE,EAAAF,EAAAvN,OAAA0N,aAAA,QAAA7Y,IAAA4Y,EAAA,KAAAE,EAAAF,EAAA5jB,KAAA0jB,EAAAC,GAAA,yBAAA9K,GAAAiL,GAAA,OAAAA,EAAA,UAAA9J,UAAA,kEAAA2J,EAAAF,OAAAM,QAAAL,EAAA,CAeA,QACE1d,KAAI,WACF,MAAO,CACLge,oBAAqB,KACrBC,qBAAsB,KAE1B,EACAhe,QAAO,WACL9E,KAAK+iB,6BAA+B,IAAI9d,EAAAA,IACtC,EACA,EACA,IACA,IAEJ,EACA+d,SAAQ9W,GAAA,IACH+W,EAAAA,EAAAA,IAAW,CACZC,aAAc,qBAGlBrb,QAAS,CACPsb,+BAA8B,WAC5B,IAAKnjB,KAAKkjB,eAAiBljB,KAAK8iB,qBAG9B,OAFA9iB,KAAK+R,mBAAmB/R,KAAKiI,OAAOmb,eAAgBpjB,KAAKgS,YACzDhS,KAAKiI,OAAOmb,eAAiB,MAG/B,IAAIjV,EAAUnO,KAAKkjB,aAAa/U,QAAQ7J,KAAI,SAAC0F,GAC3C,OAAAkC,GAAAA,GAAA,GAAYlC,GAAC,IAAEpB,EAAG,KACpB,IACA,GAAI5I,KAAKiI,OAAOmb,gBAAkBpjB,KAAKiI,OAAOmb,eAAepb,SAAU,CACrE,IAAIA,EAAWhI,KAAKiI,OAAOmb,eAAepb,SAC1CA,EAAWoD,GAAyB+C,EAAS,GAAInG,GAEjDhI,KAAKiI,OAAOmb,eAAepb,SAAWA,CACxC,KAAO,CACL,IAAIqb,EAAgBnV,GAA8BC,GAC9CmV,EAAgBtjB,KAAK8iB,qBAEzB9iB,KAAKiI,OAAOmb,eAAiB,IAAIne,EAAAA,IAC/Boe,EACAC,GAEFtjB,KAAKgS,MAAMxI,IAAIxJ,KAAKiI,OAAOmb,eAC7B,CACApjB,KAAKiI,OAAOmb,eAAe/a,SAASO,EAAI,IACpC5I,KAAK8iB,sBACP9iB,KAAKoe,mBACH,CAACpe,KAAK8iB,sBACN9iB,KAAKiI,OAAOmb,gBAGhBpjB,KAAKiI,OAAOmb,eAAejb,SAAU,CACvC,EACMob,mBAAkB,WAAG,IAAA5kB,EAAA,YAAA2d,GAAA/H,KAAA8F,MAAA,SAAA0C,IAAA,OAAAxI,KAAAoB,MAAA,SAAAuH,GAAA,eAAAA,EAAAlC,KAAAkC,EAAAlE,MAAA,OAIxB,OAHGra,EAAKmkB,uBACPnkB,EAAKmkB,qBAAqBvX,UAC1B5M,EAAKmkB,qBAAuB,MAC7B5F,EAAAlE,KAAA,EACKra,EAAK6kB,4BAA2B,wBAAAtG,EAAA/B,OAAA,GAAA4B,EAAA,IALbT,EAM3B,EACMmH,wBAAuB,WAAG,IAAA3jB,EAAA,YAAAwc,GAAA/H,KAAA8F,MAAA,SAAAqJ,IAAA,OAAAnP,KAAAoB,MAAA,SAAAsH,GAAA,eAAAA,EAAAjC,KAAAiC,EAAAjE,MAAA,UACzBlZ,EAAKojB,cAAiBpjB,EAAKojB,aAAa3jB,IAAG,CAAA0d,EAAAjE,KAAA,QAId,OAH5BlZ,EAAKgjB,sBACPhjB,EAAKgjB,qBAAqBvX,UAE5BzL,EAAKgjB,qBAAuB,KAAI7F,EAAAxE,OAAA,SACzB,MAAI,UAIV3Y,EAAKgjB,sBACNhjB,EAAKojB,aAAa3jB,KAAOO,EAAKgjB,qBAAqB7Z,SAAS1J,IAAG,CAAA0d,EAAAjE,KAAA,gBAAAiE,EAAAjE,KAAA,EAE7BlZ,EAAK6jB,0BAAyB,OAAhE7jB,EAAKgjB,qBAAoB7F,EAAA3E,KAAA2E,EAAAjE,KAAG,GAAH,cAEzBlZ,EAAK8jB,gCAA+B,eAAA3G,EAAAxE,OAAA,SAE/B3Y,EAAKgjB,sBAAoB,yBAAA7F,EAAA9B,OAAA,GAAAuI,EAAA,IAjBFpH,EAkBhC,EACAuH,mBAAkB,WACZ7jB,KAAK8iB,sBAAwB9iB,KAAK8iB,qBAAqBvX,SACzDvL,KAAK8iB,qBAAqBvX,UAC5BvL,KAAK8iB,qBAAuB,KAC5B9iB,KAAK+E,SAASiC,KAAOhH,KAAK+E,SAASiC,KAAKyB,QACtC,SAAC1D,GAAQ,MAA+B,wBAA1BA,EAASkE,SAASjM,IAA8B,GAElE,EACM2mB,wBAAuB,WAAG,IAAAtR,EAAA,YAAAiK,GAAA/H,KAAA8F,MAAA,SAAAyJ,IAAA,OAAAvP,KAAAoB,MAAA,SAAAoO,GAAA,eAAAA,EAAA/I,KAAA+I,EAAA/K,MAAA,cAAA+K,EAAAtL,OAAA,SACvB,IAAIvY,SAAQ,SAACC,GAClBkS,EAAKxL,OAAOC,KAAKuL,EAAK6Q,aAAa3jB,KAAK,SAAC+G,GACvC+L,EAAKwQ,oBAAsBvc,EAC3B+L,EAAKuR,gCACL,IAAII,EAAiC,IAAIC,GAAAA,EAAkB,CACzDC,OAAQ7R,EAAK0Q,6BACbzc,QAAS+L,EAAKwQ,oBACdrd,aAAa,EACbJ,KAAMH,EAAAA,IACNkf,YAAY,IAEdH,EAA+B/a,SAAW,CAAC,EAC3C+a,EAA+B/a,SAASjM,KAAO,uBAC/CgnB,EAA+BI,SAAW,GAC1CJ,EAA+B/a,SAAS1J,IAAM8S,EAAK6Q,aAAa3jB,IAChEY,EAAQ6jB,EACV,GACF,KAAE,wBAAAD,EAAA5I,OAAA,GAAA2I,EAAA,IAlB4BxH,EAmBhC,EACAsH,8BAA6B,WAC3B,GAAK5jB,KAAKkjB,cAAiBljB,KAAKkjB,aAAa3jB,IAA7C,CACA,IAAIuG,GAAS2I,EAAAA,EAAAA,IACXzO,KAAKkjB,aAAa/U,QAAQ,GAC1BnO,KAAKkjB,aAAa/U,QAAQ,IAExBtI,GAAQ4I,EAAAA,EAAAA,IACVzO,KAAKkjB,aAAa/U,QAAQ,GAC1BnO,KAAKkjB,aAAa/U,QAAQ,IAE5BnO,KAAK+iB,6BAA6BsB,OAASxe,EAAQC,EACnD,IAAIwe,EACFxe,GACC,EAAInF,KAAK4jB,IAAKvkB,KAAK+iB,6BAA6ByB,IAAM7jB,KAAKK,GAAM,MAGhEyjB,EAAuC,CACzC7kB,EAAG,EACHC,EAAG,EACH+I,EAAG0b,EAAqB,KAGtBI,GAAehX,EAAAA,EAAAA,IACjB,IACAC,EAAAA,EAAAA,IAAU3N,KAAKkjB,aAAa/U,QAAQ,GAAInO,KAAKkjB,aAAa/U,QAAQ,KAEpEsW,EAAqC7kB,EAAI8kB,EAAa9kB,EAAI,IAC1D6kB,EAAqC5kB,EAAI6kB,EAAa7kB,EAAI,IAE1DG,KAAK+iB,6BAA6B1a,SAAST,IACzC6c,EAAqC7kB,EACrC6kB,EAAqC5kB,EACrCykB,EAAqB,KAEvBtkB,KAAK+iB,6BAA6B4B,OAChCF,EAAqC7kB,EACrC6kB,EAAqC5kB,EACrC,GAEF,IAAI+kB,GAASC,EAAAA,EAAAA,KACXC,EAAAA,EAAAA,IACE9kB,KAAKkjB,aAAa/U,QAAQ,GAC1BnO,KAAKkjB,aAAa/U,QAAQ,KAG9BnO,KAAK+iB,6BAA6BgC,SAASnd,IACzC,EACA,EACCgd,EAASjkB,KAAKK,GAAM,KAEvBhB,KAAK+iB,6BAA6BiC,IAA2B,IAArBV,EACxCtkB,KAAK+iB,6BAA6BkC,KAA4B,GAArBX,EACzCtkB,KAAK+iB,6BAA6BmC,wBAnDsB,CAoD1D,I,UC/KJ,IACErd,QAAS,CACPuW,mBAAkB,SAAC+G,EAAW7U,GAE5B,GADAA,GAAO8U,EAAAA,GAAAA,IAAM9U,GACTA,GAAQ6U,GAAaA,EAAUzjB,OAAS,EAAG,CAC7C,IAAIsG,EAAWsI,EAAKtI,SACpBA,EAASqd,cACT,IAAK,IAAIze,EAAI,EAAGA,EAAIue,EAAUzjB,OAAQkF,IACpCoB,EAASsd,SAAS,EAAGC,IAAU3e,GAEjCoB,EAASM,aAAc,EACvBgI,EAAKvL,SAAWogB,EAChB,IAAK,IAAIK,EAAI,EAAGA,EAAIL,EAAUzjB,OAAQ8jB,IAChCL,EAAUK,GAAGC,SACfN,EAAUK,GAAGC,QAAQnV,GAEvB6U,EAAUK,GAAGld,aAAc,EAE7BgI,EAAKhI,aAAc,CACrB,CACF,I,2YCrBJiM,GAAA,kBAAAC,CAAA,MAAAA,EAAA,GAAAC,EAAAvD,OAAAwD,UAAAC,EAAAF,EAAAG,eAAAC,EAAA3D,OAAA2D,gBAAA,SAAA9D,EAAA7S,EAAA4W,GAAA/D,EAAA7S,GAAA4W,EAAApV,KAAA,EAAAqV,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAxE,EAAA7S,EAAAwB,GAAA,OAAAwR,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,EAAA,KAAAqX,EAAA,aAAAxK,GAAAwK,EAAA,SAAAxE,EAAA7S,EAAAwB,GAAA,OAAAqR,EAAA7S,GAAAwB,CAAA,WAAAiW,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,IAAAC,EAAAH,GAAAA,EAAAnB,qBAAAuB,EAAAJ,EAAAI,EAAAC,EAAAhF,OAAAiF,OAAAH,EAAAtB,WAAA0B,EAAA,IAAAC,EAAAN,GAAA,WAAAlB,EAAAqB,EAAA,WAAAxW,MAAA4W,EAAAV,EAAAE,EAAAM,KAAAF,CAAA,UAAAK,EAAAC,EAAAzF,EAAA0F,GAAA,WAAAzZ,KAAA,SAAAyZ,IAAAD,EAAA3X,KAAAkS,EAAA0F,GAAA,OAAA1L,GAAA,OAAA/N,KAAA,QAAAyZ,IAAA1L,EAAA,EAAAyJ,EAAAmB,KAAAA,EAAA,IAAAe,EAAA,YAAAT,IAAA,UAAAU,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAtB,EAAAsB,EAAA5B,GAAA,8BAAA6B,EAAA5F,OAAA6F,eAAAC,EAAAF,GAAAA,EAAAA,EAAA5E,EAAA,MAAA8E,GAAAA,IAAAvC,GAAAE,EAAA9V,KAAAmY,EAAA/B,KAAA4B,EAAAG,GAAA,IAAAC,EAAAL,EAAAlC,UAAAuB,EAAAvB,UAAAxD,OAAAiF,OAAAU,GAAA,SAAAK,EAAAxC,GAAA,0BAAAhM,SAAA,SAAAyO,GAAA5B,EAAAb,EAAAyC,GAAA,SAAAV,GAAA,YAAAW,QAAAD,EAAAV,EAAA,gBAAAY,EAAAnB,EAAAoB,GAAA,SAAAC,EAAAJ,EAAAV,EAAAtW,EAAAC,GAAA,IAAAoX,EAAAjB,EAAAL,EAAAiB,GAAAjB,EAAAO,GAAA,aAAAe,EAAAxa,KAAA,KAAAya,EAAAD,EAAAf,IAAA/W,EAAA+X,EAAA/X,MAAA,OAAAA,GAAA,UAAAgY,GAAAhY,IAAAiV,EAAA9V,KAAAa,EAAA,WAAA4X,EAAAnX,QAAAT,EAAAiY,SAAAC,MAAA,SAAAlY,GAAA6X,EAAA,OAAA7X,EAAAS,EAAAC,EAAA,aAAA2K,GAAAwM,EAAA,QAAAxM,EAAA5K,EAAAC,EAAA,IAAAkX,EAAAnX,QAAAT,GAAAkY,MAAA,SAAAC,GAAAJ,EAAA/X,MAAAmY,EAAA1X,EAAAsX,EAAA,aAAAxM,GAAA,OAAAsM,EAAA,QAAAtM,EAAA9K,EAAAC,EAAA,IAAAA,EAAAoX,EAAAf,IAAA,KAAAqB,EAAAjD,EAAA,gBAAAnV,MAAA,SAAAyX,EAAAV,GAAA,SAAAsB,IAAA,WAAAT,GAAA,SAAAnX,EAAAC,GAAAmX,EAAAJ,EAAAV,EAAAtW,EAAAC,EAAA,WAAA0X,EAAAA,EAAAA,EAAAF,KAAAG,EAAAA,GAAAA,GAAA,aAAAzB,EAAAV,EAAAE,EAAAM,GAAA,IAAA4B,EAAA,iCAAAb,EAAAV,GAAA,iBAAAuB,EAAA,UAAAC,MAAA,iDAAAD,EAAA,cAAAb,EAAA,MAAAV,EAAA,OAAAyB,GAAA,KAAA9B,EAAAe,OAAAA,EAAAf,EAAAK,IAAAA,IAAA,KAAA0B,EAAA/B,EAAA+B,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA/B,GAAA,GAAAgC,EAAA,IAAAA,IAAA1B,EAAA,gBAAA0B,CAAA,cAAAhC,EAAAe,OAAAf,EAAAkC,KAAAlC,EAAAmC,MAAAnC,EAAAK,SAAA,aAAAL,EAAAe,OAAA,uBAAAa,EAAA,MAAAA,EAAA,YAAA5B,EAAAK,IAAAL,EAAAoC,kBAAApC,EAAAK,IAAA,gBAAAL,EAAAe,QAAAf,EAAAqC,OAAA,SAAArC,EAAAK,KAAAuB,EAAA,gBAAAR,EAAAjB,EAAAX,EAAAE,EAAAM,GAAA,cAAAoB,EAAAxa,KAAA,IAAAgb,EAAA5B,EAAAsC,KAAA,6BAAAlB,EAAAf,MAAAC,EAAA,gBAAAhX,MAAA8X,EAAAf,IAAAiC,KAAAtC,EAAAsC,KAAA,WAAAlB,EAAAxa,OAAAgb,EAAA,YAAA5B,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAA,YAAA4B,EAAAF,EAAA/B,GAAA,IAAAuC,EAAAvC,EAAAe,OAAAA,EAAAgB,EAAAjD,SAAAyD,GAAA,QAAA9O,IAAAsN,EAAA,OAAAf,EAAA+B,SAAA,eAAAQ,GAAAR,EAAAjD,SAAA0D,SAAAxC,EAAAe,OAAA,SAAAf,EAAAK,SAAA5M,EAAAwO,EAAAF,EAAA/B,GAAA,UAAAA,EAAAe,SAAA,WAAAwB,IAAAvC,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAF,EAAA,aAAAjC,EAAA,IAAAc,EAAAjB,EAAAY,EAAAgB,EAAAjD,SAAAkB,EAAAK,KAAA,aAAAe,EAAAxa,KAAA,OAAAoZ,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAAL,EAAA+B,SAAA,KAAAzB,EAAA,IAAAoC,EAAAtB,EAAAf,IAAA,OAAAqC,EAAAA,EAAAJ,MAAAtC,EAAA+B,EAAAY,YAAAD,EAAApZ,MAAA0W,EAAA4C,KAAAb,EAAAc,QAAA,WAAA7C,EAAAe,SAAAf,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,GAAAuM,EAAA+B,SAAA,KAAAzB,GAAAoC,GAAA1C,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAzC,EAAA+B,SAAA,KAAAzB,EAAA,UAAAwC,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAA9Q,KAAAyQ,EAAA,UAAAM,EAAAN,GAAA,IAAA5B,EAAA4B,EAAAO,YAAA,GAAAnC,EAAAxa,KAAA,gBAAAwa,EAAAf,IAAA2C,EAAAO,WAAAnC,CAAA,UAAAnB,EAAAN,GAAA,KAAA0D,WAAA,EAAAJ,OAAA,SAAAtD,EAAArN,QAAAwQ,EAAA,WAAAU,OAAA,YAAA1H,EAAA2H,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAA5E,GAAA,GAAA6E,EAAA,OAAAA,EAAAjb,KAAAgb,GAAA,sBAAAA,EAAAb,KAAA,OAAAa,EAAA,IAAAE,MAAAF,EAAAnY,QAAA,KAAA0S,GAAA,EAAA4E,EAAA,SAAAA,IAAA,OAAA5E,EAAAyF,EAAAnY,QAAA,GAAAiT,EAAA9V,KAAAgb,EAAAzF,GAAA,OAAA4E,EAAAtZ,MAAAma,EAAAzF,GAAA4E,EAAAN,MAAA,EAAAM,EAAA,OAAAA,EAAAtZ,WAAAmK,EAAAmP,EAAAN,MAAA,EAAAM,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAd,EAAA,UAAAA,IAAA,OAAAxY,WAAAmK,EAAA6O,MAAA,UAAA/B,EAAAjC,UAAAkC,EAAA/B,EAAAoC,EAAA,eAAAvX,MAAAkX,EAAAnB,cAAA,IAAAZ,EAAA+B,EAAA,eAAAlX,MAAAiX,EAAAlB,cAAA,IAAAkB,EAAAqD,YAAAzE,EAAAqB,EAAAvB,EAAA,qBAAAb,EAAAyF,oBAAA,SAAAC,GAAA,IAAAC,EAAA,mBAAAD,GAAAA,EAAAE,YAAA,QAAAD,IAAAA,IAAAxD,GAAA,uBAAAwD,EAAAH,aAAAG,EAAAlc,MAAA,EAAAuW,EAAA6F,KAAA,SAAAH,GAAA,OAAAhJ,OAAAoJ,eAAApJ,OAAAoJ,eAAAJ,EAAAtD,IAAAsD,EAAAK,UAAA3D,EAAArB,EAAA2E,EAAA7E,EAAA,sBAAA6E,EAAAxF,UAAAxD,OAAAiF,OAAAc,GAAAiD,CAAA,EAAA1F,EAAAgG,MAAA,SAAA/D,GAAA,OAAAkB,QAAAlB,EAAA,EAAAS,EAAAG,EAAA3C,WAAAa,EAAA8B,EAAA3C,UAAAS,GAAA,0BAAAX,EAAA6C,cAAAA,EAAA7C,EAAAiG,MAAA,SAAA7E,EAAAC,EAAAC,EAAAC,EAAAuB,QAAA,IAAAA,IAAAA,EAAApX,SAAA,IAAAwa,EAAA,IAAArD,EAAA1B,EAAAC,EAAAC,EAAAC,EAAAC,GAAAuB,GAAA,OAAA9C,EAAAyF,oBAAApE,GAAA6E,EAAAA,EAAA1B,OAAApB,MAAA,SAAAH,GAAA,OAAAA,EAAAiB,KAAAjB,EAAA/X,MAAAgb,EAAA1B,MAAA,KAAA9B,EAAAD,GAAA1B,EAAA0B,EAAA5B,EAAA,aAAAE,EAAA0B,EAAAhC,GAAA,0BAAAM,EAAA0B,EAAA,qDAAAzC,EAAArD,KAAA,SAAAwJ,GAAA,IAAAC,EAAA1J,OAAAyJ,GAAAxJ,EAAA,WAAAjT,KAAA0c,EAAAzJ,EAAAxI,KAAAzK,GAAA,OAAAiT,EAAA0J,UAAA,SAAA7B,IAAA,KAAA7H,EAAAzP,QAAA,KAAAxD,EAAAiT,EAAA2J,MAAA,GAAA5c,KAAA0c,EAAA,OAAA5B,EAAAtZ,MAAAxB,EAAA8a,EAAAN,MAAA,EAAAM,CAAA,QAAAA,EAAAN,MAAA,EAAAM,CAAA,GAAAxE,EAAAtC,OAAAA,EAAAmE,EAAA3B,UAAA,CAAA0F,YAAA/D,EAAAuD,MAAA,SAAAmB,GAAA,QAAAC,KAAA,OAAAhC,KAAA,OAAAV,KAAA,KAAAC,WAAA1O,EAAA,KAAA6O,MAAA,OAAAP,SAAA,UAAAhB,OAAA,YAAAV,SAAA5M,EAAA,KAAA4P,WAAA/Q,QAAAgR,IAAAqB,EAAA,QAAA9c,KAAA,WAAAA,EAAAgd,OAAA,IAAAtG,EAAA9V,KAAA,KAAAZ,KAAA8b,OAAA9b,EAAAid,MAAA,WAAAjd,QAAA4L,EAAA,EAAAsR,KAAA,gBAAAzC,MAAA,MAAA0C,EAAA,KAAA3B,WAAA,GAAAE,WAAA,aAAAyB,EAAApe,KAAA,MAAAoe,EAAA3E,IAAA,YAAA4E,IAAA,EAAA7C,kBAAA,SAAA8C,GAAA,QAAA5C,KAAA,MAAA4C,EAAA,IAAAlF,EAAA,cAAAmF,EAAAC,EAAAC,GAAA,OAAAjE,EAAAxa,KAAA,QAAAwa,EAAAf,IAAA6E,EAAAlF,EAAA4C,KAAAwC,EAAAC,IAAArF,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,KAAA4R,CAAA,SAAArH,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAAoD,EAAA4B,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAkC,EAAA,UAAAnC,EAAAC,QAAA,KAAA2B,KAAA,KAAAU,EAAA/G,EAAA9V,KAAAua,EAAA,YAAAuC,EAAAhH,EAAA9V,KAAAua,EAAA,iBAAAsC,GAAAC,EAAA,SAAAX,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,WAAA0B,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,SAAAmC,GAAA,QAAAV,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,YAAAqC,EAAA,UAAA1D,MAAA,kDAAA+C,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,KAAAd,OAAA,SAAAzb,EAAAyZ,GAAA,QAAArC,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,QAAA,KAAA2B,MAAArG,EAAA9V,KAAAua,EAAA,oBAAA4B,KAAA5B,EAAAG,WAAA,KAAAqC,EAAAxC,EAAA,OAAAwC,IAAA,UAAA5e,GAAA,aAAAA,IAAA4e,EAAAvC,QAAA5C,GAAAA,GAAAmF,EAAArC,aAAAqC,EAAA,UAAApE,EAAAoE,EAAAA,EAAAjC,WAAA,UAAAnC,EAAAxa,KAAAA,EAAAwa,EAAAf,IAAAA,EAAAmF,GAAA,KAAAzE,OAAA,YAAA6B,KAAA4C,EAAArC,WAAA7C,GAAA,KAAAmF,SAAArE,EAAA,EAAAqE,SAAA,SAAArE,EAAAgC,GAAA,aAAAhC,EAAAxa,KAAA,MAAAwa,EAAAf,IAAA,gBAAAe,EAAAxa,MAAA,aAAAwa,EAAAxa,KAAA,KAAAgc,KAAAxB,EAAAf,IAAA,WAAAe,EAAAxa,MAAA,KAAAqe,KAAA,KAAA5E,IAAAe,EAAAf,IAAA,KAAAU,OAAA,cAAA6B,KAAA,kBAAAxB,EAAAxa,MAAAwc,IAAA,KAAAR,KAAAQ,GAAA9C,CAAA,EAAAoF,OAAA,SAAAvC,GAAA,QAAAnF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAG,aAAAA,EAAA,YAAAsC,SAAAzC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA1C,CAAA,GAAAqF,MAAA,SAAA1C,GAAA,QAAAjF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,SAAAA,EAAA,KAAA7B,EAAA4B,EAAAO,WAAA,aAAAnC,EAAAxa,KAAA,KAAAgf,EAAAxE,EAAAf,IAAAiD,EAAAN,EAAA,QAAA4C,CAAA,YAAA/D,MAAA,0BAAAgE,cAAA,SAAApC,EAAAd,EAAAE,GAAA,YAAAd,SAAA,CAAAjD,SAAAhD,EAAA2H,GAAAd,WAAAA,EAAAE,QAAAA,GAAA,cAAA9B,SAAA,KAAAV,SAAA5M,GAAA6M,CAAA,GAAAlC,CAAA,UAAAjK,GAAAmb,GAAA,OAAAC,GAAAD,IAAAE,GAAAF,IAAAG,GAAAH,IAAAI,IAAA,UAAAA,KAAA,UAAAjN,UAAA,iJAAAgN,GAAAE,EAAAC,GAAA,GAAAD,EAAA,sBAAAA,EAAA,OAAAE,GAAAF,EAAAC,GAAA,IAAA7F,EAAAjP,OAAAwD,UAAAwR,SAAArnB,KAAAknB,GAAA7K,MAAA,uBAAAiF,GAAA4F,EAAA3L,cAAA+F,EAAA4F,EAAA3L,YAAAnc,MAAA,QAAAkiB,GAAA,QAAAA,EAAAgG,MAAAC,KAAAL,GAAA,cAAA5F,GAAA,2CAAAkG,KAAAlG,GAAA8F,GAAAF,EAAAC,QAAA,YAAAJ,GAAAlL,GAAA,wBAAA1F,QAAA,MAAA0F,EAAA1F,OAAAE,WAAA,MAAAwF,EAAA,qBAAAyL,MAAAC,KAAA1L,EAAA,UAAAiL,GAAAD,GAAA,GAAAS,MAAAG,QAAAZ,GAAA,OAAAO,GAAAP,EAAA,UAAAO,GAAAP,EAAAa,IAAA,MAAAA,GAAAA,EAAAb,EAAAhkB,UAAA6kB,EAAAb,EAAAhkB,QAAA,QAAA0S,EAAA,EAAAoS,EAAA,IAAAL,MAAAI,GAAAnS,EAAAmS,EAAAnS,IAAAoS,EAAApS,GAAAsR,EAAAtR,GAAA,OAAAoS,CAAA,UAAAtK,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAAne,EAAAuY,GAAA,QAAAqC,EAAAqD,EAAAje,GAAAuY,GAAA/W,EAAAoZ,EAAApZ,KAAA,OAAAuL,GAAA,YAAA7K,EAAA6K,EAAA,CAAA6N,EAAAJ,KAAAvY,EAAAT,GAAAQ,QAAAC,QAAAT,GAAAkY,KAAAwE,EAAAC,EAAA,UAAAC,GAAA9F,GAAA,sBAAAV,EAAA,KAAAyG,EAAA3S,UAAA,WAAA1J,SAAA,SAAAC,EAAAC,GAAA,IAAA+b,EAAA3F,EAAA5L,MAAAkL,EAAAyG,GAAA,SAAAH,EAAA1c,GAAAwc,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,OAAA3c,EAAA,UAAA2c,EAAAtR,GAAAmR,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,QAAAtR,EAAA,CAAAqR,OAAAvS,EAAA,KADA,QACEhC,QAAS,CACPsW,qBAAoB,WAClBne,KAAK+E,SAASiC,KAAKyf,MAAK,SAACC,EAAGC,GAC1B,IAAIC,EAAQF,EAAEtC,UAAY,EACtByC,EAAQF,EAAEvC,UAAY,EAC1B,OAAOwC,EAAQC,CACjB,GACF,EACMrD,0BAAyB,WAAG,IAAA7kB,EAAA,YAAA2d,GAAA/H,KAAA8F,MAAA,SAAA0C,IAAA,IAAA5R,EAAA,OAAAoJ,KAAAoB,MAAA,SAAAuH,GAAA,eAAAA,EAAAlC,KAAAkC,EAAAlE,MAAA,OACI,OAApCra,EAAKilB,gCAA+B1G,EAAAlE,KAAA,EACFra,EAAK8kB,0BAAyB,OAAhE9kB,EAAKmkB,qBAAoB5F,EAAA5E,KAEnBnN,EAAQxM,EAAKoG,SAASiC,KAAK8f,WAC/B,SAAC/hB,GAAQ,MAA+B,wBAA1BA,EAASkE,SAASjM,IAA8B,IAE5D2B,EAAKmkB,qBACH3X,GAAS,GACXxM,EAAKoG,SAASiC,KAAKmE,GAASxM,EAAKmkB,qBACjCnkB,EAAKoG,SAASiC,KAAIuD,GAAO5L,EAAKoG,SAASiC,OAEvCrI,EAAKoG,SAASiC,KAAO,GAAH1F,OAAAiJ,GACb5L,EAAKoG,SAASiC,MAAI,CACrBrI,EAAKmkB,uBAGA3X,GAAS,IAClBxM,EAAKoG,SAASiC,KAAKmE,GAAOI,UAC1B5M,EAAKoG,SAASiC,KAAK+f,OAAO5b,EAAO,GACjCxM,EAAKoG,SAASiC,KAAIuD,GAAO5L,EAAKoG,SAASiC,OAEzCrI,EAAKwkB,iCACLxkB,EAAKsiB,sBAAqB,wBAAA/D,EAAA/B,OAAA,GAAA4B,EAAA,IAvBMT,EAwBlC,ICjCG,SAAS0K,GAAmBC,GACjC,IAAIC,EAAS,UACTC,GAAW,EACTC,EAAgB,IAAIlnB,SAAQ,SAAUyiB,EAAK0E,GAC/CJ,EACGrP,MAAK,SAAC/S,GACAsiB,EAIHD,EAAS,iCAHTvE,EAAI9d,GACJqiB,EAAS,WAIb,IACCnL,OAAM,SAAClX,GACNqiB,EAAS,WACJC,GAAUE,EAAIxiB,EACrB,GACJ,IAOA,OANAuiB,EAAcE,UAAY,WACxB,OAAOJ,CACT,EACAE,EAAcG,OAAS,WACrBJ,GAAW,CACb,EACOC,CACT,C,i7ECxBA7S,GAAA,kBAAAC,CAAA,MAAAA,EAAA,GAAAC,EAAAvD,OAAAwD,UAAAC,EAAAF,EAAAG,eAAAC,EAAA3D,OAAA2D,gBAAA,SAAA9D,EAAA7S,EAAA4W,GAAA/D,EAAA7S,GAAA4W,EAAApV,KAAA,EAAAqV,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAxE,EAAA7S,EAAAwB,GAAA,OAAAwR,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,EAAA,KAAAqX,EAAA,aAAAxK,GAAAwK,EAAA,SAAAxE,EAAA7S,EAAAwB,GAAA,OAAAqR,EAAA7S,GAAAwB,CAAA,WAAAiW,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,IAAAC,EAAAH,GAAAA,EAAAnB,qBAAAuB,EAAAJ,EAAAI,EAAAC,EAAAhF,OAAAiF,OAAAH,EAAAtB,WAAA0B,EAAA,IAAAC,EAAAN,GAAA,WAAAlB,EAAAqB,EAAA,WAAAxW,MAAA4W,EAAAV,EAAAE,EAAAM,KAAAF,CAAA,UAAAK,EAAAC,EAAAzF,EAAA0F,GAAA,WAAAzZ,KAAA,SAAAyZ,IAAAD,EAAA3X,KAAAkS,EAAA0F,GAAA,OAAA1L,GAAA,OAAA/N,KAAA,QAAAyZ,IAAA1L,EAAA,EAAAyJ,EAAAmB,KAAAA,EAAA,IAAAe,EAAA,YAAAT,IAAA,UAAAU,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAtB,EAAAsB,EAAA5B,GAAA,8BAAA6B,EAAA5F,OAAA6F,eAAAC,EAAAF,GAAAA,EAAAA,EAAA5E,EAAA,MAAA8E,GAAAA,IAAAvC,GAAAE,EAAA9V,KAAAmY,EAAA/B,KAAA4B,EAAAG,GAAA,IAAAC,EAAAL,EAAAlC,UAAAuB,EAAAvB,UAAAxD,OAAAiF,OAAAU,GAAA,SAAAK,EAAAxC,GAAA,0BAAAhM,SAAA,SAAAyO,GAAA5B,EAAAb,EAAAyC,GAAA,SAAAV,GAAA,YAAAW,QAAAD,EAAAV,EAAA,gBAAAY,EAAAnB,EAAAoB,GAAA,SAAAC,EAAAJ,EAAAV,EAAAtW,EAAAC,GAAA,IAAAoX,EAAAjB,EAAAL,EAAAiB,GAAAjB,EAAAO,GAAA,aAAAe,EAAAxa,KAAA,KAAAya,EAAAD,EAAAf,IAAA/W,EAAA+X,EAAA/X,MAAA,OAAAA,GAAA,UAAAgY,GAAAhY,IAAAiV,EAAA9V,KAAAa,EAAA,WAAA4X,EAAAnX,QAAAT,EAAAiY,SAAAC,MAAA,SAAAlY,GAAA6X,EAAA,OAAA7X,EAAAS,EAAAC,EAAA,aAAA2K,GAAAwM,EAAA,QAAAxM,EAAA5K,EAAAC,EAAA,IAAAkX,EAAAnX,QAAAT,GAAAkY,MAAA,SAAAC,GAAAJ,EAAA/X,MAAAmY,EAAA1X,EAAAsX,EAAA,aAAAxM,GAAA,OAAAsM,EAAA,QAAAtM,EAAA9K,EAAAC,EAAA,IAAAA,EAAAoX,EAAAf,IAAA,KAAAqB,EAAAjD,EAAA,gBAAAnV,MAAA,SAAAyX,EAAAV,GAAA,SAAAsB,IAAA,WAAAT,GAAA,SAAAnX,EAAAC,GAAAmX,EAAAJ,EAAAV,EAAAtW,EAAAC,EAAA,WAAA0X,EAAAA,EAAAA,EAAAF,KAAAG,EAAAA,GAAAA,GAAA,aAAAzB,EAAAV,EAAAE,EAAAM,GAAA,IAAA4B,EAAA,iCAAAb,EAAAV,GAAA,iBAAAuB,EAAA,UAAAC,MAAA,iDAAAD,EAAA,cAAAb,EAAA,MAAAV,EAAA,OAAAyB,GAAA,KAAA9B,EAAAe,OAAAA,EAAAf,EAAAK,IAAAA,IAAA,KAAA0B,EAAA/B,EAAA+B,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA/B,GAAA,GAAAgC,EAAA,IAAAA,IAAA1B,EAAA,gBAAA0B,CAAA,cAAAhC,EAAAe,OAAAf,EAAAkC,KAAAlC,EAAAmC,MAAAnC,EAAAK,SAAA,aAAAL,EAAAe,OAAA,uBAAAa,EAAA,MAAAA,EAAA,YAAA5B,EAAAK,IAAAL,EAAAoC,kBAAApC,EAAAK,IAAA,gBAAAL,EAAAe,QAAAf,EAAAqC,OAAA,SAAArC,EAAAK,KAAAuB,EAAA,gBAAAR,EAAAjB,EAAAX,EAAAE,EAAAM,GAAA,cAAAoB,EAAAxa,KAAA,IAAAgb,EAAA5B,EAAAsC,KAAA,6BAAAlB,EAAAf,MAAAC,EAAA,gBAAAhX,MAAA8X,EAAAf,IAAAiC,KAAAtC,EAAAsC,KAAA,WAAAlB,EAAAxa,OAAAgb,EAAA,YAAA5B,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAA,YAAA4B,EAAAF,EAAA/B,GAAA,IAAAuC,EAAAvC,EAAAe,OAAAA,EAAAgB,EAAAjD,SAAAyD,GAAA,QAAA9O,IAAAsN,EAAA,OAAAf,EAAA+B,SAAA,eAAAQ,GAAAR,EAAAjD,SAAA0D,SAAAxC,EAAAe,OAAA,SAAAf,EAAAK,SAAA5M,EAAAwO,EAAAF,EAAA/B,GAAA,UAAAA,EAAAe,SAAA,WAAAwB,IAAAvC,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAF,EAAA,aAAAjC,EAAA,IAAAc,EAAAjB,EAAAY,EAAAgB,EAAAjD,SAAAkB,EAAAK,KAAA,aAAAe,EAAAxa,KAAA,OAAAoZ,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAAL,EAAA+B,SAAA,KAAAzB,EAAA,IAAAoC,EAAAtB,EAAAf,IAAA,OAAAqC,EAAAA,EAAAJ,MAAAtC,EAAA+B,EAAAY,YAAAD,EAAApZ,MAAA0W,EAAA4C,KAAAb,EAAAc,QAAA,WAAA7C,EAAAe,SAAAf,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,GAAAuM,EAAA+B,SAAA,KAAAzB,GAAAoC,GAAA1C,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAzC,EAAA+B,SAAA,KAAAzB,EAAA,UAAAwC,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAA9Q,KAAAyQ,EAAA,UAAAM,EAAAN,GAAA,IAAA5B,EAAA4B,EAAAO,YAAA,GAAAnC,EAAAxa,KAAA,gBAAAwa,EAAAf,IAAA2C,EAAAO,WAAAnC,CAAA,UAAAnB,EAAAN,GAAA,KAAA0D,WAAA,EAAAJ,OAAA,SAAAtD,EAAArN,QAAAwQ,EAAA,WAAAU,OAAA,YAAA1H,EAAA2H,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAA5E,GAAA,GAAA6E,EAAA,OAAAA,EAAAjb,KAAAgb,GAAA,sBAAAA,EAAAb,KAAA,OAAAa,EAAA,IAAAE,MAAAF,EAAAnY,QAAA,KAAA0S,GAAA,EAAA4E,EAAA,SAAAA,IAAA,OAAA5E,EAAAyF,EAAAnY,QAAA,GAAAiT,EAAA9V,KAAAgb,EAAAzF,GAAA,OAAA4E,EAAAtZ,MAAAma,EAAAzF,GAAA4E,EAAAN,MAAA,EAAAM,EAAA,OAAAA,EAAAtZ,WAAAmK,EAAAmP,EAAAN,MAAA,EAAAM,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAd,EAAA,UAAAA,IAAA,OAAAxY,WAAAmK,EAAA6O,MAAA,UAAA/B,EAAAjC,UAAAkC,EAAA/B,EAAAoC,EAAA,eAAAvX,MAAAkX,EAAAnB,cAAA,IAAAZ,EAAA+B,EAAA,eAAAlX,MAAAiX,EAAAlB,cAAA,IAAAkB,EAAAqD,YAAAzE,EAAAqB,EAAAvB,EAAA,qBAAAb,EAAAyF,oBAAA,SAAAC,GAAA,IAAAC,EAAA,mBAAAD,GAAAA,EAAAE,YAAA,QAAAD,IAAAA,IAAAxD,GAAA,uBAAAwD,EAAAH,aAAAG,EAAAlc,MAAA,EAAAuW,EAAA6F,KAAA,SAAAH,GAAA,OAAAhJ,OAAAoJ,eAAApJ,OAAAoJ,eAAAJ,EAAAtD,IAAAsD,EAAAK,UAAA3D,EAAArB,EAAA2E,EAAA7E,EAAA,sBAAA6E,EAAAxF,UAAAxD,OAAAiF,OAAAc,GAAAiD,CAAA,EAAA1F,EAAAgG,MAAA,SAAA/D,GAAA,OAAAkB,QAAAlB,EAAA,EAAAS,EAAAG,EAAA3C,WAAAa,EAAA8B,EAAA3C,UAAAS,GAAA,0BAAAX,EAAA6C,cAAAA,EAAA7C,EAAAiG,MAAA,SAAA7E,EAAAC,EAAAC,EAAAC,EAAAuB,QAAA,IAAAA,IAAAA,EAAApX,SAAA,IAAAwa,EAAA,IAAArD,EAAA1B,EAAAC,EAAAC,EAAAC,EAAAC,GAAAuB,GAAA,OAAA9C,EAAAyF,oBAAApE,GAAA6E,EAAAA,EAAA1B,OAAApB,MAAA,SAAAH,GAAA,OAAAA,EAAAiB,KAAAjB,EAAA/X,MAAAgb,EAAA1B,MAAA,KAAA9B,EAAAD,GAAA1B,EAAA0B,EAAA5B,EAAA,aAAAE,EAAA0B,EAAAhC,GAAA,0BAAAM,EAAA0B,EAAA,qDAAAzC,EAAArD,KAAA,SAAAwJ,GAAA,IAAAC,EAAA1J,OAAAyJ,GAAAxJ,EAAA,WAAAjT,KAAA0c,EAAAzJ,EAAAxI,KAAAzK,GAAA,OAAAiT,EAAA0J,UAAA,SAAA7B,IAAA,KAAA7H,EAAAzP,QAAA,KAAAxD,EAAAiT,EAAA2J,MAAA,GAAA5c,KAAA0c,EAAA,OAAA5B,EAAAtZ,MAAAxB,EAAA8a,EAAAN,MAAA,EAAAM,CAAA,QAAAA,EAAAN,MAAA,EAAAM,CAAA,GAAAxE,EAAAtC,OAAAA,EAAAmE,EAAA3B,UAAA,CAAA0F,YAAA/D,EAAAuD,MAAA,SAAAmB,GAAA,QAAAC,KAAA,OAAAhC,KAAA,OAAAV,KAAA,KAAAC,WAAA1O,EAAA,KAAA6O,MAAA,OAAAP,SAAA,UAAAhB,OAAA,YAAAV,SAAA5M,EAAA,KAAA4P,WAAA/Q,QAAAgR,IAAAqB,EAAA,QAAA9c,KAAA,WAAAA,EAAAgd,OAAA,IAAAtG,EAAA9V,KAAA,KAAAZ,KAAA8b,OAAA9b,EAAAid,MAAA,WAAAjd,QAAA4L,EAAA,EAAAsR,KAAA,gBAAAzC,MAAA,MAAA0C,EAAA,KAAA3B,WAAA,GAAAE,WAAA,aAAAyB,EAAApe,KAAA,MAAAoe,EAAA3E,IAAA,YAAA4E,IAAA,EAAA7C,kBAAA,SAAA8C,GAAA,QAAA5C,KAAA,MAAA4C,EAAA,IAAAlF,EAAA,cAAAmF,EAAAC,EAAAC,GAAA,OAAAjE,EAAAxa,KAAA,QAAAwa,EAAAf,IAAA6E,EAAAlF,EAAA4C,KAAAwC,EAAAC,IAAArF,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,KAAA4R,CAAA,SAAArH,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAAoD,EAAA4B,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAkC,EAAA,UAAAnC,EAAAC,QAAA,KAAA2B,KAAA,KAAAU,EAAA/G,EAAA9V,KAAAua,EAAA,YAAAuC,EAAAhH,EAAA9V,KAAAua,EAAA,iBAAAsC,GAAAC,EAAA,SAAAX,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,WAAA0B,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,SAAAmC,GAAA,QAAAV,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,YAAAqC,EAAA,UAAA1D,MAAA,kDAAA+C,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,KAAAd,OAAA,SAAAzb,EAAAyZ,GAAA,QAAArC,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,QAAA,KAAA2B,MAAArG,EAAA9V,KAAAua,EAAA,oBAAA4B,KAAA5B,EAAAG,WAAA,KAAAqC,EAAAxC,EAAA,OAAAwC,IAAA,UAAA5e,GAAA,aAAAA,IAAA4e,EAAAvC,QAAA5C,GAAAA,GAAAmF,EAAArC,aAAAqC,EAAA,UAAApE,EAAAoE,EAAAA,EAAAjC,WAAA,UAAAnC,EAAAxa,KAAAA,EAAAwa,EAAAf,IAAAA,EAAAmF,GAAA,KAAAzE,OAAA,YAAA6B,KAAA4C,EAAArC,WAAA7C,GAAA,KAAAmF,SAAArE,EAAA,EAAAqE,SAAA,SAAArE,EAAAgC,GAAA,aAAAhC,EAAAxa,KAAA,MAAAwa,EAAAf,IAAA,gBAAAe,EAAAxa,MAAA,aAAAwa,EAAAxa,KAAA,KAAAgc,KAAAxB,EAAAf,IAAA,WAAAe,EAAAxa,MAAA,KAAAqe,KAAA,KAAA5E,IAAAe,EAAAf,IAAA,KAAAU,OAAA,cAAA6B,KAAA,kBAAAxB,EAAAxa,MAAAwc,IAAA,KAAAR,KAAAQ,GAAA9C,CAAA,EAAAoF,OAAA,SAAAvC,GAAA,QAAAnF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAG,aAAAA,EAAA,YAAAsC,SAAAzC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA1C,CAAA,GAAAqF,MAAA,SAAA1C,GAAA,QAAAjF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,SAAAA,EAAA,KAAA7B,EAAA4B,EAAAO,WAAA,aAAAnC,EAAAxa,KAAA,KAAAgf,EAAAxE,EAAAf,IAAAiD,EAAAN,EAAA,QAAA4C,CAAA,YAAA/D,MAAA,0BAAAgE,cAAA,SAAApC,EAAAd,EAAAE,GAAA,YAAAd,SAAA,CAAAjD,SAAAhD,EAAA2H,GAAAd,WAAAA,EAAAE,QAAAA,GAAA,cAAA9B,SAAA,KAAAV,SAAA5M,GAAA6M,CAAA,GAAAlC,CAAA,UAAA0H,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAAne,EAAAuY,GAAA,QAAAqC,EAAAqD,EAAAje,GAAAuY,GAAA/W,EAAAoZ,EAAApZ,KAAA,OAAAuL,GAAA,YAAA7K,EAAA6K,EAAA,CAAA6N,EAAAJ,KAAAvY,EAAAT,GAAAQ,QAAAC,QAAAT,GAAAkY,KAAAwE,EAAAC,EAAA,UAAAC,GAAA9F,GAAA,sBAAAV,EAAA,KAAAyG,EAAA3S,UAAA,WAAA1J,SAAA,SAAAC,EAAAC,GAAA,IAAA+b,EAAA3F,EAAA5L,MAAAkL,EAAAyG,GAAA,SAAAH,EAAA1c,GAAAwc,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,OAAA3c,EAAA,UAAA2c,EAAAtR,GAAAmR,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,QAAAtR,EAAA,CAAAqR,OAAAvS,EAAA,KAeA,QACEhF,KAAI,WACF,MAAO,CACL2iB,aAAc,GACdC,sBAAuB,EACvBC,sBAAuB,EACvBC,aAAc,GAElB,EACA9f,QAAS,CACP+f,sBAAsBC,EAAAA,GAAAA,WAAS,WAC7B7nB,KAAK8nB,aACP,GAAG,KACGA,YAAW,WAAG,IAAAnpB,EAAA,YAAA2d,GAAA/H,KAAA8F,MAAA,SAAA0C,IAAA,OAAAxI,KAAAoB,MAAA,SAAAuH,GAAA,eAAAA,EAAAlC,KAAAkC,EAAAlE,MAAA,UACbra,EAAKqT,MAAO,CAAFkL,EAAAlE,KAAA,eAAAkE,EAAAzE,OAAA,kBAIZ9Z,EAAKopB,kBACN,CAAC,qBAAsB,cAAe,sBAAsBvW,SAC1D7S,EAAKopB,iBAAiB7pB,KAGxBS,EAAKqpB,oBAELrpB,EAAKspB,sBACN,wBAAA/K,EAAA/B,OAAA,GAAA4B,EAAA,IAbiBT,EAcpB,EACA4L,kBAAiB,WACf,IAY0BrI,EAZtBsI,EAAkBnoB,KAAK2nB,aAAarjB,KACtC,SAAC8jB,GAAS,MACR,QACAA,EAAUC,MACV,IACAD,EAAUE,MACV,IACAF,EAAUG,OAAO,IAEjBC,EAActX,OAAOC,KAAKnR,KAAKiI,OAAOwgB,YAAYhgB,QAAO,SAACrL,GAC5D,OAAQ+qB,EAAgB3W,SAASpU,EACnC,IAAE4iB,EAAAC,GACauI,GAAW,IAA1B,IAAAxI,EAAAE,MAAAL,EAAAG,EAAAG,KAAAzH,MAA4B,KAAnBtb,EAAEyiB,EAAAngB,MACTM,KAAK+R,mBAAmB/R,KAAKiI,OAAOwgB,WAAWrrB,GAAK4C,KAAKgS,MAC3D,CAAC,OAAAjH,GAAAiV,EAAAI,EAAArV,EAAA,SAAAiV,EAAAK,GAAA,CACH,EACM4H,oBAAmB,WAAG,IAAAnoB,EAAA,YAAAwc,GAAA/H,KAAA8F,MAAA,SAAAqJ,IAAA,IAAA6E,EAAAG,EAAAC,EAAAC,EAAA1nB,EAAAC,EAAAC,EAAAC,EAAAwnB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAArB,EAAAC,EAAAqB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAApjB,EAAAqjB,EAAAC,EAAAC,EAAA,OAAA5V,KAAAoB,MAAA,SAAAsH,GAAA,eAAAA,EAAAjC,KAAAiC,EAAAjE,MAAA,OAsD1B,IArDIlZ,EAAKsqB,sBACPtqB,EAAKsqB,oBAAoBC,QACzBvqB,EAAKkS,MAAMf,OAAOnR,EAAKsqB,qBACvBtqB,EAAKgR,kBAAkBhR,EAAKsqB,sBAG1B7B,EAAUzoB,EAAKwqB,SAASvuB,QAEtB2sB,EAAW5oB,EAAKyqB,eAAeC,gBAC/B7B,EAAY7oB,EAAKyqB,eAAeE,iBAAgB7B,EACrB9oB,EAAK4qB,YAAhCxpB,EAAI0nB,EAAJ1nB,KAAMC,EAAIynB,EAAJznB,KAAMC,EAAIwnB,EAAJxnB,KAAMC,EAAIunB,EAAJvnB,KAEpBH,GAAQqkB,KACVrkB,EAAO,EACPE,EAAO,EACPD,EAAO,EACPE,EAAO,IAEHwnB,EACF5kB,EAActD,KAAKgqB,IAAKjC,EAAW/nB,KAAKK,GAAM,KAAO,IAAOL,KAAKK,GAE/D8nB,EAAmBnoB,KAAKiqB,MAC1BjqB,KAAKiE,IAAIikB,GAAuB1nB,EAAOD,IAASP,KAAKkqB,KAEnD/B,EAAmBP,IACrBA,EAAUO,IAEbC,GACkC+B,EAAAA,EAAAA,IACjC5pB,EACAE,EACAsnB,GAHSM,EAAMD,EAAXgC,IAAkB9B,EAAMF,EAAXiC,IAAG9B,GAKa4B,EAAAA,EAAAA,IACjC3pB,EACAE,EACAqnB,GAHSS,EAAMD,EAAX6B,IAAkB3B,EAAMF,EAAX8B,IAAG3B,GAKa4B,EAAAA,EAAAA,IACjCvC,EAAWM,EACXL,EAAYM,EACZV,GAHOe,EAAQD,EAAXzpB,EAAgB2pB,EAAQF,EAAXxpB,EAAC2pB,GAKeyB,EAAAA,EAAAA,IACjCvC,EAAWS,EACXR,EAAYS,EACZb,GAHOkB,EAAQD,EAAX5pB,EAAgB8pB,EAAQF,EAAX3pB,EAKnBypB,GAAuBA,EAAW,EAClCG,EAAWA,EAAW,EAAKA,EAAW,EACtCC,GAAuBA,EAAW,EAClCH,EAAWA,EAAW,EAAKA,EAAW,EACtCzpB,EAAK6nB,aAAe,GACXU,EAAQiB,EAAUjB,GAASoB,EAAUpB,IAC5C,IAASC,EAAQoB,EAAUpB,GAASiB,EAAUjB,IAC5CxoB,EAAK6nB,aAAahf,KAAK,CACrB0f,MAAAA,EACAC,MAAAA,EACAC,QAAAA,EACA4B,mBAAmB,IAKzB,MAAO5B,EAAU,GAef,IAdAe,EAAWA,EAAW,EAAI,EAC1BG,GAAYA,EAAW,GAAK,EAC5BC,EAAWA,EAAW,EAAI,EAC1BH,GAAYA,EAAW,GAAK,EAExBI,EAAUL,EAAW,EACrBM,EAAUF,EAAW,EACrBG,EAAW,EAAKJ,EAAW,EAC3BK,EAAW,EAAKP,EAAW,EAC/BD,GAAuBA,EAAW,EAClCG,EAAWA,EAAW,EAAKA,EAAW,EACtCC,GAAuBA,EAAW,EAClCH,EAAWA,EAAW,EAAKA,EAAW,EACtChB,GAAW,EACFF,EAAQiB,EAAUjB,GAASoB,EAAUpB,IAC5C,IAASC,EAAQoB,EAAUpB,GAASiB,EAAUjB,KAE1CD,EAAQiB,GAAYK,GACpBF,EAAWpB,GAASwB,GACpBvB,EAAQoB,GAAYE,GACpBL,EAAWjB,GAASwB,IAEpBhqB,EAAK6nB,aAAahf,KAAK,CACrB0f,MAAAA,EACAC,MAAAA,EACAC,QAAAA,EACA4B,mBAAmB,IAQ7B,IAASvjB,KAFT9G,EAAK4nB,sBAAwB5nB,EAAK6nB,aAAajmB,OAC/C5B,EAAK2nB,sBAAwB,EACf3nB,EAAK6nB,aACbU,EAAQvoB,EAAK6nB,aAAa/gB,GAAGyhB,MAC7BC,EAAQxoB,EAAK6nB,aAAa/gB,GAAG0hB,MACjCC,EAAUzoB,EAAK6nB,aAAa/gB,GAAG2hB,QAC3B4B,EAAoBrqB,EAAK6nB,aAAa/gB,GAAGujB,kBAC7CrqB,EAAKorB,WAAW7C,EAAOC,EAAOC,EAAS4B,GACxC,yBAAAlN,EAAA9B,OAAA,GAAAuI,EAAA,IA1GyBpH,EA2G5B,EACA6O,sBAAqB,SAAChiB,EAAQpK,GAC5BiB,KAAKwnB,aAAexnB,KAAKwnB,aAAa/e,QACpC,SAAC2iB,GAAC,OAAKA,EAAEjiB,QAAUA,GAAUiiB,EAAErsB,UAAYA,CAAQ,GAEvD,EACMmsB,WAAU,SAACtrB,EAAGC,EAAG0oB,GAAoC,IAAA8C,EAAAzhB,UAAAyI,EAAA,YAAAiK,GAAA/H,KAAA8F,MAAA,SAAAyJ,IAAA,IAAAqG,EAAAhhB,EAAApK,EAAAuR,EAAAoY,EAAAC,EAAA3gB,EAAAjD,EAAAumB,EAAA,OAAA/W,KAAAoB,MAAA,SAAAoO,GAAA,eAAAA,EAAA/I,KAAA+I,EAAA/K,MAAA,OAElB,GAFTmR,EAAiBkB,EAAA3pB,OAAA,QAAAmI,IAAAwhB,EAAA,IAAAA,EAAA,GACzCliB,EAAS,QAAUvJ,EAAI,IAAMC,EAAI,IAAM0oB,EACvCxpB,EAAWsT,EAAKiY,SAASvrB,UAE7BsT,EAAKmV,aAAa1oB,MAChB,SAACssB,GAAC,OAAKA,EAAEjiB,QAAUA,GAAUiiB,EAAErsB,UAAYA,CAAQ,IACpD,CAAAglB,EAAA/K,KAAA,eAAA+K,EAAAtL,OAAA,iBAKsC,GAArCnI,EAAO+B,EAAKpK,OAAOwgB,WAAWtf,IAC9BmH,GAAQ+B,EAAKiY,SAASvrB,UAAYuR,EAAKrH,SAASlK,SAAQ,CAAAglB,EAAA/K,KAAA,eAAA+K,EAAAtL,OAAA,iBAItDiQ,EAAWrW,EAAKkY,eAAeC,gBAC/B7B,EAAYtW,EAAKkY,eAAeE,iBAEhCa,EAAetE,GACnB3U,EAAKiY,SAASiB,UAAUhD,EAAS3oB,EAAGC,IAEtCwS,EAAKmV,aAAa7e,KAAK,CAAE/I,EAAAA,EAAGC,EAAAA,EAAG0oB,QAAAA,EAASxpB,SAAAA,EAAUoK,OAAAA,EAAQmiB,aAAAA,IAC1DA,EAAa1T,MAAK,SAACvX,GACjB,GAAKA,EAAL,CAIA,IAAMiG,EAAU,IAAIrB,EAAAA,IAAc5E,GAC9B8pB,GACF9X,EAAKmZ,gBAAgBllB,EAAS1G,EAAGC,EAAG0oB,EAASxpB,GAE/CuH,EAAQmlB,iBAAkB,EAC1BnlB,EAAQ5I,OAASuH,EAAAA,IACjBqB,EAAQgC,aAAc,EACtB,IAAI6F,GAAUud,EAAAA,EAAAA,IAAc9rB,EAAGC,EAAG0oB,EAASG,EAAUC,GACrDxa,EAAUA,EAAQ7J,KAAI,SAACC,GACrB,OAAA2H,GAAAA,GAAA,GAAY3H,GAAC,IAAEqE,GAAI,KACrB,IACI0H,GACFtI,EAAWsI,EAAKtI,SAChBjD,EAAWuL,EAAKvL,SAChBiD,EAAWoD,GAAyB+C,EAAS,GAAInG,GACjDsI,EAAKtI,SAAWA,EAChBjD,EAAST,IAAMgC,EACfvB,EAASuD,aAAc,EACvBgI,EAAKrH,SAASlK,SAAWsT,EAAKiY,SAASvrB,SACvCuR,EAAKrH,SAASjM,KAAO,aACrBsT,EAAKrH,SAASE,OAASA,EACvBmH,EAAKM,eAAgB,EACrBN,EAAKhI,aAAc,EACnBgI,EAAKK,iBAEL5L,EAAW,IAAIE,EAAAA,IAAwB,CACrCX,IAAKgC,EACLnB,MAAO,SACPC,KAAMH,EAAAA,IACNO,aAAa,IAEfT,EAAST,IAAMgC,EACfvB,EAASuD,aAAc,EACvBN,EAAWyD,GAAsB0C,GAC7BnG,IACFsI,EAAO,IAAIrL,EAAAA,IAAW+C,EAAUjD,GAChCuL,EAAKrH,SAASjM,KAAO,aACrBsT,EAAKrH,SAASE,OAASA,EACvBmH,EAAKrH,SAASlK,SAAWsT,EAAKiY,SAASvrB,SACvCuR,EAAKrS,KAAOkL,EAEPkJ,EAAKL,MAAM2Z,gBAAgBxiB,KAC9BkJ,EAAKpK,OAAOwgB,WAAWtf,GAAUmH,EACjC+B,EAAKL,MAAMxI,IAAI6I,EAAKpK,OAAOwgB,WAAWtf,OAI5CkJ,EAAK8Y,sBAAsBhiB,EAAQpK,GACnCsT,EAAKoV,wBACDpV,EAAKoV,uBAAyBpV,EAAKqV,wBACrCrV,EAAK6V,oBACL7V,EAAK6O,SApDP,MAFE7O,EAAK8Y,sBAAsBhiB,EAAQpK,EAwDvC,IAAE,yBAAAglB,EAAA5I,OAAA,GAAA2I,EAAA,IAjFuDxH,EAkF3D,EACM0L,kBAAiB,WAAG,IAAAxV,EAAA,YAAA8J,GAAA/H,KAAA8F,MAAA,SAAAuR,IAAA,IAAAC,EAAAplB,EAAAqlB,EAAAC,EAAA7qB,EAAAC,EAAAC,EAAAC,EAAA2qB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAjJ,EAAAC,EAAAiJ,EAAAvP,EAAAwP,EAAA9gB,EAAA,OAAA6I,KAAAoB,MAAA,SAAA8W,GAAA,eAAAA,EAAAzR,KAAAyR,EAAAzT,MAAA,OACxBxG,EAAKD,YAAY,cACZC,EAAK4X,sBACR5X,EAAK4X,oBAAsB,IAAInlB,EAAAA,IAC/BuN,EAAKR,MAAMxI,IAAIgJ,EAAK4X,sBAEtB5X,EAAK4X,oBAAoBjiB,SAAU,EACnCqK,EAAK4X,oBAAoBnsB,KAAO,sBAC3BuU,EAAKR,MAAM2Z,gBAAgB,wBAC9BnZ,EAAKR,MAAMxI,IAAIgJ,EAAK4X,qBAElByB,EAAgB,YAAWY,EAAAC,GACvBla,EAAKuV,iBAAiB7pB,IAAGuuB,EAAAzT,KAC1B,uBAD0ByT,EAAAC,GACN,EAGpB,gBAHoBD,EAAAC,GAGP,GAGb,uBAHaD,EAAAC,GAGO,mBALE,OAAzBb,EAAgB,UAASY,EAAAhU,OAAA,oBAGE,OAA3BoT,EAAgB,YAAWY,EAAAhU,OAAA,oBAGF,OAAzBoT,EAAgB,UAASY,EAAAhU,OAAA,oBAGzBhS,EAAO,IACPqlB,EAAoB,GAAEC,EACOvZ,EAAKkY,YAAhCxpB,EAAI6qB,EAAJ7qB,KAAMC,EAAI4qB,EAAJ5qB,KAAMC,EAAI2qB,EAAJ3qB,KAAMC,EAAI0qB,EAAJ1qB,KACpBH,GAAQqkB,KACVrkB,EAAO,EACPE,EAAO,EACPD,EAAO,EACPE,EAAO,IAEH2qB,EAAuBrrB,KAAKgsB,IAAIxrB,EAAOD,EAAMG,EAAOD,GAAQ,IAE5D6qB,EAAetrB,KAAKisB,KAEpB,EADDjsB,KAAKgqB,IAAKnY,EAAK+X,eAAeC,gBAAkB7pB,KAAKK,GAAM,KAE1DL,KAAKK,GACLiD,EACAwC,GACC,IAAMulB,IAEXF,EAAoBnrB,KAAKksB,IAAIf,EAAmB3e,SAAS8e,KAEvDC,EAAwB,CAC1BtsB,GAAIuB,EAAOD,GAAQ,IACnBrB,GAAIwB,EAAOD,GAAQ,KAEjB+qB,GAAcrB,EAAAA,EAAAA,IACU,IAA1BoB,EAAsBtsB,EACI,IAA1BssB,EAAsBrsB,EACtB2S,EAAK+X,eAAeC,iBAElB4B,EAAyB,CAC3BrB,IAAKvY,EAAK+X,eAAeC,gBAAkB2B,EAAYpB,IACvDC,IAAKxY,EAAK+X,eAAeE,iBAAmB0B,EAAYnB,KAGtDqB,EAASS,0CACTR,EAAkB,GAElBjJ,EAAgB,GAChBC,EAAgB,GAChBiJ,EAAa,CACfT,EACAA,EAAoB,EACpBA,EAAoB,GAEtBtZ,EAAKkV,sBAAwB6E,EAAW7qB,OAAMsb,EAAAzI,KAAA8F,MAAA,SAAA2C,EAAAwP,GAAA,IAAAO,EAAAC,EAAAC,EAAAC,EAAA,OAAA3Y,KAAAoB,MAAA,SAAAwX,GAAA,eAAAA,EAAAnS,KAAAmS,EAAAnU,MAAA,OAMxC+T,EAAYR,EAAWC,GACvBQ,EAEA,EADDrsB,KAAKgqB,IAAKnY,EAAK+X,eAAeC,gBAAkB7pB,KAAKK,GAAM,KAE1DL,KAAKK,GACLiD,GACD,IAAMtD,KAAKC,IAAI,EAAGmsB,IACjBE,EAAcD,EAAmBvmB,EACrC4c,EAAcmJ,GAAyB,IAAIvnB,EAAAA,IACzCgoB,EACc,GAAdA,GAIEvhB,EAAM,IAAI5B,aAAa,CACzB,EAAG,IAAM,EAAG,IAAM,EAAG,IAAM,EAAG,IAAM,EAAG,IAAM,EAAG,MAElDuZ,EAAcmJ,GAAuBxjB,aACnC,KACA,IAAI/D,EAAAA,IAAsByG,EAAK,IAEjC2X,EAAcmJ,GAAuBhhB,uBAEjC0hB,EAAsB,yDAAH5rB,OACrB8qB,EAAuBrB,IAAM,IAAMqB,EAAuBpB,IAAG,aAAA1pB,OACnDuqB,EAAa,UAAAvqB,OAASyrB,EAAS,UAAAzrB,OAASmF,EAAI,KAAAnF,OAAImF,EAAI,SAAAnF,OAAQ+qB,GACxE7Z,EAAK3L,OAAOC,KAAKomB,GAAqB,SAAC5mB,GACrCA,EAAQkmB,GAAyBlmB,EACJ,GAAzBkmB,GACFha,EAAK4a,sBACH9mB,EAAQkmB,GACRS,EACAf,EACAL,GAGJvI,EAAckJ,GAAyB,IAAIvnB,EAAAA,IAAwB,CACjEX,IAAKgC,EAAQkmB,GACbpnB,KAAMH,EAAAA,MAERqnB,EAAgBE,GAAyB,IAAIvnB,EAAAA,IAC3Coe,EAAcmJ,GACdlJ,EAAckJ,IAEhBF,EAAgBE,GAAuBnkB,SAASzI,EAC9CssB,EAAsBtsB,EACxB0sB,EAAgBE,GAAuBnkB,SAASxI,EAC9CqsB,EAAsBrsB,EACxBysB,EAAgBE,GAAuBnkB,SAASO,GAC7C4jB,EAAwB,EAC3BF,EAAgBE,GAAuBrkB,SAAU,EACjDmkB,EAAgBE,GAAuBlkB,aAAc,EACrDgkB,EAAgBE,GAAuBvjB,SAASkC,MAC9CqhB,EACF,IAAMa,EAAe7a,EAAK4X,oBAAoBpZ,SAASlS,MACrD,SAACwR,GAAI,OAAKA,EAAKrH,SAASkC,OAASqhB,CAAqB,IAEpDa,GACF7a,EAAK4X,oBAAoBnZ,OAAOoc,GAElC7a,EAAK4X,oBAAoB5gB,IAAI8iB,EAAgBE,IAE7Cha,EAAKiV,wBACDjV,EAAKiV,uBAAyBjV,EAAKkV,wBACrClV,EAAK4X,oBAAoB9hB,aAAc,EACvCkK,EAAK4X,oBAAoBjiB,SAAU,EACnCqK,EAAK0O,SAET,IAAE,wBAAAiM,EAAAhS,OAAA,GAAA6B,EAAA,IAxEEwP,EAAwB,EAAC,aAC7BA,EAAwBD,EAAW7qB,QAAM,CAAA+qB,EAAAzT,KAAA,gBAAAyT,EAAAxQ,cAAAe,EAAAwP,GAAA,iBACzCA,IAAuBC,EAAAzT,KAAA,iBAyEzBxG,EAAK0O,SAAQ,yBAAAuL,EAAAtR,OAAA,GAAAyQ,EAAA,IAjJWtP,EAkJ1B,GAEF3U,MAAO,CACLogB,iBAAgB,SAACuF,GACfttB,KAAKwnB,aAAexnB,KAAKwnB,aAAa/e,QAAO,SAAC2iB,GAC5C,GAAIA,EAAErsB,UAAYuuB,EAAYpvB,IAE5B,OADAktB,EAAEE,aAAa/D,UACR,CAEX,GACF,I,2YC5ZJhT,GAAA,kBAAAC,CAAA,MAAAA,EAAA,GAAAC,EAAAvD,OAAAwD,UAAAC,EAAAF,EAAAG,eAAAC,EAAA3D,OAAA2D,gBAAA,SAAA9D,EAAA7S,EAAA4W,GAAA/D,EAAA7S,GAAA4W,EAAApV,KAAA,EAAAqV,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAxE,EAAA7S,EAAAwB,GAAA,OAAAwR,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,EAAA,KAAAqX,EAAA,aAAAxK,GAAAwK,EAAA,SAAAxE,EAAA7S,EAAAwB,GAAA,OAAAqR,EAAA7S,GAAAwB,CAAA,WAAAiW,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,IAAAC,EAAAH,GAAAA,EAAAnB,qBAAAuB,EAAAJ,EAAAI,EAAAC,EAAAhF,OAAAiF,OAAAH,EAAAtB,WAAA0B,EAAA,IAAAC,EAAAN,GAAA,WAAAlB,EAAAqB,EAAA,WAAAxW,MAAA4W,EAAAV,EAAAE,EAAAM,KAAAF,CAAA,UAAAK,EAAAC,EAAAzF,EAAA0F,GAAA,WAAAzZ,KAAA,SAAAyZ,IAAAD,EAAA3X,KAAAkS,EAAA0F,GAAA,OAAA1L,GAAA,OAAA/N,KAAA,QAAAyZ,IAAA1L,EAAA,EAAAyJ,EAAAmB,KAAAA,EAAA,IAAAe,EAAA,YAAAT,IAAA,UAAAU,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAtB,EAAAsB,EAAA5B,GAAA,8BAAA6B,EAAA5F,OAAA6F,eAAAC,EAAAF,GAAAA,EAAAA,EAAA5E,EAAA,MAAA8E,GAAAA,IAAAvC,GAAAE,EAAA9V,KAAAmY,EAAA/B,KAAA4B,EAAAG,GAAA,IAAAC,EAAAL,EAAAlC,UAAAuB,EAAAvB,UAAAxD,OAAAiF,OAAAU,GAAA,SAAAK,EAAAxC,GAAA,0BAAAhM,SAAA,SAAAyO,GAAA5B,EAAAb,EAAAyC,GAAA,SAAAV,GAAA,YAAAW,QAAAD,EAAAV,EAAA,gBAAAY,EAAAnB,EAAAoB,GAAA,SAAAC,EAAAJ,EAAAV,EAAAtW,EAAAC,GAAA,IAAAoX,EAAAjB,EAAAL,EAAAiB,GAAAjB,EAAAO,GAAA,aAAAe,EAAAxa,KAAA,KAAAya,EAAAD,EAAAf,IAAA/W,EAAA+X,EAAA/X,MAAA,OAAAA,GAAA,UAAAgY,GAAAhY,IAAAiV,EAAA9V,KAAAa,EAAA,WAAA4X,EAAAnX,QAAAT,EAAAiY,SAAAC,MAAA,SAAAlY,GAAA6X,EAAA,OAAA7X,EAAAS,EAAAC,EAAA,aAAA2K,GAAAwM,EAAA,QAAAxM,EAAA5K,EAAAC,EAAA,IAAAkX,EAAAnX,QAAAT,GAAAkY,MAAA,SAAAC,GAAAJ,EAAA/X,MAAAmY,EAAA1X,EAAAsX,EAAA,aAAAxM,GAAA,OAAAsM,EAAA,QAAAtM,EAAA9K,EAAAC,EAAA,IAAAA,EAAAoX,EAAAf,IAAA,KAAAqB,EAAAjD,EAAA,gBAAAnV,MAAA,SAAAyX,EAAAV,GAAA,SAAAsB,IAAA,WAAAT,GAAA,SAAAnX,EAAAC,GAAAmX,EAAAJ,EAAAV,EAAAtW,EAAAC,EAAA,WAAA0X,EAAAA,EAAAA,EAAAF,KAAAG,EAAAA,GAAAA,GAAA,aAAAzB,EAAAV,EAAAE,EAAAM,GAAA,IAAA4B,EAAA,iCAAAb,EAAAV,GAAA,iBAAAuB,EAAA,UAAAC,MAAA,iDAAAD,EAAA,cAAAb,EAAA,MAAAV,EAAA,OAAAyB,GAAA,KAAA9B,EAAAe,OAAAA,EAAAf,EAAAK,IAAAA,IAAA,KAAA0B,EAAA/B,EAAA+B,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA/B,GAAA,GAAAgC,EAAA,IAAAA,IAAA1B,EAAA,gBAAA0B,CAAA,cAAAhC,EAAAe,OAAAf,EAAAkC,KAAAlC,EAAAmC,MAAAnC,EAAAK,SAAA,aAAAL,EAAAe,OAAA,uBAAAa,EAAA,MAAAA,EAAA,YAAA5B,EAAAK,IAAAL,EAAAoC,kBAAApC,EAAAK,IAAA,gBAAAL,EAAAe,QAAAf,EAAAqC,OAAA,SAAArC,EAAAK,KAAAuB,EAAA,gBAAAR,EAAAjB,EAAAX,EAAAE,EAAAM,GAAA,cAAAoB,EAAAxa,KAAA,IAAAgb,EAAA5B,EAAAsC,KAAA,6BAAAlB,EAAAf,MAAAC,EAAA,gBAAAhX,MAAA8X,EAAAf,IAAAiC,KAAAtC,EAAAsC,KAAA,WAAAlB,EAAAxa,OAAAgb,EAAA,YAAA5B,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAA,YAAA4B,EAAAF,EAAA/B,GAAA,IAAAuC,EAAAvC,EAAAe,OAAAA,EAAAgB,EAAAjD,SAAAyD,GAAA,QAAA9O,IAAAsN,EAAA,OAAAf,EAAA+B,SAAA,eAAAQ,GAAAR,EAAAjD,SAAA0D,SAAAxC,EAAAe,OAAA,SAAAf,EAAAK,SAAA5M,EAAAwO,EAAAF,EAAA/B,GAAA,UAAAA,EAAAe,SAAA,WAAAwB,IAAAvC,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAF,EAAA,aAAAjC,EAAA,IAAAc,EAAAjB,EAAAY,EAAAgB,EAAAjD,SAAAkB,EAAAK,KAAA,aAAAe,EAAAxa,KAAA,OAAAoZ,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAAL,EAAA+B,SAAA,KAAAzB,EAAA,IAAAoC,EAAAtB,EAAAf,IAAA,OAAAqC,EAAAA,EAAAJ,MAAAtC,EAAA+B,EAAAY,YAAAD,EAAApZ,MAAA0W,EAAA4C,KAAAb,EAAAc,QAAA,WAAA7C,EAAAe,SAAAf,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,GAAAuM,EAAA+B,SAAA,KAAAzB,GAAAoC,GAAA1C,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAzC,EAAA+B,SAAA,KAAAzB,EAAA,UAAAwC,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAA9Q,KAAAyQ,EAAA,UAAAM,EAAAN,GAAA,IAAA5B,EAAA4B,EAAAO,YAAA,GAAAnC,EAAAxa,KAAA,gBAAAwa,EAAAf,IAAA2C,EAAAO,WAAAnC,CAAA,UAAAnB,EAAAN,GAAA,KAAA0D,WAAA,EAAAJ,OAAA,SAAAtD,EAAArN,QAAAwQ,EAAA,WAAAU,OAAA,YAAA1H,EAAA2H,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAA5E,GAAA,GAAA6E,EAAA,OAAAA,EAAAjb,KAAAgb,GAAA,sBAAAA,EAAAb,KAAA,OAAAa,EAAA,IAAAE,MAAAF,EAAAnY,QAAA,KAAA0S,GAAA,EAAA4E,EAAA,SAAAA,IAAA,OAAA5E,EAAAyF,EAAAnY,QAAA,GAAAiT,EAAA9V,KAAAgb,EAAAzF,GAAA,OAAA4E,EAAAtZ,MAAAma,EAAAzF,GAAA4E,EAAAN,MAAA,EAAAM,EAAA,OAAAA,EAAAtZ,WAAAmK,EAAAmP,EAAAN,MAAA,EAAAM,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAd,EAAA,UAAAA,IAAA,OAAAxY,WAAAmK,EAAA6O,MAAA,UAAA/B,EAAAjC,UAAAkC,EAAA/B,EAAAoC,EAAA,eAAAvX,MAAAkX,EAAAnB,cAAA,IAAAZ,EAAA+B,EAAA,eAAAlX,MAAAiX,EAAAlB,cAAA,IAAAkB,EAAAqD,YAAAzE,EAAAqB,EAAAvB,EAAA,qBAAAb,EAAAyF,oBAAA,SAAAC,GAAA,IAAAC,EAAA,mBAAAD,GAAAA,EAAAE,YAAA,QAAAD,IAAAA,IAAAxD,GAAA,uBAAAwD,EAAAH,aAAAG,EAAAlc,MAAA,EAAAuW,EAAA6F,KAAA,SAAAH,GAAA,OAAAhJ,OAAAoJ,eAAApJ,OAAAoJ,eAAAJ,EAAAtD,IAAAsD,EAAAK,UAAA3D,EAAArB,EAAA2E,EAAA7E,EAAA,sBAAA6E,EAAAxF,UAAAxD,OAAAiF,OAAAc,GAAAiD,CAAA,EAAA1F,EAAAgG,MAAA,SAAA/D,GAAA,OAAAkB,QAAAlB,EAAA,EAAAS,EAAAG,EAAA3C,WAAAa,EAAA8B,EAAA3C,UAAAS,GAAA,0BAAAX,EAAA6C,cAAAA,EAAA7C,EAAAiG,MAAA,SAAA7E,EAAAC,EAAAC,EAAAC,EAAAuB,QAAA,IAAAA,IAAAA,EAAApX,SAAA,IAAAwa,EAAA,IAAArD,EAAA1B,EAAAC,EAAAC,EAAAC,EAAAC,GAAAuB,GAAA,OAAA9C,EAAAyF,oBAAApE,GAAA6E,EAAAA,EAAA1B,OAAApB,MAAA,SAAAH,GAAA,OAAAA,EAAAiB,KAAAjB,EAAA/X,MAAAgb,EAAA1B,MAAA,KAAA9B,EAAAD,GAAA1B,EAAA0B,EAAA5B,EAAA,aAAAE,EAAA0B,EAAAhC,GAAA,0BAAAM,EAAA0B,EAAA,qDAAAzC,EAAArD,KAAA,SAAAwJ,GAAA,IAAAC,EAAA1J,OAAAyJ,GAAAxJ,EAAA,WAAAjT,KAAA0c,EAAAzJ,EAAAxI,KAAAzK,GAAA,OAAAiT,EAAA0J,UAAA,SAAA7B,IAAA,KAAA7H,EAAAzP,QAAA,KAAAxD,EAAAiT,EAAA2J,MAAA,GAAA5c,KAAA0c,EAAA,OAAA5B,EAAAtZ,MAAAxB,EAAA8a,EAAAN,MAAA,EAAAM,CAAA,QAAAA,EAAAN,MAAA,EAAAM,CAAA,GAAAxE,EAAAtC,OAAAA,EAAAmE,EAAA3B,UAAA,CAAA0F,YAAA/D,EAAAuD,MAAA,SAAAmB,GAAA,QAAAC,KAAA,OAAAhC,KAAA,OAAAV,KAAA,KAAAC,WAAA1O,EAAA,KAAA6O,MAAA,OAAAP,SAAA,UAAAhB,OAAA,YAAAV,SAAA5M,EAAA,KAAA4P,WAAA/Q,QAAAgR,IAAAqB,EAAA,QAAA9c,KAAA,WAAAA,EAAAgd,OAAA,IAAAtG,EAAA9V,KAAA,KAAAZ,KAAA8b,OAAA9b,EAAAid,MAAA,WAAAjd,QAAA4L,EAAA,EAAAsR,KAAA,gBAAAzC,MAAA,MAAA0C,EAAA,KAAA3B,WAAA,GAAAE,WAAA,aAAAyB,EAAApe,KAAA,MAAAoe,EAAA3E,IAAA,YAAA4E,IAAA,EAAA7C,kBAAA,SAAA8C,GAAA,QAAA5C,KAAA,MAAA4C,EAAA,IAAAlF,EAAA,cAAAmF,EAAAC,EAAAC,GAAA,OAAAjE,EAAAxa,KAAA,QAAAwa,EAAAf,IAAA6E,EAAAlF,EAAA4C,KAAAwC,EAAAC,IAAArF,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,KAAA4R,CAAA,SAAArH,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAAoD,EAAA4B,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAkC,EAAA,UAAAnC,EAAAC,QAAA,KAAA2B,KAAA,KAAAU,EAAA/G,EAAA9V,KAAAua,EAAA,YAAAuC,EAAAhH,EAAA9V,KAAAua,EAAA,iBAAAsC,GAAAC,EAAA,SAAAX,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,WAAA0B,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,SAAAmC,GAAA,QAAAV,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,YAAAqC,EAAA,UAAA1D,MAAA,kDAAA+C,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,KAAAd,OAAA,SAAAzb,EAAAyZ,GAAA,QAAArC,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,QAAA,KAAA2B,MAAArG,EAAA9V,KAAAua,EAAA,oBAAA4B,KAAA5B,EAAAG,WAAA,KAAAqC,EAAAxC,EAAA,OAAAwC,IAAA,UAAA5e,GAAA,aAAAA,IAAA4e,EAAAvC,QAAA5C,GAAAA,GAAAmF,EAAArC,aAAAqC,EAAA,UAAApE,EAAAoE,EAAAA,EAAAjC,WAAA,UAAAnC,EAAAxa,KAAAA,EAAAwa,EAAAf,IAAAA,EAAAmF,GAAA,KAAAzE,OAAA,YAAA6B,KAAA4C,EAAArC,WAAA7C,GAAA,KAAAmF,SAAArE,EAAA,EAAAqE,SAAA,SAAArE,EAAAgC,GAAA,aAAAhC,EAAAxa,KAAA,MAAAwa,EAAAf,IAAA,gBAAAe,EAAAxa,MAAA,aAAAwa,EAAAxa,KAAA,KAAAgc,KAAAxB,EAAAf,IAAA,WAAAe,EAAAxa,MAAA,KAAAqe,KAAA,KAAA5E,IAAAe,EAAAf,IAAA,KAAAU,OAAA,cAAA6B,KAAA,kBAAAxB,EAAAxa,MAAAwc,IAAA,KAAAR,KAAAQ,GAAA9C,CAAA,EAAAoF,OAAA,SAAAvC,GAAA,QAAAnF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAG,aAAAA,EAAA,YAAAsC,SAAAzC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA1C,CAAA,GAAAqF,MAAA,SAAA1C,GAAA,QAAAjF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,SAAAA,EAAA,KAAA7B,EAAA4B,EAAAO,WAAA,aAAAnC,EAAAxa,KAAA,KAAAgf,EAAAxE,EAAAf,IAAAiD,EAAAN,EAAA,QAAA4C,CAAA,YAAA/D,MAAA,0BAAAgE,cAAA,SAAApC,EAAAd,EAAAE,GAAA,YAAAd,SAAA,CAAAjD,SAAAhD,EAAA2H,GAAAd,WAAAA,EAAAE,QAAAA,GAAA,cAAA9B,SAAA,KAAAV,SAAA5M,GAAA6M,CAAA,GAAAlC,CAAA,UAAA0H,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAAne,EAAAuY,GAAA,QAAAqC,EAAAqD,EAAAje,GAAAuY,GAAA/W,EAAAoZ,EAAApZ,KAAA,OAAAuL,GAAA,YAAA7K,EAAA6K,EAAA,CAAA6N,EAAAJ,KAAAvY,EAAAT,GAAAQ,QAAAC,QAAAT,GAAAkY,KAAAwE,EAAAC,EAAA,UAAAC,GAAA9F,GAAA,sBAAAV,EAAA,KAAAyG,EAAA3S,UAAA,WAAA1J,SAAA,SAAAC,EAAAC,GAAA,IAAA+b,EAAA3F,EAAA5L,MAAAkL,EAAAyG,GAAA,SAAAH,EAAA1c,GAAAwc,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,OAAA3c,EAAA,UAAA2c,EAAAtR,GAAAmR,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,QAAAtR,EAAA,CAAAqR,OAAAvS,EAAA,KAGA,QACEhF,KAAI,WACF,MAAO,CACL0oB,uBAAwB,GACxBC,wBAAyB,GAE7B,EACA3lB,QAAS,CACPulB,sBAAqB,SAAC9mB,EAAS2mB,EAAaQ,EAAQ1uB,GAC7CiB,KAAK+E,SAASiC,OACjBhH,KAAK+E,SAASiC,KAAO,IAEvB,IAAM0mB,EAAmB,IAAIzoB,EAAAA,IAC3BwoB,EAAO7tB,EAAIqtB,EAAc,EACzBQ,EAAO7tB,EAAIqtB,EAAc,EACzBQ,EAAO5tB,EAAIotB,EAAc,EACzBQ,EAAO5tB,EAAIotB,EAAc,EACzB,IACA,KAEEU,EAAyB,IAAI1J,GAAAA,EAAkB,CACjDC,OAAQwJ,EACRpnB,QAASA,EACTd,aAAa,EACbJ,KAAMH,EAAAA,MAER0oB,EAAuB1kB,SAAW,CAAC,EACnC0kB,EAAuB1kB,SAASjM,KAAO,yBACvC2wB,EAAuB1kB,SAASmW,WAC9B,YACA6N,EACA,IACAQ,EAAO7tB,EACP,IACA6tB,EAAO5tB,EACP,IACAd,EACF4uB,EAAuB1kB,SAASlK,SAAWA,EAC3C4uB,EAAuB1kB,SAASmb,SAAW,GAC3CpkB,KAAK+E,SAASiC,KAAK2B,KAAKglB,GACxB3tB,KAAKihB,sBACLjhB,KAAKke,yBACP,EACMsN,gBAAe,SAACllB,EAAS1G,EAAGC,EAAGF,EAAMZ,GAAU,IAAAJ,EAAA,YAAA2d,GAAA/H,KAAA8F,MAAA,SAAA0C,IAAA,IAAA2Q,EAAAC,EAAA,OAAApZ,KAAAoB,MAAA,SAAAuH,GAAA,eAAAA,EAAAlC,KAAAkC,EAAAlE,MAAA,OAC9Cra,EAAKoG,SAASiC,OACjBrI,EAAKoG,SAASiC,KAAO,IAEjB0mB,EAAmB,IAAIzoB,EAAAA,KAC1B,EACD,GACC,EACD,EACA,IACA,KAEFyoB,EAAiBrlB,SAAST,IAAI,EAAG,EAAG,GACpC8lB,EAAiBE,GAAGhmB,IAAI,EAAG,EAAG,GAC1B+lB,EAAyB,IAAI1J,GAAAA,EAAkB,CACjDC,OAAQwJ,EACRpnB,QAASA,EACTd,aAAa,EACbJ,KAAMH,EAAAA,MAER0oB,EAAuB1kB,SAAW,CAAC,EACnC0kB,EAAuB1kB,SAASjM,KAAO,yBACvC2wB,EAAuB1kB,SAASmW,WAC9B,YAAcxf,EAAI,IAAMC,EAAI,IAAMF,EAAO,IAAMZ,EACjD4uB,EAAuB1kB,SAASlK,SAAWA,EAC3C4uB,EAAuBvJ,SAAW,GAClCzlB,EAAKkvB,sBAAsBH,EAAkB9tB,EAAGC,EAAGF,GACnDhB,EAAKoG,SAASiC,KAAK2B,KAAKglB,GACxBhvB,EAAKsiB,sBACLtiB,EAAKuf,0BAAyB,yBAAAhB,EAAA/B,OAAA,GAAA4B,EAAA,IA7BqBT,EA8BrD,EACAwR,oBAAmB,SAAC/oB,GAClBA,EAASuB,QAAQiF,UACjBxG,EAASwG,SACX,EACAwiB,qCAAoC,SAAChvB,GAAU,IAAAe,EAAA,KACxCE,KAAK+E,SAASiC,OACnBhH,KAAK+E,SAASiC,KAAOhH,KAAK+E,SAASiC,KAAKyB,QAAO,SAAC+c,GAC9C,MACqB,0BAAnBA,EAAEvc,SAASjM,MACXwoB,EAAEvc,SAASlK,UAAYA,IAEvBe,EAAKguB,oBAAoBtI,IAClB,EAGX,IACF,EACAqI,sBAAqB,SAAC3J,EAAQtkB,EAAGC,EAAGF,GAClC,IAGImG,EAHE4iB,EAAW1oB,KAAKuqB,eAAeC,gBAC/B7B,EAAY3oB,KAAKuqB,eAAeE,iBAClCtc,GAAUud,EAAAA,EAAAA,IAAc9rB,EAAGC,EAAGF,EAAM+oB,EAAUC,GAE9CqF,EAAgBrtB,KAAKC,IAAI,EAAGjB,GAChCmG,EACG,IAAOnF,KAAKK,GAAKiD,EAActD,KAAKgqB,IAAKjC,EAAW/nB,KAAKK,GAAM,KAChEgtB,EAGI7f,EAAQ,GAAGvO,EAAIuO,EAAQ,GAAGvO,EAC1BuO,EAAQ,GAAGtO,EAAIsO,EAAQ,GAAGtO,EAGhCqkB,EAAO+J,KAAO9f,EAAQ,GAAGvO,EAAI,IAC7BskB,EAAOgK,MAAQ/f,EAAQ,GAAGvO,EAAI,IAC9BskB,EAAOiK,OAAShgB,EAAQ,GAAGtO,EAAI,IAC/BqkB,EAAOkK,IAAMjgB,EAAQ,GAAGtO,EAAI,IAE5BqkB,EAAOgB,wBACT,GAEFvd,MAAO,CACLogB,iBAAgB,SAACuF,GACVA,GACLttB,KAAK+tB,qCAAqCT,EAAYpvB,IACxD,I,2wBCvHJ,QACE2J,QAAS,CACPwmB,qBAAoB,SAAC5e,EAAY6e,GAC/B,IAAMC,EAAiB,GACjBC,EAAgB,GAChBC,EAAY,GAclB,GAZAhf,EAAW/G,SAAQ,SAACV,GAClB,IAAMc,EAAYd,EAASI,WAAWC,SAASQ,MACzC6lB,EAAU1mB,EAASI,WAAWumB,OAAO9lB,MAI3C,GAHA0lB,EAAe5lB,KAAIiC,MAAnB2jB,EAAchkB,GAASzB,EAAUoS,MAAM,EAAG,EAAIlT,EAAS4mB,UAAUC,SACjEL,EAAc7lB,KAAIiC,MAAlB4jB,EAAajkB,GAASmkB,EAAQxT,MAAM,EAAG,EAAIlT,EAAS4mB,UAAUC,SAE1D7mB,EAASI,WAAW0mB,GAAI,CAC1B,IAAMpjB,EAAM1D,EAASI,WAAW0mB,GAAGjmB,MACnC4lB,EAAU9lB,KAAIiC,MAAd6jB,EAASlkB,GAASmB,EAAIwP,MAAM,EAAG,EAAIlT,EAAS4mB,UAAUC,QACxD,CACF,IAGEP,EAAelmB,WAAWC,UAC1BimB,EAAelmB,WAAW0mB,IAC1BR,EAAelmB,WAAWumB,QAC1BL,EAAelmB,WAAWC,SAASQ,MAAMnH,QACvC6sB,EAAe7sB,QACjB4sB,EAAelmB,WAAW0mB,GAAGjmB,MAAMnH,QAAU+sB,EAAU/sB,QACvD4sB,EAAelmB,WAAWumB,OAAO9lB,MAAMnH,QAAU8sB,EAAc9sB,OAC/D,CACA,IAAIoH,EAAYwlB,EAAelmB,WAAWC,SAASQ,MAC/C6C,EAAM4iB,EAAelmB,WAAW0mB,GAAGjmB,MACnC6lB,EAAUJ,EAAelmB,WAAWumB,OAAO9lB,MAC/C,IAAK,IAAIjC,KAAK2nB,EACZzlB,EAAUlC,GAAK2nB,EAAe3nB,GAEhC,IAAK,IAAIA,KAAK6nB,EACZ/iB,EAAI9E,GAAK6nB,EAAU7nB,GAErB,IAAK,IAAIA,KAAK4nB,EACZE,EAAQ9nB,GAAK4nB,EAAc5nB,GAE7B0nB,EAAevlB,aAAa,EAAGwlB,EAAe7sB,OAAS,EACzD,MACE4sB,EAAe/iB,UACf+iB,EAAiB,KACjBA,EAAiBtuB,KAAK+uB,qBAAqBtf,GAK7C,OAHA6e,EAAelmB,WAAWC,SAASC,aAAc,EACjDgmB,EAAelmB,WAAWumB,OAAOrmB,aAAc,EAC/CgmB,EAAehmB,aAAc,EACtBgmB,CACT,EACAS,qBAAoB,SAACtf,GACnB,IAAM6e,EAAiB,IAAIrpB,EAAAA,IACrBspB,EAAiB,GACjBC,EAAgB,GAChBC,EAAY,GA4BlB,OA1BAhf,EAAW/G,SAAQ,SAACV,GAClB,IAAMc,EAAYd,EAASI,WAAWC,SAASQ,MACzC6lB,EAAU1mB,EAASI,WAAWumB,OAAO9lB,MAK3C,GAHA0lB,EAAe5lB,KAAIiC,MAAnB2jB,EAAchkB,GAASzB,IACvB0lB,EAAc7lB,KAAIiC,MAAlB4jB,EAAajkB,GAASmkB,IAElB1mB,EAASI,WAAW0mB,GAAI,CAC1B,IAAMpjB,EAAM1D,EAASI,WAAW0mB,GAAGjmB,MACnC4lB,EAAU9lB,KAAIiC,MAAd6jB,EAASlkB,GAASmB,GACpB,CACF,IAEA4iB,EAAetlB,aACb,WACA,IAAI/D,EAAAA,IAAsB,IAAI6E,aAAaykB,GAAiB,IAE9DD,EAAetlB,aACb,SACA,IAAI/D,EAAAA,IAAsB,IAAI6E,aAAa0kB,GAAgB,IAE7DF,EAAetlB,aACb,KACA,IAAI/D,EAAAA,IAAsB,IAAI6E,aAAa2kB,GAAY,IAEzDH,EAAe9iB,uBACR8iB,CACT,EAEAzd,yBAAwB,SAACP,EAAMb,EAAY1K,GACzC,GAAKuL,EAKE,CACL,IAAIge,EAAiBtuB,KAAKquB,qBACxB5e,EACAa,EAAKtI,UAEPsI,EAAKtI,SAAWsmB,CAClB,KAXW,CACT,IAAIA,EAAiBtuB,KAAK+uB,qBAAqBtf,GAC/Ca,EAAO,IAAIrL,EAAAA,IAAWqpB,EAAgBvpB,GAEtC/E,KAAKgS,MAAMxI,IAAI8G,EACjB,CAQA,OADAA,EAAKM,eAAgB,EACdN,CACT,ICvFJ,IACE0e,OAAQ,CACNC,GACA1oB,EACA2oB,GACAloB,GACAzB,GACAD,GACAkC,GACAb,GACA0jB,GACAxjB,GACAqc,GACA5c,GACA6oB,GACAC,GACAC,GACAf,K,qBCvBJ,IACEzpB,KAAI,WACF,MAAO,CACLyqB,iBAAkB,KAEtB,EACAxqB,QAAO,WACL9E,KAAKuvB,kBAAoB,IAAItqB,EAAAA,IAC3B,GACA,EACA,EACA,KAEFjF,KAAKwvB,mBAAqB,IAAIvqB,EAAAA,KAC3B,GACD,GACA,IACC,GACD,EACA,IAEJ,EACA4C,QAAS,CACP4nB,kBAAiB,SAACC,GACZA,GACF1vB,KAAKkkB,OAASlkB,KAAKuvB,kBACnBvvB,KAAKkkB,OAAO7b,SAAST,IAAI,GAAI,IAAK,IAClC5H,KAAKkkB,OAAO0J,GAAGhmB,IAAI,EAAG,EAAG,KAEzB5H,KAAKkkB,OAASlkB,KAAKwvB,mBACnBxvB,KAAKkkB,OAAO7b,SAAST,IAAI,EAAG,EAAG,KAC/B5H,KAAKkkB,OAAO0J,GAAGhmB,IAAI,EAAG,EAAG,IAG3B5H,KAAK0tB,iBAAmB,IAAIzoB,EAAAA,IAC1B,EACA,EACA,IACA,KAEFjF,KAAK0tB,iBAAiBrlB,SAAST,IAAI,EAAG,EAAG,KACzC5H,KAAK0tB,iBAAiBE,GAAGhmB,IAAI,EAAG,EAAG,GACnC5H,KAAKgS,MAAMxI,IAAIxJ,KAAKkkB,OACtB,EACAyL,qBAAoB,WAClB,IAAMC,EACJ5vB,KAAK6vB,WAAWC,YAAc9vB,KAAK6vB,WAAWE,aAChD,GAAI/vB,KAAKkkB,OAAO8L,qBAAsB,CACpC,IAAMC,EAAgBtvB,KAAKc,KACxBzB,KAAKkkB,OAAOgK,MAAQluB,KAAKkkB,OAAO+J,OAC9BjuB,KAAKkkB,OAAOkK,IAAMpuB,KAAKkkB,OAAOiK,SAE/ByB,EAAcK,EAAgB,GAChCjwB,KAAKkkB,OAAO+J,MAAQ2B,EAAcK,EAClCjwB,KAAKkkB,OAAOgK,OAAS0B,EAAcK,IAEnCjwB,KAAKkkB,OAAOkK,KAAOwB,EAAcK,EACjCjwB,KAAKkkB,OAAOiK,QAAUyB,EAAcK,EAExC,MACEjwB,KAAKkkB,OAAOG,OAASuL,EAEvB5vB,KAAKkkB,OAAOgB,wBACd,EACAgL,kCAAiC,WAC/B,IAAMC,EAAiB,IAAIlrB,EAAAA,IACzBjF,KAAKkkB,OAAO7b,SAASzI,EACrBI,KAAKkkB,OAAO7b,SAASxI,EACrBG,KAAKkkB,OAAO7b,SAASO,GAEnBwnB,EACDpwB,KAAKkkB,OAAO7b,SAASO,EAAI5I,KAAKkkB,OAAOM,IAAM7jB,KAAKK,GAAM,IAGzDhB,KAAKwvB,mBAAmBvB,MACpBjuB,KAAKkkB,OAAOG,OAAS+L,EAAsB,EAC/CpwB,KAAKwvB,mBAAmBtB,MACrBluB,KAAKkkB,OAAOG,OAAS+L,EAAsB,EAC9CpwB,KAAKwvB,mBAAmBpB,IAAMgC,EAAqB,EACnDpwB,KAAKwvB,mBAAmBrB,QAAUiC,EAAqB,EACvDpwB,KAAKwvB,mBAAmBvK,KAAO,EAC/BjlB,KAAKwvB,mBAAmBxK,IAAM,IAC9BhlB,KAAKwvB,mBAAmB5B,GAAK,IAAI3oB,EAAAA,IAAc,EAAG,EAAG,GACrDjF,KAAKwvB,mBAAmBnnB,SAAST,IAC/BuoB,EAAevwB,EACfuwB,EAAetwB,EACf,KAEFG,KAAKkkB,OAASlkB,KAAKwvB,mBACnBxvB,KAAKkkB,OAAO7b,SAAST,IACnBuoB,EAAevwB,EACfuwB,EAAetwB,EACfswB,EAAevnB,GAEjB5I,KAAKkkB,OAAOgB,yBACZllB,KAAKyS,SAASyR,OAASlkB,KAAKkkB,OAC5BlkB,KAAKqwB,SAASC,aAAetwB,KAAKkkB,OAElClkB,KAAKuwB,WAAWrM,OAASlkB,KAAKkkB,OAC9BlkB,KAAKwwB,kBAAkBtM,OAASlkB,KAAKkkB,OACrClkB,KAAKywB,qBAAqBH,aAAetwB,KAAKkkB,OAC9ClkB,KAAK0wB,oBAAoBJ,aAAetwB,KAAKkkB,OAC7ClkB,KAAK2wB,aAAaC,oBAAqB,EACvC5wB,KAAK2wB,aAAa/V,OAAS5a,KAAKkkB,OAChClkB,KAAK2wB,aAAa5O,OAAOna,IAAIuoB,EAAevwB,EAAGuwB,EAAetwB,EAAG,GACjEG,KAAK2wB,aAAaE,aAAe,CAC/BC,KAAM7rB,EAAAA,IAAY8rB,IAClBC,OAAQ/rB,EAAAA,IAAYgsB,MACpBC,MAAOjsB,EAAAA,IAAYksB,QAErBnxB,KAAK2wB,aAAaS,cAAe,EACjCpxB,KAAK2wB,aAAaU,SAClBrxB,KAAKkkB,OAAO7b,SAAST,IACnBuoB,EAAevwB,EACfuwB,EAAetwB,EACfswB,EAAevnB,GAEjB5I,KAAKkkB,OAAOS,OACV,IAAI1f,EAAAA,IAAckrB,EAAevwB,EAAGuwB,EAAetwB,EAAG,IAExDG,KAAKkkB,OAAOgB,yBACZllB,KAAK+H,cAAe,EACpB/H,KAAK8H,cACL9H,KAAKqwB,SAASnP,QAChB,EACAoQ,kCAAiC,WAC/BtxB,KAAKkkB,OAASlkB,KAAKuvB,kBACnB,IAAIgC,GACDvxB,KAAKwvB,mBAAmBtB,MAAQluB,KAAKwvB,mBAAmBvB,OACvDjuB,KAAKuvB,kBAAkB/K,IAAM7jB,KAAKK,GAAM,KAC1ChB,KAAKuvB,kBAAkBlL,OAEzBrkB,KAAKkkB,OAAO7b,SAAST,IACnB5H,KAAKwvB,mBAAmBnnB,SAASzI,EACjCI,KAAKwvB,mBAAmBnnB,SAASxI,EACjC0xB,GAGFvxB,KAAKkkB,OAAO0J,GAAK,IAAI3oB,EAAAA,IAAc,EAAG,EAAG,GACzCjF,KAAKkkB,OAAOgB,yBAEZllB,KAAKyS,SAASyR,OAASlkB,KAAKkkB,OAC5BlkB,KAAKqwB,SAAS5d,SAASyR,OAASlkB,KAAKkkB,OACrClkB,KAAKqwB,SAASC,aAAetwB,KAAKkkB,OAClClkB,KAAKuwB,WAAWrM,OAASlkB,KAAKkkB,OAC9BlkB,KAAKwwB,kBAAkBtM,OAASlkB,KAAKkkB,OACrClkB,KAAKywB,qBAAqBvM,OAASlkB,KAAKkkB,OACxClkB,KAAKywB,qBAAqBH,aAAetwB,KAAKkkB,OAC9ClkB,KAAK0wB,oBAAoBxM,OAASlkB,KAAKkkB,OACvClkB,KAAK0wB,oBAAoBJ,aAAetwB,KAAKkkB,OAC7ClkB,KAAK2wB,aAAazM,OAASlkB,KAAKkkB,OAChClkB,KAAK2wB,aAAa/V,OAAS5a,KAAKkkB,OAChClkB,KAAK2wB,aAAa5O,OAAOna,IACvB5H,KAAKkkB,OAAO7b,SAASzI,EACrBI,KAAKkkB,OAAO7b,SAASxI,EACrB,GAEFG,KAAK2wB,aAAaC,oBAAqB,EACvC5wB,KAAK2wB,aAAaS,cAAe,EACjCpxB,KAAK2wB,aAAaE,aAAe,CAC/BC,KAAM7rB,EAAAA,IAAYksB,OAClBH,OAAQ/rB,EAAAA,IAAYgsB,MACpBC,MAAOjsB,EAAAA,IAAY8rB,KAErB/wB,KAAK2wB,aAAaU,SAElBrxB,KAAKqwB,SAASnP,QAChB,EACAsQ,SAAQ,WACN,GAAIxxB,KAAKkkB,OAAO8L,qBACdhwB,KAAKkkB,OAAOvkB,MAAQ,IACpBK,KAAKkkB,OAAOgB,yBACZllB,KAAKkhB,aACA,CACL,IAAIa,EAAS/hB,KAAK2wB,aAAa5O,OAC3B0P,EAAiBzxB,KAAKkkB,OAAO7b,SAC7BqpB,GAAoB/jB,EAAAA,EAAAA,IACtBoU,GACArU,EAAAA,EAAAA,IAAe,EAAI,KAAKoX,EAAAA,EAAAA,IAAgB2M,EAAgB1P,KAE1D2P,EAAoB,CAClBA,EAAkB9xB,EAClB8xB,EAAkB7xB,EAClB6xB,EAAkB9oB,GAEpBmZ,EAAS,CAACA,EAAOniB,EAAGmiB,EAAOliB,EAAGkiB,EAAOnZ,GACrC5I,KAAK2xB,WAAW,CAAEtpB,SAAUqpB,EAAmB3P,OAAAA,EAAQ6P,SAAU,KACnE,CACF,EACAC,UAAS,WACP,GAAI7xB,KAAKkkB,OAAO8L,qBACdhwB,KAAKkkB,OAAOvkB,MAAQ,IACpBK,KAAKkkB,OAAOgB,yBACZllB,KAAKkhB,aACA,CACL,IAAIa,EAAS/hB,KAAK2wB,aAAa5O,OAC3B0P,EAAiBzxB,KAAKkkB,OAAO7b,SAC7BqpB,GAAoB/jB,EAAAA,EAAAA,IACtBoU,GACArU,EAAAA,EAAAA,IAAe,KAAKoX,EAAAA,EAAAA,IAAgB2M,EAAgB1P,KAEtD2P,EAAoB,CAClBA,EAAkB9xB,EAClB8xB,EAAkB7xB,EAClB6xB,EAAkB9oB,GAEpBmZ,EAAS,CAACA,EAAOniB,EAAGmiB,EAAOliB,EAAGkiB,EAAOnZ,GACrC5I,KAAK2xB,WAAW,CAAEtpB,SAAUqpB,EAAmB3P,OAAAA,EAAQ6P,SAAU,KACnE,CACF,EACAE,+BAA8B,SAAC3B,EAAgB4B,GAC7C/xB,KAAKkkB,OAAO7b,SAAST,IACnBuoB,EAAevwB,EACfuwB,EAAetwB,EACfswB,EAAevnB,GAEjB5I,KAAKkkB,OAAOS,OAAOoN,EAAenyB,EAAGmyB,EAAelyB,EAAGkyB,EAAenpB,GACtE5I,KAAKkkB,OAAOgB,yBACRllB,KAAK2wB,cAAgB3wB,KAAK2wB,aAAaU,SACzCrxB,KAAK2wB,aAAa5O,OAAOna,IACvBmqB,EAAenyB,EACfmyB,EAAelyB,EACfkyB,EAAenpB,GAEjB5I,KAAK2wB,aAAaU,UAEpBrxB,KAAKkhB,QACP,EACA8Q,qCAAoC,SAAAC,GAQjC,IAPDhE,EAAIgE,EAAJhE,KACAC,EAAK+D,EAAL/D,MACAE,EAAG6D,EAAH7D,IACAD,EAAM8D,EAAN9D,OACAxuB,EAAIsyB,EAAJtyB,KACAC,EAACqyB,EAADryB,EACAC,EAACoyB,EAADpyB,EAEA,GAAIouB,EAAOC,EAAO,CACf,IAAAgE,EAAgB,CAAChE,EAAOD,GAAvBA,EAAIiE,EAAA,GAAEhE,EAAKgE,EAAA,EACf,CACA,GAAI9D,EAAMD,EAAQ,CACf,IAAAgE,EAAgB,CAAChE,EAAQC,GAAxBA,EAAG+D,EAAA,GAAEhE,EAAMgE,EAAA,EACf,CACA,MAAO,CACLlE,KAAAA,EACAC,MAAAA,EACAE,IAAAA,EACAD,OAAAA,EACAxuB,KAAAA,EACAC,EAAAA,EACAC,EAAAA,EAEJ,EACAuyB,kDAAiD,SAACC,GAChD,GAAKA,GAAqD,IAArCnhB,OAAOC,KAAKkhB,GAAc3wB,OAA/C,CAIA,IAAA4wB,EACEtyB,KAAKgyB,qCAAqCK,GADtCzyB,EAAC0yB,EAAD1yB,EAAGC,EAACyyB,EAADzyB,EAAGouB,EAAIqE,EAAJrE,KAAMC,EAAKoE,EAALpE,MAAOE,EAAGkE,EAAHlE,IAAKD,EAAMmE,EAANnE,OAAQxuB,EAAI2yB,EAAJ3yB,KAEtCK,KAAKkkB,OAAO0J,GAAK,IAAI3oB,EAAAA,IAAc,EAAG,EAAG,GAEzCjF,KAAKkkB,OAAO+J,KAAOA,EACnBjuB,KAAKkkB,OAAOgK,MAAQA,EACpBluB,KAAKkkB,OAAOkK,IAAMA,EAClBpuB,KAAKkkB,OAAOiK,OAASA,EACrBnuB,KAAKkkB,OAAOe,KAAO,EACnBjlB,KAAKkkB,OAAOc,IAAM,IAClBhlB,KAAKkkB,OAAOvkB,KAAOA,EAEnBK,KAAKkkB,OAAO7b,SAAST,IAAIhI,EAAGC,EAAG,KAC/BG,KAAKkkB,OAAOS,OAAO/kB,EAAGC,EAAG,GACzBG,KAAKkkB,OAAOgB,yBAERllB,KAAK2wB,eACP3wB,KAAK2wB,aAAa4B,cAAgB5xB,KAAKK,GAAK,EAC5ChB,KAAK2wB,aAAa5O,OAAOna,IAAIhI,EAAGC,EAAG,GAEnCG,KAAK2wB,aAAaC,oBAAqB,EACvC5wB,KAAK2wB,aAAa/V,OAAS5a,KAAKkkB,OAChClkB,KAAK2wB,aAAaE,aAAe,CAC/BC,KAAM7rB,EAAAA,IAAY8rB,IAClBC,OAAQ/rB,EAAAA,IAAYgsB,MACpBC,MAAOjsB,EAAAA,IAAYksB,QAErBnxB,KAAK2wB,aAAaS,cAAe,EACjCpxB,KAAK2wB,aAAaU,SA7BpB,MAFErxB,KAAKwyB,qCAiCT,EACAA,oCAAmC,WACjC,IAAMvE,EACJjuB,KAAK0qB,YAAYxpB,KAAO,IAAOgD,EAC3BgqB,EACJluB,KAAK0qB,YAAYvpB,KAAO,IAAO+C,EAC3BkqB,EACJpuB,KAAK0qB,YAAYrpB,KAAO,IAAO6C,EAC3BiqB,EACJnuB,KAAK0qB,YAAYtpB,KAAO,IAAO8C,EAC3BvE,EAAO,EACPC,GAAKI,KAAK0qB,YAAYxpB,KAAOlB,KAAK0qB,YAAYvpB,MAAQ,IACtDtB,GAAKG,KAAK0qB,YAAYtpB,KAAOpB,KAAK0qB,YAAYrpB,MAAQ,IAE5DrB,KAAKoyB,kDAAkD,CACrDnE,KAAAA,EACAC,MAAAA,EACAE,IAAAA,EACAD,OAAAA,EACAxuB,KAAAA,EACAC,EAAAA,EACAC,EAAAA,GAEJ,EACA4yB,yBAAwB,WACtB,GAAyB,GAArBzyB,KAAKyQ,MAAM/O,OAAf,CACA,IAAIgxB,EAAS,GACTC,EAAS3yB,KAAK0qB,YACdkI,EAAe,CACjBhzB,GAAI+yB,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,IACjCrB,GAAI8yB,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,IACjCwH,EAAG,GAEDiqB,EAAiBlyB,KAAKgsB,KACvBgG,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,KAC7ByxB,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,KAE5ByO,EACF,EAAIgjB,EAAiBlyB,KAAKmyB,IAAMJ,EAAS,EAAK/xB,KAAKK,GAAM,KACvD+xB,EAAmB,CAAEnzB,EAAG,EAAGC,EAAG,EAAG+I,EAAGiH,GAClCmjB,GAAiBrlB,EAAAA,EAAAA,IAAUilB,EAAcG,GACzC1qB,EAAW,CACf2qB,EAAepzB,EACfozB,EAAenzB,EAAIgQ,EACnBmjB,EAAepqB,GAEbmZ,EAAS,CAAC6Q,EAAahzB,EAAGgzB,EAAa/yB,EAAG+yB,EAAahqB,GAE3D5I,KAAKkkB,OAAO7b,SAAST,IAAIS,EAAS,GAAIA,EAAS,GAAIA,EAAS,IAC5DrI,KAAKkkB,OAAOgB,yBAEZllB,KAAK2wB,aAAa5O,OAAOna,IAAIma,EAAO,GAAIA,EAAO,GAAIA,EAAO,IACtD/hB,KAAK2wB,cAAgB3wB,KAAK2wB,aAAaU,QACzCrxB,KAAK2wB,aAAaU,QA5Bc,CA8BpC,EACA4B,wBAAuB,WACrB,GAAyB,GAArBjzB,KAAKyQ,MAAM/O,OACf,GAAI1B,KAAKkkB,OAAO8L,qBACdhwB,KAAKwyB,0CACA,CACL,IAAIE,EAAS,GACTC,EAAS3yB,KAAK0qB,YACdkI,EAAe,CACjBhzB,GAAI+yB,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,IACjCrB,GAAI8yB,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,IACjCwH,EAAG,GAEDiqB,EACF3uB,EACAvD,KAAKgsB,KACFgG,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,KAC7ByxB,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,KAE9ByO,EAAWgjB,EAAiBlyB,KAAKmyB,IAAMJ,EAAS,EAAK/xB,KAAKK,GAAM,KAChE+xB,EAAmB,CAAEnzB,EAAG,EAAGC,EAAG,EAAG+I,EAAGiH,GAClCmjB,GAAiBrlB,EAAAA,EAAAA,IAAUilB,EAAcG,GACzC1qB,EAAW,CACf2qB,EAAepzB,EACfozB,EAAenzB,EAAIgQ,EACnBmjB,EAAepqB,GAEbmZ,EAAS,CAAC6Q,EAAahzB,EAAGgzB,EAAa/yB,EAAG+yB,EAAahqB,GAC3D5I,KAAK2xB,WAAW,CAAEtpB,SAAAA,EAAU0Z,OAAAA,EAAQyC,IAAKkO,GAC3C,CACF,EACAQ,gCAA+B,WAC7B,IAAI7qB,EAAU0Z,EACV2Q,EAAS,GACb,GAAyB,GAArB1yB,KAAKyQ,MAAM/O,OAAa,CAC1B,IAAIixB,EAAS3yB,KAAK0qB,YACdkI,EAAe,CACjBhzB,GAAI+yB,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,IACjCrB,GAAI8yB,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,IACjCwH,EAAG,GAEDiqB,EAAiBlyB,KAAKgsB,KACvBgG,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,KAC7ByxB,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,KAG5ByO,EACGgjB,EAAiBlyB,KAAKmyB,IAAMJ,EAAS,EAAK/xB,KAAKK,GAAM,KAA1D,EACE+xB,EAAmB,CAAEnzB,EAAG,EAAGC,EAAG,EAAG+I,EAAGiH,GAClCmjB,GAAiBrlB,EAAAA,EAAAA,IAAUilB,EAAcG,GAC/C1qB,EAAW,CAAC2qB,EAAepzB,EAAGozB,EAAenzB,EAAGmzB,EAAepqB,GAC/DmZ,EAAS,CAAC6Q,EAAahzB,EAAGgzB,EAAa/yB,EAAG+yB,EAAahqB,EACzD,MACEP,EAAW,CAAC,EAAG,EAAG,KAClB0Z,EAAS,CAAC,EAAG,EAAG,GAElB/hB,KAAK2xB,WAAW,CACdtpB,SAAAA,EACA0Z,OAAAA,EACAyC,IAAKkO,EACLS,SAAUnzB,KAAKkwB,mCAEnB,EACAkD,sBAAqB,SAACxnB,GACpB,GAAIA,EAAS,CACX,IAAIynB,EAAaznB,EACXgnB,EAAeS,EAAWC,UAC1BvR,EAAS,CACb6Q,EAAahzB,EAAI,IACjBgzB,EAAa/yB,EAAI,IACjB+yB,EAAahqB,EAAI,KAEboqB,GAAiBrlB,EAAAA,EAAAA,IACrB0lB,EAAWC,WACX5lB,EAAAA,EAAAA,IAAe,KAAO2lB,EAAW5mB,eAE7BpE,EAAW,CACf2qB,EAAepzB,EAAI,IACnBozB,EAAenzB,EAAI,IAAO,EAC1BmzB,EAAepqB,EAAI,KAErB5I,KAAK2xB,WAAW,CAAEtpB,SAAAA,EAAU0Z,OAAAA,GAC9B,CACF,EACAwR,gBAAe,SAAC3nB,GACd,GAAIA,EAAS,CACX,IAAIynB,EAAaznB,EACXgnB,EAAeS,EAAWC,UAC1BvR,EAAS,CACb6Q,EAAahzB,EAAI,IACjBgzB,EAAa/yB,EAAI,IACjB+yB,EAAahqB,EAAI,KAEf4qB,EAAa,CACf5zB,GAAIe,KAAKgqB,KAAM0I,EAAWngB,UAAY,IAAMvS,KAAKK,GAAM,KACvDnB,EAAGc,KAAKmyB,KAAMO,EAAWngB,UAAY,IAAMvS,KAAKK,GAAM,KACtD4H,EAAG,GAECoqB,GAAiBrlB,EAAAA,EAAAA,IACrB0lB,EAAWC,WACX5lB,EAAAA,EAAAA,IAAe,KAAO8lB,IAElBnrB,EAAW,CACf2qB,EAAepzB,EAAI,IACnBozB,EAAenzB,EAAI,IACnBmzB,EAAepqB,EAAI,IAAO,GAE5B5I,KAAK2xB,WAAW,CAAEtpB,SAAAA,EAAU0Z,OAAAA,GAC9B,CACF,EACA4P,WAAU,SAAC8B,GAAS,IAAA90B,EAAA,KAEhB0J,EAKEorB,EALFprB,SACA0Z,EAIE0R,EAJF1R,OAAM2R,EAIJD,EAHFjP,IAAAA,OAAG,IAAAkP,EAAG,GAAEA,EAAAC,EAGNF,EAFF7B,SAAAA,OAAQ,IAAA+B,EAAG,IAAIA,EAAAC,EAEbH,EADFN,SAAAA,OAAQ,IAAAS,EAAG,WAAO,EAACA,EAGrB,GADAC,KAAAA,YACI7zB,KAAKkkB,OAAQ,CACf,IAAM4P,EAAkB,CACtB1I,EAAG,GAEC2I,EAAgB,CACpBn0B,EAAGI,KAAK2wB,aAAa5O,OAAOniB,EAC5BC,EAAGG,KAAK2wB,aAAa5O,OAAOliB,EAC5B+I,EAAG5I,KAAK2wB,aAAa5O,OAAOnZ,GAExBorB,EAAah0B,KAAKkkB,OAAOM,IACzByP,EAAwB,CAC5Br0B,EAAGI,KAAKkkB,OAAO7b,SAASzI,EACxBC,EAAGG,KAAKkkB,OAAO7b,SAASxI,EACxB+I,EAAG5I,KAAKkkB,OAAO7b,SAASO,GAEpBsrB,EAAsB,CAC1Bt0B,EAAGyI,EAAS,GACZxI,EAAGwI,EAAS,GACZO,EAAGP,EAAS,IAEd,GAAIA,EAAS,IAAM0Z,EAAO,IAAM1Z,EAAS,IAAM0Z,EAAO,GAAI,CACxD,IAAMoS,GAAa1lB,EAAAA,EAAAA,IACjBylB,EACAD,GAGIG,EAAUzzB,KAAK0zB,MACnBJ,EAAsBp0B,EAAIq0B,EAAoBr0B,EAC9Co0B,EAAsBr0B,EAAIs0B,EAAoBt0B,GAEhDI,KAAKs0B,YAAc,IAAIT,KAAAA,OAAYC,GAChCS,GAAG,CAAEnJ,EAAG,GAAKwG,GACb4C,OAAOX,KAAAA,OAAaY,WAAWC,KAC/BC,UAAS,WACR,IAAMvJ,EAAI0I,EAAgB1I,EAC1BzsB,EAAKulB,OAAOM,IAAMwP,EAAarzB,KAAKi0B,KAAKxJ,IAAM5G,EAAMwP,GAErD,IAAMa,EAAcV,GAAc,EAAI/I,GAChC0J,GAAYV,EAAUzzB,KAAKK,GAAK,IAAM,EAAIoqB,GAAKzqB,KAAKK,GAAK,EACzD+zB,EACJb,EAAoBtrB,GACnB,EAAIwiB,IAAM6I,EAAsBrrB,EAAIsrB,EAAoBtrB,GACrDosB,EAAe,CACnBp1B,EAAGs0B,EAAoBt0B,EAAIi1B,EAAcl0B,KAAKgqB,IAAImK,GAClDj1B,EAAGq0B,EAAoBr0B,EAAIg1B,EAAcl0B,KAAKmyB,IAAIgC,GAClDlsB,EAAGmsB,GAELp2B,EAAKulB,OAAO7b,SAAST,IACnBotB,EAAap1B,EACbo1B,EAAan1B,EACbm1B,EAAapsB,GAEfjK,EAAKulB,OAAO0J,GAAK,IAAI3oB,EAAAA,IACnB,EACAtE,KAAKmyB,IAAK1H,EAAIzqB,KAAKK,GAAM,GACzBL,KAAKgqB,IAAKS,EAAIzqB,KAAKK,GAAM,IAG3BrC,EAAKulB,OAAOgB,yBACZ,IAAM+P,EAAa,CACjBr1B,EAAGm0B,EAAcn0B,EAAIwrB,GAAKrJ,EAAO,GAAKgS,EAAcn0B,GACpDC,EAAGk0B,EAAcl0B,EAAIurB,GAAKrJ,EAAO,GAAKgS,EAAcl0B,GACpD+I,EAAGmrB,EAAcnrB,EAAIwiB,GAAKrJ,EAAO,GAAKgS,EAAcnrB,IAGtDjK,EAAKgyB,aAAa5O,OAAOna,IACvBqtB,EAAWr1B,EACXq1B,EAAWp1B,EACXo1B,EAAWrsB,GAETjK,EAAKgyB,cAAgBhyB,EAAKgyB,aAAaU,QACzC1yB,EAAKgyB,aAAaU,QACtB,IACC6D,YAAW,WACV/B,GACF,GACJ,MACEnzB,KAAKkkB,OAAO0J,GAAK,CAAEhuB,EAAG,EAAGC,EAAG,EAAG+I,EAAG,GAClC5I,KAAKs0B,YAAc,IAAIT,KAAAA,OAAYC,GAChCS,GAAG,CAAEnJ,EAAG,GAAKwG,GACb4C,OAAOX,KAAAA,OAAaY,WAAWC,KAC/BC,UAAS,WACR,IAAMvJ,EAAI0I,EAAgB1I,EAC1BzsB,EAAKulB,OAAOM,IAAMwP,EAAa5I,EAAIA,GAAK5G,EAAMwP,GAC9Cr1B,EAAKulB,OAAOgB,yBAEZ,IAAM8P,EAAe,CACnBp1B,EACEs0B,EAAoBt0B,GACnB,EAAIwrB,IAAM6I,EAAsBr0B,EAAIs0B,EAAoBt0B,GAC3DC,EACEq0B,EAAoBr0B,GACnB,EAAIurB,IAAM6I,EAAsBp0B,EAAIq0B,EAAoBr0B,GAC3D+I,EACEsrB,EAAoBtrB,GACnB,EAAIwiB,IAAM6I,EAAsBrrB,EAAIsrB,EAAoBtrB,IAE7DjK,EAAKulB,OAAO7b,SAAST,IACnBotB,EAAap1B,EACbo1B,EAAan1B,EACbm1B,EAAapsB,GAEf,IAAMqsB,EAAa,CACjBr1B,EAAGm0B,EAAcn0B,EAAIwrB,GAAKrJ,EAAO,GAAKgS,EAAcn0B,GACpDC,EAAGk0B,EAAcl0B,EAAIurB,GAAKrJ,EAAO,GAAKgS,EAAcl0B,GACpD+I,EAAGmrB,EAAcnrB,EAAIwiB,GAAKrJ,EAAO,GAAKgS,EAAcnrB,IAEtDjK,EAAKgyB,aAAa5O,OAAOna,IACvBqtB,EAAWr1B,EACXq1B,EAAWp1B,EACXo1B,EAAWrsB,GAETjK,EAAKgyB,cAAgBhyB,EAAKgyB,aAAaU,QACzC1yB,EAAKgyB,aAAaU,QACtB,IACC6D,YAAW,WACV/B,GACF,IAEJnzB,KAAKs0B,YAAYa,QACjBtB,KAAAA,QACF,CACF,EACAuB,QAAO,SAAChV,GACAyT,MACJA,KAAAA,SAEF7zB,KAAKsvB,iBAAmB+F,sBAAsBr1B,KAAKo1B,QACrD,GAGFE,cAAa,WACXzB,KAAAA,YACA0B,qBAAqBv1B,KAAKsvB,iBAC5B,G,2YC9lBF/a,GAAA,kBAAAC,CAAA,MAAAA,EAAA,GAAAC,EAAAvD,OAAAwD,UAAAC,EAAAF,EAAAG,eAAAC,EAAA3D,OAAA2D,gBAAA,SAAA9D,EAAA7S,EAAA4W,GAAA/D,EAAA7S,GAAA4W,EAAApV,KAAA,EAAAqV,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAxE,EAAA7S,EAAAwB,GAAA,OAAAwR,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,EAAA,KAAAqX,EAAA,aAAAxK,GAAAwK,EAAA,SAAAxE,EAAA7S,EAAAwB,GAAA,OAAAqR,EAAA7S,GAAAwB,CAAA,WAAAiW,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,IAAAC,EAAAH,GAAAA,EAAAnB,qBAAAuB,EAAAJ,EAAAI,EAAAC,EAAAhF,OAAAiF,OAAAH,EAAAtB,WAAA0B,EAAA,IAAAC,EAAAN,GAAA,WAAAlB,EAAAqB,EAAA,WAAAxW,MAAA4W,EAAAV,EAAAE,EAAAM,KAAAF,CAAA,UAAAK,EAAAC,EAAAzF,EAAA0F,GAAA,WAAAzZ,KAAA,SAAAyZ,IAAAD,EAAA3X,KAAAkS,EAAA0F,GAAA,OAAA1L,GAAA,OAAA/N,KAAA,QAAAyZ,IAAA1L,EAAA,EAAAyJ,EAAAmB,KAAAA,EAAA,IAAAe,EAAA,YAAAT,IAAA,UAAAU,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAtB,EAAAsB,EAAA5B,GAAA,8BAAA6B,EAAA5F,OAAA6F,eAAAC,EAAAF,GAAAA,EAAAA,EAAA5E,EAAA,MAAA8E,GAAAA,IAAAvC,GAAAE,EAAA9V,KAAAmY,EAAA/B,KAAA4B,EAAAG,GAAA,IAAAC,EAAAL,EAAAlC,UAAAuB,EAAAvB,UAAAxD,OAAAiF,OAAAU,GAAA,SAAAK,EAAAxC,GAAA,0BAAAhM,SAAA,SAAAyO,GAAA5B,EAAAb,EAAAyC,GAAA,SAAAV,GAAA,YAAAW,QAAAD,EAAAV,EAAA,gBAAAY,EAAAnB,EAAAoB,GAAA,SAAAC,EAAAJ,EAAAV,EAAAtW,EAAAC,GAAA,IAAAoX,EAAAjB,EAAAL,EAAAiB,GAAAjB,EAAAO,GAAA,aAAAe,EAAAxa,KAAA,KAAAya,EAAAD,EAAAf,IAAA/W,EAAA+X,EAAA/X,MAAA,OAAAA,GAAA,UAAAgY,GAAAhY,IAAAiV,EAAA9V,KAAAa,EAAA,WAAA4X,EAAAnX,QAAAT,EAAAiY,SAAAC,MAAA,SAAAlY,GAAA6X,EAAA,OAAA7X,EAAAS,EAAAC,EAAA,aAAA2K,GAAAwM,EAAA,QAAAxM,EAAA5K,EAAAC,EAAA,IAAAkX,EAAAnX,QAAAT,GAAAkY,MAAA,SAAAC,GAAAJ,EAAA/X,MAAAmY,EAAA1X,EAAAsX,EAAA,aAAAxM,GAAA,OAAAsM,EAAA,QAAAtM,EAAA9K,EAAAC,EAAA,IAAAA,EAAAoX,EAAAf,IAAA,KAAAqB,EAAAjD,EAAA,gBAAAnV,MAAA,SAAAyX,EAAAV,GAAA,SAAAsB,IAAA,WAAAT,GAAA,SAAAnX,EAAAC,GAAAmX,EAAAJ,EAAAV,EAAAtW,EAAAC,EAAA,WAAA0X,EAAAA,EAAAA,EAAAF,KAAAG,EAAAA,GAAAA,GAAA,aAAAzB,EAAAV,EAAAE,EAAAM,GAAA,IAAA4B,EAAA,iCAAAb,EAAAV,GAAA,iBAAAuB,EAAA,UAAAC,MAAA,iDAAAD,EAAA,cAAAb,EAAA,MAAAV,EAAA,OAAAyB,GAAA,KAAA9B,EAAAe,OAAAA,EAAAf,EAAAK,IAAAA,IAAA,KAAA0B,EAAA/B,EAAA+B,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA/B,GAAA,GAAAgC,EAAA,IAAAA,IAAA1B,EAAA,gBAAA0B,CAAA,cAAAhC,EAAAe,OAAAf,EAAAkC,KAAAlC,EAAAmC,MAAAnC,EAAAK,SAAA,aAAAL,EAAAe,OAAA,uBAAAa,EAAA,MAAAA,EAAA,YAAA5B,EAAAK,IAAAL,EAAAoC,kBAAApC,EAAAK,IAAA,gBAAAL,EAAAe,QAAAf,EAAAqC,OAAA,SAAArC,EAAAK,KAAAuB,EAAA,gBAAAR,EAAAjB,EAAAX,EAAAE,EAAAM,GAAA,cAAAoB,EAAAxa,KAAA,IAAAgb,EAAA5B,EAAAsC,KAAA,6BAAAlB,EAAAf,MAAAC,EAAA,gBAAAhX,MAAA8X,EAAAf,IAAAiC,KAAAtC,EAAAsC,KAAA,WAAAlB,EAAAxa,OAAAgb,EAAA,YAAA5B,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAA,YAAA4B,EAAAF,EAAA/B,GAAA,IAAAuC,EAAAvC,EAAAe,OAAAA,EAAAgB,EAAAjD,SAAAyD,GAAA,QAAA9O,IAAAsN,EAAA,OAAAf,EAAA+B,SAAA,eAAAQ,GAAAR,EAAAjD,SAAA0D,SAAAxC,EAAAe,OAAA,SAAAf,EAAAK,SAAA5M,EAAAwO,EAAAF,EAAA/B,GAAA,UAAAA,EAAAe,SAAA,WAAAwB,IAAAvC,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAF,EAAA,aAAAjC,EAAA,IAAAc,EAAAjB,EAAAY,EAAAgB,EAAAjD,SAAAkB,EAAAK,KAAA,aAAAe,EAAAxa,KAAA,OAAAoZ,EAAAe,OAAA,QAAAf,EAAAK,IAAAe,EAAAf,IAAAL,EAAA+B,SAAA,KAAAzB,EAAA,IAAAoC,EAAAtB,EAAAf,IAAA,OAAAqC,EAAAA,EAAAJ,MAAAtC,EAAA+B,EAAAY,YAAAD,EAAApZ,MAAA0W,EAAA4C,KAAAb,EAAAc,QAAA,WAAA7C,EAAAe,SAAAf,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,GAAAuM,EAAA+B,SAAA,KAAAzB,GAAAoC,GAAA1C,EAAAe,OAAA,QAAAf,EAAAK,IAAA,IAAAoC,UAAA,oCAAAzC,EAAA+B,SAAA,KAAAzB,EAAA,UAAAwC,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAA9Q,KAAAyQ,EAAA,UAAAM,EAAAN,GAAA,IAAA5B,EAAA4B,EAAAO,YAAA,GAAAnC,EAAAxa,KAAA,gBAAAwa,EAAAf,IAAA2C,EAAAO,WAAAnC,CAAA,UAAAnB,EAAAN,GAAA,KAAA0D,WAAA,EAAAJ,OAAA,SAAAtD,EAAArN,QAAAwQ,EAAA,WAAAU,OAAA,YAAA1H,EAAA2H,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAA5E,GAAA,GAAA6E,EAAA,OAAAA,EAAAjb,KAAAgb,GAAA,sBAAAA,EAAAb,KAAA,OAAAa,EAAA,IAAAE,MAAAF,EAAAnY,QAAA,KAAA0S,GAAA,EAAA4E,EAAA,SAAAA,IAAA,OAAA5E,EAAAyF,EAAAnY,QAAA,GAAAiT,EAAA9V,KAAAgb,EAAAzF,GAAA,OAAA4E,EAAAtZ,MAAAma,EAAAzF,GAAA4E,EAAAN,MAAA,EAAAM,EAAA,OAAAA,EAAAtZ,WAAAmK,EAAAmP,EAAAN,MAAA,EAAAM,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAd,EAAA,UAAAA,IAAA,OAAAxY,WAAAmK,EAAA6O,MAAA,UAAA/B,EAAAjC,UAAAkC,EAAA/B,EAAAoC,EAAA,eAAAvX,MAAAkX,EAAAnB,cAAA,IAAAZ,EAAA+B,EAAA,eAAAlX,MAAAiX,EAAAlB,cAAA,IAAAkB,EAAAqD,YAAAzE,EAAAqB,EAAAvB,EAAA,qBAAAb,EAAAyF,oBAAA,SAAAC,GAAA,IAAAC,EAAA,mBAAAD,GAAAA,EAAAE,YAAA,QAAAD,IAAAA,IAAAxD,GAAA,uBAAAwD,EAAAH,aAAAG,EAAAlc,MAAA,EAAAuW,EAAA6F,KAAA,SAAAH,GAAA,OAAAhJ,OAAAoJ,eAAApJ,OAAAoJ,eAAAJ,EAAAtD,IAAAsD,EAAAK,UAAA3D,EAAArB,EAAA2E,EAAA7E,EAAA,sBAAA6E,EAAAxF,UAAAxD,OAAAiF,OAAAc,GAAAiD,CAAA,EAAA1F,EAAAgG,MAAA,SAAA/D,GAAA,OAAAkB,QAAAlB,EAAA,EAAAS,EAAAG,EAAA3C,WAAAa,EAAA8B,EAAA3C,UAAAS,GAAA,0BAAAX,EAAA6C,cAAAA,EAAA7C,EAAAiG,MAAA,SAAA7E,EAAAC,EAAAC,EAAAC,EAAAuB,QAAA,IAAAA,IAAAA,EAAApX,SAAA,IAAAwa,EAAA,IAAArD,EAAA1B,EAAAC,EAAAC,EAAAC,EAAAC,GAAAuB,GAAA,OAAA9C,EAAAyF,oBAAApE,GAAA6E,EAAAA,EAAA1B,OAAApB,MAAA,SAAAH,GAAA,OAAAA,EAAAiB,KAAAjB,EAAA/X,MAAAgb,EAAA1B,MAAA,KAAA9B,EAAAD,GAAA1B,EAAA0B,EAAA5B,EAAA,aAAAE,EAAA0B,EAAAhC,GAAA,0BAAAM,EAAA0B,EAAA,qDAAAzC,EAAArD,KAAA,SAAAwJ,GAAA,IAAAC,EAAA1J,OAAAyJ,GAAAxJ,EAAA,WAAAjT,KAAA0c,EAAAzJ,EAAAxI,KAAAzK,GAAA,OAAAiT,EAAA0J,UAAA,SAAA7B,IAAA,KAAA7H,EAAAzP,QAAA,KAAAxD,EAAAiT,EAAA2J,MAAA,GAAA5c,KAAA0c,EAAA,OAAA5B,EAAAtZ,MAAAxB,EAAA8a,EAAAN,MAAA,EAAAM,CAAA,QAAAA,EAAAN,MAAA,EAAAM,CAAA,GAAAxE,EAAAtC,OAAAA,EAAAmE,EAAA3B,UAAA,CAAA0F,YAAA/D,EAAAuD,MAAA,SAAAmB,GAAA,QAAAC,KAAA,OAAAhC,KAAA,OAAAV,KAAA,KAAAC,WAAA1O,EAAA,KAAA6O,MAAA,OAAAP,SAAA,UAAAhB,OAAA,YAAAV,SAAA5M,EAAA,KAAA4P,WAAA/Q,QAAAgR,IAAAqB,EAAA,QAAA9c,KAAA,WAAAA,EAAAgd,OAAA,IAAAtG,EAAA9V,KAAA,KAAAZ,KAAA8b,OAAA9b,EAAAid,MAAA,WAAAjd,QAAA4L,EAAA,EAAAsR,KAAA,gBAAAzC,MAAA,MAAA0C,EAAA,KAAA3B,WAAA,GAAAE,WAAA,aAAAyB,EAAApe,KAAA,MAAAoe,EAAA3E,IAAA,YAAA4E,IAAA,EAAA7C,kBAAA,SAAA8C,GAAA,QAAA5C,KAAA,MAAA4C,EAAA,IAAAlF,EAAA,cAAAmF,EAAAC,EAAAC,GAAA,OAAAjE,EAAAxa,KAAA,QAAAwa,EAAAf,IAAA6E,EAAAlF,EAAA4C,KAAAwC,EAAAC,IAAArF,EAAAe,OAAA,OAAAf,EAAAK,SAAA5M,KAAA4R,CAAA,SAAArH,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAAoD,EAAA4B,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAkC,EAAA,UAAAnC,EAAAC,QAAA,KAAA2B,KAAA,KAAAU,EAAA/G,EAAA9V,KAAAua,EAAA,YAAAuC,EAAAhH,EAAA9V,KAAAua,EAAA,iBAAAsC,GAAAC,EAAA,SAAAX,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,WAAA0B,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,SAAAmC,GAAA,QAAAV,KAAA5B,EAAAE,SAAA,OAAAiC,EAAAnC,EAAAE,UAAA,YAAAqC,EAAA,UAAA1D,MAAA,kDAAA+C,KAAA5B,EAAAG,WAAA,OAAAgC,EAAAnC,EAAAG,WAAA,KAAAd,OAAA,SAAAzb,EAAAyZ,GAAA,QAAArC,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,QAAA,KAAA2B,MAAArG,EAAA9V,KAAAua,EAAA,oBAAA4B,KAAA5B,EAAAG,WAAA,KAAAqC,EAAAxC,EAAA,OAAAwC,IAAA,UAAA5e,GAAA,aAAAA,IAAA4e,EAAAvC,QAAA5C,GAAAA,GAAAmF,EAAArC,aAAAqC,EAAA,UAAApE,EAAAoE,EAAAA,EAAAjC,WAAA,UAAAnC,EAAAxa,KAAAA,EAAAwa,EAAAf,IAAAA,EAAAmF,GAAA,KAAAzE,OAAA,YAAA6B,KAAA4C,EAAArC,WAAA7C,GAAA,KAAAmF,SAAArE,EAAA,EAAAqE,SAAA,SAAArE,EAAAgC,GAAA,aAAAhC,EAAAxa,KAAA,MAAAwa,EAAAf,IAAA,gBAAAe,EAAAxa,MAAA,aAAAwa,EAAAxa,KAAA,KAAAgc,KAAAxB,EAAAf,IAAA,WAAAe,EAAAxa,MAAA,KAAAqe,KAAA,KAAA5E,IAAAe,EAAAf,IAAA,KAAAU,OAAA,cAAA6B,KAAA,kBAAAxB,EAAAxa,MAAAwc,IAAA,KAAAR,KAAAQ,GAAA9C,CAAA,EAAAoF,OAAA,SAAAvC,GAAA,QAAAnF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAG,aAAAA,EAAA,YAAAsC,SAAAzC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA1C,CAAA,GAAAqF,MAAA,SAAA1C,GAAA,QAAAjF,EAAA,KAAAqF,WAAA/X,OAAA,EAAA0S,GAAA,IAAAA,EAAA,KAAAgF,EAAA,KAAAK,WAAArF,GAAA,GAAAgF,EAAAC,SAAAA,EAAA,KAAA7B,EAAA4B,EAAAO,WAAA,aAAAnC,EAAAxa,KAAA,KAAAgf,EAAAxE,EAAAf,IAAAiD,EAAAN,EAAA,QAAA4C,CAAA,YAAA/D,MAAA,0BAAAgE,cAAA,SAAApC,EAAAd,EAAAE,GAAA,YAAAd,SAAA,CAAAjD,SAAAhD,EAAA2H,GAAAd,WAAAA,EAAAE,QAAAA,GAAA,cAAA9B,SAAA,KAAAV,SAAA5M,GAAA6M,CAAA,GAAAlC,CAAA,UAAAjK,GAAAmb,GAAA,OAAAC,GAAAD,IAAAE,GAAAF,IAAAG,GAAAH,IAAAI,IAAA,UAAAA,KAAA,UAAAjN,UAAA,iJAAA+M,GAAAlL,GAAA,wBAAA1F,QAAA,MAAA0F,EAAA1F,OAAAE,WAAA,MAAAwF,EAAA,qBAAAyL,MAAAC,KAAA1L,EAAA,UAAAiL,GAAAD,GAAA,GAAAS,MAAAG,QAAAZ,GAAA,OAAAO,GAAAP,EAAA,UAAAxJ,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAAne,EAAAuY,GAAA,QAAAqC,EAAAqD,EAAAje,GAAAuY,GAAA/W,EAAAoZ,EAAApZ,KAAA,OAAAuL,GAAA,YAAA7K,EAAA6K,EAAA,CAAA6N,EAAAJ,KAAAvY,EAAAT,GAAAQ,QAAAC,QAAAT,GAAAkY,KAAAwE,EAAAC,EAAA,UAAAC,GAAA9F,GAAA,sBAAAV,EAAA,KAAAyG,EAAA3S,UAAA,WAAA1J,SAAA,SAAAC,EAAAC,GAAA,IAAA+b,EAAA3F,EAAA5L,MAAAkL,EAAAyG,GAAA,SAAAH,EAAA1c,GAAAwc,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,OAAA3c,EAAA,UAAA2c,EAAAtR,GAAAmR,GAAAC,EAAAhc,EAAAC,EAAAgc,EAAAC,EAAA,QAAAtR,EAAA,CAAAqR,OAAAvS,EAAA,cAAAoW,GAAA8F,EAAAyP,GAAA,IAAAC,EAAA,qBAAAzgB,QAAA+Q,EAAA/Q,OAAAE,WAAA6Q,EAAA,kBAAA0P,EAAA,IAAAtP,MAAAG,QAAAP,KAAA0P,EAAA5P,GAAAE,KAAAyP,GAAAzP,GAAA,kBAAAA,EAAArkB,OAAA,CAAA+zB,IAAA1P,EAAA0P,GAAA,IAAArhB,EAAA,EAAAshB,EAAA,oBAAAxV,EAAAwV,EAAAvV,EAAA,kBAAA/L,GAAA2R,EAAArkB,OAAA,CAAAgX,MAAA,IAAAA,MAAA,EAAAhZ,MAAAqmB,EAAA3R,KAAA,EAAAgM,EAAA,SAAAuV,GAAA,MAAAA,CAAA,EAAAtV,EAAAqV,EAAA,WAAA7c,UAAA,6IAAA9N,EAAA6qB,GAAA,EAAAC,GAAA,SAAA3V,EAAA,WAAAuV,EAAAA,EAAA52B,KAAAknB,EAAA,EAAA5F,EAAA,eAAA2V,EAAAL,EAAAzc,OAAA,OAAA4c,EAAAE,EAAApd,KAAAod,CAAA,EAAA1V,EAAA,SAAA2V,GAAAF,GAAA,EAAA9qB,EAAAgrB,CAAA,EAAA1V,EAAA,eAAAuV,GAAA,MAAAH,EAAA7c,QAAA6c,EAAA7c,QAAA,YAAAid,EAAA,MAAA9qB,CAAA,aAAA8a,GAAAE,EAAAC,GAAA,GAAAD,EAAA,sBAAAA,EAAA,OAAAE,GAAAF,EAAAC,GAAA,IAAA7F,EAAAjP,OAAAwD,UAAAwR,SAAArnB,KAAAknB,GAAA7K,MAAA,uBAAAiF,GAAA4F,EAAA3L,cAAA+F,EAAA4F,EAAA3L,YAAAnc,MAAA,QAAAkiB,GAAA,QAAAA,EAAAgG,MAAAC,KAAAL,GAAA,cAAA5F,GAAA,2CAAAkG,KAAAlG,GAAA8F,GAAAF,EAAAC,QAAA,YAAAC,GAAAP,EAAAa,IAAA,MAAAA,GAAAA,EAAAb,EAAAhkB,UAAA6kB,EAAAb,EAAAhkB,QAAA,QAAA0S,EAAA,EAAAoS,EAAA,IAAAL,MAAAI,GAAAnS,EAAAmS,EAAAnS,IAAAoS,EAAApS,GAAAsR,EAAAtR,GAAA,OAAAoS,CAAA,UAAA/E,GAAA7G,EAAA8G,GAAA,IAAAvQ,EAAAD,OAAAC,KAAAyJ,GAAA,GAAA1J,OAAAyQ,sBAAA,KAAAC,EAAA1Q,OAAAyQ,sBAAA/G,GAAA8G,IAAAE,EAAAA,EAAAnZ,QAAA,SAAAoZ,GAAA,OAAA3Q,OAAA4Q,yBAAAlH,EAAAiH,GAAArM,UAAA,KAAArE,EAAAxI,KAAAiC,MAAAuG,EAAAyQ,EAAA,QAAAzQ,CAAA,UAAAjF,GAAA6V,GAAA,QAAA3N,EAAA,EAAAA,EAAAxK,UAAAlI,OAAA0S,IAAA,KAAA4N,EAAA,MAAApY,UAAAwK,GAAAxK,UAAAwK,GAAA,GAAAA,EAAA,EAAAqN,GAAAvQ,OAAA8Q,IAAA,GAAAtZ,SAAA,SAAAxK,GAAA+jB,GAAAF,EAAA7jB,EAAA8jB,EAAA9jB,GAAA,IAAAgT,OAAAgR,0BAAAhR,OAAAiR,iBAAAJ,EAAA7Q,OAAAgR,0BAAAF,IAAAP,GAAAvQ,OAAA8Q,IAAAtZ,SAAA,SAAAxK,GAAAgT,OAAA2D,eAAAkN,EAAA7jB,EAAAgT,OAAA4Q,yBAAAE,EAAA9jB,GAAA,WAAA6jB,CAAA,UAAAE,GAAAlR,EAAA7S,EAAAwB,GAAA,OAAAxB,EAAAkkB,GAAAlkB,GAAAA,KAAA6S,EAAAG,OAAA2D,eAAA9D,EAAA7S,EAAA,CAAAwB,MAAAA,EAAA8V,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3E,EAAA7S,GAAAwB,EAAAqR,CAAA,UAAAqR,GAAA3L,GAAA,IAAAvY,EAAAmkB,GAAA5L,EAAA,2BAAAiB,GAAAxZ,GAAAA,EAAAokB,OAAApkB,EAAA,UAAAmkB,GAAAE,EAAAC,GAAA,cAAA9K,GAAA6K,IAAA,OAAAA,EAAA,OAAAA,EAAA,IAAAE,EAAAF,EAAAvN,OAAA0N,aAAA,QAAA7Y,IAAA4Y,EAAA,KAAAE,EAAAF,EAAA5jB,KAAA0jB,EAAAC,GAAA,yBAAA9K,GAAAiL,GAAA,OAAAA,EAAA,UAAA9J,UAAA,kEAAA2J,EAAAF,OAAAM,QAAAL,EAAA,CAIA,QACEyM,OAAQ,CAACgH,GAAaC,IACtBpxB,KAAI,WACF,MAAO,CACLqxB,QAAgC,KAAvB,IAAIC,MAAOC,UAEpBC,yBAA0B,EAC1BC,wBAAyB,KAE7B,EACAxxB,QAAO,WACL9E,KAAKiI,OAAS,CACZyI,WAAY,CAAC,EACb2Q,WAAY,CAAC,EACbE,eAAgB,CAAC,EACjB7C,eAAgB,CAAC,EACjB7M,aAAc,CAAC,EACf3J,WAAY,KACZ8L,WAAY,CAAC,EACb0J,iBAAkB,CAAC,EACnBK,mBAAoB,CAAC,EACrB0K,WAAY,CAAC,EAEjB,EACA8N,QAAO,WACLv2B,KAAKq2B,wBAA0Br2B,KAAKw2B,mBACtC,EACAxT,SAAQ9W,GAAAA,GAAAA,GAAA,IACHuqB,EAAAA,EAAAA,IAAS,CACVzxB,UAAW,SAACgT,GAAK,OAAKA,EAAM0e,aAAa1xB,SAAS,EAClD+iB,iBAAkB,SAAC/P,GAAK,OAAKA,EAAM0e,aAAa3O,gBAAgB,EAChE1I,aAAc,SAACrH,GAAK,OAAKA,EAAM0e,aAAarX,YAAY,EACxD5C,WAAY,SAACzE,GAAK,OAAKA,EAAM0e,aAAaja,UAAU,MAEnDwG,EAAAA,EAAAA,IAAW,CACZhP,aAAc,kBACdxD,MAAO,WACP+lB,oBAAqB,yBACrB9L,YAAa,iBACbiM,eAAgB,uBAChB,IACFC,SAAQ,WACN,OAAI52B,KAAK+nB,iBACA/nB,KAAK+nB,iBAAiB7pB,IAEtB,IAEX,EACAoU,WAAU,WACR,OAAOtS,KAAKuR,SAASjN,KAAI,SAAC0F,GAAC,OAAKA,EAAE5M,EAAE,GACtC,EACA+U,QAAO,WACL,OAAOnS,KAAK+T,MAAMzP,KAAI,SAAC0F,GAAC,OAAKA,EAAE5M,EAAE,GACnC,EACAy5B,QAAO,WACL,OAAO72B,KAAKwI,MAAMlE,KAAI,SAAC0F,GAAC,OAAKA,EAAE5M,EAAE,GACnC,EACA05B,8BAA6B,WAAG,IAAAn4B,EAAA,KAC9B,QAASqB,KAAK22B,eAAe73B,MAC3B,SAACshB,GAAC,OACAA,EAAEhjB,GAAKuB,EAAK03B,yBACF,2BAAVjW,EAAEniB,IAAiC,GAEzC,EACA84B,+BAA8B,WAAG,IAAAj3B,EAAA,KAC/B,QAASE,KAAK22B,eAAe73B,MAC3B,SAACshB,GAAC,OACAA,EAAEhjB,GAAK0C,EAAKu2B,yBACF,kCAAVjW,EAAEniB,IAAwC,GAEhD,EACA+4B,iBAAgB,WAAG,IAAA3kB,EAAA,KACjB,QAASrS,KAAK22B,eAAe73B,MAC3B,SAACshB,GAAC,OAAKA,EAAEhjB,GAAKiV,EAAKgkB,yBAAqC,QAAVjW,EAAEniB,IAAc,GAElE,EACAg5B,mBAAkB,WAAG,IAAAzkB,EAAA,KACnB,OAAOxS,KAAK22B,eAAeluB,QACzB,SAAC2X,GAAC,OAAKA,EAAEhjB,GAAKoV,EAAK6jB,uBAAuB,GAE9C,EACAa,8BAA6B,WAC3B,OAAOl3B,KAAKi3B,mBAAmBxuB,QAAO,SAAC2X,GAAC,MAAe,QAAVA,EAAEniB,IAAc,GAC/D,IAEF4J,QAAS,CACPsvB,iBAAgB,SAAC/W,GACf,IAAIgX,EAAa,GACbp3B,KAAKg3B,mBACPI,EAAap3B,KAAKq3B,wBAAwB,CAAEp5B,KAAM,UACnD,IAC2D4hB,EAD3DG,EAAAC,GACyBjgB,KAAKk3B,+BAA6B,IAA5D,IAAAlX,EAAAE,MAAAL,EAAAG,EAAAG,KAAAzH,MAA8D,KAG3D4e,EAHMC,EAAa1X,EAAAngB,MAAA83B,EAAAvX,GACQjgB,KAAKq3B,wBAC/BE,IACD,IAFD,IAAAC,EAAAtX,MAAAoX,EAAAE,EAAArX,KAAAzH,MAEG,KAFM+e,EAAeH,EAAA53B,MAGjB03B,EAAW9yB,KAAI,SAACkhB,GAAC,OAAKA,EAAEvnB,IAAI,IAAEuT,SAASimB,EAAgBx5B,OAC1Dm5B,EAAWzuB,KAAK8uB,EAEpB,CAAC,OAAA1sB,GAAAysB,EAAApX,EAAArV,EAAA,SAAAysB,EAAAnX,GAAA,CACH,CAAC,OAAAtV,GAAAiV,EAAAI,EAAArV,EAAA,SAAAiV,EAAAK,GAAA,CAEG+W,EAAW11B,SACb1B,KAAK03B,cAAcN,GACnBp3B,KAAKkhB,UAGPlhB,KAAKq2B,wBAA0Br2B,KAAKw2B,mBACtC,EACAa,wBAAuB,SAACE,GACtB,IAAMt5B,EAAOs5B,EAAct5B,KACrB05B,EAASJ,EAAcI,OACzBP,EAAa,GACjB,OAAQn5B,GACN,IAAK,WACHm5B,EAAWzuB,KAAK,CACd1K,KAAM,WACNkZ,OAAQnX,KAAKwxB,SACb/a,IAAK,KAEP,MACF,IAAK,YACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,YACNkZ,OAAQnX,KAAK6xB,UACbpb,IAAK,KAEP,MACF,IAAK,4BACL,IAAK,0BACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,0BACNkZ,OAAQnX,KAAKizB,wBACbxc,IAAK,KAEP,MACF,IAAK,2BACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,2BACNkZ,OAAQnX,KAAKyyB,yBACbhc,IAAK,KAEP,MACF,IAAK,aACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK6T,YACb4C,IAAK,KAET,IAAK,qBACL,IAAK,wBACL,IAAK,mBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,oBACNkZ,OAAQnX,KAAKqd,kBACb5G,IAAK,KAEP,MACF,IAAK,OACL,IAAK,QACL,IAAK,cACL,IAAK,cACL,IAAK,YACCzW,KAAK43B,gCACPR,EAAWzuB,KAAK,CACd1K,KAAM,6BACNkZ,OAAQnX,KAAK43B,+BACbnhB,IAAK,KAGT2gB,EAAWzuB,KAAK,CACd1K,KAAM,iBACNkZ,OAAQnX,KAAK63B,eACbphB,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAK+e,WACbtI,IAAK,KAEP,MACF,IAAK,eACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAKmhB,YACb1K,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK6T,YACb4C,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAKqQ,WACboG,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,kBACNkZ,OAAQnX,KAAKqe,gBACb5H,IAAK,KAEP,MACF,IAAK,kBACiB,QAAhBkhB,EAAOn6B,OACT45B,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAKmhB,YACb1K,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK6T,YACb4C,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAKqQ,WACboG,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,kBACNkZ,OAAQnX,KAAKqe,gBACb5H,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK8H,YACb2O,IAAK,MAEkB,YAAhBkhB,EAAOn6B,QAChB45B,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAKqQ,WACboG,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAKmhB,YACb1K,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,kBACNkZ,OAAQnX,KAAKqe,gBACb5H,IAAK,MAGT2gB,EAAWzuB,KAAK,CACd1K,KAAM,oBACNkZ,OAAQnX,KAAKqd,kBACb5G,IAAK,KAEP,MACF,IAAK,eACL,IAAK,oBACL,IAAK,gBACL,IAAK,sBACL,IAAK,iBACL,IAAK,kBACL,IAAK,mBACL,IAAK,qBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,eACNkZ,OAAQnX,KAAKgf,aACbvI,IAAK,KAEP,MACF,IAAK,oBACL,IAAK,iBACL,IAAK,aACL,IAAK,cACL,IAAK,WACL,IAAK,aACL,IAAK,gBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK6T,YACb4C,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,iBACNkZ,OAAQnX,KAAK83B,eACbrhB,IAAK,KAET,IAAK,qBACL,IAAK,yBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,kBACNkZ,OAAQnX,KAAKshB,gBACb7K,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,oBACNkZ,OAAQnX,KAAKqd,kBACb5G,IAAK,KAEP,MACF,IAAK,4BACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK6T,YACb4C,IAAK,KAEP,MACF,IAAK,2BACL,IAAK,8BACL,IAAK,oBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,iBACNkZ,OAAQnX,KAAK83B,eACbrhB,IAAK,KAEP,MACF,IAAK,iBACL,IAAK,uBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,kBACNkZ,OAAQnX,KAAKqe,gBACb5H,IAAK,KAEP,MACF,IAAK,6BACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAKmhB,YACb1K,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK6T,YACb4C,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAKqQ,WACboG,IAAK,KAEP2gB,EAAWzuB,KAAK,CACd1K,KAAM,kBACNkZ,OAAQnX,KAAKqe,gBACb5H,IAAK,KAEP,MACF,IAAK,0BACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK8nB,YACbrR,IAAK,KAEP,MACF,IAAK,sBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,cACNkZ,OAAQnX,KAAK4nB,qBACbnR,IAAK,KAEP,MACF,IAAK,aACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAK8e,WACbrI,IAAK,KAEP,MACF,IAAK,aACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,aACNkZ,OAAQnX,KAAK+e,WACbtI,IAAK,KAEP,MACF,IAAK,qBACL,IAAK,qBACL,IAAK,qBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,4BACNkZ,OAAQnX,KAAKwjB,0BACb/M,IAAK,KAEP,MACF,IAAK,8BACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,+BACNkZ,OAAQnX,KAAKqR,6BACboF,IAAK,CAACkhB,EAAOrmB,WAEf,MACF,IAAK,sBACH8lB,EAAWzuB,KAAK,CACd1K,KAAM,qBACNkZ,OAAQnX,KAAK2d,mBACblH,IAAK,KAEP,MACF,IAAK,qBACH2gB,EAAWzuB,KAAK,CACd1K,KAAM,6BACNkZ,OAAQnX,KAAK+3B,2BACbthB,IAAK,KAEP,MAEJ,OAAO2gB,CACT,EACMM,cAAa,SAACN,GAAY,IAAAY,EAAA,YAAA1b,GAAA/H,KAAA8F,MAAA,SAAA0C,IAAA,IAAAkb,EAAAC,EAAAC,EAAAC,EAAA,OAAA7jB,KAAAoB,MAAA,SAAAuH,GAAA,eAAAA,EAAAlC,KAAAkC,EAAAlE,MAAA,OAAAkE,EAAAlC,KAAA,EAAAkd,EAAAjY,GAGXmX,GAAUla,EAAAlC,KAAA,EAAAkd,EAAAhY,IAAA,WAAAiY,EAAAD,EAAA/X,KAAAzH,KAAE,CAAFwE,EAAAlE,KAAA,SACD,GADjBof,EAAID,EAAAz4B,MACXu4B,EAAaG,EAAKjhB,QACdihB,EAAKjhB,OAAQ,CAAF+F,EAAAlE,KAAA,gBAAAkE,EAAAlE,KAAA,GACPof,EAAKjhB,OAAMvM,MAAXwtB,EAAI7tB,GAAW6tB,EAAK3hB,MAAI,QAAAyG,EAAAlE,KAAA,gBAAAkE,EAAAlE,KAAA,iBAAAkE,EAAAlC,KAAA,GAAAkC,EAAAwP,GAAAxP,EAAA,YAAAgb,EAAA9X,EAAAlD,EAAAwP,IAAA,eAAAxP,EAAAlC,KAAA,GAAAkd,EAAA7X,IAAAnD,EAAApB,OAAA,YAGlCkc,EAAK9W,SAAQhE,EAAAlE,KAAA,iBAAAkE,EAAAlC,KAAA,GAAAkC,EAAAmb,GAAAnb,EAAA,YAEblS,QAAQpG,IAAI,CAAEqG,MAAKiS,EAAAmb,GAAElhB,OAAQ8gB,IAAa,yBAAA/a,EAAA/B,OAAA,GAAA4B,EAAA,+BAXdT,EAahC,EACAub,eAAc,WACZ73B,KAAKs4B,0BACLt4B,KAAKqd,oBACLrd,KAAK8H,cACL9H,KAAK6T,cACL7T,KAAKshB,iBACP,EACAgX,wBAAuB,WACrBt4B,KAAK83B,iBACL93B,KAAK2d,qBACL3d,KAAKgf,cACP,EACA8Y,eAAc,WACZ93B,KAAKqQ,aACLrQ,KAAKmhB,cACLnhB,KAAKqe,kBACLre,KAAKwjB,2BACP,EAEA+U,gBAAe,WACb,IAAKv4B,KAAKw4B,MAAMC,kBAAmB,MAAO,CAAErK,IAAK,EAAGH,KAAM,GAC1D,IAAIyK,EAAM14B,KAAKw4B,MAAMC,kBAAkBE,wBAEnCC,EAAO15B,SAAS05B,KAChBC,EAAQ35B,SAAS45B,gBAEjBC,EAAYC,OAAOC,aAAeJ,EAAME,WAAaH,EAAKG,UAC1DG,EAAaF,OAAOG,aAAeN,EAAMK,YAAcN,EAAKM,WAE5DE,EAAYP,EAAMO,WAAaR,EAAKQ,WAAa,EACjDC,EAAaR,EAAMQ,YAAcT,EAAKS,YAAc,EAEpDjL,EAAMsK,EAAItK,IAAM2K,EAAYK,EAC5BnL,EAAOyK,EAAIzK,KAAOiL,EAAaG,EAInC,OAHAT,EAAO,KACPC,EAAQ,KACRH,EAAM,KACC,CAAEtK,IAAKztB,KAAKiqB,MAAMwD,GAAMH,KAAMttB,KAAKiqB,MAAMqD,GAClD,GAEFtmB,MAAO,CACL8U,WAAY,CACV6c,QAAO,WACLt5B,KAAKwc,sBACP,GAEF,iBAAkB,CAChB8c,QAAO,WACLt5B,KAAKgf,cACP,GAEFiY,mBAAkB,SAACtc,GACbA,EAAIjZ,OAAS,GACf1B,KAAKm3B,kBAET,GAEF7B,cAAa,WACXt1B,KAAK8Q,kBAAkB9Q,KAAKgS,OACxBhS,KAAKyS,WACPzS,KAAKyS,SAAS4X,QACdrqB,KAAKyS,SAASlH,WAEZvL,KAAK2wB,cAAgB3wB,KAAK2wB,aAAaplB,SACzCvL,KAAK2wB,aAAaplB,UAGpBvL,KAAKyS,SAAW,KAChBzS,KAAKgS,MAAQ,KACbhS,KAAKkkB,OAAS,KACdlkB,KAAK0tB,iBAAmB,KACxBxc,OAAOgB,OAAOlS,KAAK+E,UAAU2D,SAAQ,SAAC8c,GAChCA,GAAKA,EAAEja,SAASia,EAAEja,SACxB,IACAvL,KAAK+E,SAAW,KAChB/E,KAAK2wB,aAAe,KACpB3wB,KAAKu5B,UAAY,KACjBv5B,KAAK6G,OAAS,KACd7G,KAAKsqB,SAAW,IAClB,GCnfF,IACExlB,QAAO,WACL9E,KAAKgS,MAAQ,IAAI/M,EAAAA,IACjBjF,KAAKyS,SAAW,IAAIxN,EAAAA,IAAoB,CACtCu0B,WAAW,EACXC,uBAAuB,EACvBC,gBAAiB,qBAEnB15B,KAAKu5B,UAAY,IAAIt0B,EAAAA,IACrBjF,KAAK6G,OAAS,IAAI5B,EAAAA,GACpB,GCHF,IACEJ,KAAI,WACF,MAAO,CACL6oB,iBAAkB,KAClBiD,aAAc,KACdgJ,aAAc,KACdC,YAAa,KACbC,aAAc,CAAEj6B,EAAG,EAAGC,EAAG,GACzBy0B,YAAa,KACbwF,WAAY,KACZC,QAAS,CACPC,eAAgB,EAChBC,eAAgB,EAChBC,UAAU,EACVlyB,UAAU,EACVkc,QAAQ,GAEViW,gBAAgB,EAChBtK,WAAY,KAEhB,EACAb,OAAQ,CAACoL,GAAiBpE,GAAaqE,GACvCxyB,QAAS,CACPyyB,gBAAe,WAIP,IAAArI,EAAAroB,UAAAlI,OAAA,QAAAmI,IAAAD,UAAA,GAAAA,UAAA,GAAJ,CAAC,EAAC2wB,EAAAtI,EAHJuI,cAAAA,OAAa,IAAAD,GAAOA,EAAAE,EAAAxI,EACpBvC,oBAAAA,OAAmB,IAAA+K,GAAOA,EAAAC,EAAAzI,EAC1BpC,WAAAA,OAAU,IAAA6K,EAAG16B,KAAKw4B,MAAMC,kBAAiBiC,EAEzC1vB,QAAQpG,IAAI,mBACZ5E,KAAK6vB,WAAaA,EAEb7vB,KAAKgS,QACRhS,KAAKgS,MAAQ,IAAI/M,EAAAA,KAEnBjF,KAAKgS,MAAM2oB,WAAa,IAAI11B,EAAAA,IAAY,UAExCjF,KAAK46B,mBAAmB/K,GAExB7vB,KAAKyvB,kBAAkBC,GAEvB1vB,KAAK66B,mBAEL76B,KAAK86B,gBAEL96B,KAAK+6B,qBAEDP,GACFx6B,KAAKg7B,kBAAkBtL,GAEzB1vB,KAAKi7B,iBACLjC,OAAOkC,iBAAiB,SAAUl7B,KAAKi7B,gBAAgB,EACzD,EACAL,mBAAkB,WAChB56B,KAAKm7B,eAAen7B,KAAK6vB,YACrB7vB,KAAKyS,WACPzS,KAAKyS,SAAS2oB,cAAcpC,OAAOqC,kBACnCr7B,KAAKyS,SAAS6oB,oBAAsB,IACpCt7B,KAAK6vB,WAAW0L,YAAYv7B,KAAKyS,SAAS+oB,YAE9C,EACAL,eAAc,WACZ,GAAIn7B,KAAK6vB,WAAY,CACnB,IAAMhqB,EAAQ7F,KAAK6vB,WAAWC,YACxBhqB,EAAS9F,KAAK6vB,WAAWE,aAC/B/vB,KAAKyS,SAAS+oB,WAAW7/B,MAAMkK,MAAQA,EAAQ,KAC/C7F,KAAKyS,SAAS+oB,WAAW7/B,MAAMmK,OAASA,EAAS,KACjD9F,KAAKyS,SAASgpB,QAAQ51B,EAAOC,GAAQ,GACrC9F,KAAKyS,SAASipB,YAAY,EAAG,EAAG71B,EAAOC,EACzC,CACF,EACAk1B,kBAAiB,SAACtL,GAAqB,IAAA/wB,EAAA,KACrCqB,KAAK2wB,aAAe,IAAIgL,EAAAA,EACtB37B,KAAKkkB,OACLlkB,KAAKyS,SAAS+oB,YAEZ9L,GACF1vB,KAAK2wB,aAAaC,oBAAqB,EACvC5wB,KAAK2wB,aAAa4B,cAAiB,IAAO5xB,KAAKK,GAAM,EACrDhB,KAAK2wB,aAAaE,aAAe,CAC/BK,MAAOjsB,EAAAA,IAAY8rB,IACnBD,KAAM7rB,EAAAA,IAAYksB,OAClBH,OAAQ/rB,EAAAA,IAAYgsB,SAGtBjxB,KAAK2wB,aAAaC,oBAAqB,EACvC5wB,KAAK2wB,aAAa4B,cAAgB5xB,KAAKK,GAAK,EAC5ChB,KAAK2wB,aAAaS,cAAe,EACjCpxB,KAAK2wB,aAAaE,aAAe,CAC/BC,KAAM7rB,EAAAA,IAAY8rB,IAClBC,OAAQ/rB,EAAAA,IAAYgsB,MACpBC,MAAOjsB,EAAAA,IAAYksB,SAGvBnxB,KAAK2wB,aAAauK,iBAAiB,UAAU,WAC3Cv8B,EAAKi9B,oBACP,GACF,EACAf,iBAAgB,WACd,IAAMgB,EAAe,IAAI52B,EAAAA,IAAmB,SAAU,IAClD62B,EAAmB,IAAI72B,EAAAA,IAAuB,SAAU,IAC5D62B,EAAiBzzB,SAAST,IAAI,EAAG,IAAM,KACvC,IAAIm0B,EAAoB,IAAI92B,EAAAA,IAAuB,SAAU,IAC7D82B,EAAkB1zB,SAAST,IAAI,GAAI,IAAM,KACzC5H,KAAKgS,MAAMxI,IAAIqyB,GACf77B,KAAKgS,MAAMxI,IAAIsyB,GACf97B,KAAKgS,MAAMxI,IAAIuyB,EACjB,EACAjB,cAAa,WAEX,IAAIkB,EAAM,IAAIC,EAAAA,EACdD,EAAIpoB,MAAMsoB,UAAU,MACpBl8B,KAAKgS,MAAMxI,IAAIwyB,GACfh8B,KAAK8Q,kBAAkBkrB,GACvB,IAAIG,EAAM,IAAIl3B,EAAAA,IAERm3B,EAAWJ,EAAIj3B,SAASq3B,SAC9BA,EAASxO,GAAGluB,MAAQ,IAAIuF,EAAAA,IAAc,EAAG,EAAG,GAC5Cm3B,EAAS,aAAa18B,MAAQ,GAC9B08B,EAAS,YAAY18B,MAAQ,IAC7B08B,EAAS,kBAAkB18B,MAAQ,IACnC08B,EAAS,mBAAmB18B,MAAQ,GACpC,IAAM28B,EAAY,GACZC,GAAW,GACXC,EAAMt3B,EAAAA,IAAgBu3B,SAAS,GAAKH,GACpCI,EAAQx3B,EAAAA,IAAgBu3B,SAASF,GAEvCH,EAAIO,uBAAuB,EAAGH,EAAKE,GAEnCL,EAAS,eAAe18B,MAAM8T,KAAK2oB,GACnCA,EAAM,IACR,EACApB,mBAAkB,WAEX/6B,KAAK+nB,kBACR/nB,KAAK28B,qBAEP38B,KAAKsqB,SAAW,IAAIlsB,EAAe,GAAI4B,KAAK+nB,iBAAiB7pB,KAC7D8B,KAAK8nB,aACP,EACA6U,mBAAkB,WAMhB,GALK38B,KAAKlC,QAAgC,GAAtBkC,KAAKlC,OAAO4D,SAC9B1B,KAAKlC,OAASlB,KAEhBoD,KAAK48B,oBAAoB,MAEK,OAA1B58B,KAAK+nB,iBACP,IAAK,IAAI3T,KAAKpU,KAAKlC,OAEfkC,KAAK68B,yBACL78B,KAAKlC,OAAOsW,GAAGlW,MAAQ8B,KAAK68B,wBAAwBC,UAEpD98B,KAAK48B,oBAAoB58B,KAAKlC,OAAOsW,IAKb,OAA1BpU,KAAK+nB,kBACP/nB,KAAK48B,oBAAoB58B,KAAKlC,OAAO,GAEzC,EACAojB,OAAM,WACAlhB,KAAKqwB,SAEPrwB,KAAKqwB,SAASnP,SACLlhB,KAAKyS,WAEdzS,KAAKyS,SAAS4X,QACdrqB,KAAKyS,SAASyO,OAAOlhB,KAAKgS,MAAOhS,KAAKkkB,QAE1C,EACA0X,mBAAkB,WAChB57B,KAAKkhB,QACP,EACA+Z,eAAc,WACRj7B,KAAK2wB,cACP3wB,KAAK2wB,aAAaU,SAEpBrxB,KAAK65B,aAAe75B,KAAKu4B,kBACzBv4B,KAAK25B,aAAe35B,KAAK6vB,WAAWE,aACpC/vB,KAAK45B,YAAc55B,KAAK6vB,WAAWC,YACnC9vB,KAAKm7B,iBACLn7B,KAAK2vB,uBACL3vB,KAAKkhB,QACP,EACA6b,eAAc,WACZ,IAAMr3B,EAAS1F,KAAKyS,SAAS+oB,WACvB31B,EAAQ7F,KAAK6vB,WAAWC,YACxBhqB,EAAS9F,KAAK6vB,WAAWE,aAC3BrqB,EAAOG,QAAUA,GAASH,EAAOI,SAAWA,IAC9C9F,KAAKm7B,iBAEDn7B,KAAKqwB,WACPrwB,KAAKqwB,SAAS+K,cAAcz6B,KAAKksB,IAAImM,OAAOqC,iBAAkB,IAC1Dr7B,KAAKqwB,SAASqL,aAChB17B,KAAKqwB,SAASqL,YAAY,EAAG,EAAG71B,EAAOC,IAG3C9F,KAAK2vB,uBACL3vB,KAAKkhB,SAET,GAEFoU,cAAa,WACXt1B,KAAK6vB,WAAa,KAClBmJ,OAAOgE,oBAAoB,SAAUh9B,KAAKi7B,gBAAgB,EAC5D,G,yqE7B5MF,gmGAAA7mB,GAAA,wBAAAA,EAAA,sBAAAA,GAAA,iBAAAA,GAAA,ssDAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,4bAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,yhBAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,qGAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,skBAUA,QACEnW,KAAM,cACN4G,KAAI,WACF,MAAO,CACL/G,OAAQ,KACRwsB,SAAU,KACV2S,QAAS,CAAEr9B,EAAG,EAAGC,EAAG,GACpBie,wBAAwB,EACxBmB,iCAAiC,EACjCqQ,iBAAkB,KAClB4N,WAAY,KAEhB,EACA5H,cAAa,WACX6H,cAAcn9B,KAAKk9B,YACnB3H,qBAAqBv1B,KAAKsvB,iBAC5B,EACAN,OAAQ,CAACoO,IACTt4B,QAAO,WACLkG,QAAQpG,IAAI,6BACZ5E,KAAKgS,MAAQ,IAAI/M,MAAMo4B,MACvBr9B,KAAKyS,SAAW,IAAIxN,MAAMq4B,cAAc,CACtC9D,WAAW,EACXC,uBAAuB,IAEzBz5B,KAAKu5B,UAAY,IAAIt0B,MAAMs4B,UAC3Bv9B,KAAK6G,OAAS,IAAI5B,MAAMu4B,aAC1B,EACMjH,QAAO,WAAG,wIACR,EAAKkH,YAAY,EAAKC,cAAY,OAUvC,OATGhO,GAAsB,EACtB,EAAKiO,iBAAmB,EAAKC,4BAC/BlO,EAC6C,eAA3C,EAAKkO,0BAA0BC,UAEnC,EAAKvD,gBAAgB,CACnBE,cAAe,EAAKA,cACpB9K,oBAAAA,EACAG,WAAY,EAAK2I,MAAMC,oBACxB,SAEK,EAAK3b,oBAAkB,OAO7B,OANA,EAAKwb,0BACA,EAAKwF,mBACR,EAAKC,gBAEP,EAAKC,UAAUC,IAAI,mBAAmB,SAACryB,GAAO,OAC5C,EAAKwnB,sBAAsBxnB,EAAO,IACpC,UACM,EAAK4X,4BAA0B,QAEjC,EAAKma,gBACHjO,EACF,EAAKoC,+BACH,EAAK8L,0BAA0Bv1B,SAC/B,EAAKu1B,0BAA0B7b,QAGjC,EAAKqQ,kDACH,EAAKwL,0BAA0BM,mBAI7BtyB,EAAU,EAAK2F,SAASzS,MAAK,SAACkL,GAAC,OAAKA,EAAE5M,IAAM,EAAK+gC,IAAI,IAC3D,EAAKC,UAAUxyB,EAAS,EAAKyyB,YAE/B,EAAKtE,QAAQ/xB,UAAW,EACxB,EAAKkZ,SACL,EAAKgc,WAAaoB,aAAY,kBAAM,EAAKpd,QAAQ,GAAE,KAAG,2CAxCxC,EAyChB,EACA8B,SAAU,GAAF,OACH,QAAS,CACV0a,aAAc,SAAC1lB,GAAK,OAAKA,EAAM0e,aAAagH,YAAY,EACxDS,KAAM,SAACnmB,GAAK,OAAKA,EAAM0e,aAAayH,IAAI,EACxCE,UAAW,SAACrmB,GAAK,OAAKA,EAAM0e,aAAa2H,SAAS,EAClDV,gBAAiB,SAAC3lB,GAAK,OAAKA,EAAM0e,aAAaiH,eAAe,EAC9DC,0BAA2B,SAAC5lB,GAAK,OAC/BA,EAAM0e,aAAakH,yBAAyB,EAC9CpD,cAAe,SAACxiB,GAAK,OAAKA,EAAM0e,aAAa8D,aAAa,EAC1DsD,kBAAmB,SAAC9lB,GAAK,OAAKA,EAAM0e,aAAaoH,iBAAiB,EAClE5a,aAAc,SAAClL,GAAK,OAAKA,EAAM0e,aAAaxT,YAAW,MAEtD,QAAW,CACZ3R,SAAU,cACVwC,MAAO,aACPvL,MAAO,aACP+1B,UAAW,eACX7T,YAAa,iBACbH,eAAgB,oBAChB9Z,MAAO,WACP+tB,UAAW,eACX/sB,aAAc,kBACdE,OAAQ,YACR8sB,sBAAuB,8BAG3B52B,QAAS,GAAF,UACF,QAAW,CACZ41B,YAAa,kBAEZ,QAAa,CACdb,oBAAqB,6BACrB,IACF8B,UAAS,WACPxtB,OAAOgB,OAAOlS,KAAKiI,OAAO+L,YAAYtL,SACpC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,GAEnC,EACAw2B,iBAAgB,WACdztB,OAAOgB,OAAOlS,KAAKiI,OAAOsZ,gBAAgB7Y,SACxC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,GAEnC,EACA41B,cAAa,WACX7sB,OAAOgB,OAAOlS,KAAKiI,OAAOoZ,YAAY3Y,SACpC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,IAEjC+I,OAAOgB,OAAOlS,KAAKiI,OAAOyI,YAAYhI,SACpC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,IAEjC+I,OAAOgB,OAAOlS,KAAKiI,OAAOyW,gBAAgBhW,SACxC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,IAEjC+I,OAAOgB,OAAOlS,KAAKiI,OAAO+L,YAAYtL,SACpC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,IAEjC+I,OAAOgB,OAAOlS,KAAKiI,OAAO4J,cAAcnJ,SACtC,SAAC4H,GAAI,OAAMA,EAAKnI,SAAU,CAAK,IAEjCnI,KAAK4+B,SAAS5+B,KAAKoQ,gBACnBpQ,KAAK4+B,SAAS5+B,KAAK2gB,gBACnB3gB,KAAK4+B,SAAS5+B,KAAKge,oBACnBhe,KAAK4+B,SAAS5+B,KAAKie,wBACnBje,KAAK8e,YACP,EACA8f,SAAQ,SAACtuB,GACHA,IACFA,EAAKnI,SAAU,EAEnB,EACAi2B,UAAS,SAACxyB,EAASyyB,GACjB,IAAIpP,EAAS,GACb,GAAKrjB,GAAwB,UAAbyyB,GAkBT,GAAIzyB,EAAS,SAId0E,EACA,EAJA+iB,EAAaznB,EAKbiE,EAAW,GAMf,GALwB,QAApBwjB,EAAW71B,MACb8S,EAAOtQ,KAAKiI,OAAOoZ,WAAWgS,EAAWj2B,IACZ,eAApBi2B,EAAW71B,QACpB8S,EAAOtQ,KAAKiI,OAAO8V,mBAAmBsV,EAAWj2B,KAE/CkT,EAAM,CACR,IAAMtI,EAAWsI,EAAKtI,SACU,OAA5BA,EAAS62B,gBAAyB72B,EAAS82B,wBAC/C,EAAS,CACP92B,EAAS62B,eAAepR,OAAO7tB,EAC/BoI,EAAS62B,eAAepR,OAAO5tB,EAC/BmI,EAAS62B,eAAepR,OAAO7kB,GAEjC,IAAIm2B,EAAe/2B,EAAS62B,eAAeG,OAE3CnvB,EACE,EAAIkvB,EAAep+B,KAAKmyB,IAAM9yB,KAAKkkB,OAAOM,IAAM,EAAK7jB,KAAKK,GAAM,IACpE,CAEAqyB,GAAa,QAA8BA,GACtBA,EAAWC,UAAhC,IAEIP,EAAmB,CAAEnzB,EAAG,EAAGC,EAAG,EAAG+I,EAAG,GACpC3B,EAC2B,GAA7BosB,EAAW5mB,aAAa7M,GAAuC,GAA7ByzB,EAAW5mB,aAAa5M,EAC5D,GAAiB,SAAbw+B,EACFtL,GAAmB,QACN,IAAXljB,EACAwjB,EAAW5mB,mBAER,GAAiB,OAAb4xB,EAAoB,SACzBY,EAAgB5L,EAAW6L,YAC/BD,EAAc/9B,MAAQ,IACtB+9B,EAAc99B,MAAQ,IACtB89B,EAAc79B,MAAQ,IACtB69B,EAAc59B,MAAQ,IACtB,IAAM,EAAW,CAAC,EAAG,EAAG,KAClB,EAAS,CAAC,EAAG,EAAG,GAEtB,EAAiCrB,KAAKm/B,mBACpCF,EACAhQ,GAFI,EAAI,EAAJ/tB,KAAM,EAAI,EAAJC,KAAM,EAAI,EAAJC,KAAM,EAAG,EAAHC,MAIxB,EAAArB,KAAKwvB,mBAAmBnnB,UAAST,IAAG,QAAI,IACxC,EAAA5H,KAAKwvB,oBAAmB7K,OAAM,QAAI,GAElC3kB,KAAKwvB,mBAAmBvB,KAAO,EAAO,IACtCjuB,KAAKwvB,mBAAmBtB,MAAQ,EAAO,IACvCluB,KAAKwvB,mBAAmBpB,IAAM,EAAO,IACrCpuB,KAAKwvB,mBAAmBrB,OAAS,EAAO,IACxCnuB,KAAKwvB,mBAAmBtK,wBAC1B,KAAO,CAEL,IAAIka,EAAe,SAAS/L,EAAW5mB,cAAY,IAAE7D,EAAG,IAC9B,GAAtBw2B,EAAiBx/B,GAAgC,GAAtBw/B,EAAiBv/B,IAC9Cu/B,EAAiBv/B,EAAI,GAEvBu/B,GAAmB,QAAgBA,GAEnCrM,GAAmB,QAA0B,IAAXljB,EAAiBuvB,EACrD,CAEA,IAAMpM,GAAiB,QAAUK,EAAWC,UAAWP,GACnD9rB,IAAU+rB,EAAepqB,GAAK,KAClC,IAAM,EAAW,CACfoqB,EAAepzB,EAAI,IACnBozB,EAAenzB,EAAI,IAAO,EAC1BmzB,EAAepqB,EAAI,MAGrB,EAAA5I,KAAKkkB,OAAO7b,UAAST,IAAG,QAAI,IAC5B,EAAA5H,KAAKkkB,QAAOS,OAAM,WAAI,IACtB3kB,KAAKkkB,OAAOgB,yBAEZllB,KAAK+5B,QAAQ7V,QAAS,CACxB,MApGuC,SACjCwG,EAAc1qB,KAAK0qB,YACjBriB,EAAW,CAAC,EAAG,EAAG,KAClB0Z,EAAS,CAAC,EAAG,EAAG,IACtB,EAAA/hB,KAAKwvB,mBAAmBnnB,UAAST,IAAG,QAAIS,IACxC,EAAArI,KAAKwvB,oBAAmB7K,OAAM,QAAI5C,GAClC/hB,KAAK+5B,QAAQ7V,QAAS,EAEtB,MAAiClkB,KAAKm/B,mBACpCzU,EACAuE,GAFI/tB,EAAI,EAAJA,KAAMC,EAAI,EAAJA,KAAMC,EAAI,EAAJA,KAAMC,EAAG,EAAHA,KAKxBrB,KAAKwvB,mBAAmBvB,KAAO/sB,EAAO,IACtClB,KAAKwvB,mBAAmBtB,MAAQ/sB,EAAO,IACvCnB,KAAKwvB,mBAAmBpB,IAAM/sB,EAAO,IACrCrB,KAAKwvB,mBAAmBrB,OAAS/sB,EAAO,IACxCpB,KAAKwvB,mBAAmBtK,wBAC1B,CAmFF,EACAia,mBAAkB,SAACxM,EAAQ1D,GACzB,IAQI/tB,EACAC,EACAC,EACAC,EAXAg+B,EAAcr/B,KAAK25B,aAAe35B,KAAK45B,YAEvC/zB,GAAS8sB,EAAOxxB,KAAOwxB,EAAOzxB,OAAS,EAAI+tB,GAC3CnpB,GAAU6sB,EAAOtxB,KAAOsxB,EAAOvxB,OAAS,EAAI6tB,GAC5CqQ,EAAQx5B,EAASD,EAEjB05B,GAAW5M,EAAOxxB,KAAOwxB,EAAOzxB,MAAQ,EACxCs+B,GAAW7M,EAAOtxB,KAAOsxB,EAAOvxB,MAAQ,EAiB5C,OAZIi+B,EAAcC,GAEhBp+B,EAAOq+B,EAAUz5B,GAAU,EAAIu5B,GAC/Bl+B,EAAOo+B,EAAUz5B,GAAU,EAAIu5B,GAC/Bj+B,EAAOo+B,EAAU15B,EAAS,EAC1BzE,EAAOm+B,EAAU15B,EAAS,IAE1B5E,EAAOq+B,EAAU15B,EAAQ,EACzB1E,EAAOo+B,EAAU15B,EAAQ,EACzBzE,EAAOo+B,EAAW35B,EAAQw5B,EAAe,EACzCh+B,EAAOm+B,EAAW35B,EAAQw5B,EAAe,GAEpC,CAAEn+B,KAAAA,EAAMC,KAAAA,EAAMC,KAAAA,EAAMC,KAAAA,EAC7B,EACA+zB,QAAO,WACLp1B,KAAKkhB,SACLlhB,KAAKsvB,iBAAmB+F,sBAAsBr1B,KAAKo1B,QACrD,EACAlU,OAAM,WACJlhB,KAAKyS,SAAS4X,QACV,CAAC,MAAO,UAAU7Y,SAASxR,KAAKq+B,aAAer+B,KAAK29B,gBACtD39B,KAAKyS,SAASyO,OAAOlhB,KAAKgS,MAAOhS,KAAKwvB,oBAEtCxvB,KAAKyS,SAASyO,OAAOlhB,KAAKgS,MAAOhS,KAAKkkB,OAE1C,IAEFvc,MAAO,CACLoyB,QAAS,CACPT,QAAO,WACL,GACEt5B,KAAK+5B,QAAQE,gBAAkBj6B,KAAK+5B,QAAQC,gBAC5Ch6B,KAAK+5B,QAAQ/xB,UACbhI,KAAK+5B,QAAQG,UACbl6B,KAAK+5B,QAAQ7V,OACb,CACA,IAAIub,EAAQ,IAAIC,YAAY,kBAE5BxgC,SAASygC,cAAcF,GACvBz/B,KAAKm6B,gBAAiB,CACxB,CACF,EACAyF,MAAM,K,U8BxTZ,MAAMC,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,KAEpE,U,4vCCOY,GAAF,IACH,QAAS,CACV1B,KAAM,SAACnmB,GAAK,OAAKA,EAAMmmB,IAAI,EAC3BE,UAAW,SAACrmB,GAAK,OAAKA,EAAMqmB,SAAQ,I,qQClBtCyB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBn2B,IAAjBo2B,EACH,OAAOA,EAAazrB,QAGrB,IAAI0rB,EAASJ,EAAyBE,GAAY,CACjD5iC,GAAI4iC,EACJG,QAAQ,EACR3rB,QAAS,CAAC,GAUX,OANA4rB,EAAoBJ,GAAUnhC,KAAKqhC,EAAO1rB,QAAS0rB,EAAQA,EAAO1rB,QAASurB,GAG3EG,EAAOC,QAAS,EAGTD,EAAO1rB,OACf,CAGAurB,EAAoBva,EAAI4a,E,WC5BxB,IAAIC,EAAW,GACfN,EAAoBO,EAAI,SAAS7oB,EAAQ8oB,EAAU/pB,EAAI4N,GACtD,IAAGmc,EAAH,CAMA,IAAIC,EAAejb,IACnB,IAASnR,EAAI,EAAGA,EAAIisB,EAAS3+B,OAAQ0S,IAAK,CACrCmsB,EAAWF,EAASjsB,GAAG,GACvBoC,EAAK6pB,EAASjsB,GAAG,GACjBgQ,EAAWic,EAASjsB,GAAG,GAE3B,IAJA,IAGIqsB,GAAY,EACPC,EAAI,EAAGA,EAAIH,EAAS7+B,OAAQg/B,MACpB,EAAXtc,GAAsBoc,GAAgBpc,IAAalT,OAAOC,KAAK4uB,EAAoBO,GAAGK,OAAM,SAASziC,GAAO,OAAO6hC,EAAoBO,EAAEpiC,GAAKqiC,EAASG,GAAK,IAChKH,EAASxZ,OAAO2Z,IAAK,IAErBD,GAAY,EACTrc,EAAWoc,IAAcA,EAAepc,IAG7C,GAAGqc,EAAW,CACbJ,EAAStZ,OAAO3S,IAAK,GACrB,IAAIwsB,EAAIpqB,SACE3M,IAAN+2B,IAAiBnpB,EAASmpB,EAC/B,CACD,CACA,OAAOnpB,CArBP,CAJC2M,EAAWA,GAAY,EACvB,IAAI,IAAIhQ,EAAIisB,EAAS3+B,OAAQ0S,EAAI,GAAKisB,EAASjsB,EAAI,GAAG,GAAKgQ,EAAUhQ,IAAKisB,EAASjsB,GAAKisB,EAASjsB,EAAI,GACrGisB,EAASjsB,GAAK,CAACmsB,EAAU/pB,EAAI4N,EAwB/B,C,eC5BA2b,EAAoB5f,EAAI,SAAS+f,GAChC,IAAIW,EAASX,GAAUA,EAAOY,WAC7B,WAAa,OAAOZ,EAAO,UAAY,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAH,EAAoBgB,EAAEF,EAAQ,CAAEna,EAAGma,IAC5BA,CACR,C,eCNAd,EAAoBgB,EAAI,SAASvsB,EAASwsB,GACzC,IAAI,IAAI9iC,KAAO8iC,EACXjB,EAAoBha,EAAEib,EAAY9iC,KAAS6hC,EAAoBha,EAAEvR,EAAStW,IAC5EgT,OAAO2D,eAAeL,EAAStW,EAAK,CAAEsX,YAAY,EAAMyrB,IAAKD,EAAW9iC,IAG3E,C,eCPA6hC,EAAoBmB,EAAI,WACvB,GAA0B,kBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOnhC,MAAQ,IAAIohC,SAAS,cAAb,EAChB,CAAE,MAAOhhB,GACR,GAAsB,kBAAX4Y,OAAqB,OAAOA,MACxC,CACA,CAPuB,E,eCAxB+G,EAAoBha,EAAI,SAAShV,EAAKK,GAAQ,OAAOF,OAAOwD,UAAUE,eAAe/V,KAAKkS,EAAKK,EAAO,C,eCAtG2uB,EAAoBsB,IAAM,SAASnB,GAGlC,OAFAA,EAAOoB,MAAQ,GACVpB,EAAOlvB,WAAUkvB,EAAOlvB,SAAW,IACjCkvB,CACR,C,eCJAH,EAAoB/1B,EAAI,G,eCKxB,IAAIu3B,EAAkB,CACrB,IAAK,GAaNxB,EAAoBO,EAAEI,EAAI,SAASc,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4B78B,GAC/D,IAKIm7B,EAAUwB,EALVjB,EAAW17B,EAAK,GAChB88B,EAAc98B,EAAK,GACnB+8B,EAAU/8B,EAAK,GAGIuP,EAAI,EAC3B,GAAGmsB,EAASsB,MAAK,SAASzkC,GAAM,OAA+B,IAAxBmkC,EAAgBnkC,EAAW,IAAI,CACrE,IAAI4iC,KAAY2B,EACZ5B,EAAoBha,EAAE4b,EAAa3B,KACrCD,EAAoBva,EAAEwa,GAAY2B,EAAY3B,IAGhD,GAAG4B,EAAS,IAAInqB,EAASmqB,EAAQ7B,EAClC,CAEA,IADG2B,GAA4BA,EAA2B78B,GACrDuP,EAAImsB,EAAS7+B,OAAQ0S,IACzBotB,EAAUjB,EAASnsB,GAChB2rB,EAAoBha,EAAEwb,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOzB,EAAoBO,EAAE7oB,EAC9B,EAEIqqB,EAAqBhsB,KAAK,qCAAuCA,KAAK,sCAAwC,GAClHgsB,EAAmBp5B,QAAQ+4B,EAAqBM,KAAK,KAAM,IAC3DD,EAAmBn5B,KAAO84B,EAAqBM,KAAK,KAAMD,EAAmBn5B,KAAKo5B,KAAKD,G,IC/CvF,IAAIE,EAAsBjC,EAAoBO,OAAEz2B,EAAW,CAAC,MAAM,WAAa,OAAOk2B,EAAoB,IAAM,IAChHiC,EAAsBjC,EAAoBO,EAAE0B,E","sources":["webpack://@eturnity/eturnity_3d/./src/components/ThreeCanvasViewer.vue","webpack://@eturnity/eturnity_3d/./src/utils/leaflet-config.service.js","webpack://@eturnity/eturnity_3d/./src/utils/layers.js","webpack://@eturnity/eturnity_3d/./src/helper/customProvider.js","webpack://@eturnity/eturnity_3d/./src/assets/theme.js","webpack://@eturnity/eturnity_3d/./src/config.js","webpack://@eturnity/eturnity_3d/./src/helper/materialMixin.js","webpack://@eturnity/eturnity_3d/./src/helper/render/node.js","webpack://@eturnity/eturnity_3d/./src/helper/render/geometryHandler.js","webpack://@eturnity/eturnity_3d/./src/helper/render/base.js","webpack://@eturnity/eturnity_3d/./src/helper/render/clear.js","webpack://@eturnity/eturnity_3d/./src/helper/render/edge.js","webpack://@eturnity/eturnity_3d/./src/helper/render/loader.js","webpack://@eturnity/eturnity_3d/./src/helper/render/margin.js","webpack://@eturnity/eturnity_3d/./src/helper/render/moduleField.js","webpack://@eturnity/eturnity_3d/./src/helper/render/obstacle.js","webpack://@eturnity/eturnity_3d/./src/helper/render/panel.js","webpack://@eturnity/eturnity_3d/./src/helper/render/roof.js","webpack://@eturnity/eturnity_3d/./src/helper/render/imageOverlay.js","webpack://@eturnity/eturnity_3d/./src/helper/render/texture.js","webpack://@eturnity/eturnity_3d/./src/helper/render/projectionMaterial.js","webpack://@eturnity/eturnity_3d/./src/utils/cancellablePromise.js","webpack://@eturnity/eturnity_3d/./src/helper/render/tile.js","webpack://@eturnity/eturnity_3d/./src/helper/render/tileProjection.js","webpack://@eturnity/eturnity_3d/./src/helper/render/mergedGeometry.js","webpack://@eturnity/eturnity_3d/./src/helper/render/index.js","webpack://@eturnity/eturnity_3d/./src/helper/cameraMixin.js","webpack://@eturnity/eturnity_3d/./src/helper/renderMixin.js","webpack://@eturnity/eturnity_3d/./src/helper/initializeThree.js","webpack://@eturnity/eturnity_3d/./src/helper/threeMixin.js","webpack://@eturnity/eturnity_3d/./src/components/ThreeCanvasViewer.vue?2965","webpack://@eturnity/eturnity_3d/./src/App.vue","webpack://@eturnity/eturnity_3d/webpack/bootstrap","webpack://@eturnity/eturnity_3d/webpack/runtime/chunk loaded","webpack://@eturnity/eturnity_3d/webpack/runtime/compat get default export","webpack://@eturnity/eturnity_3d/webpack/runtime/define property getters","webpack://@eturnity/eturnity_3d/webpack/runtime/global","webpack://@eturnity/eturnity_3d/webpack/runtime/hasOwnProperty shorthand","webpack://@eturnity/eturnity_3d/webpack/runtime/node module decorator","webpack://@eturnity/eturnity_3d/webpack/runtime/publicPath","webpack://@eturnity/eturnity_3d/webpack/runtime/jsonp chunk loading","webpack://@eturnity/eturnity_3d/webpack/startup"],"sourcesContent":["<template>\n <div\n class=\"canvas3DContainer\"\n ref=\"canvas3DContainer\"\n :style=\"{ height: '100%', width: '100%', display: 'flex' }\"\n crossorigin\n />\n</template>\n\n<script>\nimport { mapActions, mapState, mapGetters, mapMutations } from 'vuex'\nimport {\n addVector,\n multiplyVector,\n updateComputedGeometryPolygon,\n normalizeVector\n} from '@eturnity/eturnity_maths'\n\nimport threeMixin from '../helper/threeMixin'\n\nexport default {\n name: 'ThreeCanvas',\n data() {\n return {\n layers: null,\n provider: null,\n pointer: { x: 0, y: 0 },\n areModuleFieldsVisible: false,\n areUserDeactivatedPanelsVisible: false,\n animationFrameId: null,\n intervalId: null\n }\n },\n beforeDestroy() {\n clearInterval(this.intervalId)\n cancelAnimationFrame(this.animationFrameId)\n },\n mixins: [threeMixin],\n created() {\n console.log('created ThreeCanvasViewer')\n this.scene = new THREE.Scene()\n this.renderer = new THREE.WebGLRenderer({\n antialias: true,\n preserveDrawingBuffer: true\n })\n this.raycaster = new THREE.Raycaster()\n this.loader = new THREE.TextureLoader()\n },\n async mounted() {\n await this.hydrateData(this.geometryData)\n let isPerspectiveCamera = true\n if (this.useCustomCamera && this.cameraPerspectiveSettings) {\n isPerspectiveCamera =\n this.cameraPerspectiveSettings.viewType == 'perspective'\n }\n this.initialiseThree({\n isInteractive: this.isInteractive,\n isPerspectiveCamera,\n DOMElement: this.$refs.canvas3DContainer\n })\n\n await this.loadPanelsTexture()\n this.renderRealisticGeometry()\n if (!this.isBuildingVisible) {\n this.hideBuildings()\n }\n this.$eventBus.$on('on-roofSelected', (polygon) =>\n this.setCameraOrthogonalTo(polygon)\n )\n await this.updateProjectionMaterials()\n\n if (this.useCustomCamera) {\n if (isPerspectiveCamera) {\n this.setPerspectiveCameraPositionTo(\n this.cameraPerspectiveSettings.position,\n this.cameraPerspectiveSettings.target\n )\n } else {\n this.setOrthographicCameraPositionFromCameraParameters(\n this.cameraPerspectiveSettings.cameraParameters\n )\n }\n } else {\n const polygon = this.polygons.find((p) => p.id == this.uuid)\n this.setCamera(polygon, this.view_mode)\n }\n this.isReady.geometry = true\n this.render()\n this.intervalId = setInterval(() => this.render(), 500)\n },\n computed: {\n ...mapState({\n geometryData: (state) => state.threeDModule.geometryData,\n uuid: (state) => state.threeDModule.uuid,\n view_mode: (state) => state.threeDModule.view_mode,\n useCustomCamera: (state) => state.threeDModule.useCustomCamera,\n cameraPerspectiveSettings: (state) =>\n state.threeDModule.cameraPerspectiveSettings,\n isInteractive: (state) => state.threeDModule.isInteractive,\n isBuildingVisible: (state) => state.threeDModule.isBuildingVisible,\n imageOverlay: (state) => state.threeDModule.imageOverlay\n }),\n ...mapGetters({\n polygons: 'getPolygons',\n edges: 'getEdges3D',\n nodes: 'getNodes3D',\n mapConfig: 'getMapConfig',\n roofsBounds: 'getRoofsBounds',\n layoutSettings: 'getLayoutSettings',\n roofs: 'getRoofs',\n obstacles: 'getObstacles',\n moduleFields: 'getModuleFields',\n panels: 'getPanels',\n userDeactivatedPanels: 'getUserDeactivatedPanels'\n })\n },\n methods: {\n ...mapActions({\n hydrateData: 'hydrateData'\n }),\n ...mapMutations({\n setSelectedMapLayer: 'mutate_selectedMapLayer'\n }),\n hideEdges() {\n Object.values(this.meshes.edgeMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n },\n hideWarningRoofs() {\n Object.values(this.meshes.flatRoofMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n },\n hideBuildings() {\n Object.values(this.meshes.roofMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n Object.values(this.meshes.baseMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n Object.values(this.meshes.obstacleMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n Object.values(this.meshes.edgeMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n Object.values(this.meshes.panelsMeshes).forEach(\n (mesh) => (mesh.visible = false)\n )\n this.hideMesh(this.mergedBaseMesh)\n this.hideMesh(this.mergedRoofMesh)\n this.hideMesh(this.mergedObstacleMesh)\n this.hideMesh(this.mergedObstacleSideMesh)\n this.hidePanels()\n },\n hideMesh(mesh) {\n if (mesh) {\n mesh.visible = false\n }\n },\n setCamera(polygon, view_mode) {\n let margin = 0.2\n if (!polygon || view_mode == 'global') {\n let roofsBounds = this.roofsBounds\n const position = [0, 0, 100]\n const target = [0, 0, 0]\n this.orthographicCamera.position.set(...position)\n this.orthographicCamera.lookAt(...target)\n this.isReady.camera = true\n\n let { xMin, xMax, yMin, yMax } = this.orthographicBounds(\n roofsBounds,\n margin\n )\n\n this.orthographicCamera.left = xMin / 1000\n this.orthographicCamera.right = xMax / 1000\n this.orthographicCamera.top = yMax / 1000\n this.orthographicCamera.bottom = yMin / 1000\n this.orthographicCamera.updateProjectionMatrix()\n } else if (polygon) {\n let polygonRef = polygon\n\n //get polygonMesh\n let mesh\n let target\n let distance = 45\n if (polygonRef.layer == 'roof') {\n mesh = this.meshes.roofMeshes[polygonRef.id]\n } else if (polygonRef.layer == 'moduleField') {\n mesh = this.meshes.moduleFieldsMeshes[polygonRef.id]\n }\n if (mesh) {\n const geometry = mesh.geometry\n if (geometry.boundingSphere === null) geometry.computeBoundingSphere()\n target = [\n geometry.boundingSphere.center.x,\n geometry.boundingSphere.center.y,\n geometry.boundingSphere.center.z\n ]\n let objectRadius = geometry.boundingSphere.radius\n\n distance =\n 5 + objectRadius / Math.sin(((this.camera.fov / 2) * Math.PI) / 180)\n }\n\n polygonRef = updateComputedGeometryPolygon(polygonRef)\n const targetVector = polygonRef.meanPoint\n //const target=[targetVector.x/1000,targetVector.y/1000,targetVector.z/1000]\n let cameraMoveVector = { x: 0, y: 0, z: 0 }\n let flatRoof =\n polygonRef.normalVector.x == 0 && polygonRef.normalVector.y == 0\n if (view_mode == 'ortho') {\n cameraMoveVector = multiplyVector(\n distance * 1000,\n polygonRef.normalVector\n )\n } else if (view_mode == 'top') {\n let polygonBounds = polygonRef.getBounds()\n polygonBounds.xMin -= 1000\n polygonBounds.xMax += 1000\n polygonBounds.yMin -= 1000\n polygonBounds.yMax += 1000\n const position = [0, 0, 100]\n const target = [0, 0, 0]\n\n let { xMin, xMax, yMin, yMax } = this.orthographicBounds(\n polygonBounds,\n margin\n )\n this.orthographicCamera.position.set(...position)\n this.orthographicCamera.lookAt(...target)\n\n this.orthographicCamera.left = xMin / 1000\n this.orthographicCamera.right = xMax / 1000\n this.orthographicCamera.top = yMax / 1000\n this.orthographicCamera.bottom = yMin / 1000\n this.orthographicCamera.updateProjectionMatrix()\n } else {\n //street view\n let horizontalVector = { ...polygonRef.normalVector, z: 0 }\n if (horizontalVector.x == 0 && horizontalVector.y == 0) {\n horizontalVector.y = 1\n }\n horizontalVector = normalizeVector(horizontalVector)\n\n cameraMoveVector = multiplyVector(distance * 1000, horizontalVector)\n }\n\n const positionVector = addVector(polygonRef.meanPoint, cameraMoveVector)\n if (flatRoof) positionVector.z += 2000\n const position = [\n positionVector.x / 1000,\n positionVector.y / 1000 - 1,\n positionVector.z / 1000\n ]\n\n this.camera.position.set(...position)\n this.camera.lookAt(...target)\n this.camera.updateProjectionMatrix()\n\n this.isReady.camera = true\n }\n },\n orthographicBounds(bounds, margin) {\n let ratioCanvas = this.canvasHeight / this.canvasWidth\n\n let width = (bounds.xMax - bounds.xMin) * (1 + margin)\n let height = (bounds.yMax - bounds.yMin) * (1 + margin)\n let ratio = height / width\n\n let xCenter = (bounds.xMax + bounds.xMin) / 2\n let yCenter = (bounds.yMax + bounds.yMin) / 2\n let xMin\n let xMax\n let yMin\n let yMax\n if (ratioCanvas < ratio) {\n //canvas wider\n xMin = xCenter - height / (2 * ratioCanvas)\n xMax = xCenter + height / (2 * ratioCanvas)\n yMin = yCenter - height / 2\n yMax = yCenter + height / 2\n } else {\n xMin = xCenter - width / 2\n xMax = xCenter + width / 2\n yMin = yCenter - (width * ratioCanvas) / 2\n yMax = yCenter + (width * ratioCanvas) / 2\n }\n return { xMin, xMax, yMin, yMax }\n },\n animate() {\n this.render()\n this.animationFrameId = requestAnimationFrame(this.animate)\n },\n render() {\n this.renderer.clear()\n if (['top', 'global'].includes(this.view_mode) && !this.useCustomCamera) {\n this.renderer.render(this.scene, this.orthographicCamera)\n } else {\n this.renderer.render(this.scene, this.camera)\n }\n }\n },\n watch: {\n isReady: {\n handler() {\n if (\n this.isReady.texturesToLoad == this.isReady.texturesLoaded &&\n this.isReady.geometry &&\n this.isReady.threeMap &&\n this.isReady.camera\n ) {\n var event = new CustomEvent('screenshotable')\n // dispatch the custom event\n document.dispatchEvent(event)\n this.screenshotable = true\n }\n },\n deep: true\n }\n }\n}\n</script>\n\n<style>\n.canvas3DContainer {\n width: 100%;\n height: 100%;\n width: 100%;\n}\n\n.canvas3DContainer > canvas {\n width: 100%;\n height: 100%;\n width: 100%;\n}\n</style>\n","export const leafletMapLayersConfig = {\n baseMapLayer: {\n // Basemap.at\n maxZoom: 21,\n maxNativeZoom: 19,\n minZoom: 0\n },\n baseMapLayerStreetNumber: {\n // Basemap.at (satellite)\n maxZoom: 21,\n maxNativeZoom: 19,\n minZoom: 0\n },\n swisstopoLayer_swissimage: {\n // SwissTopo (satellite)\n maxZoom: 25,\n maxNativeZoom: 20,\n minZoom: 0\n },\n swisstopoLayer_pixelkarte: {\n // SwissTopo (map)\n maxZoom: 25,\n maxNativeZoom: 18,\n minZoom: 0\n },\n swisstopoLayer_solarenergie_fassade: {\n // SwissTopo (Solarenergie: Eignung Fassaden)\n maxZoom: 25,\n maxNativeZoom: 18,\n minZoom: 0\n },\n swisstopoLayer_solarenergie_roof: {\n // SwissTopo (Solar energy: suitability of roofs)\n maxZoom: 25,\n maxNativeZoom: 18,\n minZoom: 0\n },\n openStreetMapLayer: {\n // OpenStreetMap\n maxZoom: 21,\n maxNativeZoom: 19,\n minZoom: 0\n },\n ignSpainLayer_pnoa_image: {\n // Spain (satellite)\n maxZoom: 25,\n maxNativeZoom: 20,\n minZoom: 0\n },\n ignSpainLayer_map: {\n // Spain (map)\n maxZoom: 25,\n maxNativeZoom: 20,\n minZoom: 0\n },\n bkgHexagonGermanyLayer: {\n // Germany (satellite)\n maxZoom: 25,\n maxNativeZoom: 22,\n minZoom: 0\n },\n GeoPortal: {\n maxZoom: 22,\n maxNativeZoom: 19,\n minZoom: 6\n }\n}\n","import * as L from 'leaflet'\nimport 'leaflet.gridlayer.googlemutant/dist/Leaflet.GoogleMutant.js'\nimport { leafletMapLayersConfig } from './leaflet-config.service'\n\nfunction getLayers() {\n const googleLayer = L.gridLayer.googleMutant({\n type: 'hybrid',\n layerTypeAPI: 'googleLayer',\n maxNativeZoom: 25,\n maxZoom: 25\n })\n const googleLayerRoadmap = L.gridLayer.googleMutant({\n type: 'roadmap',\n layerTypeAPI: 'googleLayerRoadmap',\n maxNativeZoom: 25,\n maxZoom: 25\n })\n const googleLayerTerrain = L.gridLayer.googleMutant({\n type: 'terrain',\n layerTypeAPI: 'googleLayerTerrain',\n maxNativeZoom: 25,\n maxZoom: 25\n })\n // TODO activate for different users\n const baseMapLayer = L.tileLayer(\n 'http://{s}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{z}/{y}/{x}.png',\n {\n id: 'basemap',\n subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],\n attribution:\n 'Datenquelle: <a href=\"http://www.basemap.at/\">basemap.at</a>',\n // TODO not defined\n minZoom: leafletMapLayersConfig['baseMapLayer']['minZoom'],\n maxZoom: leafletMapLayersConfig['baseMapLayer']['maxZoom'],\n maxNativeZoom: leafletMapLayersConfig['baseMapLayer']['maxNativeZoom'],\n layerTypeAPI: 'baseMapLayer'\n }\n )\n const baseMapLayerStreetNumber = L.tileLayer(\n 'http://{s}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{z}/{y}/{x}.jpeg',\n {\n id: 'basemap_bmaporthofoto30cm',\n subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],\n attribution:\n 'Datenquelle: <a href=\"http://www.basemap.at/\">basemap.at</a>',\n // TODO not defined\n minZoom: leafletMapLayersConfig['baseMapLayerStreetNumber']['minZoom'],\n maxZoom: leafletMapLayersConfig['baseMapLayerStreetNumber']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['baseMapLayerStreetNumber']['maxNativeZoom'],\n layerTypeAPI: 'baseMapLayerStreetNumber'\n }\n )\n const swisstopoLayer_swissimage = L.tileLayer(\n 'https://wmts10.geo.admin.ch/1.0.0/ch.swisstopo.swissimage/default/current/3857/{z}/{x}/{y}.jpeg',\n {\n id: 'swisstopo_swissimage',\n subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],\n attribution:\n 'Datenquelle: <a href=\"https://www.geo.admin.ch\">geo.admin.ch</a>',\n maxZoom: leafletMapLayersConfig['swisstopoLayer_swissimage']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['swisstopoLayer_swissimage']['maxNativeZoom'],\n layerTypeAPI: 'swisstopoLayer_swissimage'\n }\n )\n const swisstopoLayer_pixelkarte = L.tileLayer(\n 'https://wmts10.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg',\n {\n id: 'swisstopo_pixelkarte',\n subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],\n attribution:\n 'Datenquelle: <a href=\"https://www.geo.admin.ch\">geo.admin.ch</a>',\n maxZoom: leafletMapLayersConfig['swisstopoLayer_pixelkarte']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['swisstopoLayer_pixelkarte']['maxNativeZoom'],\n layerTypeAPI: 'swisstopoLayer_pixelkarte'\n }\n )\n const swisstopoLayer_solarenergie_fassade = L.tileLayer(\n 'https://wmts10.geo.admin.ch/1.0.0/ch.bfe.solarenergie-eignung-fassaden/default/current/3857/{z}/{x}/{y}.png',\n {\n id: 'swisstopo_solarenergie_fassade',\n // subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],\n attribution:\n 'Datenquelle: <a href=\"https://www.geo.admin.ch\">geo.admin.ch</a>',\n maxZoom:\n leafletMapLayersConfig['swisstopoLayer_solarenergie_fassade'][\n 'maxZoom'\n ],\n maxNativeZoom:\n leafletMapLayersConfig['swisstopoLayer_solarenergie_fassade'][\n 'maxNativeZoom'\n ],\n layerTypeAPI: 'swisstopoLayer_solarenergie_fassade'\n }\n )\n const swisstopoLayer_solarenergie_roof = L.tileLayer(\n 'https://wmts10.geo.admin.ch/1.0.0/ch.bfe.solarenergie-eignung-daecher/default/current/3857/{z}/{x}/{y}.png',\n {\n id: 'swisstopo_solarenergie_roof',\n // subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],\n attribution:\n 'Datenquelle: <a href=\"https://www.geo.admin.ch\">geo.admin.ch</a>',\n maxZoom:\n leafletMapLayersConfig['swisstopoLayer_solarenergie_roof']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['swisstopoLayer_solarenergie_roof'][\n 'maxNativeZoom'\n ],\n layerTypeAPI: 'swisstopoLayer_solarenergie_roof'\n }\n )\n const openStreetMapLayer = L.tileLayer(\n 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n {\n id: 'osm',\n attribution:\n '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n minZoom: leafletMapLayersConfig['openStreetMapLayer']['minZoom'],\n maxZoom: leafletMapLayersConfig['openStreetMapLayer']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['openStreetMapLayer']['maxNativeZoom'],\n layerTypeAPI: 'openStreetMapLayer'\n }\n )\n const ignLayerPNOAImage = L.tileLayer(\n 'https://www.ign.es/wmts/pnoa-ma?layer={layer}&tilematrixset={tilematrixset}&Service=WMTS&Request=GetTile&Version=1.0.0&Format={format}&TileMatrix={z}&TileCol={x}&TileRow={y}',\n {\n layer: 'OI.OrthoimageCoverage',\n tilematrixset: 'EPSG:3857',\n format: 'image/jpeg',\n id: 'ign_pnoa',\n attribution:\n '&copy; <a href=\"https://pnoa.ign.es\" target=\"_blank\">PNOA</a>',\n maxZoom: leafletMapLayersConfig['ignSpainLayer_pnoa_image']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['ignSpainLayer_pnoa_image']['maxNativeZoom'],\n layerTypeAPI: 'ignSpainLayer_pnoa_image'\n }\n )\n const ignLayerMap = L.tileLayer(\n 'https://www.ign.es/wmts/ign-base?layer={layer}&tilematrixset={tilematrixset}&Service=WMTS&Request=GetTile&Version=1.0.0&Format={format}&TileMatrix={z}&TileCol={x}&TileRow={y}',\n {\n layer: 'IGNBaseTodo',\n tilematrixset: 'EPSG:3857',\n format: 'image/jpeg',\n id: 'ign_map',\n attribution:\n '&copy; <a href=\"https://www.ign.es/web/ign/portal\" target=\"_blank\">IGN</a>',\n maxZoom: leafletMapLayersConfig['ignSpainLayer_map']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['ignSpainLayer_map']['maxNativeZoom'],\n layerTypeAPI: 'ignSpainLayer_map'\n }\n )\n const bkgHexagonImage = L.tileLayer.wms(\n 'https://terramapserver.org/Proxy/geoserver/BKG/wms?kid=eag20.1',\n {\n layers: 'rgb',\n id: 'bkg_image',\n attribution:\n '&copy; <a href=\"https://www.bkg.bund.de\" target=\"_blank\">Bundesamt für Kartographie und Geodäsie</a>',\n maxZoom: leafletMapLayersConfig['bkgHexagonGermanyLayer']['maxZoom'],\n maxNativeZoom:\n leafletMapLayersConfig['bkgHexagonGermanyLayer']['maxNativeZoom'],\n layerTypeAPI: 'bkgHexagonGermanyLayer'\n }\n )\n const GeoLayer_HR = L.tileLayer(\n 'https://wxs.ign.fr/ortho/geoportail/wmts?' +\n '&REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0' +\n '&STYLE=normal' +\n '&TILEMATRIXSET=PM' +\n '&FORMAT=image/jpeg' +\n '&LAYER=HR.ORTHOIMAGERY.ORTHOPHOTOS' +\n '&TILEMATRIX={z}' +\n '&TILEROW={y}' +\n '&TILECOL={x}',\n {\n layers: 'HR.ORTHOIMAGERY.ORTHOPHOTOS',\n id: 'HR.ORTHOIMAGERY.ORTHOPHOTOS',\n attribution: '© IGN-F/Geoportail France',\n minZoom: leafletMapLayersConfig['GeoPortal']['minZoom'],\n maxZoom: leafletMapLayersConfig['GeoPortal']['maxZoom'],\n maxNativeZoom: leafletMapLayersConfig['GeoPortal']['maxNativeZoom'],\n tileSize: 256,\n layerTypeAPI: 'geoportail_fr_wmts_ortho_layer'\n }\n )\n\n return [\n {\n name: 'SwissTopo (satellite)',\n key: 'swisstopoLayer_swissimage',\n layerData: swisstopoLayer_swissimage\n },\n {\n name: 'SwissTopo (map)',\n key: 'swisstopoLayer_pixelkarte',\n layerData: swisstopoLayer_pixelkarte\n },\n {\n name: 'SwissTopo (Solar energy: suitability of roofs)',\n key: 'swisstopoLayer_solarenergie_roof',\n layerData: swisstopoLayer_solarenergie_roof\n },\n {\n name: 'SwissTopo (Solarenergie: suitability of facade)',\n key: 'swisstopoLayer_solarenergie_fassade',\n layerData: swisstopoLayer_solarenergie_fassade\n },\n {\n name: 'OpenStreetMap',\n key: 'openStreetMapLayer',\n layerData: openStreetMapLayer\n },\n {\n name: 'Google (terrain)',\n key: 'googleLayerTerrain',\n layerData: googleLayerTerrain\n },\n {\n name: 'Google (roadmap)',\n key: 'googleLayerRoadmap',\n layerData: googleLayerRoadmap\n },\n {\n name: 'Google (satellite)',\n key: 'googleLayer',\n layerData: googleLayer\n },\n {\n name: 'Basemap.at (roadmap)',\n key: 'baseMapLayer',\n layerData: baseMapLayer\n },\n {\n name: 'Basemap.at (satellite)',\n key: 'baseMapLayerStreetNumber',\n layerData: baseMapLayerStreetNumber\n },\n {\n name: 'IGN (PNOA satellite image)',\n key: 'ignSpainLayer_pnoa_image',\n layerData: ignLayerPNOAImage\n },\n {\n name: 'IGN (roadmap)',\n key: 'ignSpainLayer_map',\n layerData: ignLayerMap\n },\n {\n name: 'BKG satellite image',\n key: 'bkgHexagonGermanyLayer',\n layerData: bkgHexagonImage\n },\n {\n name: 'GeoPortal France (satellite)',\n key: 'geoportail_fr_wmts_ortho_layer',\n layerData: GeoLayer_HR\n }\n ]\n}\nexport default getLayers\n","import { MapProvider } from 'geo-three'\nimport getLayers from '../utils/layers'\nexport class CustomProvider extends MapProvider {\n constructor(address, map_layer) {\n super()\n\n const layer = getLayers().find((layer) => layer.key == map_layer)\n this.layer = layer\n this.mapLayer = map_layer\n this.maxZoom = this.layer.layerData.options.maxNativeZoom || 20\n this.minZoom = this.layer.layerData.options.minZoom || 17\n this.defaultImage = document.createElement('img')\n this.defaultImage.src = require('../assets/images/white_tile.png')\n this.defaultImage.crossOrigin = 'Anonymous'\n this.url = layer\n ? layer.layerData._url\n : 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'\n this.address = address\n }\n\n fetchTile(zoom, x, y) {\n const minZoomLayer = this.layer.layerData.options.minZoom || 9\n const maxZoomLayer = this.layer.layerData.options.maxNativeZoom || 20\n return new Promise((resolve, reject) => {\n if (zoom < minZoomLayer) {\n resolve(this.defaultImage)\n } else if (zoom > maxZoomLayer) {\n } else {\n var image = document.createElement('img')\n image.onload = function () {\n image.style.backgroundColor = 'red'\n resolve(image)\n }\n image.onerror = function () {\n resolve(this.defaultImage)\n }\n\n image.crossOrigin = 'Anonymous'\n let imageSrc = this.url\n if (this.layer.key == 'bkgHexagonGermanyLayer') {\n const numTiles = Math.pow(2, zoom)\n const tileX = x\n const tileY = numTiles - 1 - y\n const earthPerimeter = 6378137 * Math.PI * 2\n const resolution_mPerTile = earthPerimeter / numTiles\n\n const xMin = tileX * resolution_mPerTile - earthPerimeter / 2\n const xMax = xMin + resolution_mPerTile\n const yMin = tileY * resolution_mPerTile - earthPerimeter / 2\n const yMax = yMin + resolution_mPerTile\n\n imageSrc += `&service=WMS&request=GetMap&layers=rgb&styles=&format=image%2Fjpeg&transparent=false&version=1.1.1&id=bkg_image&layerTypeAPI=bkgHexagonGermanyLayer&width=256&height=256&srs=EPSG%3A3857&bbox=${xMin},${yMin},${xMax},${yMax}`\n } else {\n imageSrc = imageSrc.replace('{x}', x)\n imageSrc = imageSrc.replace('{y}', y)\n imageSrc = imageSrc.replace('{z}', zoom)\n //imageSrc = imageSrc.replace('{s}', 'a')\n if (this.layer.layerData.options.subdomains) {\n const subDomain =\n this.layer.layerData.options.subdomains[\n Math.abs((x << zoom) + y) %\n this.layer.layerData.options.subdomains.length\n ]\n imageSrc = imageSrc.replace('{s}', subDomain)\n }\n imageSrc = imageSrc.replace('{format}', 'image/jpeg')\n //imageSrc = imageSrc.replace('{format}', 'image/png')\n imageSrc = imageSrc.replace('{tileMatrixSet}', 'PM')\n }\n image.src = imageSrc\n }\n })\n }\n}\n","const theme = {\n colors: {\n primary: '#282387',\n secondary: '#818181',\n tertiary: '#d5d5d5',\n black: '#263238',\n yellow: '#fdb813',\n darkGray: '#818181',\n mediumGray: '#d5d5d5',\n lightGray: '#f2f2f2',\n white: '#fff',\n blue: '#48a2d0',\n red: '#FF5656',\n blue1: '#e4efff',\n blue2: '#F6FAFF',\n grey1: '#666',\n grey2: '#c4c4c4',\n grey3: '#b2b9c5',\n grey4: '#dee2eb',\n grey5: '#fafafa',\n grey6: '#555d61',\n turquoise: '#20A4CA',\n green: '#99db0c',\n purple: '#505ca6',\n disabled: '#dfe1e1',\n transparentWhite1: '#ffffff32',\n transparentBlack1: '#263238e6',\n transparentBlue1: '#20a4cae6',\n blueElectric: '#66dffa',\n eturnityGrey: '#263238'\n },\n\n screen: {\n mobileSmall: '345px',\n mobile: '425px',\n mobileLarge: '530px',\n tablet: '768px',\n tabletLarge: '950px'\n },\n borderRadius: '4px'\n}\n\nexport default theme\n","import theme from './assets/theme'\nexport const polygonCloseTolerance = 15\nexport const snapToPointTolerance = 15\nexport const snapToIntersectionPointTolerance = 15\nexport const snapToLineTolerance = 10\nexport const distanceToCloseNode = 70\nexport const mmTolerance = 5\nexport const mmTolerance3dNode = 50\nexport const earthRadius = 6371008\nexport const marginAroundBuildingForCameraViewInMeter = 5\nexport const layerColors = {\n construction: {\n fillColor: 'transparent',\n strokeColor: theme.colors.blueElectric,\n strokeWidth: 3\n },\n roof: {\n fillColor: 'rgba(255, 255, 255, 0.1)',\n strokeColor: 'white',\n strokeWidth: 0\n },\n roofInside: {\n fillColor: 'rgba(255, 255, 255, 0.1)',\n strokeColor: 'white',\n strokeWidth: 1\n },\n obstacle: { fillColor: theme.colors.red, strokeColor: 'red', strokeWidth: 1 },\n panel: {\n fillColor: 'rgba(115, 115, 229, 0.1)',\n strokeColor: '#ffffff',\n strokeWidth: 1\n },\n user_deactivated_panel: {\n fillColor: 'rgba(115, 115, 229, 0.1)',\n strokeColor: 'white',\n strokeWidth: 4\n },\n selectedPanel: {\n fillColor: '#0068DE80',\n strokeColor: theme.colors.blue,\n strokeWidth: 1\n },\n snap: { fillColor: 'transparent', strokeColor: 'white' },\n moduleField: {\n fillColor: 'rgba(255, 255, 255, 0.1)',\n strokeColor: 'white',\n strokeWidth: 3\n },\n hoveredModuleFieldEdge: { strokeColor: theme.colors.blue, strokeWidth: 6 },\n tmpModuleField: {\n fillColor: 'rgba(115, 115, 229, 0.4)',\n strokeColor: theme.colors.blue,\n strokeWidth: 2\n },\n selectedModuleField: {\n fillColor: '#0068DE80',\n strokeColor: theme.colors.blue,\n strokeWidth: 3\n },\n highlight: {\n fillColor: 'rgba(255, 255, 255, 0.2)',\n strokeColor: 'white',\n strokeWidth: 1\n },\n selectedRoof: {\n fillColor: '#0068DE80',\n strokeColor: 'white',\n strokeWidth: 3\n },\n selectedObstacle: {\n fillColor: '#0068DE80',\n strokeColor: theme.colors.blue,\n strokeWidth: 2\n },\n selectedAndHighlighted: {\n fillColor: '#0068DEA0',\n strokeColor: theme.colors.blue,\n strokeWidth: 3\n },\n flatWarning: {\n fillColor: '#ffff0090',\n strokeColor: 'yellow',\n strokeWidth: 1\n },\n customLength: {\n fillColor: 'transparent',\n strokeColor: theme.colors.blueElectric,\n strokeWidth: 1\n },\n snapDirectionIncline: {\n fillColor: 'transparent',\n strokeColor: theme.colors.blue,\n strokeWidth: 1\n },\n inclineDirectionArrow: {\n fillColor: 'transparent',\n strokeColor: '#FF5656',\n strokeWidth: 5\n },\n inclineLabel: {\n fillColor: theme.colors.transparentBlack1,\n textColor: 'white'\n },\n directionLabel: {\n fillColor: theme.colors.transparentBlack1,\n textColor: 'white'\n }\n}\n\nexport const snapInclineTolerance = 5\nexport const snapDirectionTolerance = 15\nexport const radiusPadding = 20\nexport const InclineDirectionCircleRadius = 250\nexport const inclineDirectionMinRadius = 50\nexport const baseEdgeOfModuleField = theme.colors.blueElectric\nexport const maximumGapLimit = 500\nexport const defaultBaseHeight = 3000\nexport const colorArrayBase = [\n '#FF5656',\n '#FDB813',\n '#505CA6',\n '#8392EE',\n '#6CD5D5',\n '#C84E4E',\n '#90A650',\n '#D27CCA',\n '#6276DF'\n]\nexport const colorArray = colorArrayBase.map((c) => c + 'c0')\nexport const layerTools = {\n map: [],\n roof: ['drawRoof', 'selectRoof'],\n obstacle: ['drawObstacle'],\n margin: ['selectMargin'],\n panel: ['selectModuleField']\n}\n//3D visualisation:\nexport const beamRadius = 0.05\nexport const maxMargin = 2500\nexport const node3DRadius = 0.05\nexport const beamColor = '#ffffff'\nexport const node3DColor = 'white'\nexport const beamOpacity = 0.1\nexport const node3dOpacity = 0.1\nexport const dimMarginColor = '#ff000020'\nexport const defaultTextureUrl = require('./assets/images/panels/reneSola_Virtus_2_JC320S_24_Bbw.png')\nconst textureImageDomain = 'https://public-data.eturnity.io/'\nexport const defaultTextureUrls = [\n textureImageDomain + 'textures/reneSola_Virtus_2_JC320S_24_Bbw.png',\n textureImageDomain + 'textures/longiSolarLR4_60HPH_370M.png',\n textureImageDomain + 'textures/longiSolarLR4_60HPH_350M.png'\n]\n\nexport const hitOption = {\n segments: true,\n stroke: true,\n fill: true,\n tolerance: 10\n}\nexport const zoomFactor = Math.exp(Math.log(2) / 10)\nexport const hitOptionPolygonStrict = {\n segments: false,\n stroke: false,\n fill: true,\n tolerance: 0\n}\nexport const hitOptionStrokeStrict = {\n segments: false,\n stroke: true,\n fill: false,\n tolerance: 0\n}\nexport const hitOptionStroke = {\n segments: false,\n stroke: true,\n fill: false,\n tolerance: 2\n}\n\nexport const dragHeightSensitivity = 20\nexport const snapLimit = 100\n","import * as THREE from 'three'\nimport {\n beamColor,\n beamOpacity,\n node3DColor,\n node3dOpacity,\n defaultTextureUrls\n} from '../config'\nexport default {\n data() {\n return {}\n },\n created() {\n this.material = {}\n let wallColor = 0xdddddd\n if (this.wallColor) {\n wallColor = new THREE.Color(this.wallColor)\n }\n\n this.material.panelSide = new THREE.MeshLambertMaterial({\n color: 0xdddddd,\n side: THREE.DoubleSide\n })\n\n this.material.wall = new THREE.MeshLambertMaterial({\n color: wallColor,\n side: THREE.DoubleSide\n })\n\n this.material.obstacle = new THREE.MeshPhongMaterial({\n color: 0xff0000,\n side: THREE.DoubleSide\n })\n\n this.material.edge = new THREE.MeshBasicMaterial({\n color: beamColor,\n transparent: true,\n opacity: beamOpacity\n })\n //Creating dot alpha texture for nodes\n const canvas = document.createElement('canvas'),\n ctx = canvas.getContext('2d')\n canvas.width = 64\n canvas.height = 64\n ctx.fillStyle = 'black'\n ctx.fillRect(0, 0, 64, 64)\n ctx.strokeStyle = 'white'\n ctx.beginPath()\n ctx.lineWidth = 10\n ctx.arc(32, 32, 16, 0, Math.PI * 2)\n ctx.stroke()\n const texture = new THREE.CanvasTexture(canvas)\n\n this.material.node = new THREE.PointsMaterial({\n alphaMap: texture,\n size: 25,\n sizeAttenuation: false,\n transparent: true,\n color: 0xffffff,\n opacity: 1\n })\n\n this.material.panel = {}\n\n for (let k = 0; k < defaultTextureUrls.length; k++) {\n let texture = this.loader.load(\n defaultTextureUrls[k],\n function (texture) {}\n )\n this.material.panel['default_' + k] = new THREE.MeshBasicMaterial({\n map: texture,\n side: THREE.DoubleSide\n })\n }\n this.material.panel['userDeactivatedPanel'] = new THREE.MeshBasicMaterial({\n color: 0xffffff,\n transparent: true,\n alphaTest: 0,\n opacity: 0.2,\n side: THREE.DoubleSide\n })\n this.material.roof = [this.material.wall]\n\n this.material.flatRoof = new THREE.MeshPhongMaterial({\n color: 0x00ff00,\n specular: 0x009900,\n shininess: 0,\n flatShading: true,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.5\n })\n\n this.material.highlight = new THREE.MeshPhongMaterial({\n color: 0xffffff,\n specular: 0x009900,\n shininess: 0,\n flatShading: true,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.4,\n alphaTest: 0.3\n })\n this.material.selected = new THREE.MeshPhongMaterial({\n color: 0x5050ff,\n specular: 0x009900,\n shininess: 0,\n flatShading: true,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.5,\n alphaTest: 0.3\n })\n this.material.hidden = new THREE.MeshBasicMaterial({\n color: 0xffffff,\n transparent: true,\n alphaTest: 1,\n opacity: 0.2,\n side: THREE.DoubleSide\n })\n this.material.moduleField = new THREE.MeshBasicMaterial({\n color: 0xe0e0ff,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.3\n })\n this.material.moduleFieldWithPanelOveride = new THREE.MeshBasicMaterial({\n color: 0xfc9d03,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.8\n })\n this.material.curvedRoof = new THREE.MeshPhongMaterial({\n color: 0xffff00,\n specular: 0x009900,\n shininess: 0,\n flatShading: true,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.5\n })\n },\n watch: {\n wallColor(color) {\n let wallColor = new THREE.Color(color)\n this.material.wall.color.set(wallColor)\n }\n }\n}\n","import * as THREE from 'three'\nexport default {\n methods: {\n renderNodes() {\n if (!this.nodesVisible) {\n if (this.meshes.nodeMeshes) {\n this.meshes.nodeMeshes.visible = false\n }\n return\n }\n\n let geometry\n if (this.meshes.nodeMeshes) {\n this.meshes.nodeMeshes.visible = true\n geometry = this.meshes.nodeMeshes.geometry\n geometry.attributes.position.needsUpdate = true\n } else {\n geometry = new THREE.BufferGeometry()\n }\n // let geometry = new THREE.SphereGeometry(node3DRadius, 4, 4)\n const vertices = []\n this.nodes\n .filter((node) => node.layer == 'roof')\n .forEach((node) => {\n vertices.push(node.x / 1000, node.y / 1000, node.z / 1000)\n })\n\n if (\n geometry.attributes.position &&\n geometry.attributes.position.array.length <= vertices.length\n ) {\n let positions = geometry.attributes.position.array\n for (let k in vertices) {\n positions[k] = vertices[k]\n }\n geometry.setDrawRange(0, vertices.length / 3)\n } else {\n geometry.setAttribute(\n 'position',\n new THREE.Float32BufferAttribute(vertices, 3)\n )\n }\n let material = this.material.node\n const nodeMeshes = new THREE.Points(geometry, material)\n nodeMeshes.userData.version = 0\n nodeMeshes.userData.type = 'nodeMeshes'\n nodeMeshes.userData.meshId = null\n nodeMeshes.userData.polygonId = null\n nodeMeshes.matrixAutoUpdate = false\n nodeMeshes.renderOrder = 10\n this.meshes.nodeMeshes = nodeMeshes\n if (this.overlayScene) {\n this.overlayScene.add(nodeMeshes)\n }\n }\n }\n}\n","import * as THREE from 'three'\nimport { defaultBaseHeight } from '../../config'\nimport earcut from 'earcut'\nimport {\n verticalProjectionOnPlane,\n addVector,\n multiplyVector,\n getNormalVectorFrom3Points,\n hasNaN,\n getDistanceBetweenPoints,\n intersectOutlines\n} from '@eturnity/eturnity_maths'\n\nexport function getTriangleVerticesFromOutline(\n polygonOutline,\n holesOutlines = []\n) {\n if (polygonOutline.length == 0) {\n return new Float32Array([])\n }\n var dataVertices = polygonOutline\n .map((p) => {\n return [p.x / 1000, p.y / 1000, p.z / 1000]\n })\n .flat()\n let holesStartingIndexes = []\n let holesVertices = []\n //we group building and wall vertices and give the starting index of each obstacles.\n if (holesOutlines.length > 0) {\n const HoleIndexOffset = dataVertices.length / 3 + 1\n holesStartingIndexes.push(HoleIndexOffset)\n let lastIndex = HoleIndexOffset\n for (let k = 0; k < holesOutlines.length - 1; k++) {\n let newIndex = lastIndex + holesOutlines[k].length\n holesStartingIndexes.push(newIndex)\n lastIndex = newIndex\n }\n holesStartingIndexes = [...new Set(holesStartingIndexes)]\n holesVertices = holesOutlines\n .map((holeOutline) => {\n return holeOutline.map((p) => {\n return [p.x / 1000, p.y / 1000, p.z / 1000]\n })\n })\n .flat()\n .flat()\n }\n let lastPoint = polygonOutline[polygonOutline.length - 1]\n let lastVertex = [lastPoint.x / 1000, lastPoint.y / 1000, lastPoint.z / 1000]\n dataVertices.push(...lastVertex)\n dataVertices.push(...holesVertices)\n\n var triangles = []\n try {\n triangles = earcut(dataVertices, holesStartingIndexes, 3)\n } catch (err) {\n console.error(err)\n }\n const triangleVertices = []\n triangles.forEach((index) => {\n triangleVertices.push(\n dataVertices[3 * index],\n dataVertices[3 * index + 1],\n dataVertices[3 * index + 2]\n )\n })\n return triangleVertices\n}\nexport function updateBufferRoofGeometry(\n polygonOutline,\n holesOutline = [],\n geometry\n) {\n //Calcul of triangles using cutear algo\n const triangleVertices = getTriangleVerticesFromOutline(\n polygonOutline,\n holesOutline\n )\n if (hasNaN(triangleVertices)) {\n return null\n }\n const vertices = new Float32Array(triangleVertices)\n if (\n geometry.attributes.position &&\n geometry.attributes.position.array.length >= vertices.length\n ) {\n let positions = geometry.attributes.position.array\n for (let k in vertices) {\n positions[k] = vertices[k]\n }\n } else {\n geometry.dispose()\n geometry = null\n geometry = new THREE.BufferGeometry()\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n }\n geometry.setDrawRange(0, vertices.length / 3)\n geometry.attributes.position.needsUpdate = true\n geometry.computeVertexNormals()\n geometry.needsUpdate = true\n return geometry\n}\n\nexport function getBufferRoofGeometry(polygonOutline, holesOutline = []) {\n const geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const triangleVertices = getTriangleVerticesFromOutline(\n polygonOutline,\n holesOutline\n )\n if (hasNaN(triangleVertices)) {\n return null\n }\n const vertices = new Float32Array(triangleVertices)\n // itemSize = 3 because there are 3 values (components) per vertex\n var uvs = new Float32Array([1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2))\n geometry.computeVertexNormals()\n return geometry\n}\n\nexport function getWallVertices(polygon) {\n const length = polygon.outline.length\n const trianglesVertices = []\n polygon.outline.forEach((p_up_0, index) => {\n const p_up_1 = polygon.outline[(index + 1) % length]\n const p_bottom_0 = { ...p_up_0, z: 0 }\n const p_bottom_1 = { ...p_up_1, z: 0 }\n\n trianglesVertices.push(\n ...[\n p_up_0.x / 1000,\n p_up_0.y / 1000,\n p_up_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_bottom_1.x / 1000,\n p_bottom_1.y / 1000,\n p_bottom_1.z / 1000\n ]\n )\n })\n\n polygon.holes.forEach((hole) => {\n let obstacleWallOutline =\n intersectOutlines(hole.outline, polygon.outline)[0] || []\n obstacleWallOutline = obstacleWallOutline.map((p) => {\n return {\n ...p,\n z: verticalProjectionOnPlane(\n p,\n polygon.normalVector,\n polygon.flatOutline[0]\n ).z\n }\n })\n const lengthHole = obstacleWallOutline.length\n obstacleWallOutline.forEach((p_up_0, index) => {\n const p_up_1 = obstacleWallOutline[(index + 1) % lengthHole]\n const p_bottom_0 = { ...p_up_0, z: 0 }\n const p_bottom_1 = { ...p_up_1, z: 0 }\n\n trianglesVertices.push(\n ...[\n p_up_0.x / 1000,\n p_up_0.y / 1000,\n p_up_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_bottom_1.x / 1000,\n p_bottom_1.y / 1000,\n p_bottom_1.z / 1000\n ]\n )\n })\n })\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n return vertices\n}\nexport function updateBufferWallGeometry(polygon, geometry) {\n //geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const vertices = getWallVertices(polygon)\n // itemSize = 3 because there are 3 values (components) per vertex\n\n if (\n geometry.attributes.position &&\n geometry.attributes.position.array.length >= vertices.length\n ) {\n let positions = geometry.attributes.position.array\n for (let k in vertices) {\n positions[k] = vertices[k]\n }\n geometry.setDrawRange(0, vertices.length / 3)\n } else {\n geometry.dispose()\n geometry = null\n geometry = new THREE.BufferGeometry()\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n }\n geometry.computeVertexNormals()\n geometry.attributes.position.needsUpdate = true\n return geometry\n}\n\nexport function getBufferWallGeometry(polygon) {\n const geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const vertices = getWallVertices(polygon)\n // itemSize = 3 because there are 3 values (components) per vertex\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.computeVertexNormals()\n\n return geometry\n}\n\nexport function getBufferObstacleGeometry(obstaclePolygon, roofPolygon) {\n let obstacleHeight\n if (obstaclePolygon.isParallel) {\n obstacleHeight = parseInt(obstaclePolygon.height || 0)\n } else {\n obstacleHeight = parseInt(\n obstaclePolygon.heightReference + obstaclePolygon.height || 0\n )\n }\n\n //get lowest verticalProjection\n const normalVector = roofPolygon.normalVector\n const passByPoint = roofPolygon.flatOutline[0]\n\n // const minHeight = Math.min(\n // ...obstaclePolygon.outline.map(\n // (p) => verticalProjectionOnPlane(p, normalVector, passByPoint).z\n // )\n // )\n // const topHeight = minHeight + obstacleHeight\n const topHeight = obstacleHeight\n\n const geometry = new THREE.BufferGeometry()\n const cropedHoleOutline =\n intersectOutlines(obstaclePolygon.outline, roofPolygon.outline)[0] || []\n\n //Calcul of triangles using cutear algo\n const trianglesVertices = []\n const obstacleOutlineTop = []\n cropedHoleOutline.forEach((p) => {\n const p_bottom_0 = verticalProjectionOnPlane(p, normalVector, passByPoint)\n\n let p_up_0\n if (!obstaclePolygon.isParallel) {\n p_up_0 = { ...p_bottom_0, z: topHeight }\n } else {\n const vectorFromBottomToTop = multiplyVector(obstacleHeight, {\n x: 0,\n y: 0,\n z: 1\n })\n p_up_0 = addVector(p_bottom_0, vectorFromBottomToTop)\n }\n obstacleOutlineTop.push(p_up_0)\n })\n trianglesVertices.push(...getTriangleVerticesFromOutline(obstacleOutlineTop))\n\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n // itemSize = 3 because there are 3 values (components) per vertex\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.computeVertexNormals()\n return geometry\n}\n\nexport function getBufferObstacleSideGeometry(obstaclePolygon, roofPolygon) {\n let obstacleHeight\n if (obstaclePolygon.isParallel) {\n obstacleHeight = parseInt(obstaclePolygon.height || 0)\n } else {\n obstacleHeight = parseInt(\n obstaclePolygon.heightReference + obstaclePolygon.height || 0\n )\n }\n\n const normalVector = roofPolygon.normalVector\n const passByPoint = roofPolygon.flatOutline[0]\n\n // const minHeight = Math.min(\n // ...obstaclePolygon.outline.map(\n // (p) => verticalProjectionOnPlane(p, normalVector, passByPoint).z\n // )\n // )\n // const topHeight = minHeight + obstacleHeight\n const topHeight = obstacleHeight\n\n const geometry = new THREE.BufferGeometry()\n const cropedHoleOutline =\n intersectOutlines(obstaclePolygon.outline, roofPolygon.outline)[0] || []\n //Calcul of triangles using cutear algo\n const obstacleLength = cropedHoleOutline.length\n const trianglesVertices = []\n const obstacleOutlineTop = []\n cropedHoleOutline.forEach((p, index) => {\n const p_bottom_0 = verticalProjectionOnPlane(p, normalVector, passByPoint)\n const p_bottom_1 = verticalProjectionOnPlane(\n cropedHoleOutline[(index + 1) % obstacleLength],\n normalVector,\n passByPoint\n )\n let p_up_0\n let p_up_1\n if (!obstaclePolygon.isParallel) {\n p_up_0 = { ...p_bottom_0, z: topHeight }\n p_up_1 = { ...p_bottom_1, z: topHeight }\n } else {\n //const vectorFromBottomToTop=multiplyVector(obstacleHeight,{normalVector})\n const vectorFromBottomToTop = multiplyVector(obstacleHeight, {\n x: 0,\n y: 0,\n z: 1\n })\n p_up_0 = addVector(p_bottom_0, vectorFromBottomToTop)\n p_up_1 = addVector(p_bottom_1, vectorFromBottomToTop)\n }\n trianglesVertices.push(\n ...[\n p_up_0.x / 1000,\n p_up_0.y / 1000,\n p_up_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_bottom_1.x / 1000,\n p_bottom_1.y / 1000,\n p_bottom_1.z / 1000\n ]\n )\n })\n\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n // itemSize = 3 because there are 3 values (components) per vertex\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.computeVertexNormals()\n return geometry\n}\n\nexport function getBufferModuleFieldGeometry(moduleFieldPolygon) {\n const roofPolygon = moduleFieldPolygon.roof\n const moduleHeight = 10\n //get lowest verticalProjection\n const normalVector = roofPolygon.normalVector\n\n const moduleFieldOutlineTop = []\n const geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const trianglesVertices = []\n moduleFieldPolygon.outline.forEach((p) => {\n const vectorFromBottomToTop = multiplyVector(moduleHeight, normalVector)\n let p_up_0 = addVector(p, vectorFromBottomToTop)\n moduleFieldOutlineTop.push(p_up_0)\n })\n trianglesVertices.push(\n ...getTriangleVerticesFromOutline(moduleFieldOutlineTop)\n )\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n var uvs = new Float32Array([\n 1, 1, 0, 1, 0, 0,\n\n 1, 1, 0, 0, 1, 0\n ])\n\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2))\n\n geometry.computeVertexNormals()\n return geometry\n}\n\nexport function getBufferImageOverlayGeometry(corners) {\n corners.forEach((p) => (p.z = 0))\n let normalVector = getNormalVectorFrom3Points(\n corners[0],\n corners[1],\n corners[2]\n )\n if (normalVector.z < 0) {\n normalVector = multiplyVector(-1, normalVector)\n }\n\n const geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const trianglesVertices = []\n trianglesVertices.push(...getTriangleVerticesFromOutline(corners))\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n var A = corners[2]\n var B = corners[3]\n var C = corners[1]\n var D = corners[0]\n const AB = getDistanceBetweenPoints(A, B)\n const AC = getDistanceBetweenPoints(A, C)\n let uvs\n if (AB < AC) {\n uvs = new Float32Array([\n 0, 1, 0, 0, 1, 0,\n\n 0, 1, 1, 0, 1, 1\n ])\n } else {\n uvs = new Float32Array([\n 0, 0, 1, 0, 1, 1,\n\n 1, 0, 0, 1, 1, 1\n ])\n }\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2))\n geometry.computeVertexNormals()\n return geometry\n}\nexport function getPanelOutlineWithHeightOffset(panelPolygon) {\n let panelNormalVector = getNormalVectorFrom3Points(\n panelPolygon.outline[0],\n panelPolygon.outline[1],\n panelPolygon.outline[2]\n )\n if (panelNormalVector.z < 0) {\n panelNormalVector = multiplyVector(-1, panelNormalVector)\n }\n const panelHeight = parseInt(panelPolygon.height || 50)\n //get lowest verticalProjection\n\n const panelOutlineTop = []\n panelPolygon.outline.forEach((p) => {\n const vectorFromBottomToTop = multiplyVector(panelHeight, panelNormalVector)\n let p_up_0 = addVector(p, vectorFromBottomToTop)\n\n panelOutlineTop.push(p_up_0)\n })\n return panelOutlineTop\n}\nexport function getBufferPanelGeometry(panelPolygon) {\n const geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const trianglesVertices = []\n const panelOutlineTop = getPanelOutlineWithHeightOffset(panelPolygon)\n trianglesVertices.push(...getTriangleVerticesFromOutline(panelOutlineTop))\n\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n var A = panelPolygon.outline[2]\n var B = panelPolygon.outline[3]\n var C = panelPolygon.outline[1]\n var D = panelPolygon.outline[0]\n const AB = getDistanceBetweenPoints(A, B)\n const AC = getDistanceBetweenPoints(A, C)\n let uvs\n if (AB < AC) {\n uvs = new Float32Array([\n 0, 1, 0, 0, 1, 0,\n\n 0, 1, 1, 0, 1, 1\n ])\n } else {\n uvs = new Float32Array([\n 0, 0, 1, 0, 1, 1,\n\n 1, 0, 0, 1, 1, 1\n ])\n }\n\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2))\n\n geometry.computeVertexNormals()\n return geometry\n}\nexport function updateBufferPanelGeometry(panelPolygon, geometry) {\n const panelOutlineTop = getPanelOutlineWithHeightOffset(panelPolygon)\n geometry = updateBufferRoofGeometry(panelOutlineTop, [], geometry)\n return geometry\n}\n\nexport function getTriangleVerticesForSidePanels(outlineBottom, outlineUp) {\n const triangleVertices = []\n const length = outlineBottom.length\n for (let index = 0; index < length; index++) {\n //const vectorFromBottomToTop=multiplyVector(obstacleHeight,{normalVector})\n const nextIndex = (index + 1) % length\n const p_bottom_0 = outlineBottom[index]\n const p_bottom_1 = outlineBottom[nextIndex]\n let p_up_0 = outlineUp[index]\n let p_up_1 = outlineUp[nextIndex]\n triangleVertices.push(\n ...[\n p_up_0.x / 1000,\n p_up_0.y / 1000,\n p_up_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_bottom_0.x / 1000,\n p_bottom_0.y / 1000,\n p_bottom_0.z / 1000,\n p_up_1.x / 1000,\n p_up_1.y / 1000,\n p_up_1.z / 1000,\n p_bottom_1.x / 1000,\n p_bottom_1.y / 1000,\n p_bottom_1.z / 1000\n ]\n )\n }\n return triangleVertices\n}\nexport function updateBufferPanelSideGeometry(panelPolygon, geometry) {\n const panelOutlineTop = getPanelOutlineWithHeightOffset(panelPolygon)\n const triangleVertices = getTriangleVerticesForSidePanels(\n panelPolygon.outline,\n panelOutlineTop\n )\n \n if (hasNaN(triangleVertices)) {\n return null\n }\n const vertices = new Float32Array(triangleVertices)\n if (\n geometry.attributes.position &&\n geometry.attributes.position.array.length >= vertices.length\n ) {\n let positions = geometry.attributes.position.array\n for (let k in vertices) {\n positions[k] = vertices[k]\n }\n } else {\n geometry.dispose()\n geometry = null\n geometry = new THREE.BufferGeometry()\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n }\n geometry.setDrawRange(0, vertices.length / 3)\n geometry.attributes.position.needsUpdate = true\n geometry.computeVertexNormals()\n geometry.needsUpdate = true\n \n return geometry\n}\nexport function getBufferPanelSideGeometry(panelPolygon) {\n const panelOutlineTop = getPanelOutlineWithHeightOffset(panelPolygon)\n const geometry = new THREE.BufferGeometry()\n //Calcul of triangles using cutear algo\n const trianglesVertices = getTriangleVerticesForSidePanels(\n panelPolygon.outline,\n panelOutlineTop\n )\n if (hasNaN(trianglesVertices)) {\n return null\n }\n\n const vertices = new Float32Array(trianglesVertices)\n\n // itemSize = 3 because there are 3 values (components) per vertex\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.computeVertexNormals()\n return geometry\n}\n\nexport function getBufferRoofMarginGeometry(polygon, roofPolygon = null) {\n const geometries = []\n const length = polygon.margins.innerOutline.length\n\n polygon.margins.innerOutline.forEach((K, index) => {\n //check if distance ==0 then margin not displayed\n let geometry\n const distance = polygon.margins.isSameMargin\n ? polygon.margins.sameMargin\n : polygon.margins.distances[index]\n if (distance <= 0) {\n geometry = null\n } else {\n const A = polygon.margins.outterOutline[index]\n const B = polygon.margins.outterOutline[(index + 1) % length]\n const J = polygon.margins.innerOutline[(index + 1) % length]\n\n let marginOutline = [A, B, J, K]\n if (roofPolygon) {\n marginOutline =\n intersectOutlines(marginOutline, roofPolygon.flatOutline)[0] || []\n marginOutline = marginOutline.map((p) => {\n return {\n x: p.x,\n y: p.y,\n z: verticalProjectionOnPlane(\n p,\n roofPolygon.normalVector,\n roofPolygon.flatOutline[0]\n ).z\n }\n })\n }\n marginOutline = marginOutline.map((p) => {\n return { x: p.x, y: p.y, z: p.z + 10 }\n })\n geometry = new THREE.BufferGeometry()\n\n const trianglesVertices = []\n\n trianglesVertices.push(...getTriangleVerticesFromOutline(marginOutline))\n if (hasNaN(trianglesVertices)) {\n return null\n }\n const vertices = new Float32Array(trianglesVertices)\n\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))\n geometry.computeVertexNormals()\n }\n geometries.push(geometry)\n })\n return geometries\n}\n\nexport function getExtrusionGeometry(\n solidsHolesMapData,\n height = (defaultBaseHeight - 100) / 1000\n) {\n const shapes = []\n const getBezierPath = (segments) => {\n const bezierPath = new THREE.Shape()\n for (let i = 0; i < segments.length; i += 1) {\n const curr = segments[i]\n const next = segments[(i + 1) % segments.length]\n const p = []\n p[0] = curr\n p[1] = curr\n p[2] = next\n p[3] = next\n\n if (i === 0) {\n bezierPath.moveTo(p[0].x / 1000, p[0].y / 1000)\n }\n bezierPath.bezierCurveTo(\n p[1].x / 1000,\n p[1].y / 1000,\n p[2].x / 1000,\n p[2].y / 1000,\n p[3].x / 1000,\n p[3].y / 1000\n )\n }\n\n bezierPath.closePath()\n return bezierPath\n }\n for (const shape of solidsHolesMapData) {\n const solidShape = getBezierPath(shape.outline)\n const holes = shape.holes\n const holePaths = []\n for (let i = 0; i < holes.length; i += 1) {\n const holePath = getBezierPath(holes[i])\n holePaths.push(holePath)\n }\n solidShape.holes = holePaths\n shapes.push(solidShape)\n }\n const settings = {\n depth: height,\n curveSegments: 10,\n bevelEnabled: false,\n material: 0,\n extrudeMaterial: 1\n }\n\n const geometry = new THREE.ExtrudeGeometry(shapes, settings)\n return geometry\n}\n","import * as THREE from 'three'\nimport {\n getBufferWallGeometry,\n updateBufferWallGeometry\n} from './geometryHandler'\nexport default {\n methods: {\n data(){\n return {\n mergedBaseMesh:null\n }\n },\n renderBase() {\n //rendering of walls\n this.clearRemovedOnes('baseMeshes')\n let geometry\n let mesh\n let baseGeometries=[]\n this.roofs.forEach((roofPolygon) => {\n //everythime the essencials data are changed, version goes up. we compare polygon version and mesh version to know if we have to rerender\n if (\n this.meshes.baseMeshes[roofPolygon.id] &&\n this.meshes.baseMeshes[roofPolygon.id].userData.version <\n roofPolygon.version\n ) {\n mesh = this.meshes.baseMeshes[roofPolygon.id]\n geometry = mesh.geometry\n geometry = updateBufferWallGeometry(roofPolygon, geometry)\n mesh.geometry = geometry\n mesh.updateMatrix()\n }\n if (!this.meshes.baseMeshes[roofPolygon.id]) {\n //create\n geometry = getBufferWallGeometry(roofPolygon)\n mesh = new THREE.Mesh(geometry, this.material.wall)\n mesh.userData.version = roofPolygon.version\n mesh.userData.type = 'baseMeshes'\n mesh.userData.meshId = roofPolygon.id\n mesh.userData.polygonId = roofPolygon.id\n mesh.matrixAutoUpdate = false\n mesh.frustumCulled = false\n this.meshes.baseMeshes[roofPolygon.id] = mesh\n }\n baseGeometries.push(this.meshes.baseMeshes[roofPolygon.id].geometry)\n })\n\n this.mergedBaseMesh=this.updateOrCreateMergedMesh(\n this.mergedBaseMesh,\n baseGeometries,\n this.material.wall\n )\n\n }\n }\n}\n","export default {\n methods: {\n clearThreeObjects(obj) {\n if (!obj) {\n return\n }\n while (obj.children.length > 0) {\n this.clearThreeObjects(obj.children[0])\n obj.remove(obj.children[0])\n }\n if (obj.geometry) obj.geometry.dispose()\n if (obj.texture) obj.texture.dispose()\n\n if (obj.material) {\n //in case of map, bumpMap, normalMap, envMap ...\n Object.keys(obj.material).forEach((prop) => {\n if (!obj.material[prop]) return\n if (\n false &&\n obj.material[prop] !== null &&\n typeof obj.material[prop].dispose === 'function'\n )\n obj.material[prop].dispose()\n })\n if (obj.material.dispose) obj.material.dispose()\n }\n },\n clearPanelsFromChangingRoofs(roofIds) {\n const roofs = this.polygons.filter((polygon) =>\n roofIds.includes(polygon.id)\n )\n roofs.forEach((roof) =>\n roof.moduleFields.forEach((mf) =>\n mf.panels.forEach((panel) => {\n let meshTop = this.meshes.panelsMeshes[panel.id + '_top']\n let meshSide = this.meshes.panelsMeshes[panel.id + '_side']\n if (meshTop || meshSide) {\n this.clearMeshFromScene(meshTop, this.scene)\n this.clearMeshFromScene(meshSide, this.scene)\n }\n })\n )\n )\n },\n clearMeshFromScene(mesh, scene) {\n if (!mesh || !scene) {\n return\n }\n scene.remove(mesh)\n if (mesh.geometry && mesh.geometry.dispose) {\n mesh.geometry.dispose()\n mesh.geometry = null\n }\n if (mesh.texture && mesh.texture.dispose) {\n mesh.texture.dispose()\n mesh.texture = null\n }\n if (mesh.material && mesh.material.dispose) {\n mesh.material.dispose()\n mesh.material = null\n }\n if (\n mesh.userData.meshId &&\n this.meshes[mesh.userData.type][mesh.userData.meshId]\n ) {\n delete this.meshes[mesh.userData.type][mesh.userData.meshId]\n } else {\n this.meshes[mesh.userData.type] = null\n }\n mesh = null\n },\n clearEdgesRemovedOnes() {\n Object.values(this.meshes['edgeMeshes']).forEach((mesh) => {\n if (!this.edgeIds.includes(mesh.userData.edgeId)) {\n this.clearMeshFromScene(mesh, this.scene)\n }\n })\n },\n clearRemovedOnes(type) {\n Object.values(this.meshes[type]).forEach((mesh) => {\n if (!this.polygonIds.includes(mesh.userData.polygonId)) {\n this.clearMeshFromScene(mesh, this.scene)\n }\n })\n },\n clearByType(type) {\n Object.values(this.meshes[type]).forEach((mesh) => {\n mesh.geometry.dispose()\n mesh.geometry = null\n if (mesh.material && mesh.material.dispose) {\n mesh.material.dispose()\n }\n mesh.material = null\n this.scene.remove(mesh)\n })\n this.meshes[type] = {}\n if (this.renderer) {\n this.renderer.renderLists.dispose()\n }\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\n\nexport default {\n methods: {\n setCylinderPosition(cylinder, edge) {\n const point_0 = new THREE.Vector3(\n edge.outline[0].x / 1000,\n edge.outline[0].y / 1000,\n edge.outline[0].z / 1000\n )\n const point_1 = new THREE.Vector3(\n edge.outline[1].x / 1000,\n edge.outline[1].y / 1000,\n edge.outline[1].z / 1000\n )\n\n const midPoint = point_0.clone().add(point_1).multiplyScalar(0.5)\n var direction = new THREE.Vector3().subVectors(point_1, point_0)\n let length = direction.length()\n\n //cylinder.rotation.set(arrow.rotation)\n var axis = new THREE.Vector3(0, 1, 0)\n cylinder.quaternion.setFromUnitVectors(\n axis,\n direction.clone().normalize()\n )\n //cylinder.position.set(new THREE.Vector3().addVectors( pointX, direction.multiplyScalar(0.5) ))\n cylinder.position.copy(midPoint.clone())\n let oldLength = cylinder.userData.cylinderLength\n let newLength = length\n if (!oldLength || oldLength != 0) {\n cylinder.scale.set(1, newLength, 1)\n cylinder.userData.cylinderLength = newLength\n }\n cylinder.updateMatrix()\n return cylinder\n },\n renderEdges() {\n this.clearEdgesRemovedOnes('edgeMeshes')\n if (this.renderLineEdges) {\n this.renderLineEdges()\n }\n let cylinder\n const material = this.material.edge\n this.edges.forEach((edge) => {\n cylinder = this.meshes.edgeMeshes[edge.id]\n if (cylinder) {\n cylinder.visible = false\n }\n if (['obstacle', 'construction'].includes(edge.layer)) return\n if (\n ['selectRoof'].includes(this.selectedTool) &&\n edge.layer != 'roof'\n ) {\n return\n }\n if (\n ['selectModuleField'].includes(this.selectedTool) &&\n (edge.layer != 'moduleField' ||\n !this.selectedModuleField ||\n !edge.belongsTo\n .map((i) => i.polygonId)\n .includes(this.selectedModuleField.id))\n ) {\n return\n }\n cylinder = this.meshes.edgeMeshes[edge.id]\n if (cylinder) {\n //update\n cylinder.visible = true\n this.setCylinderPosition(cylinder, edge)\n //change cylinder length\n } else {\n const edgeRadius = this.edgeRadius || 0.1\n const geometry = new THREE.CylinderGeometry(\n edgeRadius,\n edgeRadius,\n 1,\n 6\n )\n if (this.edgeOpacity != undefined) {\n material.opacity = this.edgeOpacity\n }\n cylinder = new THREE.Mesh(geometry, material.clone())\n cylinder = this.setCylinderPosition(cylinder, edge)\n cylinder.userData.meshId = edge.id\n cylinder.userData.edgeId = edge.id\n cylinder.userData.type = 'edgeMeshes'\n cylinder.userData.layer = edge.layer\n\n cylinder.frustumCulled = false\n cylinder.renderOrder = 10\n this.meshes.edgeMeshes[edge.id] = cylinder\n this.scene.add(cylinder)\n }\n })\n }\n }\n}\n","import * as THREE from 'three'\nimport ProjectedMaterial from 'three-projected-material'\n\nexport default {\n methods: {\n loadNewPanelTextures() {\n Object.values(this.pvDataMemo).forEach((component) => {\n const pvId = component.id\n if (!this.material.panel[pvId]) {\n if (!component.texture_img_url) {\n this.material.panel[pvId] = this.material.panel.default\n } else {\n const texture = this.loader.load(component.texture_img_url)\n this.material.panel[pvId] = new THREE.MeshBasicMaterial({\n map: texture,\n side: THREE.FrontSide,\n transparent: false\n })\n }\n }\n })\n },\n async loadPanelsTexture() {\n for (let k = 0; k < this.moduleFields.length; k++) {\n let mf = this.moduleFields[k]\n const pvId = mf.data.component_id_pv_module\n if (!this.material.panel[pvId]) {\n if (!mf.data.texture_img_url) {\n this.material.panel[pvId] =\n this.material.panel[`default_${this.moduleTextureVersionId}`]\n } else {\n await new Promise((resolve) => {\n this.loader.load(mf.data.texture_img_url, (texture) => {\n this.material.panel[pvId] = new THREE.MeshBasicMaterial({\n map: texture,\n side: THREE.FrontSide,\n transparent: false\n })\n resolve(texture)\n })\n })\n }\n }\n }\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport { colorArrayBase } from '../../config'\nimport { getBufferRoofMarginGeometry } from './geometryHandler'\nexport default {\n methods: {\n renderRoofsMargin() {\n this.clearByType('roofMarginMeshes')\n\n if (\n ![\n 'selectMargin',\n 'selectModuleField',\n 'drawRoof',\n 'drawObstacle'\n ].includes(this.selectedTool)\n ) {\n return\n }\n let showableRoofs = []\n if (['drawRoof', 'drawObstacle'].includes(this.selectedTool)) {\n if (this.selectedRoof) {\n showableRoofs = [this.selectedRoof]\n }\n if (this.selectedObstacle) {\n showableRoofs = this.selectedObstacle.roofs\n }\n } else {\n showableRoofs = this.roofs\n }\n showableRoofs.forEach((roofPolygon) => {\n const geometries = getBufferRoofMarginGeometry(roofPolygon)\n\n geometries.forEach((geometry, index) => {\n if (geometry) {\n const marginColor = roofPolygon.margins.isSameMargin\n ? colorArrayBase[0]\n : colorArrayBase[index % colorArrayBase.length]\n let material = new THREE.MeshPhongMaterial({\n color: marginColor,\n specular: 0x009900,\n shininess: 0,\n flatShading: true,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.8\n })\n const mesh = new THREE.Mesh(geometry, material)\n geometry.dispose()\n this.scene.add(mesh)\n this.meshes.roofMarginMeshes[roofPolygon.id + '_' + index] = mesh\n }\n })\n roofPolygon.holes.forEach((obstaclePolygon) => {\n const geometries = getBufferRoofMarginGeometry(\n obstaclePolygon,\n roofPolygon\n )\n geometries.forEach((geometry, index) => {\n if (geometry) {\n const marginColor = obstaclePolygon.margins.isSameMargin\n ? colorArrayBase[0]\n : colorArrayBase[index % colorArrayBase.length]\n let material = new THREE.MeshPhongMaterial({\n color: marginColor,\n specular: 0x009900,\n shininess: 0,\n flatShading: true,\n side: THREE.DoubleSide,\n transparent: true,\n opacity: 0.8\n })\n const mesh = new THREE.Mesh(geometry, material)\n geometry.dispose()\n geometry = null\n material.dispose()\n material = null\n this.scene.add(mesh)\n this.meshes.roofMarginMeshes[\n obstaclePolygon.id + '_' + roofPolygon.id + '_' + index\n ] = mesh\n }\n })\n })\n })\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport { getBufferModuleFieldGeometry } from './geometryHandler'\nexport default {\n methods: {\n renderModuleFields() {\n this.clearByType('moduleFieldsMeshes')\n const moduleFieldPolygons = this.polygons.filter((p) =>\n ['moduleField', 'tmpModuleField'].includes(p.layer)\n )\n moduleFieldPolygons.forEach((moduleFieldPolygon) => {\n let material\n if (moduleFieldPolygon.data.number_of_panels_override) {\n material = this.material.moduleFieldWithPanelOveride\n } else if (this.areModuleFieldsVisible) {\n material = this.material.moduleField\n } else {\n return\n }\n const geometry = getBufferModuleFieldGeometry(moduleFieldPolygon)\n if (geometry) {\n const mesh = new THREE.Mesh(geometry, material)\n mesh.matrixAutoUpdate = false\n mesh.userData.version = moduleFieldPolygon.version\n mesh.userData.type = 'moduleFieldsMeshes'\n mesh.userData.layer = moduleFieldPolygon.layer\n mesh.userData.meshId = moduleFieldPolygon.id\n mesh.userData.polygonId = moduleFieldPolygon.id\n this.scene.add(mesh)\n this.meshes.moduleFieldsMeshes[moduleFieldPolygon.id] = mesh\n }\n })\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport {\n getBufferObstacleGeometry,\n getBufferObstacleSideGeometry\n} from './geometryHandler'\nexport default {\n methods: {\n data() {\n return {\n mergedObstacleMesh: null,\n mergedObstacleSideMesh: null\n }\n },\n applyTextureOnObstacles(material = this.material.roof) {\n this.reorderRoofMaterials()\n if (this.mergedObstacleMesh) {\n this.applyTextureOnMesh(material, this.mergedObstacleMesh)\n }\n },\n renderObstacles() {\n this.clearByType('obstacleMeshes')\n let obstacleGeometries = []\n let obstacleSideGeometries = []\n this.roofs.forEach((roofPolygon) => {\n roofPolygon.holes\n .filter((poly) => poly.layer == 'obstacle')\n .forEach((obstaclePolygon) => {\n const geometry = getBufferObstacleGeometry(\n obstaclePolygon,\n roofPolygon\n )\n\n const geometrySide = getBufferObstacleSideGeometry(\n obstaclePolygon,\n roofPolygon\n )\n if (geometry && geometrySide) {\n const mesh = new THREE.Mesh(geometry, this.material.hidden)\n\n const meshSide = new THREE.Mesh(geometrySide, this.material.wall)\n // this.applyTextureOnMesh(this.material.roof, mesh)\n\n mesh.userData.version = obstaclePolygon.version\n mesh.userData.type = 'obstacleMeshes'\n mesh.userData.meshId =\n obstaclePolygon.id + '-' + roofPolygon.id + '_top'\n mesh.userData.polygonId = obstaclePolygon.id\n meshSide.userData.version = obstaclePolygon.version\n meshSide.userData.type = 'obstacleMeshes'\n meshSide.userData.meshId =\n obstaclePolygon.id + '-' + roofPolygon.id + '_side'\n meshSide.userData.polygonId = obstaclePolygon.id\n\n this.meshes.obstacleMeshes[\n obstaclePolygon.id + '-' + roofPolygon.id + '_top'\n ] = mesh\n this.meshes.obstacleMeshes[\n obstaclePolygon.id + '-' + roofPolygon.id + '_side'\n ] = meshSide\n this.scene.add(mesh)\n }\n obstacleGeometries.push(\n this.meshes.obstacleMeshes[\n obstaclePolygon.id + '-' + roofPolygon.id + '_top'\n ].geometry\n )\n obstacleSideGeometries.push(\n this.meshes.obstacleMeshes[\n obstaclePolygon.id + '-' + roofPolygon.id + '_side'\n ].geometry\n )\n })\n })\n\n // Create the mesh using the merged geometry and shared material\n this.mergedObstacleMesh = this.updateOrCreateMergedMesh(\n this.mergedObstacleMesh,\n obstacleGeometries,\n this.material.roof\n )\n this.mergedObstacleSideMesh = this.updateOrCreateMergedMesh(\n this.mergedObstacleSideMesh,\n obstacleSideGeometries,\n this.material.wall\n )\n this.applyTextureOnObstacles(this.material.roof)\n }\n }\n}\n","import * as THREE from 'three'\nimport {\n getBufferPanelGeometry,\n updateBufferPanelGeometry,\n getBufferPanelSideGeometry,\n updateBufferPanelSideGeometry\n} from './geometryHandler'\nexport default {\n data() {\n return {\n mergedPanelSideMesh: null,\n arePanelVisible: true\n }\n },\n created() {\n this.mergedPanelTopMeshes = {}\n },\n methods: {\n hidePanels() {\n this.arePanelVisible = false\n if (this.mergedPanelTopMeshes) {\n Object.values(this.mergedPanelTopMeshes).forEach((mesh) => {\n mesh.visible = false\n })\n }\n if (this.mergedPanelSideMesh) {\n this.mergedPanelSideMesh.visible = false\n }\n },\n showPanels() {\n this.arePanelVisible = true\n if (this.mergedPanelTopMeshes) {\n Object.values(this.mergedPanelTopMeshes).forEach((mesh) => {\n mesh.visible = true\n })\n }\n if (this.mergedPanelSideMesh) {\n this.mergedPanelSideMesh.visible = true\n }\n },\n renderPanels() {\n this.clearRemovedOnes('panelsMeshes')\n //clear mesh of userDeactivated panels && panels with overriden # of panels\n Object.values(this.meshes.panelsMeshes).forEach((mesh) => {\n if (\n !this.areUserDeactivatedPanelsVisible &&\n this.polygons.find(\n (poly) =>\n poly.id == mesh.userData.polygonId &&\n poly.layer == 'user_deactivated_panel'\n )\n ) {\n this.clearMeshFromScene(mesh, this.scene)\n }\n //clear panel on moduleField with overriden number of panel\n let panel = this.polygons.find(\n (poly) => mesh.userData.polygonId == poly.id\n )\n if (!panel || panel.moduleField.data.number_of_panels_override) {\n this.clearMeshFromScene(mesh, this.scene)\n }\n })\n\n let panelSideGeometries = []\n let panelTopGeometries = {}\n let panels = this.panels\n if (this.areUserDeactivatedPanelsVisible) {\n panels = this.polygons.filter((polygon) => {\n return ['panel', 'user_deactivated_panel'].includes(polygon.layer)\n })\n }\n panels.forEach((panelPolygon) => {\n //for each visible panels\n //1. define materialId and material\n //2. create or update individual meshes\n // 2a. Fill in panelTopGeometries & panelSideGeometries\n if (!panelPolygon.visible) {\n return\n }\n if (panelPolygon.moduleField.data.number_of_panels_override) {\n return\n }\n //1.define materialId and material\n let material\n let materialId\n if (panelPolygon.layer == 'user_deactivated_panel') {\n materialId = 'userDeactivatedPanel'\n material = this.material.panel[materialId]\n material.opacity = this.panelOpacity\n } else {\n const moduleTextureId =\n panelPolygon.moduleField.pvData.hasOwnProperty(\n 'module_texture_version_id'\n ) && panelPolygon.moduleField.pvData.module_texture_version_id\n ? panelPolygon.moduleField.pvData.module_texture_version_id\n : 0\n\n materialId = 'default_' + moduleTextureId\n material = this.material.panel[materialId]\n\n if (panelPolygon.moduleField.data) {\n if (\n this.material.panel[\n panelPolygon.moduleField.data.component_id_pv_module\n ]\n ) {\n materialId = panelPolygon.moduleField.data.component_id_pv_module\n material = this.material.panel[materialId]\n }\n } else if (panelPolygon.moduleField.pvData) {\n if (this.material.panel[panelPolygon.moduleField.pvData.id]) {\n materialId = panelPolygon.moduleField.pvData.id\n material = this.material.panel[materialId]\n }\n }\n material.transparent = true\n material.opacity = this.panelOpacity\n }\n //2. create or update individual meshes\n //update existing geometry\n if (this.meshes.panelsMeshes[panelPolygon.id + '_top']) {\n const topMesh = this.meshes.panelsMeshes[panelPolygon.id + '_top']\n if (panelPolygon.version > topMesh.userData.version) {\n let topGeometry = updateBufferPanelGeometry(\n panelPolygon,\n topMesh.geometry\n )\n topMesh.geometry = topGeometry\n }\n\n if (!panelTopGeometries[materialId]) {\n panelTopGeometries[materialId] = []\n }\n panelTopGeometries[materialId].push(topMesh.geometry)\n topMesh.material = material\n }\n if (this.meshes.panelsMeshes[panelPolygon.id + '_side']) {\n const sideMesh = this.meshes.panelsMeshes[panelPolygon.id + '_side']\n if (panelPolygon.version > sideMesh.userData.version) {\n let sideGeometry = updateBufferPanelSideGeometry(\n panelPolygon,\n sideMesh.geometry\n )\n sideMesh.geometry = sideGeometry\n }\n if (panelPolygon.layer != 'user_deactivated_panel') {\n panelSideGeometries.push(sideMesh.geometry)\n }\n }\n //2a.Fill in panelTopGeometries & panelSideGeometries\n //mesh creation\n if (!this.meshes.panelsMeshes[panelPolygon.id + '_top']) {\n //gather all geometry with similar material together to merge them for faster rendering\n const geometry = getBufferPanelGeometry(panelPolygon)\n if (!panelTopGeometries[materialId]) {\n panelTopGeometries[materialId] = []\n }\n panelTopGeometries[materialId].push(geometry)\n if (geometry) {\n const mesh = new THREE.Mesh(geometry, this.material.hidden)\n mesh.userData.version = panelPolygon.version\n mesh.userData.type = 'panelsMeshes'\n mesh.userData.meshId = panelPolygon.id + '_top'\n mesh.userData.polygonId = panelPolygon.id\n //this.scene.add(mesh)\n mesh.matrixAutoUpdate = false\n this.meshes.panelsMeshes[panelPolygon.id + '_top'] = mesh\n }\n }\n if (!this.meshes.panelsMeshes[panelPolygon.id + '_side']) {\n //sidemesh creation\n const geometrySide = getBufferPanelSideGeometry(panelPolygon)\n if (panelPolygon.layer != 'user_deactivated_panel') {\n panelSideGeometries.push(geometrySide)\n }\n if (geometrySide) {\n const meshSide = new THREE.Mesh(\n geometrySide,\n this.material.panelSide\n )\n meshSide.userData.version = panelPolygon.version\n meshSide.userData.type = 'panelsMeshes'\n meshSide.userData.meshId = panelPolygon.id + '_side'\n meshSide.userData.polygonId = panelPolygon.id\n meshSide.matrixAutoUpdate = false\n this.meshes.panelsMeshes[panelPolygon.id + '_side'] = meshSide\n }\n }\n })\n\n //removing unused mergedmesh\n const materialIds = Object.keys(panelTopGeometries)\n const materialIdsToRemove = Object.keys(this.mergedPanelTopMeshes).filter(\n (key) => !materialIds.includes(key)\n )\n //if no panels, no materialIds,\n for (let materialId of materialIdsToRemove) {\n this.clearMeshFromScene(\n this.mergedPanelTopMeshes[materialId],\n this.scene\n )\n delete this.mergedPanelTopMeshes[materialId]\n }\n this.mergedPanelSideMesh = this.updateOrCreateMergedMesh(\n this.mergedPanelSideMesh,\n panelSideGeometries,\n this.material.panelSide,\n 'panelSide'\n )\n for (let [key, geometries] of Object.entries(panelTopGeometries)) {\n this.mergedPanelTopMeshes[key] = this.updateOrCreateMergedMesh(\n this.mergedPanelTopMeshes[key],\n geometries,\n this.material.panel[key],\n 'panelTop_' + key\n )\n this.mergedPanelTopMeshes[key].renderOrder = 10\n }\n if (this.arePanelVisible) {\n this.showPanels()\n } else {\n this.hidePanels()\n }\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport { maximumGapLimit } from '../../config'\nimport {\n getBufferRoofGeometry,\n updateBufferRoofGeometry\n} from './geometryHandler'\nimport {\n intersectOutlines,\n verticalProjectionOnPlane\n} from '@eturnity/eturnity_maths'\nimport { debounce } from 'lodash'\nexport default {\n data() {\n return {\n mergedRoofMesh: null\n }\n },\n methods: {\n updateRoofGeometry(geometry, roofPolygon) {\n const roofOutline = roofPolygon.outline\n let cropedHolesOutline = roofPolygon.holes\n .filter((h) => h.layer == 'obstacle')\n .map((h) => {\n //let's crop obstacle with roof outline\n const cropedHoleOutline =\n intersectOutlines(h.outline, roofPolygon.outline)[0] || []\n const outline = cropedHoleOutline.map((p) => {\n return {\n x: p.x,\n y: p.y,\n z: verticalProjectionOnPlane(\n p,\n roofPolygon.normalVector,\n roofPolygon.flatOutline[0]\n ).z\n }\n })\n return outline\n })\n\n cropedHolesOutline = cropedHolesOutline.filter((outline) => !!outline)\n geometry = updateBufferRoofGeometry(\n roofOutline,\n cropedHolesOutline,\n geometry\n )\n\n return geometry\n },\n createRoofGeometry(roofPolygon) {\n const roofOutline = roofPolygon.outline\n let cropedHolesOutline = roofPolygon.holes\n .filter((h) => h.layer == 'obstacle')\n .map((h) => {\n //let's crop obstacle with roof outline\n const cropedHoleOutline =\n intersectOutlines(h.outline, roofPolygon.outline)[0] || []\n const outline = cropedHoleOutline.map((p) => {\n return {\n x: p.x,\n y: p.y,\n z: verticalProjectionOnPlane(\n p,\n roofPolygon.normalVector,\n roofPolygon.flatOutline[0]\n ).z\n }\n })\n return outline\n })\n\n cropedHolesOutline = cropedHolesOutline.filter((outline) => !!outline)\n let geometry = getBufferRoofGeometry(roofOutline, cropedHolesOutline)\n\n return geometry\n },\n\n applyTextureOnRoofs() {\n const material = this.material.roof\n this.reorderRoofMaterials()\n if (this.mergedRoofMesh) {\n this.applyTextureOnMesh(material, this.mergedRoofMesh)\n this.render()\n }\n },\n renderRoofs() {\n this.clearRemovedOnes('roofMeshes')\n let roofGeometries = []\n this.roofs.forEach((roofPolygon) => {\n let mesh\n let geometry\n if (\n this.meshes.roofMeshes[roofPolygon.id] &&\n this.meshes.roofMeshes[roofPolygon.id].userData.version <\n roofPolygon.version\n ) {\n //update mesh\n mesh = this.meshes.roofMeshes[roofPolygon.id]\n mesh.userData.version = roofPolygon.version\n geometry = mesh.geometry\n geometry = this.updateRoofGeometry(geometry, roofPolygon)\n //in order to be able to render multiple material on it (background and image overlay)\n mesh.geometry = geometry\n mesh.updateMatrix()\n }\n\n if (!this.meshes.roofMeshes[roofPolygon.id]) {\n //create\n geometry = this.createRoofGeometry(roofPolygon)\n if (geometry) {\n //material not used here.\n mesh = new THREE.Mesh(geometry, this.material.hidden)\n mesh.userData.version = roofPolygon.version\n mesh.userData.type = 'roofMeshes'\n mesh.userData.meshId = roofPolygon.id\n mesh.userData.polygonId = roofPolygon.id\n this.meshes.roofMeshes[roofPolygon.id] = mesh\n this.scene.add(mesh)\n }\n }\n roofGeometries.push(this.meshes.roofMeshes[roofPolygon.id].geometry)\n })\n // Create the mesh using the merged geometry and shared material\n this.mergedRoofMesh = this.updateOrCreateMergedMesh(\n this.mergedRoofMesh,\n roofGeometries,\n this.material.roof\n )\n this.mergedRoofMesh.userData.type = 'mergedRoofMesh'\n this.applyTextureOnMesh(this.material.roof, this.mergedRoofMesh)\n },\n renderFlatRoofs() {\n this.clearRemovedOnes('flatRoofMeshes')\n let geometry\n this.roofs.forEach((roofPolygon) => {\n let mesh = this.meshes.flatRoofMeshes[roofPolygon.id]\n if (mesh) {\n if (mesh.userData.version < roofPolygon.version) {\n geometry = updateBufferRoofGeometry(\n roofPolygon.flatOutline,\n [],\n mesh.geometry\n )\n mesh.geometry = geometry\n mesh.userData.version = roofPolygon.version\n }\n mesh.visible = roofPolygon.maximumGap > maximumGapLimit\n } else {\n geometry = getBufferRoofGeometry(roofPolygon.flatOutline)\n if (geometry) {\n const material = this.material.curvedRoof\n mesh = new THREE.Mesh(geometry, material)\n mesh.userData.polygonId = roofPolygon.id\n mesh.userData.version = roofPolygon.version\n mesh.userData.type = 'flatRoofMeshes'\n mesh.userData.meshId = roofPolygon.id\n\n mesh.visible = roofPolygon.maximumGap > maximumGapLimit\n this.scene.add(mesh)\n this.meshes.flatRoofMeshes[roofPolygon.id] = mesh\n }\n }\n })\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport { mapGetters } from 'vuex'\nimport ProjectedMaterial from 'three-projected-material'\nimport {\n substractVector,\n addVector,\n multiplyVector,\n getDistanceBetweenPoints,\n getAngleInDegFromCanvasVector\n} from '@eturnity/eturnity_maths'\nimport {\n getBufferImageOverlayGeometry,\n updateBufferRoofGeometry\n} from './geometryHandler'\n\nexport default {\n data() {\n return {\n imageOverlayTexture: null,\n imageOverlayMaterial: null\n }\n },\n created() {\n this.imageOverlayProjectionCamera = new THREE.PerspectiveCamera(\n 1,\n 300 / 300,\n 100,\n 1000\n )\n },\n computed: {\n ...mapGetters({\n imageOverlay: 'getImageOverlay'\n })\n },\n methods: {\n renderImageOverlayOnBackground() {\n if (!this.imageOverlay || !this.imageOverlayMaterial) {\n this.clearMeshFromScene(this.meshes.backgroundMesh, this.scene)\n this.meshes.backgroundMesh = null\n return\n }\n let corners = this.imageOverlay.corners.map((p) => {\n return { ...p, z: 100 }\n })\n if (this.meshes.backgroundMesh && this.meshes.backgroundMesh.geometry) {\n let geometry = this.meshes.backgroundMesh.geometry\n geometry = updateBufferRoofGeometry(corners, [], geometry)\n //updateBufferRoofGeometry(corners,[],geometry)\n this.meshes.backgroundMesh.geometry = geometry\n } else {\n let planeGeometry = getBufferImageOverlayGeometry(corners)\n let planeMaterial = this.imageOverlayMaterial\n\n this.meshes.backgroundMesh = new THREE.Mesh(\n planeGeometry,\n planeMaterial\n )\n this.scene.add(this.meshes.backgroundMesh)\n }\n this.meshes.backgroundMesh.position.z = 0.15\n if (this.imageOverlayMaterial) {\n this.applyTextureOnMesh(\n [this.imageOverlayMaterial],\n this.meshes.backgroundMesh\n )\n }\n this.meshes.backgroundMesh.visible = true\n },\n async changeImageOverlay() {\n if (this.imageOverlayMaterial) {\n this.imageOverlayMaterial.dispose()\n this.imageOverlayMaterial = null\n }\n await this.updateProjectionMaterials()\n },\n async getImageOverlayMaterial() {\n if (!this.imageOverlay || !this.imageOverlay.url) {\n if (this.imageOverlayMaterial) {\n this.imageOverlayMaterial.dispose()\n }\n this.imageOverlayMaterial = null\n return null\n }\n\n if (\n !this.imageOverlayMaterial ||\n this.imageOverlay.url != this.imageOverlayMaterial.userData.url\n ) {\n this.imageOverlayMaterial = await this.newImageOverlayMaterial()\n } else {\n this.setImageOverlayCameraPosition()\n }\n return this.imageOverlayMaterial\n },\n removeImageOverlay() {\n if (this.imageOverlayMaterial && this.imageOverlayMaterial.dispose)\n this.imageOverlayMaterial.dispose()\n this.imageOverlayMaterial = null\n this.material.roof = this.material.roof.filter(\n (material) => material.userData.type != 'imageOverlayMaterial'\n )\n },\n async newImageOverlayMaterial() {\n return new Promise((resolve) => {\n this.loader.load(this.imageOverlay.url, (texture) => {\n this.imageOverlayTexture = texture\n this.setImageOverlayCameraPosition()\n let imageOverlayProjectionMaterial = new ProjectedMaterial({\n camera: this.imageOverlayProjectionCamera,\n texture: this.imageOverlayTexture,\n transparent: true,\n side: THREE.DoubleSide,\n depthWrite: false\n })\n imageOverlayProjectionMaterial.userData = {}\n imageOverlayProjectionMaterial.userData.type = 'imageOverlayMaterial'\n imageOverlayProjectionMaterial.priority = 20\n imageOverlayProjectionMaterial.userData.url = this.imageOverlay.url\n resolve(imageOverlayProjectionMaterial)\n })\n })\n },\n setImageOverlayCameraPosition() {\n if (!this.imageOverlay || !this.imageOverlay.url) return\n let height = getDistanceBetweenPoints(\n this.imageOverlay.corners[1],\n this.imageOverlay.corners[2]\n )\n let width = getDistanceBetweenPoints(\n this.imageOverlay.corners[0],\n this.imageOverlay.corners[1]\n )\n this.imageOverlayProjectionCamera.aspect = width / height\n let projectionAltitude =\n height /\n (2 * Math.tan((this.imageOverlayProjectionCamera.fov * Math.PI) / 360))\n\n //set projection camera over background_map_center\n let imageOverlayProjectionCameraPosition = {\n x: 0,\n y: 0,\n z: projectionAltitude / 1000\n }\n\n let positionInMm = multiplyVector(\n 0.5,\n addVector(this.imageOverlay.corners[0], this.imageOverlay.corners[2])\n )\n imageOverlayProjectionCameraPosition.x = positionInMm.x / 1000\n imageOverlayProjectionCameraPosition.y = positionInMm.y / 1000\n\n this.imageOverlayProjectionCamera.position.set(\n imageOverlayProjectionCameraPosition.x,\n imageOverlayProjectionCameraPosition.y,\n projectionAltitude / 1000\n )\n this.imageOverlayProjectionCamera.lookAt(\n imageOverlayProjectionCameraPosition.x,\n imageOverlayProjectionCameraPosition.y,\n 0\n )\n let zAngle = getAngleInDegFromCanvasVector(\n substractVector(\n this.imageOverlay.corners[3],\n this.imageOverlay.corners[0]\n )\n )\n this.imageOverlayProjectionCamera.rotation.set(\n 0,\n 0,\n (zAngle * Math.PI) / 180\n )\n this.imageOverlayProjectionCamera.far = projectionAltitude * 1.5\n this.imageOverlayProjectionCamera.near = projectionAltitude * 0.8\n this.imageOverlayProjectionCamera.updateProjectionMatrix()\n }\n }\n}\n","import { toRaw } from 'vue'\n\nexport default {\n methods: {\n applyTextureOnMesh(materials, mesh) {\n mesh = toRaw(mesh)\n if (mesh && materials && materials.length > 0) {\n let geometry = mesh.geometry\n geometry.clearGroups()\n for (let k = 0; k < materials.length; k++) {\n geometry.addGroup(0, Infinity, k)\n }\n geometry.needsUpdate = true\n mesh.material = materials\n for (let m = 0; m < materials.length; m++) {\n if (materials[m].project) {\n materials[m].project(mesh)\n }\n materials[m].needsUpdate = true\n }\n mesh.needsUpdate = true\n }\n }\n }\n}\n","export default {\n methods: {\n reorderRoofMaterials() {\n this.material.roof.sort((a, b) => {\n let aPrio = a.priority || 0\n let bPrio = b.priority || 0\n return aPrio - bPrio\n })\n },\n async updateProjectionMaterials() {\n this.setImageOverlayCameraPosition()\n this.imageOverlayMaterial = await this.getImageOverlayMaterial()\n //add or remove imageOverlayMaterial\n const index = this.material.roof.findIndex(\n (material) => material.userData.type == 'imageOverlayMaterial'\n )\n if (this.imageOverlayMaterial) {\n if (index >= 0) {\n this.material.roof[index] = this.imageOverlayMaterial\n this.material.roof = [...this.material.roof]\n } else {\n this.material.roof = [\n ...this.material.roof,\n this.imageOverlayMaterial\n ]\n }\n } else if (index >= 0) {\n this.material.roof[index].dispose()\n this.material.roof.splice(index, 1)\n this.material.roof = [...this.material.roof]\n }\n this.renderImageOverlayOnBackground()\n this.applyTextureOnRoofs()\n }\n }\n}\n","export function cancellablePromise(promise) {\n let status = 'pending'\n let isCancel = false\n const promiseObject = new Promise(function (res, rej) {\n promise\n .then((data) => {\n if (!isCancel) {\n res(data)\n status = 'resolved'\n } else {\n status = 'resolved but cancelled before'\n }\n })\n .catch((data) => {\n status = 'rejected'\n if (!isCancel) rej(data)\n })\n })\n promiseObject.getStatus = () => {\n return status\n }\n promiseObject.cancel = () => {\n isCancel = true\n }\n return promiseObject\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport {\n getBufferRoofGeometry,\n updateBufferRoofGeometry\n} from './geometryHandler'\nimport {\n distanceToDeltaLatLng,\n latLngToTileXY,\n tileToCorners\n} from '@eturnity/eturnity_maths'\nimport { earthRadius } from '../../config'\nimport { debounce } from 'lodash'\n\nimport { cancellablePromise } from '../../utils/cancellablePromise'\n\nexport default {\n data() {\n return {\n pendingTiles: [],\n numberOfTilesRendered: 0,\n numberOfTilesToRender: 0,\n tileToRender: []\n }\n },\n methods: {\n debouncedRenderTiles: debounce(function () {\n this.renderTiles()\n }, 1000),\n async renderTiles() {\n if (!this.scene) {\n return\n }\n if (\n !this.selectedMapLayer ||\n ['googleLayerRoadmap', 'googleLayer', 'googleLayerTerrain'].includes(\n this.selectedMapLayer.key\n )\n ) {\n this.renderGoogleTiles()\n } else {\n this.renderProviderTiles()\n }\n },\n removeUnusedTiles() {\n let tileToRenderIds = this.tileToRender.map(\n (tileParam) =>\n 'tile_' +\n tileParam.xTile +\n '_' +\n tileParam.yTile +\n '_' +\n tileParam.zoomLvl\n )\n let idsToRemove = Object.keys(this.meshes.tileMeshes).filter((id) => {\n return !tileToRenderIds.includes(id)\n })\n for (let id of idsToRemove) {\n this.clearMeshFromScene(this.meshes.tileMeshes[id], this.scene)\n }\n },\n async renderProviderTiles() {\n if (this.googleBackgroundMap) {\n this.googleBackgroundMap.clear()\n this.scene.remove(this.googleBackgroundMap)\n this.clearThreeObjects(this.googleBackgroundMap)\n }\n\n let zoomLvl = this.provider.maxZoom\n\n const latitude = this.layoutSettings.layout_latitude\n const longitude = this.layoutSettings.layout_longitude\n let { xMin, xMax, yMin, yMax } = this.roofsBounds\n\n if (xMin == Infinity) {\n xMin = 0\n yMin = 0\n xMax = 0\n yMax = 0\n } else {\n let perimeterAtLatitude =\n earthRadius * Math.cos((latitude * Math.PI) / 180) * 2000 * Math.PI\n\n let optimizedZoomLvl = Math.round(\n Math.log(perimeterAtLatitude / (xMax - xMin)) / Math.LN2\n )\n if (optimizedZoomLvl < zoomLvl) {\n zoomLvl = optimizedZoomLvl\n }\n }\n let { lat: latMin, lng: lngMin } = distanceToDeltaLatLng(\n xMin,\n yMin,\n latitude\n )\n let { lat: latMax, lng: lngMax } = distanceToDeltaLatLng(\n xMax,\n yMax,\n latitude\n )\n let { x: xTileMin, y: yTileMax } = latLngToTileXY(\n latitude + latMin,\n longitude + lngMin,\n zoomLvl\n )\n let { x: xTileMax, y: yTileMin } = latLngToTileXY(\n latitude + latMax,\n longitude + lngMax,\n zoomLvl\n )\n xTileMin = xTileMin - (xTileMin % 2)\n xTileMax = xTileMax + 1 - (xTileMax % 2)\n yTileMin = yTileMin - (yTileMin % 2)\n yTileMax = yTileMax + 1 - (yTileMax % 2)\n this.tileToRender = []\n for (let xTile = xTileMin; xTile <= xTileMax; xTile++) {\n for (let yTile = yTileMin; yTile <= yTileMax; yTile++) {\n this.tileToRender.push({\n xTile,\n yTile,\n zoomLvl,\n isTileOnRoofBound: true\n })\n }\n }\n\n while (zoomLvl > 17) {\n xTileMin = xTileMin / 2 - 1\n xTileMax = (xTileMax + 1) / 2\n yTileMin = yTileMin / 2 - 1\n yTileMax = (yTileMax + 1) / 2\n //Make sure Mins are even and Maxs are odd to join tiles without overlapping\n let xMinOdd = xTileMin % 2\n let yMinOdd = yTileMin % 2\n let xMaxEven = 1 - (xTileMax % 2)\n let yMaxEven = 1 - (yTileMax % 2)\n xTileMin = xTileMin - (xTileMin % 2)\n xTileMax = xTileMax + 1 - (xTileMax % 2)\n yTileMin = yTileMin - (yTileMin % 2)\n yTileMax = yTileMax + 1 - (yTileMax % 2)\n zoomLvl -= 1\n for (let xTile = xTileMin; xTile <= xTileMax; xTile++) {\n for (let yTile = yTileMin; yTile <= yTileMax; yTile++) {\n if (\n xTile - xTileMin <= xMinOdd ||\n xTileMax - xTile <= xMaxEven ||\n yTile - yTileMin <= yMinOdd ||\n yTileMax - yTile <= yMaxEven\n ) {\n this.tileToRender.push({\n xTile,\n yTile,\n zoomLvl,\n isTileOnRoofBound: false\n })\n }\n }\n }\n }\n this.numberOfTilesToRender = this.tileToRender.length\n this.numberOfTilesRendered = 0\n for (let k in this.tileToRender) {\n let xTile = this.tileToRender[k].xTile\n let yTile = this.tileToRender[k].yTile\n zoomLvl = this.tileToRender[k].zoomLvl\n let isTileOnRoofBound = this.tileToRender[k].isTileOnRoofBound\n this.renderTile(xTile, yTile, zoomLvl, isTileOnRoofBound)\n }\n },\n removeTileFromPending(meshId, mapLayer) {\n this.pendingTiles = this.pendingTiles.filter(\n (t) => t.meshId != meshId || t.mapLayer != mapLayer\n )\n },\n async renderTile(x, y, zoomLvl, isTileOnRoofBound = false) {\n const meshId = 'tile_' + x + '_' + y + '_' + zoomLvl\n const mapLayer = this.provider.mapLayer\n if (\n this.pendingTiles.find(\n (t) => t.meshId == meshId && t.mapLayer == mapLayer\n )\n ) {\n return\n }\n\n let mesh = this.meshes.tileMeshes[meshId]\n if (mesh && this.provider.mapLayer == mesh.userData.mapLayer) {\n return\n }\n\n const latitude = this.layoutSettings.layout_latitude\n const longitude = this.layoutSettings.layout_longitude\n let geometry, material\n const imagePromise = cancellablePromise(\n this.provider.fetchTile(zoomLvl, x, y)\n )\n this.pendingTiles.push({ x, y, zoomLvl, mapLayer, meshId, imagePromise })\n imagePromise.then((image) => {\n if (!image) {\n this.removeTileFromPending(meshId, mapLayer)\n return\n }\n const texture = new THREE.Texture(image)\n if (isTileOnRoofBound) {\n this.newTileMaterial(texture, x, y, zoomLvl, mapLayer)\n }\n texture.generateMipmaps = false\n texture.format = THREE.RGBAFormat\n texture.needsUpdate = true\n let corners = tileToCorners(x, y, zoomLvl, latitude, longitude)\n corners = corners.map((c) => {\n return { ...c, z: -100 }\n })\n if (mesh) {\n geometry = mesh.geometry\n material = mesh.material\n geometry = updateBufferRoofGeometry(corners, [], geometry)\n mesh.geometry = geometry\n material.map = texture\n material.needsUpdate = true\n mesh.userData.mapLayer = this.provider.mapLayer\n mesh.userData.type = 'tileMeshes'\n mesh.userData.meshId = meshId\n mesh.frustumCulled = false\n mesh.needsUpdate = true\n mesh.updateMatrix()\n } else {\n material = new THREE.MeshBasicMaterial({\n map: texture,\n color: 0xffffff,\n side: THREE.FrontSide,\n transparent: true\n })\n material.map = texture\n material.needsUpdate = true\n geometry = getBufferRoofGeometry(corners)\n if (geometry) {\n mesh = new THREE.Mesh(geometry, material)\n mesh.userData.type = 'tileMeshes'\n mesh.userData.meshId = meshId\n mesh.userData.mapLayer = this.provider.mapLayer\n mesh.name = meshId\n\n if (!this.scene.getObjectByName(meshId)) {\n this.meshes.tileMeshes[meshId] = mesh\n this.scene.add(this.meshes.tileMeshes[meshId])\n }\n }\n }\n this.removeTileFromPending(meshId, mapLayer)\n this.numberOfTilesRendered++\n if (this.numberOfTilesRendered == this.numberOfTilesToRender) {\n this.removeUnusedTiles()\n this.render()\n }\n })\n },\n async renderGoogleTiles() {\n this.clearByType('tileMeshes')\n if (!this.googleBackgroundMap) {\n this.googleBackgroundMap = new THREE.Group()\n this.scene.add(this.googleBackgroundMap)\n }\n this.googleBackgroundMap.visible = true\n this.googleBackgroundMap.name = 'googleBackgroundMap'\n if (!this.scene.getObjectByName('googleBackgroundMap')) {\n this.scene.add(this.googleBackgroundMap)\n }\n let googleMapType = 'satellite'\n switch (this.selectedMapLayer.key) {\n case 'googleLayerRoadmap':\n googleMapType = 'roadmap'\n break\n case 'googleLayer':\n googleMapType = 'satellite'\n break\n case 'googleLayerTerrain':\n googleMapType = 'terrain'\n break\n }\n let size = 640\n let roofsBoundZoomLvl = 19\n let { xMin, xMax, yMin, yMax } = this.roofsBounds\n if (xMin == Infinity) {\n xMin = 0\n yMin = 0\n xMax = 0\n yMax = 0\n } else {\n let roofBoundSizeInMeter = Math.max(xMax - xMin, yMax - yMin) / 1000\n\n let exactZoomLvl = Math.log2(\n (Math.cos((this.layoutSettings.layout_latitude * Math.PI) / 180) *\n 2 *\n Math.PI *\n earthRadius *\n size) /\n (256 * roofBoundSizeInMeter)\n )\n roofsBoundZoomLvl = Math.min(roofsBoundZoomLvl, parseInt(exactZoomLvl))\n }\n let roofsBoundCenterMeter = {\n x: (xMax + xMin) / 2000,\n y: (yMax + yMin) / 2000\n }\n let deltaLatLng = distanceToDeltaLatLng(\n roofsBoundCenterMeter.x * 1000,\n roofsBoundCenterMeter.y * 1000,\n this.layoutSettings.layout_latitude\n )\n let roofsBoundCenterLatLng = {\n lat: this.layoutSettings.layout_latitude + deltaLatLng.lat,\n lng: this.layoutSettings.layout_longitude + deltaLatLng.lng\n }\n\n let apiKey = process.env.VUE_APP_GOOGLE_MAP_API_KEY\n let backgroundPlane = []\n\n let planeGeometry = []\n let planeMaterial = []\n let zoomLevels = [\n roofsBoundZoomLvl,\n roofsBoundZoomLvl - 2,\n roofsBoundZoomLvl - 4\n ]\n this.numberOfTilesToRender = zoomLevels.length\n for (\n let indexGoogleBackground = 0;\n indexGoogleBackground < zoomLevels.length;\n indexGoogleBackground++\n ) {\n let zoomLevel = zoomLevels[indexGoogleBackground]\n let groundResolution =\n (Math.cos((this.layoutSettings.layout_latitude * Math.PI) / 180) *\n 2 *\n Math.PI *\n earthRadius) /\n (256 * Math.pow(2, zoomLevel))\n let sizeInMeter = groundResolution * size\n planeGeometry[indexGoogleBackground] = new THREE.PlaneGeometry(\n sizeInMeter,\n sizeInMeter * 0.9\n )\n\n //to remove attribution in bottom of the image\n var uvs = new Float32Array([\n 0, 0.95, 1, 0.95, 0, 0.05, 1, 0.05, 0, 0.05, 1, 0.95\n ])\n planeGeometry[indexGoogleBackground].setAttribute(\n 'uv',\n new THREE.BufferAttribute(uvs, 2)\n )\n planeGeometry[indexGoogleBackground].computeVertexNormals()\n\n let googleBackgroundUrl = `https://maps.googleapis.com/maps/api/staticmap?center=${\n roofsBoundCenterLatLng.lat + ',' + roofsBoundCenterLatLng.lng\n }&maptype=${googleMapType}&zoom=${zoomLevel}&size=${size}x${size}&key=${apiKey}`\n this.loader.load(googleBackgroundUrl, (texture) => {\n texture[indexGoogleBackground] = texture\n if (indexGoogleBackground == 0) {\n this.newGoogleTileMaterial(\n texture[indexGoogleBackground],\n sizeInMeter,\n roofsBoundCenterMeter,\n googleMapType\n )\n }\n planeMaterial[indexGoogleBackground] = new THREE.MeshBasicMaterial({\n map: texture[indexGoogleBackground],\n side: THREE.DoubleSide\n })\n backgroundPlane[indexGoogleBackground] = new THREE.Mesh(\n planeGeometry[indexGoogleBackground],\n planeMaterial[indexGoogleBackground]\n )\n backgroundPlane[indexGoogleBackground].position.x =\n roofsBoundCenterMeter.x\n backgroundPlane[indexGoogleBackground].position.y =\n roofsBoundCenterMeter.y\n backgroundPlane[indexGoogleBackground].position.z =\n -indexGoogleBackground / 2\n backgroundPlane[indexGoogleBackground].visible = true\n backgroundPlane[indexGoogleBackground].needsUpdate = true\n backgroundPlane[indexGoogleBackground].userData.index =\n indexGoogleBackground\n const meshToRemove = this.googleBackgroundMap.children.find(\n (mesh) => mesh.userData.index == indexGoogleBackground\n )\n if (meshToRemove) {\n this.googleBackgroundMap.remove(meshToRemove)\n }\n this.googleBackgroundMap.add(backgroundPlane[indexGoogleBackground])\n\n this.numberOfTilesRendered++\n if (this.numberOfTilesRendered == this.numberOfTilesToRender) {\n this.googleBackgroundMap.needsUpdate = true\n this.googleBackgroundMap.visible = true\n this.render()\n }\n })\n }\n\n this.render()\n }\n },\n watch: {\n selectedMapLayer(newMapLayer) {\n this.pendingTiles = this.pendingTiles.filter((t) => {\n if (t.mapLayer != newMapLayer.key) {\n t.imagePromise.cancel()\n return false\n }\n })\n }\n }\n}\n","import * as THREE from 'three'\nimport ProjectedMaterial from 'three-projected-material'\nimport { tileToCorners } from '@eturnity/eturnity_maths'\nimport { earthRadius } from '../../config'\nexport default {\n data() {\n return {\n tileProjectionTextures: [],\n tileProjectionMaterials: []\n }\n },\n methods: {\n newGoogleTileMaterial(texture, sizeInMeter, center, mapLayer) {\n if (!this.material.roof) {\n this.material.roof = []\n }\n const cameraProjection = new THREE.OrthographicCamera(\n center.x - sizeInMeter / 2,\n center.x + sizeInMeter / 2,\n center.y + sizeInMeter / 2,\n center.y - sizeInMeter / 2,\n 100,\n 10000\n )\n let tileProjectionMaterial = new ProjectedMaterial({\n camera: cameraProjection,\n texture: texture,\n transparent: true,\n side: THREE.DoubleSide\n })\n tileProjectionMaterial.userData = {}\n tileProjectionMaterial.userData.type = 'tileProjectionMaterial'\n tileProjectionMaterial.userData.materialId =\n 'material_' +\n sizeInMeter +\n '_' +\n center.x +\n '_' +\n center.y +\n '_' +\n mapLayer\n tileProjectionMaterial.userData.mapLayer = mapLayer\n tileProjectionMaterial.userData.priority = 10\n this.material.roof.push(tileProjectionMaterial)\n this.applyTextureOnRoofs()\n this.applyTextureOnObstacles()\n },\n async newTileMaterial(texture, x, y, zoom, mapLayer) {\n if (!this.material.roof) {\n this.material.roof = []\n }\n const cameraProjection = new THREE.OrthographicCamera(\n -1,\n 1,\n -1,\n 1,\n 100,\n 10000\n )\n cameraProjection.position.set(0, 0, 1)\n cameraProjection.up.set(0, 0, 1)\n let tileProjectionMaterial = new ProjectedMaterial({\n camera: cameraProjection,\n texture: texture,\n transparent: true,\n side: THREE.DoubleSide\n })\n tileProjectionMaterial.userData = {}\n tileProjectionMaterial.userData.type = 'tileProjectionMaterial'\n tileProjectionMaterial.userData.materialId =\n 'material_' + x + '_' + y + '_' + zoom + '_' + mapLayer\n tileProjectionMaterial.userData.mapLayer = mapLayer\n tileProjectionMaterial.priority = 10\n this.setTileCameraPosition(cameraProjection, x, y, zoom)\n this.material.roof.push(tileProjectionMaterial)\n this.applyTextureOnRoofs()\n this.applyTextureOnObstacles()\n },\n disposeTileMaterial(material) {\n material.texture.dispose()\n material.dispose()\n },\n disposeTileMaterialDifferentMapLayer(mapLayer) {\n if (!this.material.roof) return\n this.material.roof = this.material.roof.filter((m) => {\n if (\n m.userData.type == 'tileProjectionMaterial' &&\n m.userData.mapLayer != mapLayer\n ) {\n this.disposeTileMaterial(m)\n return false\n }\n return true\n })\n },\n setTileCameraPosition(camera, x, y, zoom) {\n const latitude = this.layoutSettings.layout_latitude\n const longitude = this.layoutSettings.layout_longitude\n let corners = tileToCorners(x, y, zoom, latitude, longitude)\n let height, width, tileCenter\n let numberOfTiles = Math.pow(2, zoom)\n height =\n (2000 * Math.PI * earthRadius * Math.cos((latitude * Math.PI) / 180)) /\n numberOfTiles\n width = height\n tileCenter = {\n x: (corners[0].x + corners[2].x) / 2,\n y: (corners[0].y + corners[2].y) / 2\n }\n\n camera.left = corners[0].x / 1000\n camera.right = corners[2].x / 1000\n camera.bottom = corners[0].y / 1000\n camera.top = corners[2].y / 1000\n\n camera.updateProjectionMatrix()\n }\n },\n watch: {\n selectedMapLayer(newMapLayer) {\n if (!newMapLayer) return\n this.disposeTileMaterialDifferentMapLayer(newMapLayer.key)\n }\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\n\nexport default {\n methods: {\n updateMergedGeometry(geometries, mergedGeometry) {\n const mergedVertices = []\n const mergedNormals = []\n const mergedUvs = []\n\n geometries.forEach((geometry) => {\n const positions = geometry.attributes.position.array\n const normals = geometry.attributes.normal.array\n mergedVertices.push(...positions.slice(0, 3 * geometry.drawRange.count))\n mergedNormals.push(...normals.slice(0, 3 * geometry.drawRange.count))\n\n if (geometry.attributes.uv) {\n const uvs = geometry.attributes.uv.array\n mergedUvs.push(...uvs.slice(0, 3 * geometry.drawRange.count))\n }\n })\n //position\n if (\n mergedGeometry.attributes.position &&\n mergedGeometry.attributes.uv &&\n mergedGeometry.attributes.normal &&\n mergedGeometry.attributes.position.array.length >=\n mergedVertices.length &&\n mergedGeometry.attributes.uv.array.length >= mergedUvs.length &&\n mergedGeometry.attributes.normal.array.length >= mergedNormals.length\n ) {\n let positions = mergedGeometry.attributes.position.array\n let uvs = mergedGeometry.attributes.uv.array\n let normals = mergedGeometry.attributes.normal.array\n for (let k in mergedVertices) {\n positions[k] = mergedVertices[k]\n }\n for (let k in mergedUvs) {\n uvs[k] = mergedUvs[k]\n }\n for (let k in mergedNormals) {\n normals[k] = mergedNormals[k]\n }\n mergedGeometry.setDrawRange(0, mergedVertices.length / 3)\n } else {\n mergedGeometry.dispose()\n mergedGeometry = null\n mergedGeometry = this.createMergedGeometry(geometries)\n }\n mergedGeometry.attributes.position.needsUpdate = true\n mergedGeometry.attributes.normal.needsUpdate = true\n mergedGeometry.needsUpdate = true\n return mergedGeometry\n },\n createMergedGeometry(geometries) {\n const mergedGeometry = new THREE.BufferGeometry()\n const mergedVertices = []\n const mergedNormals = []\n const mergedUvs = []\n\n geometries.forEach((geometry) => {\n const positions = geometry.attributes.position.array\n const normals = geometry.attributes.normal.array\n\n mergedVertices.push(...positions)\n mergedNormals.push(...normals)\n\n if (geometry.attributes.uv) {\n const uvs = geometry.attributes.uv.array\n mergedUvs.push(...uvs)\n }\n })\n\n mergedGeometry.setAttribute(\n 'position',\n new THREE.BufferAttribute(new Float32Array(mergedVertices), 3)\n )\n mergedGeometry.setAttribute(\n 'normal',\n new THREE.BufferAttribute(new Float32Array(mergedNormals), 3)\n )\n mergedGeometry.setAttribute(\n 'uv',\n new THREE.BufferAttribute(new Float32Array(mergedUvs), 2)\n )\n mergedGeometry.computeVertexNormals()\n return mergedGeometry\n },\n\n updateOrCreateMergedMesh(mesh, geometries, material, type = undefined) {\n if (!mesh) {\n let mergedGeometry = this.createMergedGeometry(geometries)\n mesh = new THREE.Mesh(mergedGeometry, material)\n // Add the merged mesh to the scene\n this.scene.add(mesh)\n } else {\n let mergedGeometry = this.updateMergedGeometry(\n geometries,\n mesh.geometry\n )\n mesh.geometry = mergedGeometry\n }\n mesh.frustumCulled = false\n return mesh\n }\n }\n}\n","import node from './node'\nimport base from './base'\nimport clear from './clear'\nimport edge from './edge'\nimport loader from './loader'\nimport margin from './margin'\nimport moduleField from './moduleField'\nimport obstacle from './obstacle'\nimport panel from './panel'\nimport roof from './roof'\nimport imageOverlay from './imageOverlay'\nimport texture from './texture'\nimport projectionMaterial from './projectionMaterial'\nimport tile from './tile'\nimport tileProjection from './tileProjection'\nimport mergedGeometry from './mergedGeometry'\n\nexport default {\n mixins: [\n margin,\n node,\n base,\n roof,\n edge,\n obstacle,\n moduleField,\n panel,\n clear,\n loader,\n imageOverlay,\n texture,\n projectionMaterial,\n tile,\n tileProjection,\n mergedGeometry\n ]\n}\n","import TWEEN from 'tween'\nimport * as THREE from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'\nimport {\n addVector,\n getDistanceBetweenPoints,\n multiplyVector,\n substractVector\n} from '@eturnity/eturnity_maths'\nimport { toRaw } from 'vue'\nimport { marginAroundBuildingForCameraViewInMeter } from '../config'\nexport default {\n data() {\n return {\n animationFrameId: null\n }\n },\n created() {\n this.perspectiveCamera = new THREE.PerspectiveCamera(\n 50,\n 300 / 300,\n 1,\n 50000\n )\n this.orthographicCamera = new THREE.OrthographicCamera(\n -50,\n 50,\n 50,\n -50,\n 1,\n 1000\n )\n },\n methods: {\n initialiseCameras(isPerspectiveCamera) {\n if (isPerspectiveCamera) {\n this.camera = this.perspectiveCamera\n this.camera.position.set(0, -100, 50)\n this.camera.up.set(0, 0, 1)\n } else {\n this.camera = this.orthographicCamera\n this.camera.position.set(0, 0, 100)\n this.camera.up.set(0, 1, 0)\n }\n\n this.cameraProjection = new THREE.PerspectiveCamera(\n 1,\n 300 / 300,\n 100,\n 1000\n )\n this.cameraProjection.position.set(0, 0, 500)\n this.cameraProjection.up.set(0, 0, 1)\n this.scene.add(this.camera)\n },\n setCameraAspectRatio() {\n const canvasRatio =\n this.DOMElement.clientWidth / this.DOMElement.clientHeight\n if (this.camera.isOrthographicCamera) {\n const currentAspect = Math.abs(\n (this.camera.right - this.camera.left) /\n (this.camera.top - this.camera.bottom)\n )\n if (canvasRatio / currentAspect > 1) {\n this.camera.left *= canvasRatio / currentAspect\n this.camera.right *= canvasRatio / currentAspect\n } else {\n this.camera.top *= canvasRatio / currentAspect\n this.camera.bottom *= canvasRatio / currentAspect\n }\n } else {\n this.camera.aspect = canvasRatio\n }\n this.camera.updateProjectionMatrix()\n },\n turnPerspectiveCameraToOrthogonal() {\n const cameraPosition = new THREE.Vector3(\n this.camera.position.x,\n this.camera.position.y,\n this.camera.position.z\n )\n var halfHeightDistance =\n (this.camera.position.z * this.camera.fov * Math.PI) / 180\n\n // Create an orthographic camera aligned to look down\n this.orthographicCamera.left =\n (-this.camera.aspect * halfHeightDistance) / 2\n this.orthographicCamera.right =\n (this.camera.aspect * halfHeightDistance) / 2\n this.orthographicCamera.top = halfHeightDistance / 2\n this.orthographicCamera.bottom = -halfHeightDistance / 2\n this.orthographicCamera.near = 1\n this.orthographicCamera.far = 1000\n this.orthographicCamera.up = new THREE.Vector3(0, 1, 0)\n this.orthographicCamera.position.set(\n cameraPosition.x,\n cameraPosition.y,\n 100\n )\n this.camera = this.orthographicCamera\n this.camera.position.set(\n cameraPosition.x,\n cameraPosition.y,\n cameraPosition.z\n )\n this.camera.updateProjectionMatrix()\n this.renderer.camera = this.camera\n this.composer.renderCamera = this.camera\n\n this.renderPass.camera = this.camera\n this.overlayRenderPass.camera = this.camera\n this.outlinePassHighlight.renderCamera = this.camera\n this.outlinePassSelected.renderCamera = this.camera\n this.orbitControl.screenSpacePanning = true\n this.orbitControl.object = this.camera\n this.orbitControl.target.set(cameraPosition.x, cameraPosition.y, 0)\n this.orbitControl.mouseButtons = {\n LEFT: THREE.MOUSE.PAN,\n MIDDLE: THREE.MOUSE.DOLLY,\n RIGHT: THREE.MOUSE.ROTATE\n }\n this.orbitControl.enableRotate = false\n this.orbitControl.update()\n this.camera.position.set(\n cameraPosition.x,\n cameraPosition.y,\n cameraPosition.z\n )\n this.camera.lookAt(\n new THREE.Vector3(cameraPosition.x, cameraPosition.y, 0)\n ) // Set look at coordinate like this\n this.camera.updateProjectionMatrix()\n this.nodesVisible = true\n this.renderNodes()\n this.composer.render()\n },\n turnOrthogonalCameraToPerspective() {\n this.camera = this.perspectiveCamera\n let altitude =\n (this.orthographicCamera.right - this.orthographicCamera.left) /\n ((this.perspectiveCamera.fov * Math.PI) / 180) /\n this.perspectiveCamera.aspect\n\n this.camera.position.set(\n this.orthographicCamera.position.x,\n this.orthographicCamera.position.y,\n altitude\n )\n\n this.camera.up = new THREE.Vector3(0, 0, 1)\n this.camera.updateProjectionMatrix()\n\n this.renderer.camera = this.camera\n this.composer.renderer.camera = this.camera\n this.composer.renderCamera = this.camera\n this.renderPass.camera = this.camera\n this.overlayRenderPass.camera = this.camera\n this.outlinePassHighlight.camera = this.camera\n this.outlinePassHighlight.renderCamera = this.camera\n this.outlinePassSelected.camera = this.camera\n this.outlinePassSelected.renderCamera = this.camera\n this.orbitControl.camera = this.camera\n this.orbitControl.object = this.camera\n this.orbitControl.target.set(\n this.camera.position.x,\n this.camera.position.y,\n 0\n )\n this.orbitControl.screenSpacePanning = false\n this.orbitControl.enableRotate = true\n this.orbitControl.mouseButtons = {\n LEFT: THREE.MOUSE.ROTATE,\n MIDDLE: THREE.MOUSE.DOLLY,\n RIGHT: THREE.MOUSE.PAN\n }\n this.orbitControl.update()\n\n this.composer.render()\n },\n zoomIn3D() {\n if (this.camera.isOrthographicCamera) {\n this.camera.zoom *= 1.3\n this.camera.updateProjectionMatrix()\n this.render()\n } else {\n let target = this.orbitControl.target\n let curentPosition = this.camera.position\n let newCameraPosition = addVector(\n target,\n multiplyVector(1 / 1.5, substractVector(curentPosition, target))\n )\n newCameraPosition = [\n newCameraPosition.x,\n newCameraPosition.y,\n newCameraPosition.z\n ]\n target = [target.x, target.y, target.z]\n this.setTweenTo({ position: newCameraPosition, target, duration: 500 })\n }\n },\n zoomOut3D() {\n if (this.camera.isOrthographicCamera) {\n this.camera.zoom /= 1.3\n this.camera.updateProjectionMatrix()\n this.render()\n } else {\n let target = this.orbitControl.target\n let curentPosition = this.camera.position\n let newCameraPosition = addVector(\n target,\n multiplyVector(1.5, substractVector(curentPosition, target))\n )\n newCameraPosition = [\n newCameraPosition.x,\n newCameraPosition.y,\n newCameraPosition.z\n ]\n target = [target.x, target.y, target.z]\n this.setTweenTo({ position: newCameraPosition, target, duration: 500 })\n }\n },\n setPerspectiveCameraPositionTo(cameraPosition, targetPosition) {\n this.camera.position.set(\n cameraPosition.x,\n cameraPosition.y,\n cameraPosition.z\n )\n this.camera.lookAt(targetPosition.x, targetPosition.y, targetPosition.z)\n this.camera.updateProjectionMatrix()\n if (this.orbitControl && this.orbitControl.update) {\n this.orbitControl.target.set(\n targetPosition.x,\n targetPosition.y,\n targetPosition.z\n )\n this.orbitControl.update()\n }\n this.render()\n },\n sanitizeOrthographicCameraParameters({\n left,\n right,\n top,\n bottom,\n zoom,\n x,\n y\n }) {\n if (left > right) {\n ;[left, right] = [right, left]\n }\n if (top < bottom) {\n ;[top, bottom] = [bottom, top]\n }\n return {\n left,\n right,\n top,\n bottom,\n zoom,\n x,\n y\n }\n },\n setOrthographicCameraPositionFromCameraParameters(cameraParams) {\n if (!cameraParams || Object.keys(cameraParams).length === 0) {\n this.setOrthographicCameraGlobalPosition()\n return\n }\n let { x, y, left, right, top, bottom, zoom } =\n this.sanitizeOrthographicCameraParameters(cameraParams)\n this.camera.up = new THREE.Vector3(0, 1, 0)\n\n this.camera.left = left\n this.camera.right = right\n this.camera.top = top\n this.camera.bottom = bottom\n this.camera.near = 1\n this.camera.far = 10000\n this.camera.zoom = zoom\n\n this.camera.position.set(x, y, 100)\n this.camera.lookAt(x, y, 0)\n this.camera.updateProjectionMatrix()\n\n if (this.orbitControl) {\n this.orbitControl.maxPolarAngle = Math.PI / 2\n this.orbitControl.target.set(x, y, 0)\n\n this.orbitControl.screenSpacePanning = true\n this.orbitControl.object = this.camera\n this.orbitControl.mouseButtons = {\n LEFT: THREE.MOUSE.PAN,\n MIDDLE: THREE.MOUSE.DOLLY,\n RIGHT: THREE.MOUSE.ROTATE\n }\n this.orbitControl.enableRotate = false\n this.orbitControl.update()\n }\n },\n setOrthographicCameraGlobalPosition() {\n const left =\n this.roofsBounds.xMin / 1000 - marginAroundBuildingForCameraViewInMeter\n const right =\n this.roofsBounds.xMax / 1000 + marginAroundBuildingForCameraViewInMeter\n const top =\n this.roofsBounds.yMax / 1000 + marginAroundBuildingForCameraViewInMeter\n const bottom =\n this.roofsBounds.yMin / 1000 - marginAroundBuildingForCameraViewInMeter\n const zoom = 1\n const x = (this.roofsBounds.xMin + this.roofsBounds.xMax) / 2000\n const y = (this.roofsBounds.yMin + this.roofsBounds.yMax) / 2000\n\n this.setOrthographicCameraPositionFromCameraParameters({\n left,\n right,\n top,\n bottom,\n zoom,\n x,\n y\n })\n },\n setCameraInitialPosition() {\n if (this.roofs.length == 0) return\n let newFov = 50\n let bounds = this.roofsBounds\n let targetVector = {\n x: (bounds.xMax + bounds.xMin) / 2000,\n y: (bounds.yMax + bounds.yMin) / 2000,\n z: 0\n }\n let objectRadius_m = Math.max(\n (bounds.xMax - bounds.xMin) / 2000,\n (bounds.yMax - bounds.yMin) / 2000\n )\n let distance =\n 5 + objectRadius_m / Math.sin(((newFov / 2) * Math.PI) / 180)\n let cameraMoveVector = { x: 0, y: 0, z: distance }\n const positionVector = addVector(targetVector, cameraMoveVector)\n const position = [\n positionVector.x,\n positionVector.y - distance,\n positionVector.z\n ]\n let target = [targetVector.x, targetVector.y, targetVector.z]\n\n this.camera.position.set(position[0], position[1], position[2])\n this.camera.updateProjectionMatrix()\n\n this.orbitControl.target.set(target[0], target[1], target[2])\n if (this.orbitControl && this.orbitControl.update) {\n this.orbitControl.update()\n }\n },\n setCameraGlobalPosition() {\n if (this.roofs.length == 0) return\n if (this.camera.isOrthographicCamera) {\n this.setOrthographicCameraGlobalPosition()\n } else {\n let newFov = 50\n let bounds = this.roofsBounds\n let targetVector = {\n x: (bounds.xMax + bounds.xMin) / 2000,\n y: (bounds.yMax + bounds.yMin) / 2000,\n z: 0\n }\n let objectRadius_m =\n marginAroundBuildingForCameraViewInMeter +\n Math.max(\n (bounds.xMax - bounds.xMin) / 2000,\n (bounds.yMax - bounds.yMin) / 2000\n )\n let distance = objectRadius_m / Math.sin(((newFov / 2) * Math.PI) / 180)\n let cameraMoveVector = { x: 0, y: 0, z: distance }\n const positionVector = addVector(targetVector, cameraMoveVector)\n const position = [\n positionVector.x,\n positionVector.y - distance,\n positionVector.z\n ]\n let target = [targetVector.x, targetVector.y, targetVector.z]\n this.setTweenTo({ position, target, fov: newFov })\n }\n },\n setCameraGlobalVerticalPosition() {\n let position, target\n let newFov = 10\n if (this.roofs.length != 0) {\n let bounds = this.roofsBounds\n let targetVector = {\n x: (bounds.xMax + bounds.xMin) / 2000,\n y: (bounds.yMax + bounds.yMin) / 2000,\n z: 0\n }\n let objectRadius_m = Math.max(\n (bounds.xMax - bounds.xMin) / 2000,\n (bounds.yMax - bounds.yMin) / 2000\n )\n\n let distance =\n 2 * (objectRadius_m / Math.sin(((newFov / 2) * Math.PI) / 180))\n let cameraMoveVector = { x: 0, y: 0, z: distance }\n const positionVector = addVector(targetVector, cameraMoveVector)\n position = [positionVector.x, positionVector.y, positionVector.z]\n target = [targetVector.x, targetVector.y, targetVector.z]\n } else {\n position = [0, 0, 300]\n target = [0, 0, 0]\n }\n this.setTweenTo({\n position,\n target,\n fov: newFov,\n callback: this.turnPerspectiveCameraToOrthogonal\n })\n },\n setCameraOrthogonalTo(polygon) {\n if (polygon) {\n let polygonRef = polygon\n const targetVector = polygonRef.meanPoint\n const target = [\n targetVector.x / 1000,\n targetVector.y / 1000,\n targetVector.z / 1000\n ]\n const positionVector = addVector(\n polygonRef.meanPoint,\n multiplyVector(45000, polygonRef.normalVector)\n )\n const position = [\n positionVector.x / 1000,\n positionVector.y / 1000 - 1,\n positionVector.z / 1000\n ]\n this.setTweenTo({ position, target })\n }\n },\n setCameraSideTo(polygon) {\n if (polygon) {\n let polygonRef = polygon\n const targetVector = polygonRef.meanPoint\n const target = [\n targetVector.x / 1000,\n targetVector.y / 1000,\n targetVector.z / 1000\n ]\n let sideVector = {\n x: -Math.cos(((polygonRef.direction + 45) * Math.PI) / 180),\n y: Math.sin(((polygonRef.direction + 45) * Math.PI) / 180),\n z: 0\n }\n const positionVector = addVector(\n polygonRef.meanPoint,\n multiplyVector(45000, sideVector)\n )\n const position = [\n positionVector.x / 1000,\n positionVector.y / 1000,\n positionVector.z / 1000 + 5\n ]\n this.setTweenTo({ position, target })\n }\n },\n setTweenTo(payload) {\n const {\n position,\n target,\n fov = 50,\n duration = 2000,\n callback = () => {}\n } = payload\n TWEEN.removeAll()\n if (this.camera) {\n const currentTweenVar = {\n t: 0\n }\n const initialTarget = {\n x: this.orbitControl.target.x,\n y: this.orbitControl.target.y,\n z: this.orbitControl.target.z\n }\n const initialFov = this.camera.fov\n const initialCameraPosition = {\n x: this.camera.position.x,\n y: this.camera.position.y,\n z: this.camera.position.z\n }\n const finalCameraPosition = {\n x: position[0],\n y: position[1],\n z: position[2]\n }\n if (position[0] == target[0] && position[1] == target[1]) {\n const distance2D = getDistanceBetweenPoints(\n finalCameraPosition,\n initialCameraPosition\n )\n //angle from south\n const angle2D = Math.atan2(\n initialCameraPosition.y - finalCameraPosition.y,\n initialCameraPosition.x - finalCameraPosition.x\n )\n this.tweenCamera = new TWEEN.Tween(currentTweenVar)\n .to({ t: 1 }, duration)\n .easing(TWEEN.Easing.Sinusoidal.Out)\n .onUpdate(() => {\n const t = currentTweenVar.t\n this.camera.fov = initialFov + Math.sqrt(t) * (fov - initialFov)\n\n const newDistance = distance2D * (1 - t)\n const newAngle = (angle2D + Math.PI / 2) * (1 - t) - Math.PI / 2\n const newAltitude =\n finalCameraPosition.z +\n (1 - t) * (initialCameraPosition.z - finalCameraPosition.z)\n const nextPosition = {\n x: finalCameraPosition.x + newDistance * Math.cos(newAngle),\n y: finalCameraPosition.y + newDistance * Math.sin(newAngle),\n z: newAltitude\n }\n this.camera.position.set(\n nextPosition.x,\n nextPosition.y,\n nextPosition.z\n )\n this.camera.up = new THREE.Vector3(\n 0,\n Math.sin((t * Math.PI) / 2),\n Math.cos((t * Math.PI) / 2)\n )\n\n this.camera.updateProjectionMatrix()\n const nextTarget = {\n x: initialTarget.x + t * (target[0] - initialTarget.x),\n y: initialTarget.y + t * (target[1] - initialTarget.y),\n z: initialTarget.z + t * (target[2] - initialTarget.z)\n }\n\n this.orbitControl.target.set(\n nextTarget.x,\n nextTarget.y,\n nextTarget.z\n )\n if (this.orbitControl && this.orbitControl.update)\n this.orbitControl.update()\n })\n .onComplete(() => {\n callback()\n })\n } else {\n this.camera.up = { x: 0, y: 0, z: 1 }\n this.tweenCamera = new TWEEN.Tween(currentTweenVar)\n .to({ t: 1 }, duration)\n .easing(TWEEN.Easing.Sinusoidal.Out)\n .onUpdate(() => {\n const t = currentTweenVar.t\n this.camera.fov = initialFov + t * t * (fov - initialFov)\n this.camera.updateProjectionMatrix()\n\n const nextPosition = {\n x:\n finalCameraPosition.x +\n (1 - t) * (initialCameraPosition.x - finalCameraPosition.x),\n y:\n finalCameraPosition.y +\n (1 - t) * (initialCameraPosition.y - finalCameraPosition.y),\n z:\n finalCameraPosition.z +\n (1 - t) * (initialCameraPosition.z - finalCameraPosition.z)\n }\n this.camera.position.set(\n nextPosition.x,\n nextPosition.y,\n nextPosition.z\n )\n const nextTarget = {\n x: initialTarget.x + t * (target[0] - initialTarget.x),\n y: initialTarget.y + t * (target[1] - initialTarget.y),\n z: initialTarget.z + t * (target[2] - initialTarget.z)\n }\n this.orbitControl.target.set(\n nextTarget.x,\n nextTarget.y,\n nextTarget.z\n )\n if (this.orbitControl && this.orbitControl.update)\n this.orbitControl.update()\n })\n .onComplete(() => {\n callback()\n })\n }\n this.tweenCamera.start()\n TWEEN.update()\n }\n },\n animate(e) {\n if (!!TWEEN) {\n TWEEN.update()\n }\n this.animationFrameId = requestAnimationFrame(this.animate)\n }\n },\n\n beforeDestroy() {\n TWEEN.removeAll()\n cancelAnimationFrame(this.animationFrameId)\n }\n}\n","import { mapState, mapGetters } from 'vuex'\nimport renderMixin from './render'\nimport cameraMixin from './cameraMixin'\nimport * as THREE from 'three'\n\nexport default {\n mixins: [renderMixin, cameraMixin],\n data() {\n return {\n lastTic: new Date().getTime() * 1e4,\n //lastTic:(new Date()).getTime()\n lastGeometryEventIdDone: -1,\n backgroundImagesizeInMm: null\n }\n },\n created() {\n this.meshes = {\n baseMeshes: {},\n roofMeshes: {},\n flatRoofMeshes: {},\n obstacleMeshes: {},\n panelsMeshes: {},\n nodeMeshes: null,\n edgeMeshes: {},\n roofMarginMeshes: {},\n moduleFieldsMeshes: {},\n tileMeshes: {}\n }\n },\n mounted() {\n this.lastGeometryEventIdDone = this.lastGeometryEventId\n },\n computed: {\n ...mapState({\n wallColor: (state) => state.threeDModule.wallColor,\n selectedMapLayer: (state) => state.threeDModule.selectedMapLayer,\n panelOpacity: (state) => state.threeDModule.panelOpacity,\n pvDataMemo: (state) => state.threeDModule.pvDataMemo\n }),\n ...mapGetters({\n selectedTool: 'getSelectedTool',\n roofs: 'getRoofs',\n lastGeometryEventId: 'getLastGeometryEventId',\n roofsBounds: 'getRoofsBounds',\n geometryEvents: 'getGeometryEvents'\n }),\n layerKey() {\n if (this.selectedMapLayer) {\n return this.selectedMapLayer.key\n } else {\n return null\n }\n },\n polygonIds() {\n return this.polygons.map((p) => p.id)\n },\n edgeIds() {\n return this.edges.map((p) => p.id)\n },\n nodeIds() {\n return this.nodes.map((p) => p.id)\n },\n setGlobalPositionRenderNeeded() {\n return !!this.geometryEvents.find(\n (e) =>\n e.id > this.lastGeometryEventIdDone &&\n e.name == 'setCameraGlobalPosition'\n )\n },\n setInitialPositionRenderNeeded() {\n return !!this.geometryEvents.find(\n (e) =>\n e.id > this.lastGeometryEventIdDone &&\n e.name == 'setInitialPositionRenderNeeded'\n )\n },\n fullRenderNeeded() {\n return !!this.geometryEvents.find(\n (e) => e.id > this.lastGeometryEventIdDone && e.name == 'full'\n )\n },\n geometryEventsToDo() {\n return this.geometryEvents.filter(\n (e) => e.id > this.lastGeometryEventIdDone\n )\n },\n geometryEventsToDoWithoutFull() {\n return this.geometryEventsToDo.filter((e) => e.name != 'full')\n }\n },\n methods: {\n refreshRendering(e) {\n let methodList = []\n if (this.fullRenderNeeded) {\n methodList = this.renderingMethodsByEvent({ name: 'full' })\n }\n for (let geometryEvent of this.geometryEventsToDoWithoutFull) {\n for (let renderingMethod of this.renderingMethodsByEvent(\n geometryEvent\n )) {\n if (!methodList.map((m) => m.name).includes(renderingMethod.name)) {\n methodList.push(renderingMethod)\n }\n }\n }\n\n if (methodList.length) {\n this.renderMethods(methodList)\n this.render()\n }\n\n this.lastGeometryEventIdDone = this.lastGeometryEventId\n },\n renderingMethodsByEvent(geometryEvent) {\n const name = geometryEvent.name\n const params = geometryEvent.params\n let methodList = []\n switch (name) {\n case 'zoomIn3D':\n methodList.push({\n name: 'zoomIn3D',\n method: this.zoomIn3D,\n arg: []\n })\n break\n case 'zoomOut3D':\n methodList.push({\n name: 'zoomOut3D',\n method: this.zoomOut3D,\n arg: []\n })\n break\n case 'set3DCameraGlobalPosition':\n case 'setCameraGlobalPosition':\n methodList.push({\n name: 'setCameraGlobalPosition',\n method: this.setCameraGlobalPosition,\n arg: []\n })\n break\n case 'setCameraInitialPosition':\n methodList.push({\n name: 'setCameraInitialPosition',\n method: this.setCameraInitialPosition,\n arg: []\n })\n break\n case 'toolChange': //params.toolName\n methodList.push({\n name: 'renderEdges',\n method: this.renderEdges,\n arg: []\n })\n case 'marginIsSameChange': //params.polygon\n case 'marginDifferentChange': //params.polygon,index\n case 'marginSameChange': //params.polygon\n methodList.push({\n name: 'renderRoofsMargin',\n method: this.renderRoofsMargin,\n arg: []\n })\n break\n case 'full':\n case 'reset':\n case 'removeNodes': //params.nodes\n case 'removeEdges': //params.edges\n case 'translate': //params.edges\n if (this.removeConstructionPolylineMesh) {\n methodList.push({\n name: 'removeConstructionPolyline',\n method: this.removeConstructionPolylineMesh,\n arg: []\n })\n }\n methodList.push({\n name: 'renderGeometry',\n method: this.renderGeometry,\n arg: []\n })\n methodList.push({\n name: 'showPanels',\n method: this.showPanels,\n arg: []\n })\n break\n case 'moveBuilding':\n methodList.push({\n name: 'renderRoofs',\n method: this.renderRoofs,\n arg: []\n })\n methodList.push({\n name: 'renderEdges',\n method: this.renderEdges,\n arg: []\n })\n methodList.push({\n name: 'renderBase',\n method: this.renderBase,\n arg: []\n })\n methodList.push({\n name: 'renderObstacles',\n method: this.renderObstacles,\n arg: []\n })\n break\n case 'updateOutlineXY': //params.polygon,?index\n if (params.layer == 'roof') {\n methodList.push({\n name: 'renderRoofs',\n method: this.renderRoofs,\n arg: []\n })\n methodList.push({\n name: 'renderEdges',\n method: this.renderEdges,\n arg: []\n })\n methodList.push({\n name: 'renderBase',\n method: this.renderBase,\n arg: []\n })\n methodList.push({\n name: 'renderObstacles',\n method: this.renderObstacles,\n arg: []\n })\n methodList.push({\n name: 'renderNodes',\n method: this.renderNodes,\n arg: []\n })\n } else if (params.layer == 'obstacle') {\n methodList.push({\n name: 'renderBase',\n method: this.renderBase,\n arg: []\n })\n methodList.push({\n name: 'renderRoofs',\n method: this.renderRoofs,\n arg: []\n })\n methodList.push({\n name: 'renderObstacles',\n method: this.renderObstacles,\n arg: []\n })\n }\n methodList.push({\n name: 'renderRoofsMargin',\n method: this.renderRoofsMargin,\n arg: []\n })\n break\n case 'removePanels': //params.panels\n case 'removeModuleField': //params:moduleField\n case 'textureLoaded':\n case 'alignOnSelectedEdge':\n case 'newModuleField':\n case 'reactivatePanel':\n case 'deactivatePanels': //params.panels\n case 'changePanelOpacity':\n methodList.push({\n name: 'renderPanels',\n method: this.renderPanels,\n arg: []\n })\n break\n case 'addPointToPolygon': //params.polygon,index\n case 'removeObstacle': //params:obstacle\n case 'removeRoof': //params:roof\n case 'newObstacle':\n case 'newRoofs':\n case 'moveNodesZ': //params.nodes\n case 'solveFlatness': //params.roof\n methodList.push({\n name: 'renderEdges',\n method: this.renderEdges,\n arg: []\n })\n methodList.push({\n name: 'renderBuilding',\n method: this.renderBuilding,\n arg: []\n })\n case 'selectedRoofChange':\n case 'selectedObstacleChange':\n methodList.push({\n name: 'renderFlatRoofs',\n method: this.renderFlatRoofs,\n arg: []\n })\n methodList.push({\n name: 'renderRoofsMargin',\n method: this.renderRoofsMargin,\n arg: []\n })\n break\n case 'selectedModuleFieldChange':\n methodList.push({\n name: 'renderEdges',\n method: this.renderEdges,\n arg: []\n })\n break\n case 'subHandleSelectionChange':\n case 'masterHandleSelectionChange':\n case 'unselectAllHandle':\n methodList.push({\n name: 'renderBuilding',\n method: this.renderBuilding,\n arg: []\n })\n break\n case 'parallelChange': //params.obstacle\n case 'obstacleHeightChange': //params.obstacle\n methodList.push({\n name: 'renderObstacles',\n method: this.renderObstacles,\n arg: []\n })\n break\n case 'roofInclineDirectionChange':\n methodList.push({\n name: 'renderRoofs',\n method: this.renderRoofs,\n arg: []\n })\n methodList.push({\n name: 'renderEdges',\n method: this.renderEdges,\n arg: []\n })\n methodList.push({\n name: 'renderBase',\n method: this.renderBase,\n arg: []\n })\n methodList.push({\n name: 'renderObstacles',\n method: this.renderObstacles,\n arg: []\n })\n break\n case 'backgroundTextureChange':\n methodList.push({\n name: 'renderTiles',\n method: this.renderTiles,\n arg: []\n })\n break\n case 'changeMapProjection':\n methodList.push({\n name: 'renderTiles',\n method: this.debouncedRenderTiles,\n arg: []\n })\n break\n case 'hidePanels':\n methodList.push({\n name: 'hidePanels',\n method: this.hidePanels,\n arg: []\n })\n break\n case 'showPanels':\n methodList.push({\n name: 'showPanels',\n method: this.showPanels,\n arg: []\n })\n break\n case 'removeImageOverlay':\n case 'changeImageOverlay':\n case 'updateImageOverlay':\n methodList.push({\n name: 'updateProjectionMaterials',\n method: this.updateProjectionMaterials,\n arg: []\n })\n break\n case 'clearPanelFromChangingRoofs':\n methodList.push({\n name: 'clearPanelsFromChangingRoofs',\n method: this.clearPanelsFromChangingRoofs,\n arg: [params.roofIds]\n })\n break\n case 'selectedPanelChange':\n methodList.push({\n name: 'renderModuleFields',\n method: this.renderModuleFields,\n arg: []\n })\n break\n case 'removeConstruction':\n methodList.push({\n name: 'removeConstructionPolyline',\n method: this.removeConstructionPolyline,\n arg: []\n })\n break\n }\n return methodList\n },\n async renderMethods(methodList) {\n let tempMethod\n try {\n for (let item of methodList) {\n tempMethod = item.method\n if (item.method) {\n await item.method(...item.arg)\n }\n }\n this.render()\n } catch (error) {\n console.log({ error, method: tempMethod })\n }\n },\n renderGeometry() {\n this.renderRealisticGeometry()\n this.renderRoofsMargin()\n this.renderNodes()\n this.renderEdges()\n this.renderFlatRoofs()\n },\n renderRealisticGeometry() {\n this.renderBuilding()\n this.renderModuleFields()\n this.renderPanels()\n },\n renderBuilding() {\n this.renderBase()\n this.renderRoofs()\n this.renderObstacles()\n this.updateProjectionMaterials()\n },\n\n getCanvasOffset() {\n if (!this.$refs.canvas3DContainer) return { top: 0, left: 0 }\n var box = this.$refs.canvas3DContainer.getBoundingClientRect()\n\n var body = document.body\n var docEl = document.documentElement\n\n var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop\n var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft\n\n var clientTop = docEl.clientTop || body.clientTop || 0\n var clientLeft = docEl.clientLeft || body.clientLeft || 0\n\n var top = box.top + scrollTop - clientTop\n var left = box.left + scrollLeft - clientLeft\n body = null\n docEl = null\n box = null\n return { top: Math.round(top), left: Math.round(left) }\n }\n },\n watch: {\n pvDataMemo: {\n handler() {\n this.loadNewPanelTextures()\n }\n },\n 'material.panel': {\n handler() {\n this.renderPanels()\n }\n },\n geometryEventsToDo(val) {\n if (val.length > 0) {\n this.refreshRendering()\n }\n }\n },\n beforeDestroy() {\n this.clearThreeObjects(this.scene)\n if (this.renderer) {\n this.renderer.clear()\n this.renderer.dispose()\n }\n if (this.orbitControl && this.orbitControl.dispose) {\n this.orbitControl.dispose()\n }\n\n this.renderer = null\n this.scene = null\n this.camera = null\n this.cameraProjection = null\n Object.values(this.material).forEach((m) => {\n if (m && m.dispose) m.dispose()\n })\n this.material = null\n this.orbitControl = null\n this.raycaster = null\n this.loader = null\n this.provider = null\n }\n}\n","import * as THREE from 'three'\n\nexport default {\n created() {\n this.scene = new THREE.Scene()\n this.renderer = new THREE.WebGLRenderer({\n antialias: true,\n preserveDrawingBuffer: true,\n powerPreference: 'high-performance'\n })\n this.raycaster = new THREE.Raycaster()\n this.loader = new THREE.TextureLoader()\n }\n}\n","import * as THREE from 'three'\nimport { toRaw } from 'vue'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'\nimport { Sky } from 'three/examples/jsm/objects/Sky.js'\nimport { CustomProvider } from './customProvider'\nimport getLayers from '../utils/layers'\nimport materialMixin from './materialMixin'\nimport renderMixin from './renderMixin'\nimport initializeThree from './initializeThree'\nexport default {\n data() {\n return {\n cameraProjection: null,\n orbitControl: null,\n canvasHeight: null,\n canvasWidth: null,\n canvasOffset: { x: 0, y: 0 },\n tweenCamera: null,\n tweenOrbit: null,\n isReady: {\n texturesLoaded: 0,\n texturesToLoad: 0,\n threeMap: false,\n geometry: false,\n camera: false\n },\n screenshotable: false,\n DOMElement: null\n }\n },\n mixins: [initializeThree, renderMixin, materialMixin],\n methods: {\n initialiseThree({\n isInteractive = true,\n isPerspectiveCamera = true,\n DOMElement = this.$refs.canvas3DContainer\n } = {}) {\n console.log('initialiseThree')\n this.DOMElement = DOMElement\n\n if (!this.scene) {\n this.scene = new THREE.Scene()\n }\n this.scene.background = new THREE.Color(0xb0b0b0)\n\n this.initialiseRenderer(DOMElement)\n\n this.initialiseCameras(isPerspectiveCamera)\n\n this.initialiseLights()\n\n this.initialiseSky()\n\n this.initialiseThreeMap()\n\n if (isInteractive) {\n this.initialiseControl(isPerspectiveCamera)\n }\n this.onWindowResize()\n window.addEventListener('resize', this.onWindowResize, false)\n },\n initialiseRenderer() {\n this.resizeRenderer(this.DOMElement)\n if (this.renderer) {\n this.renderer.setPixelRatio(window.devicePixelRatio)\n this.renderer.toneMappingExposure = 0.01\n this.DOMElement.appendChild(this.renderer.domElement)\n }\n },\n resizeRenderer() {\n if (this.DOMElement) {\n const width = this.DOMElement.clientWidth\n const height = this.DOMElement.clientHeight\n this.renderer.domElement.style.width = width + 'px'\n this.renderer.domElement.style.height = height + 'px'\n this.renderer.setSize(width, height, false)\n this.renderer.setViewport(0, 0, width, height)\n }\n },\n initialiseControl(isPerspectiveCamera) {\n this.orbitControl = new OrbitControls(\n this.camera,\n this.renderer.domElement\n )\n if (isPerspectiveCamera) {\n this.orbitControl.screenSpacePanning = false\n this.orbitControl.maxPolarAngle = (0.95 * Math.PI) / 2\n this.orbitControl.mouseButtons = {\n RIGHT: THREE.MOUSE.PAN,\n LEFT: THREE.MOUSE.ROTATE,\n MIDDLE: THREE.MOUSE.DOLLY\n }\n } else {\n this.orbitControl.screenSpacePanning = true\n this.orbitControl.maxPolarAngle = Math.PI / 2\n this.orbitControl.enableRotate = false\n this.orbitControl.mouseButtons = {\n LEFT: THREE.MOUSE.PAN,\n MIDDLE: THREE.MOUSE.DOLLY,\n RIGHT: THREE.MOUSE.ROTATE\n }\n }\n this.orbitControl.addEventListener('change', () => {\n this.orbitControlChange()\n })\n },\n initialiseLights() {\n const ambientLight = new THREE.AmbientLight(0xf0f0f0, 0.5)\n let directionalLight = new THREE.DirectionalLight(0xffffff, 0.5)\n directionalLight.position.set(0, 1000, 500)\n let directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.5)\n directionalLight2.position.set(0, -1000, 500)\n this.scene.add(ambientLight)\n this.scene.add(directionalLight)\n this.scene.add(directionalLight2)\n },\n initialiseSky() {\n // Add Sky\n let sky = new Sky()\n sky.scale.setScalar(450000)\n this.scene.add(sky)\n this.clearThreeObjects(sky)\n let sun = new THREE.Vector3()\n\n const uniforms = sky.material.uniforms\n uniforms.up.value = new THREE.Vector3(0, 0, 1)\n uniforms['turbidity'].value = 20\n uniforms['rayleigh'].value = 0.06\n uniforms['mieCoefficient'].value = 0.01\n uniforms['mieDirectionalG'].value = 0.1\n const elevation = 10\n const azimuth = -20\n const phi = THREE.MathUtils.degToRad(90 - elevation)\n const theta = THREE.MathUtils.degToRad(azimuth)\n\n sun.setFromSphericalCoords(1, phi, theta)\n\n uniforms['sunPosition'].value.copy(sun)\n sun = null\n },\n initialiseThreeMap() {\n //Extention of the map with geo-map\n if (!this.selectedMapLayer) {\n this.initialiseMapLayer()\n }\n this.provider = new CustomProvider('', this.selectedMapLayer.key)\n this.renderTiles()\n },\n initialiseMapLayer() {\n if (!this.layers || this.layers.length == 0) {\n this.layers = getLayers()\n }\n this.setSelectedMapLayer(null)\n\n if (this.selectedMapLayer === null) {\n for (var i in this.layers) {\n if (\n this.globalProjectProperties &&\n this.layers[i].key === this.globalProjectProperties.map_type\n ) {\n this.setSelectedMapLayer(this.layers[i])\n }\n }\n }\n\n if (this.selectedMapLayer === null) {\n this.setSelectedMapLayer(this.layers[7])\n }\n },\n render() {\n if (this.composer) {\n // console.log('composer', this.composer)\n this.composer.render()\n } else if (this.renderer) {\n // console.log('renderer', this.renderer)\n this.renderer.clear()\n this.renderer.render(this.scene, this.camera)\n }\n },\n orbitControlChange() {\n this.render()\n },\n onWindowResize() {\n if (this.orbitControl) {\n this.orbitControl.update()\n }\n this.canvasOffset = this.getCanvasOffset()\n this.canvasHeight = this.DOMElement.clientHeight\n this.canvasWidth = this.DOMElement.clientWidth\n this.resizeRenderer()\n this.setCameraAspectRatio()\n this.render()\n },\n onCanvasResize() {\n const canvas = this.renderer.domElement\n const width = this.DOMElement.clientWidth\n const height = this.DOMElement.clientHeight\n if (canvas.width !== width || canvas.height !== height) {\n this.resizeRenderer()\n\n if (this.composer) {\n this.composer.setPixelRatio(Math.min(window.devicePixelRatio, 2))\n if (this.composer.setViewport) {\n this.composer.setViewport(0, 0, width, height)\n }\n }\n this.setCameraAspectRatio()\n this.render()\n }\n }\n },\n beforeDestroy() {\n this.DOMElement = null\n window.removeEventListener('resize', this.onWindowResize, false)\n }\n}\n","import { render } from \"./ThreeCanvasViewer.vue?vue&type=template&id=96f27cd4\"\nimport script from \"./ThreeCanvasViewer.vue?vue&type=script&lang=js\"\nexport * from \"./ThreeCanvasViewer.vue?vue&type=script&lang=js\"\n\nimport \"./ThreeCanvasViewer.vue?vue&type=style&index=0&id=96f27cd4&lang=css\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"frame\"\n :style=\"{ height: '100%', width: '100%', display: 'flex' }\"\n >\n <ThreeCanvas />\n </div>\n</template>\n\n<script>\nimport { mapState } from 'vuex'\nimport ThreeCanvas from './components/ThreeCanvasViewer.vue'\nexport default {\n components: {\n ThreeCanvas\n },\n computed: {\n ...mapState({\n uuid: (state) => state.uuid,\n view_mode: (state) => state.view_mode\n })\n }\n}\n</script>\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_eturnity_eturnity_3d\"] = self[\"webpackChunk_eturnity_eturnity_3d\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(765); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["class","ref","style","crossorigin","leafletMapLayersConfig","baseMapLayer","maxZoom","maxNativeZoom","minZoom","baseMapLayerStreetNumber","swisstopoLayer_swissimage","swisstopoLayer_pixelkarte","swisstopoLayer_solarenergie_fassade","swisstopoLayer_solarenergie_roof","openStreetMapLayer","ignSpainLayer_pnoa_image","ignSpainLayer_map","bkgHexagonGermanyLayer","GeoPortal","getLayers","googleLayer","L","googleMutant","type","layerTypeAPI","googleLayerRoadmap","googleLayerTerrain","id","subdomains","attribution","ignLayerPNOAImage","layer","tilematrixset","format","ignLayerMap","bkgHexagonImage","wms","layers","GeoLayer_HR","tileSize","name","key","layerData","CustomProvider","_MapProvider","_inherits","_super","_createSuper","address","map_layer","_this","_classCallCheck","call","find","mapLayer","options","defaultImage","document","createElement","src","require","crossOrigin","url","_url","_createClass","value","zoom","x","y","_this2","minZoomLayer","this","maxZoomLayer","Promise","resolve","reject","image","onload","backgroundColor","onerror","imageSrc","numTiles","Math","pow","tileX","tileY","earthPerimeter","PI","resolution_mPerTile","xMin","xMax","yMin","yMax","concat","replace","subDomain","abs","length","MapProvider","theme","colors","primary","secondary","tertiary","black","yellow","darkGray","mediumGray","lightGray","white","blue","red","blue1","blue2","grey1","grey2","grey3","grey4","grey5","grey6","turquoise","green","purple","disabled","transparentWhite1","transparentBlack1","transparentBlue1","blueElectric","eturnityGrey","screen","mobileSmall","mobile","mobileLarge","tablet","tabletLarge","borderRadius","earthRadius","marginAroundBuildingForCameraViewInMeter","maximumGapLimit","colorArrayBase","beamColor","map","c","beamOpacity","textureImageDomain","defaultTextureUrls","exp","log","data","created","material","wallColor","THREE","panelSide","color","side","wall","obstacle","edge","transparent","opacity","canvas","ctx","getContext","width","height","fillStyle","fillRect","strokeStyle","beginPath","lineWidth","arc","stroke","texture","node","alphaMap","size","sizeAttenuation","panel","k","loader","load","alphaTest","roof","flatRoof","specular","shininess","flatShading","highlight","selected","hidden","moduleField","moduleFieldWithPanelOveride","curvedRoof","watch","set","methods","renderNodes","nodesVisible","geometry","meshes","nodeMeshes","visible","attributes","position","needsUpdate","vertices","nodes","filter","forEach","push","z","array","positions","setDrawRange","setAttribute","userData","version","meshId","polygonId","matrixAutoUpdate","renderOrder","overlayScene","add","getTriangleVerticesFromOutline","polygonOutline","holesOutlines","arguments","undefined","Float32Array","dataVertices","p","flat","holesStartingIndexes","holesVertices","HoleIndexOffset","lastIndex","newIndex","_toConsumableArray","Set","holeOutline","lastPoint","lastVertex","apply","triangles","earcut","err","console","error","triangleVertices","index","updateBufferRoofGeometry","holesOutline","hasNaN","dispose","computeVertexNormals","getBufferRoofGeometry","uvs","getWallVertices","polygon","outline","trianglesVertices","p_up_0","p_up_1","p_bottom_0","_objectSpread","p_bottom_1","holes","hole","obstacleWallOutline","intersectOutlines","verticalProjectionOnPlane","normalVector","flatOutline","lengthHole","updateBufferWallGeometry","getBufferWallGeometry","getBufferObstacleGeometry","obstaclePolygon","roofPolygon","obstacleHeight","isParallel","parseInt","heightReference","passByPoint","topHeight","cropedHoleOutline","obstacleOutlineTop","vectorFromBottomToTop","multiplyVector","addVector","getBufferObstacleSideGeometry","obstacleLength","getBufferModuleFieldGeometry","moduleFieldPolygon","moduleHeight","moduleFieldOutlineTop","getBufferImageOverlayGeometry","corners","getNormalVectorFrom3Points","A","B","C","AB","getDistanceBetweenPoints","AC","getPanelOutlineWithHeightOffset","panelPolygon","panelNormalVector","panelHeight","panelOutlineTop","getBufferPanelGeometry","updateBufferPanelGeometry","getTriangleVerticesForSidePanels","outlineBottom","outlineUp","nextIndex","updateBufferPanelSideGeometry","getBufferPanelSideGeometry","getBufferRoofMarginGeometry","geometries","margins","innerOutline","K","distance","isSameMargin","sameMargin","distances","outterOutline","J","marginOutline","mergedBaseMesh","renderBase","mesh","clearRemovedOnes","baseGeometries","roofs","baseMeshes","updateMatrix","frustumCulled","updateOrCreateMergedMesh","clearThreeObjects","obj","children","remove","Object","keys","prop","clearPanelsFromChangingRoofs","roofIds","polygons","includes","moduleFields","mf","panels","meshTop","panelsMeshes","meshSide","clearMeshFromScene","scene","clearEdgesRemovedOnes","values","edgeIds","edgeId","_this3","polygonIds","clearByType","_this4","renderer","renderLists","setCylinderPosition","cylinder","point_0","point_1","midPoint","clone","multiplyScalar","direction","subVectors","axis","quaternion","setFromUnitVectors","normalize","copy","oldLength","cylinderLength","newLength","scale","renderEdges","renderLineEdges","edges","edgeMeshes","selectedTool","selectedModuleField","belongsTo","i","edgeRadius","edgeOpacity","_regeneratorRuntime","exports","Op","prototype","hasOwn","hasOwnProperty","defineProperty","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","method","_invoke","AsyncIterator","PromiseImpl","invoke","record","result","_typeof","__await","then","unwrapped","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","return","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","iter","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","loadNewPanelTextures","pvDataMemo","component","pvId","texture_img_url","default","loadPanelsTexture","_callee","_loop","_context2","_context","component_id_pv_module","moduleTextureVersionId","renderRoofsMargin","showableRoofs","selectedRoof","selectedObstacle","marginColor","roofMarginMeshes","renderModuleFields","moduleFieldPolygons","number_of_panels_override","areModuleFieldsVisible","moduleFieldsMeshes","mergedObstacleMesh","mergedObstacleSideMesh","applyTextureOnObstacles","reorderRoofMaterials","applyTextureOnMesh","renderObstacles","obstacleGeometries","obstacleSideGeometries","poly","geometrySide","obstacleMeshes","mergedPanelSideMesh","arePanelVisible","mergedPanelTopMeshes","hidePanels","showPanels","renderPanels","areUserDeactivatedPanelsVisible","panelSideGeometries","panelTopGeometries","materialId","panelOpacity","moduleTextureId","pvData","module_texture_version_id","topMesh","topGeometry","sideMesh","sideGeometry","_step","materialIds","materialIdsToRemove","_iterator","_createForOfIteratorHelper","s","n","e","f","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray","mergedRoofMesh","updateRoofGeometry","roofOutline","cropedHolesOutline","h","createRoofGeometry","applyTextureOnRoofs","render","renderRoofs","roofGeometries","roofMeshes","renderFlatRoofs","flatRoofMeshes","maximumGap","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","target","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","imageOverlayTexture","imageOverlayMaterial","imageOverlayProjectionCamera","computed","mapGetters","imageOverlay","renderImageOverlayOnBackground","backgroundMesh","planeGeometry","planeMaterial","changeImageOverlay","updateProjectionMaterials","getImageOverlayMaterial","_callee2","newImageOverlayMaterial","setImageOverlayCameraPosition","removeImageOverlay","_callee3","_context3","imageOverlayProjectionMaterial","ProjectedMaterial","camera","depthWrite","priority","aspect","projectionAltitude","tan","fov","imageOverlayProjectionCameraPosition","positionInMm","lookAt","zAngle","getAngleInDegFromCanvasVector","substractVector","rotation","far","near","updateProjectionMatrix","materials","toRaw","clearGroups","addGroup","Infinity","m","project","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","o","minLen","_arrayLikeToArray","toString","Array","from","test","isArray","len","arr2","sort","a","b","aPrio","bPrio","findIndex","splice","cancellablePromise","promise","status","isCancel","promiseObject","rej","getStatus","cancel","pendingTiles","numberOfTilesRendered","numberOfTilesToRender","tileToRender","debouncedRenderTiles","debounce","renderTiles","selectedMapLayer","renderGoogleTiles","renderProviderTiles","removeUnusedTiles","tileToRenderIds","tileParam","xTile","yTile","zoomLvl","idsToRemove","tileMeshes","latitude","longitude","_this2$roofsBounds","perimeterAtLatitude","optimizedZoomLvl","_distanceToDeltaLatLn","latMin","lngMin","_distanceToDeltaLatLn2","latMax","lngMax","_latLngToTileXY","xTileMin","yTileMax","_latLngToTileXY2","xTileMax","yTileMin","xMinOdd","yMinOdd","xMaxEven","yMaxEven","_xTile","_yTile","_xTile2","_yTile2","isTileOnRoofBound","googleBackgroundMap","clear","provider","layoutSettings","layout_latitude","layout_longitude","roofsBounds","cos","round","LN2","distanceToDeltaLatLng","lat","lng","latLngToTileXY","renderTile","removeTileFromPending","t","_arguments","imagePromise","fetchTile","newTileMaterial","generateMipmaps","tileToCorners","getObjectByName","_callee4","googleMapType","roofsBoundZoomLvl","_this4$roofsBounds","roofBoundSizeInMeter","exactZoomLvl","roofsBoundCenterMeter","deltaLatLng","roofsBoundCenterLatLng","apiKey","backgroundPlane","zoomLevels","indexGoogleBackground","_context5","t0","max","log2","min","process","zoomLevel","groundResolution","sizeInMeter","googleBackgroundUrl","_context4","newGoogleTileMaterial","meshToRemove","newMapLayer","tileProjectionTextures","tileProjectionMaterials","center","cameraProjection","tileProjectionMaterial","up","setTileCameraPosition","disposeTileMaterial","disposeTileMaterialDifferentMapLayer","numberOfTiles","left","right","bottom","top","updateMergedGeometry","mergedGeometry","mergedVertices","mergedNormals","mergedUvs","normals","normal","drawRange","count","uv","createMergedGeometry","mixins","margin","base","projectionMaterial","tile","tileProjection","animationFrameId","perspectiveCamera","orthographicCamera","initialiseCameras","isPerspectiveCamera","setCameraAspectRatio","canvasRatio","DOMElement","clientWidth","clientHeight","isOrthographicCamera","currentAspect","turnPerspectiveCameraToOrthogonal","cameraPosition","halfHeightDistance","composer","renderCamera","renderPass","overlayRenderPass","outlinePassHighlight","outlinePassSelected","orbitControl","screenSpacePanning","mouseButtons","LEFT","PAN","MIDDLE","DOLLY","RIGHT","ROTATE","enableRotate","update","turnOrthogonalCameraToPerspective","altitude","zoomIn3D","curentPosition","newCameraPosition","setTweenTo","duration","zoomOut3D","setPerspectiveCameraPositionTo","targetPosition","sanitizeOrthographicCameraParameters","_ref","_ref2","_ref3","setOrthographicCameraPositionFromCameraParameters","cameraParams","_this$sanitizeOrthogr","maxPolarAngle","setOrthographicCameraGlobalPosition","setCameraInitialPosition","newFov","bounds","targetVector","objectRadius_m","sin","cameraMoveVector","positionVector","setCameraGlobalPosition","setCameraGlobalVerticalPosition","callback","setCameraOrthogonalTo","polygonRef","meanPoint","setCameraSideTo","sideVector","payload","_payload$fov","_payload$duration","_payload$callback","TWEEN","currentTweenVar","initialTarget","initialFov","initialCameraPosition","finalCameraPosition","distance2D","angle2D","atan2","tweenCamera","to","easing","Sinusoidal","Out","onUpdate","sqrt","newDistance","newAngle","newAltitude","nextPosition","nextTarget","onComplete","start","animate","requestAnimationFrame","beforeDestroy","cancelAnimationFrame","allowArrayLike","it","F","_e","normalCompletion","didErr","step","_e2","renderMixin","cameraMixin","lastTic","Date","getTime","lastGeometryEventIdDone","backgroundImagesizeInMm","mounted","lastGeometryEventId","mapState","threeDModule","geometryEvents","layerKey","nodeIds","setGlobalPositionRenderNeeded","setInitialPositionRenderNeeded","fullRenderNeeded","geometryEventsToDo","geometryEventsToDoWithoutFull","refreshRendering","methodList","renderingMethodsByEvent","_step2","geometryEvent","_iterator2","renderingMethod","renderMethods","params","removeConstructionPolylineMesh","renderGeometry","renderBuilding","removeConstructionPolyline","_this5","tempMethod","_iterator3","_step3","item","t1","renderRealisticGeometry","getCanvasOffset","$refs","canvas3DContainer","box","getBoundingClientRect","body","docEl","documentElement","scrollTop","window","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","handler","raycaster","antialias","preserveDrawingBuffer","powerPreference","canvasHeight","canvasWidth","canvasOffset","tweenOrbit","isReady","texturesLoaded","texturesToLoad","threeMap","screenshotable","initializeThree","materialMixin","initialiseThree","_ref$isInteractive","isInteractive","_ref$isPerspectiveCam","_ref$DOMElement","background","initialiseRenderer","initialiseLights","initialiseSky","initialiseThreeMap","initialiseControl","onWindowResize","addEventListener","resizeRenderer","setPixelRatio","devicePixelRatio","toneMappingExposure","appendChild","domElement","setSize","setViewport","OrbitControls","orbitControlChange","ambientLight","directionalLight","directionalLight2","sky","Sky","setScalar","sun","uniforms","elevation","azimuth","phi","degToRad","theta","setFromSphericalCoords","initialiseMapLayer","setSelectedMapLayer","globalProjectProperties","map_type","onCanvasResize","removeEventListener","pointer","intervalId","clearInterval","threeMixin","Scene","WebGLRenderer","Raycaster","TextureLoader","hydrateData","geometryData","useCustomCamera","cameraPerspectiveSettings","viewType","isBuildingVisible","hideBuildings","$eventBus","$on","cameraParameters","uuid","setCamera","view_mode","setInterval","mapConfig","obstacles","userDeactivatedPanels","hideEdges","hideWarningRoofs","hideMesh","boundingSphere","computeBoundingSphere","objectRadius","radius","polygonBounds","getBounds","orthographicBounds","horizontalVector","ratioCanvas","ratio","xCenter","yCenter","event","CustomEvent","dispatchEvent","deep","__exports__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","loaded","__webpack_modules__","deferred","O","chunkIds","notFulfilled","fulfilled","j","every","r","getter","__esModule","d","definition","get","g","globalThis","Function","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""}