@abtnode/webapp 1.8.10 → 1.8.11

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/7004.3bf96415.chunk.js","mappings":"iWAWe,SAASA,EAAT,GAAyC,IAAtBC,EAAqB,EAArBA,QAAYC,GAAS,YACrD,GAAgCC,EAAAA,EAAAA,UAAS,MAAzC,eAAOC,EAAP,KAAiBC,EAAjB,KAEMC,EAAOC,QAAQH,GAWfI,EAAU,SAAAC,GACd,IACEA,EAAEC,kBACFD,EAAEE,gBAEM,CAAR,SAAQ,CACVN,EAAY,KACb,EAED,OACE,UAACO,GAAD,kBAASV,GAAT,eACE,SAAC,IAAD,CACE,aAAW,OACX,gBAAc,eACd,gBAAc,OACd,UAAQ,oBACRW,QAzBS,SAAAJ,GACb,IACEA,EAAEC,kBACFD,EAAEE,gBAEM,CAAR,SAAQ,CACVN,EAAYI,EAAEK,cACf,EAmBKC,KAAK,QANP,UAOE,SAAC,IAAD,OAGF,SAAC,IAAD,CACEC,GAAG,eACH,UAAQ,eACRZ,SAAUA,EACVa,aAAW,EACXX,KAAMA,EACNE,QAASA,EACTU,WAAY,CAAC,EAPf,SAQGjB,EAAQkB,KAAI,SAACC,EAAQC,GACpB,GAAsB,oBAAXD,EACT,OAAOA,EAAO,CAAEE,MAAOd,IAEzB,IAAQe,EAAmDH,EAAnDG,KAAMC,EAA6CJ,EAA7CI,KAAMX,EAAuCO,EAAvCP,QAApB,EAA2DO,EAA9BK,SAAAA,OAA7B,SAAkDC,GAAlD,OAA2DN,EAA3D,GACA,OACE,mBAAC,KAAD,kBACMM,GADN,IAEED,SAAUA,EACVE,OAAK,EACLd,QAAS,SAAAJ,GACPD,IACAK,EAAQJ,EACT,EAEDmB,IAAKP,KACL,SAAC,IAAD,CAAcQ,MAAO,CAAEC,SAAU,GAAIC,YAAa,GAAlD,SAAwDR,KACxD,SAAC,IAAD,CAAcS,QAASR,IAG5B,SAIR,CAMDxB,EAAQiC,aAAe,CACrBhC,QAAS,IAGX,IAAMW,EAAMsB,EAAAA,QAAAA,IAAH,qB,mUCjFHC,GAAkBC,EAAAA,EAAAA,eAAc,CAAC,GAC/BC,EAAuBF,EAAvBE,SAAuBF,EAAbG,SAGlB,SAASC,EAAT,GAAqD,IAAzBC,EAAwB,EAAxBA,SAAwB,IAAdC,MAAAA,OAAc,MAAN,GAAM,EAC5CC,GAASC,EAAAA,EAAAA,KACf,GAAkCxC,EAAAA,EAAAA,UAAS,IAA3C,eAAOyC,EAAP,KAAkBC,EAAlB,KACA,GAA4B1C,EAAAA,EAAAA,UAAS,CAAE2C,MAAO,EAAGC,SAAU,GAAIC,UAAW,EAAGC,KAAM,IAAnF,eAAOC,EAAP,KAAeC,EAAf,KACA,GAA8BhD,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAAgCC,EAAAA,EAAAA,SAAgB,sBAAD,OAAuBb,GAAS,OAA/E,eAAOc,EAAP,KAAiBC,EAAjB,KAEMC,EAAS,yCAAG,mJAAqC,CAAC,EAAtC,IAASR,KAAAA,OAAT,MAAgB,EAAhB,MAAmBS,OAAAA,OAAnB,UACZN,EADY,wDAIXM,GACHL,GAAW,GALG,kBASIX,EAAOiB,aAAa,CACpCC,MAAO,CAAEV,OAAQ,CAAED,KAAAA,GAAQM,SAAuB,QAAbA,EAAqB,GAAKA,EAAUd,MAAAA,KAV7D,OASRoB,EATQ,OAYdhB,EAAagB,EAAIC,MACjBX,EAAUU,EAAIX,QACdG,GAAW,GAdG,kDAgBdU,EAAAA,GAAAA,MAAY,KAAIC,SAChBX,GAAW,GAjBG,0DAAH,sDAqBfY,EAAAA,EAAAA,YAAU,WACRR,EAAU,CAAER,KAAM,EAAGS,QAAQ,GAC9B,GAAE,KAEHO,EAAAA,EAAAA,YAAU,WACRR,EAAU,CAAER,KAAM,EAAGS,QAAQ,GAC9B,GAAE,CAACH,IAEJ,IAAMW,EAAQ,CACZd,QAAAA,EACAe,MAAOV,EACPW,OAAQ,CAAEb,SAAAA,EAAUd,MAAAA,GACpB4B,WAAY,CACV,CAAEH,MAAO,MAAOI,MAAO,MAAOC,YAAa,IAC3C,CAAEL,MAAO,WAAYI,MAAO,sBAAuBC,YAAa,IAChE,CAAEL,MAAO,SAAUI,MAAO,oBAAqBC,YAAa,IAC5D,CAAEL,MAAO,OAAQI,MAAO,kBAAmBC,YAAa,IACxD,CAAEL,MAAO,WAAYI,MAAO,WAAYC,YAAa,IACrD,CAAEL,MAAO,eAAgBI,MAAO,yBAA0BC,YAAa,IACvE,CAAEL,MAAO,eAAgBI,MAAO,yBAA0BC,YAAa,IACvE,CAAEL,MAAO,UAAWI,MAAO,UAAWC,YAAa,KAErDf,YAAAA,EACAgB,KAAM5B,EACNM,OAAAA,GAGF,OAAO,SAACb,EAAD,CAAU6B,MAAO,CAAEtB,UAAWsB,GAA9B,SAAwC1B,GAChD,C,yDC7Dc,SAASiC,EAAT,GAAkC,IAAVP,EAAS,EAATA,MACrC,GAAsBQ,EAAAA,EAAAA,oBAAdC,EAAR,EAAQA,EAAGC,EAAX,EAAWA,OACX,IAAKV,EACH,MAAO,IAGT,IAAMW,EAAe,CACnBD,OAAmB,OAAXA,EAAkB,QAAU,QACpCE,SAAS,GAGLC,EAAU,IAAIC,KAAKd,GAAOe,UAC1BC,EAAMF,KAAKE,MAEjB,GAAIH,EAAUG,EAAK,CACjB,IAAMC,EAAOC,IAASL,EAAUG,EAAKL,GAErC,OACE,SAACQ,EAAA,EAAD,CAASC,OAAOC,EAAAA,EAAAA,IAAiBrB,GAAQsB,UAAU,UAAUC,gBAAiB,EAA9E,UACE,0BAAOd,EAAE,mBAAoB,CAAEQ,KAAAA,OAGpC,CAED,IAAMA,EAAOC,IAASF,EAAMH,EAASF,GACrC,OACE,SAACQ,EAAA,EAAD,CAASC,OAAOC,EAAAA,EAAAA,IAAiBrB,GAAQsB,UAAU,UAAUC,gBAAiB,EAA9E,UACE,0BAAOd,EAAE,iBAAkB,CAAEQ,KAAAA,OAGlC,CAMDV,EAAaxC,aAAe,CAC1BiC,MAAO,ICrBT,IAAMwB,EAAc,SAACC,EAAKC,GACxB,OAAID,EAAIlD,QAAUmD,EAAKC,IACf,qBAAN,OAA4BF,EAAIG,MAAMD,KAGlC,cAAN,OAAqBF,EAAIlD,MAAzB,wBAA8CkD,EAAIG,MAAMD,IACzD,EAED,SAASE,EAAT,GAA4B,IAAD,IAAPJ,EAAO,EAAPA,IACVC,GAASI,EAAAA,EAAAA,MAATJ,KACR,OACE,UAACK,EAAA,EAAD,CAAKC,UAAU,YAAY,UAAQ,YAAnC,WACE,gBAAKA,UAAU,aAAf,UACE,SAAC,UAAD,CAAWL,IAAKF,EAAIG,MAAMD,IAAK9E,KAAM,GAAIoF,MAAM,cAEjD,iBAAKD,UAAU,WAAf,WACE,UAACE,EAAA,EAAD,CAAYF,UAAU,aAAaG,MAAM,gBAAgBC,UAAU,IAAIC,cAAY,EAAnF,WACE,UAAC,EAAAC,KAAD,CAAMC,GAAIf,EAAYC,EAAKC,GAAOc,OAAO,SAAzC,UACGf,EAAIG,MAAMa,SACVhB,EAAIG,MAAMc,KAAV,WAAqBjB,EAAIG,MAAMc,KAA/B,KAAyC,MACpC,IAJV,KAKKjB,EAAIvE,WAET,SAACgF,EAAA,EAAD,CAAYF,UAAU,cAAcG,MAAM,cAAcC,UAAU,MAAM,kBAAgB,QAAQC,cAAY,EAA5G,UACE,SAAC,IAAD,CAAiBM,OAAQlB,EAAImB,QAASC,WAAW,cAEnD,UAACd,EAAA,EAAD,CAAKC,UAAU,WAAWc,QAAQ,QAAlC,YACKrB,EAAIsB,KACL,SAACb,EAAA,EAAD,CAAYE,UAAU,OAAOD,MAAM,gBAAnC,uBACUV,EAAIsB,QAGd,UAACtB,EAAIuB,IAAIC,UAAT,QAAC,EAAYC,QACb,UAAChB,EAAA,EAAD,CAAYE,UAAU,OAAOD,MAAM,gBAAnC,UACGV,EAAIuB,IAAIC,GAAGC,KADd,IACqBzB,EAAIuB,IAAIC,GAAGE,QADhC,SAIA,UAAC1B,EAAIuB,IAAII,eAAT,QAAC,EAAiBF,QAClB,UAAChB,EAAA,EAAD,CAAYE,UAAU,OAAOD,MAAM,gBAAnC,UACGV,EAAIuB,IAAII,QAAQF,KADnB,IAC0BzB,EAAIuB,IAAII,QAAQD,QAD1C,QAIF,SAACjB,EAAA,EAAD,CAAYE,UAAU,OAAOD,MAAM,gBAAnC,UACE,SAAC5B,EAAD,CAAcP,MAAOyB,EAAI4B,sBAMpC,CAED,SAASC,IACP,IAAQ7C,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GFLsB8C,EAAAA,EAAAA,YAAWtF,GAAzBS,UEKA4B,EAAR,EAAQA,KAAMpB,EAAd,EAAcA,QAASF,EAAvB,EAAuBA,OAAQkB,EAA/B,EAA+BA,OAAQC,EAAvC,EAAuCA,WAAYb,EAAnD,EAAmDA,YAAaW,EAAhE,EAAgEA,MAEhE,OAAIf,GAEA,gBAAKvB,MAAO,CAAE6F,UAAW,SAAUC,UAAW,QAA9C,UACE,SAACC,EAAA,QAAD,OAMJ,UAAChH,EAAD,CAAK,UAAQ,aAAb,WACE,SAACqF,EAAA,EAAD,CAAKC,UAAU,eAAf,UACE,UAAC2B,EAAA,EAAD,CAAahG,MAAO,CAAEiG,MAAO,SAAWd,QAAQ,WAAhD,WACE,SAACe,EAAA,EAAD,UAAapD,EAAE,oBACf,SAACqD,EAAA,EAAD,CACE,UAAQ,6BACR9D,MAAOE,EAAOb,SACd0E,SAAU,SAAAxH,GAAC,OAAI+C,EAAY/C,EAAEiG,OAAOxC,MAAzB,EACXgE,WAAS,EACT5D,MAAOK,EAAE,mBACTlD,SAAU2B,EANZ,SAOGiB,EAAWlD,KAAI,SAAAgH,GAAC,OACf,SAACC,EAAA,EAAD,CAAwBlE,MAAOiE,EAAEjE,MAAO,uCAA+BiE,EAAEjE,OAAzE,UACE,SAAC+B,EAAA,EAAD,WACE,0BAAOkC,EAAE7D,WAFE6D,EAAE7D,MADF,WAUN,IAAhBE,EAAK6D,SAAgB,SAACC,EAAA,QAAD,UAAQ3D,EAAE,kBAC/BH,EAAK6D,OAAS,GAAK7D,EAAKrD,KAAI,SAAAgH,GAAC,OAAI,SAACpC,EAAD,CAAqBJ,IAAKwC,GAAXA,EAAEnH,GAArB,IAC7BkC,EAAOF,UAAY,IAClB,SAACuF,EAAA,EAAD,CACEtF,KAAMC,EAAOD,KACbuF,MAAOtF,EAAOF,UACdiF,SAAU,SAACxH,EAAGwC,GAAJ,OAAakB,EAAM,CAAElB,KAAAA,GAArB,EACVwF,iBAAe,EACfC,gBAAc,MAKvB,CAEc,SAASC,EAAT,GAAsC,IAAVlG,EAAS,EAATA,MACzC,OACE,SAACF,EAAD,CAAkBE,MAAOA,EAAzB,UACE,SAAC+E,EAAD,KAGL,CAED,IAAM5G,EAAMsB,EAAAA,QAAAA,IAAH,i3BAiBQ,qBAAG0G,MAAkBC,QAAQ7G,QAAQ8G,IAArC,G,0JC9IF,SAASC,EAAT,GAA6C,IAAtBvG,EAAqB,EAArBA,SAAawG,GAAQ,YACjDrE,GAAM8C,EAAAA,EAAAA,YAAWwB,EAAAA,eAAjBtE,EACR,OACE,SAAC,MAAD,gBAAMuE,IAAKvE,EAAE,kBAAmBwE,UAAWxE,EAAE,qBAAyBqE,GAAtE,aACGxG,IAGN,C,0RCFD,I,EAAA,EAPA,WACE,IAAMoG,GAAQQ,EAAAA,EAAAA,KAGd,MAAO,CAAEtH,UAFmBuH,EAAAA,EAAAA,GAAcT,EAAMU,YAAYC,KAAK,OAC1B,IAAMX,EAAMU,YAAYE,OAAOC,GAEvE,E,WCYc,SAASC,EAAT,GAUX,IATFpE,EASC,EATDA,MACAf,EAQC,EARDA,YACAoF,EAOC,EAPDA,WACAC,EAMC,EANDA,OACAC,EAKC,EALDA,QACAxD,EAIC,EAJDA,MACQyD,EAGP,EAHDC,OACAC,EAEC,EAFDA,SACAC,EACC,EADDA,UAEA,GAA4B9J,EAAAA,EAAAA,UAAS2J,GAArC,eAAOC,EAAP,KAAeG,EAAf,KACA,GAAwB/J,EAAAA,EAAAA,WAAS,GAAjC,eAAOG,EAAP,KAAa6J,EAAb,KACA,GAA8BhK,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAA0BlD,EAAAA,EAAAA,UAAS,IAAnC,eAAOiK,EAAP,KAAcC,EAAd,KACWC,GAAiB5F,EAAAA,EAAAA,oBAApBC,EACFiE,GAAQQ,EAAAA,EAAAA,KAERmB,EAAU,yCAAG,WAAMC,GAAN,yEACC,oBAAPA,EADM,wBAEfnH,GAAW,GAFI,kBAIPmH,EAAGT,GAJI,OAKbI,GAAQ,GALK,gDAObE,GAASI,EAAAA,EAAAA,GAAY,EAAD,KACpBC,QAAQN,MAAR,MARa,yBAUb/G,GAAW,GAVE,6CAaf8G,GAAQ,GAbO,+DAAH,sDAiBVxF,EAAqB,oBAAVW,EAAuBA,IAAUA,EAC5CqF,EAA2B,oBAAhBpG,EAA6BA,EAAYwF,EAAQG,EAAWG,GAAY9F,EAEnFqG,GAAsBvB,EAAAA,EAAAA,GAAcT,EAAMU,YAAYC,KAAK,OAKzDzH,EAAa+I,IAAb/I,SAER,OACE,UAACgJ,EAAD,CAAcjK,QANI,SAAAJ,GAClBA,EAAEC,iBACH,EAIqCqK,WAAYH,EAAqBtK,KAAMA,EAAMuB,MAAO,CAAEC,SAAAA,GAA1F,WACE,SAACkJ,EAAA,EAAD,UAAcrG,KACd,UAACsG,EAAA,EAAD,CAAepJ,MAAO,CAAEC,SAAAA,GAAxB,WACE,SAACoJ,EAAA,EAAD,CAAmB5E,UAAU,MAA7B,SAAoCqE,MACjCP,IACD,SAACe,EAAA,EAAD,CAAOC,SAAS,QAAQvJ,MAAO,CAAEiG,MAAO,OAAQH,UAAW,GAA3D,SACGyC,QAIP,UAACiB,EAAA,EAAD,CAAenF,UAAU,iBAAiBrE,MAAO,CAAEyJ,QAAS,iBAA5D,UACG3B,IACC,SAAC4B,EAAA,QAAD,CACE1K,QAAS,SAAAJ,GACPA,EAAEC,kBACF6J,EAAWP,EACZ,EACD3D,MAAM,UACN,UAAQ,wBACRtF,KAAK,QAPP,SAQG6I,GAAUU,EAAa,oBAG5B,UAACiB,EAAA,QAAD,CACE1K,QAAS,SAAAJ,GACPA,EAAEC,kBACF6J,EAAWN,EACZ,EACD5D,MAAOA,EACPtF,KAAK,QAELU,SAAUsI,EAAOyB,kBAAoBpI,EACrC4D,QAAQ,YACR,UAAQ,wBACRyE,WAAS,EAXX,UAYGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MAC/B8I,UAKV,CAcDH,EAAczH,aAAe,CAC3B+H,SAAU,WAAQ,EAClBL,YAAY,EACZC,OAAQ,GACRC,QAAS,UACTxD,MAAO,QACP0D,OAAQ,CAAC,GAGX,IAAMe,GAAe5I,EAAAA,EAAAA,SAAOwJ,EAAAA,EAAPxJ,CAAH,yL,iKCpHH,SAASyJ,EAAT,GAUX,IATFrG,EASC,EATDA,MACAf,EAQC,EARDA,YACAqH,EAOC,EAPDA,mBACAhC,EAMC,EANDA,OACAC,EAKC,EALDA,QACQC,EAIP,EAJDC,OACAC,EAGC,EAHDA,SACAC,EAEC,EAFDA,UACA4B,EACC,EADDA,QAEQlH,GAAMD,EAAAA,EAAAA,oBAANC,EAEFmH,EAAiB,CACrBxG,MAAO,kBACL,2BACGA,EADH,YAEQuG,EAFR,OADK,EAMPtH,YAAa,SAACwF,EAAQG,GAMpB,OACE,4BACE,SAAC,IAAD,CAAOkB,SAAS,UAAUvJ,MAAO,CAAEiG,MAAO,QAA1C,SACGnD,EAAE,oBAEL,gBAAK9C,MAAO,CAAE8F,UAAW,GAAIoE,aAAc,IAAMC,wBAAyB,CAAEC,OAAQ1H,MACpF,iBAAK1C,MAAO,CAAEkK,aAAc,IAA5B,UACGpH,EAAE,gBADL,UACsB,SAAC,IAAD,CAAa,UAAQ,aAArB,SAAmCkH,QAEzD,SAAC,IAAD,CAAYvF,UAAU,MAAtB,UACE,SAAC,IAAD,CACEhC,MAAOsH,EACPM,aAAa,MACb,UAAQ,uBACRlF,QAAQ,WACRkB,WAAS,EACTuD,WAAS,EACTvH,MAAO6F,EAAOoC,SACdlE,SAAU,SAAAxH,GAvBD,IAAAyD,KAwBE,kBAAK6F,GAAN,IAAcoC,SAAU1L,EAAEiG,OAAOxC,MAAOsH,iBAAkBK,IAAYpL,EAAEiG,OAAOxC,QAtB/FgG,GAAU,kBAAKhG,GAAN,IAAasH,iBAAkBtH,EAAMsH,mBAuBvC,QAKV,EACD3B,QAAAA,EACAD,OAAAA,EACAK,UAAAA,EACAD,SAAAA,EACAD,QAAO,QACLoC,SAAU,GACVX,kBAAkB,GACf1B,IAIP,OACE,SAAC,IAAD,CACExE,MAAOwG,EAAexG,MACtBf,YAAauH,EAAevH,YAC5BsF,QAASiC,EAAejC,QACxBD,OAAQkC,EAAelC,OACvBG,OAAQ+B,EAAe/B,OACvBE,UAAW6B,EAAe7B,UAC1BD,SAAU8B,EAAe9B,UAG9B,CAcD2B,EAAc1J,aAAe,CAC3B+H,SAAU,WAAQ,EAClBJ,OAAQ,GACRC,QAAS,UACTE,OAAQ,CAAC,E,uKCrGI,SAASqC,EAAYlM,GAClC,IAAQmM,EAAgCnM,EAAhCmM,SAAUC,EAAsBpM,EAAtBoM,SAAatD,GAA/B,OAAwC9I,EAAxC,GACA,OACE,UAACqM,GAAD,kBAASvD,GAAT,cACGqD,EAAS/G,OAAS+G,EAASjF,KAAM,MAC/BkF,IAAY,SAAC,UAAD,CAAW,UAAQ,kBAAkBpG,UAAU,SAASrF,QAASyL,OAGrF,CAODF,EAAYnK,aAAe,CACzBqK,SAAU,MAGZ,IAAMC,EAAMrK,EAAAA,QAAAA,KAAH,8SAGO,SAAAhC,GAAK,OAAIA,EAAM0I,MAAMC,QAAQ7G,QAAQ8G,IAAhC,G,ohBCLN,SAAS0D,EAAT,GAAmF,IAA3DC,EAA0D,EAA1DA,QAASC,EAAiD,EAAjDA,MAAO1C,EAA0C,EAA1CA,SAAU2C,EAAgC,EAAhCA,UAAWC,EAAqB,EAArBA,QAASC,EAAY,EAAZA,SAC3EC,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAA8B3M,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAA0BlD,EAAAA,EAAAA,UAAS,IAAnC,eAAOiK,EAAP,KAAcC,EAAd,KACQ1F,GAAMD,EAAAA,EAAAA,oBAANC,EAER,GAAoCxE,EAAAA,EAAAA,UAAS,GAA7C,eAAO4M,EAAP,KAAmBC,EAAnB,KAEA,GAAoC7M,EAAAA,EAAAA,UAAS,IAA7C,eAAO8M,EAAP,KAAmBC,EAAnB,KACA,GAAwB/M,EAAAA,EAAAA,UAAS,IAAjC,eAAOyG,EAAP,KAAauG,EAAb,KACA,GAA4BhN,EAAAA,EAAAA,UAAS,IAArC,eAAOiN,EAAP,KAAeC,EAAf,KAEMC,GAAQ,yCAAG,kGACV1G,EADU,uBAEbyD,EAAS1F,EAAE,oCAFE,iCAMT4I,EAAaH,EAAOI,OAE1BnD,EAAS,MACThH,GAAW,GATI,kBAYsByJ,EAAIW,uBAAuB,CAC5D7J,MAAO,CAAE6I,QAAAA,EAAS7F,KAAAA,EAAMwG,OAAQG,KAbrB,gBAYO3H,EAZP,EAYLqH,WAGRC,EAActH,GACdoH,EAAc,GAhBD,kDAkBPU,GAASjD,EAAAA,EAAAA,GAAY,EAAD,IAC1BJ,EAASqD,GACTd,EAAQ,EAAD,IApBM,yBAsBbvJ,GAAW,GAtBE,6EAAH,qDAqGRsK,GA3EQ,CACZ,CACEC,MACE,UAACxH,EAAA,EAAD,CAAYE,UAAU,MAAtB,WACE,UAACuB,EAAA,EAAD,CAAahG,MAAO,CAAEiG,MAAO,QAAUd,QAAQ,WAA/C,WACE,SAACe,EAAA,EAAD,UAAapD,EAAE,sBACf,SAACqD,EAAA,EAAD,CACE,UAAQ,4BACR9D,MAAO0C,EACPqB,SAAU,SAAAxH,GACR4J,EAAS,MACT8C,EAAQ1M,EAAEiG,OAAOxC,MAClB,EACDgE,WAAS,EACT5D,MAAOK,EAAE,mBACTlD,SAAU2B,EACVyK,WAAY,SAAApN,GACI,UAAVA,EAAEmB,MACJnB,EAAEE,iBACF2M,KAEH,EAfH,SAgBGZ,EACEtI,QAAO,SAAAuG,GAAC,MAAe,UAAXA,EAAEvD,IAAN,IACRjG,KAAI,SAAA2M,GAAC,OACJ,SAAC1F,EAAA,EAAD,CAAuBlE,MAAO4J,EAAE1G,KAAM,gDAAwC0G,EAAE1G,MAAhF,UACE,0BAAO0G,EAAExI,OAASwI,EAAE1G,QADP0G,EAAE1G,KADb,UAOZ,gBAAKvF,MAAO,CAAE8F,UAAW,GAAIoE,aAAc,OAC3C,SAACgC,EAAA,EAAD,CACEzJ,MAAOK,EAAE,iBACTuH,aAAa,MACblF,QAAQ,WACRkB,WAAS,EACTrG,MAAO,CAAEkK,aAAc,GACvB7H,MAAOkJ,EACPnF,SAAU,SAAAxH,GACR4J,EAAS,MACTgD,EAAU5M,EAAEiG,OAAOxC,MACpB,EACDzC,SAAU2B,EACV,UAAQ,gCAEV,gBAAKvB,MAAO,CAAE8F,UAAW,GAAIoE,aAAc,SAG/CnC,OAAQjF,EAAE,iBACVkF,QAASlF,EAAE,6CACXqF,SAAAA,EACAC,UAAWqD,IAEb,CAEEM,KAAM,WACJ,IAAMI,GAAOC,EAAAA,EAAAA,IAAc,CACzBC,SAAUjB,EAAWiB,SACrBrB,SAAAA,IAEF,OACE,4BACE,SAACsB,EAAD,UACGxJ,EAAE,4CAA6C,CAAEyJ,YAAY7I,EAAAA,EAAAA,IAAiB0H,EAAWmB,iBAE5F,gBAAKvM,MAAO,CAAE8F,UAAW,WACzB,SAAC,IAAD,UAAcqG,MAGnB,EACDnE,QAASlF,EAAE,kBACXsF,UAAW0C,IAGII,GAEnB,OACE,UAACrB,EAAA,QAAD,CACEpG,MAAOX,EAAE,iBACTuD,WAAS,EACT5H,MAAI,EACJ+N,iBAAiB,EACjBpO,SACE,gCACG0N,GAAK/D,SACJ,SAAC2B,EAAA,QAAD,CAAQ1K,QAAS8M,GAAK3D,SAAU3D,MAAM,UAAUtF,KAAK,QAArD,SACG4M,GAAK/D,UAGV,UAAC2B,EAAA,QAAD,CACE1K,QAAS8M,GAAK1D,UACd5D,MAAM,UACNtF,KAAK,QACLU,SAAU2B,IAAYwD,EACtBI,QAAQ,YACRyE,WAAS,EANX,UAOGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MAC/B4M,GAAK9D,cApBd,WAwBE,SAACqB,EAAA,EAAD,CAAmB5E,UAAU,MAA7B,SAAyD,oBAAdqH,GAAKC,KAAsBD,GAAKC,OAASD,GAAKC,SACtFxD,IACD,SAACe,EAAA,EAAD,CAAOmD,KAAK,QAAQtH,QAAQ,OAA5B,SACGoD,MAKV,CAWDoC,EAAavK,aAAe,CAC1B2K,QAAS,WAAQ,EACjBF,MAAO,GACPG,SAAU,IAGZ,I,EAAMsB,EAAOjM,EAAAA,QAAAA,IAAH,kE,mDCpKK,SAASqM,GAAT,GAA8E,IAApD9B,EAAmD,EAAnDA,QAASzC,EAA0C,EAA1CA,SAAU2C,EAAgC,EAAhCA,UAAWC,EAAqB,EAArBA,QAASC,EAAY,EAAZA,SAC9E,GAAsB7G,EAAAA,EAAAA,MAAd8G,EAAR,EAAQA,IAAKlH,EAAb,EAAaA,KACA4I,GAAe/G,EAAAA,EAAAA,YAAWgH,EAAAA,IAA/B3B,IACR,GAA8B3M,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACQuB,GAAWF,EAAAA,EAAAA,oBAAXE,OACR,GAA0BzE,EAAAA,EAAAA,UAAS,IAAnC,eAAOiK,EAAP,KAAcC,EAAd,KACQ1F,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GAAsDxE,EAAAA,EAAAA,WAAS,GAA/D,eAAOuO,EAAP,KAA4BC,EAA5B,KACA,GAAoCxO,EAAAA,EAAAA,UAAS,GAA7C,eAAO4M,EAAP,KAAmBC,EAAnB,KACA,GAAoC7M,EAAAA,EAAAA,UAAS,IAA7C,eAAO8M,EAAP,KAAmBC,EAAnB,KACA,GAA4B/M,EAAAA,EAAAA,UAAS,IAArC,eAAOiN,GAAP,KAAeC,GAAf,KAEMuB,KAAoBC,IAAIjJ,EAAM,gBAE9BkJ,IAAkBC,EAAAA,EAAAA,UAAQ,uBAAC,+FAC3BH,GAD2B,gCAEL9B,EAAIkC,qBAFC,uBAErBC,EAFqB,EAErBA,MAFqB,kBAGtBA,GAHsB,gCAMxB,CAAEC,WAAW,IANW,4CASjC,GAAIJ,GAAgB1L,QAClB,OACE,SAACsI,EAAA,QAAD,CAAQpG,MAAOX,EAAE,wCAAyCuD,WAAS,EAAC5H,MAAI,EAACE,QAASwJ,EAAlF,UACE,gBAAKnI,MAAO,CAAEsN,QAAS,OAAQC,eAAgB,UAA/C,UACE,SAACxH,EAAA,QAAD,QAMR,GAAIkH,GAAgB1E,MAClB,OACE,SAACsB,EAAA,QAAD,CAAQpG,MAAOX,EAAE,wCAAyCuD,WAAS,EAAC5H,MAAI,EAACE,QAASwJ,EAAlF,UACE,SAACmB,EAAA,EAAD,CAAOmD,KAAK,QAAQtH,QAAQ,OAA5B,UACGyD,EAAAA,EAAAA,GAAYqE,GAAgB1E,WAMrC,IAAMkD,GAAQ,yCAAG,oGACfjD,EAAS,MACThH,GAAW,GAFI,kBAK+ByJ,EAAIuC,yBAAyB,CACvEzL,MAAO,CAAE6I,QAAAA,EAAS7F,KAAM,QAASwG,OAAQA,GAAOI,UANrC,gBAKO8B,EALP,EAKLrC,WAGRC,EAAcoC,GACdtC,EAAcuC,GAAMlH,OAAS,GAThB,kDAWPqF,GAASjD,EAAAA,EAAAA,GAAY,EAAD,IAC1BJ,EAASqD,GACTd,EAAQ,EAAD,IAbM,yBAebvJ,GAAW,GAfE,6EAAH,qDAwBRmM,GAA0B,WAC9Bb,GAAuB,GACvB3B,EAAc,EACf,EAEKuC,GAAQ,CACZ,CACE3B,MACE,UAACxH,EAAA,EAAD,CAAYE,UAAU,MAAtB,WACE,UAAC6E,EAAA,EAAD,CAAOmD,KAAK,UAAZ,WACE,SAAClI,EAAA,EAAD,UAAazB,EAAE,mDACf,SAACyB,EAAA,EAAD,UAAazB,EAAE,iEAEjB,SAACwG,EAAA,EAAD,CAAOmD,KAAK,UAAZ,UACE,SAAClI,EAAA,EAAD,UAAazB,EAAE,mDAEjB,gBAAK9C,MAAO,CAAE8F,UAAW,GAAIoE,aAAc,OAC3C,SAACgC,EAAA,EAAD,CACEzJ,MAAOK,EAAE,iBACTuH,aAAa,MACblF,QAAQ,WACRkB,WAAS,EACTrG,MAAO,CAAEkK,aAAc,GACvB7H,MAAOkJ,GACPnF,SAAU,SAAAxH,GACR4J,EAAS,MACTgD,GAAU5M,EAAEiG,OAAOxC,MACpB,EACDzC,SAAU2B,EACV,UAAQ,gCAEV,gBAAKvB,MAAO,CAAE8F,UAAW,GAAIoE,aAAc,SAG/CnC,OAAQjF,EAAE,iBACVkF,QAASlF,EAAE,mDACXqF,SAAAA,EACAC,UAAW2E,KAAoBC,IAAIC,GAAiB,mBA1C9B,WACxBH,GAAuB,GACvB3B,EAAc,EACf,EAuCgGM,IAE/F,CACEM,KAAM,WACJ,OACE,SAAC6B,EAAA,QAAD,CACErO,OAAO,wBACPd,KAAMoO,EACN9J,OAAQA,EACR8K,QAASlB,EAAWK,IACpBrO,QAASgP,GACT7C,UAAWW,GACXqC,aAAc,IACdC,cAAcC,EAAAA,EAAAA,IAAgBjK,GAC9BkK,YAAa,CAAEC,UAAWnK,EAAKC,KAC/BmK,SAAU,CACR1K,MAAOX,EAAE,0CACTsL,KAAMtL,EAAE,yCACRkF,QAASlF,EAAE,4CACXuL,QAASvL,EAAE,6CAEbwL,OAAK,GAGV,GAEH,CACEvC,KAAM,WACJ,IAAMI,GAAOC,EAAAA,EAAAA,IAAc,CACzBC,SAAUjB,EAAWiB,SACrBrB,SAAAA,IAEF,OACE,4BACE,SAAC,GAAD,UACGlI,EAAE,kDAAmD,CACpDyJ,YAAY7I,EAAAA,EAAAA,IAAiB0H,EAAWmB,iBAG5C,gBAAKvM,MAAO,CAAE8F,UAAW,WACzB,SAAC,IAAD,UAAcqG,MAGnB,EACDnE,QAASlF,EAAE,kBACXsF,UAAW0C,IAGTgB,GAAO4B,GAAMxC,GAEnB,OACE,UAACrB,EAAA,QAAD,CACEpG,MAAOX,EAAE,wCACTuD,WAAS,EACT5H,MAAI,EACJ+N,iBAAiB,EACjBpO,SACE,gCACG0N,GAAK/D,SACJ,SAAC2B,EAAA,QAAD,CAAQ1K,QAAS8M,GAAK3D,SAAU3D,MAAM,UAAUtF,KAAK,QAArD,SACG4M,GAAK/D,UAGV,UAAC2B,EAAA,QAAD,CACE1K,QAAS8M,GAAK1D,UACd5D,MAAM,UACNtF,KAAK,QACLU,SAAU2B,EACV4D,QAAQ,YACRyE,WAAS,EANX,UAOGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MAC/B4M,GAAK9D,cApBd,WAwBE,SAACqB,EAAA,EAAD,CAAmB5E,UAAU,MAA7B,SAAyD,oBAAdqH,GAAKC,KAAsBD,GAAKC,OAASD,GAAKC,SACtFxD,IACD,SAACe,EAAA,EAAD,CAAOmD,KAAK,QAAQtH,QAAQ,OAA5B,SACGoD,MAKV,CAUDmE,GAAetM,aAAe,CAC5B2K,QAAS,WAAQ,EACjBC,SAAU,IAGZ,I,GAAMsB,GAAOjM,EAAAA,QAAAA,IAAH,kE,+FC/MK,SAASkO,GAAT,GAA+D,IAAlCC,EAAiC,EAAjCA,UAAW5D,EAAsB,EAAtBA,QAAS6D,EAAa,EAAbA,UACjD5N,GAAWsD,EAAAA,EAAAA,MAAhB8G,IACAnI,GAAM8C,EAAAA,EAAAA,YAAWwB,EAAAA,eAAjBtE,EACR,GAAoCxE,EAAAA,EAAAA,UAAS,MAA7C,eAAOoQ,EAAP,KAAmBC,EAAnB,KACA,GAA8BrQ,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACQoN,GAAoBC,EAAAA,GAAAA,eAApBD,gBACA5D,GAAa8D,EAAAA,EAAAA,MAAb9D,SAEF+D,EAAc,yCAAG,6FAAS5P,EAAT,EAASA,IAC1BoC,EADiB,wDAIrBC,GAAW,GAJU,kBAMbX,EAAOmO,uBAAuB,CAAEjN,MAAO,CAAE6I,QAAAA,EAASqE,UAAW9P,KANhD,OAOnBsP,IAPmB,kDASnBG,EAAgB,KAAMzM,QAAS,CAAE+M,iBAAkB,IAAM/J,QAAS,UAT/C,yBAWnB3D,GAAW,GACXmN,EAAc,MAZK,6EAAH,sDAgBdxG,EAAW,WACf3G,GAAW,GACXmN,EAAc,KACf,EAEKQ,EAAU,SAAAC,GAAM,OAAKpE,GAAWqE,EAAAA,EAAAA,GAAqB,CAAElQ,GAAIiQ,EAAOjQ,GAAI6L,SAAAA,IAAc,EAApE,EAItB,SAASsE,EAAT,GAAgC,IAANxG,EAAK,EAAXnG,KAClB,OACE,iBAAK0B,UAAU,WAAf,WACE,UAACD,EAAA,EAAD,CAAKkJ,QAAQ,OAAOC,eAAe,gBAAnC,WACE,SAAC,IAAD,CAAYgC,WAAW,cAAvB,SACG,SAAAC,GAAG,OACFA,GACE,SAAC,KAAD,CACEhF,SAAU,CAAE/G,MAAOqF,EAAErF,MAAO8B,KAAMuD,EAAEvD,MACpCkF,SAAU,kBACRkE,EAAc,CACZlL,MAAOX,EAAE,uCACTJ,YAAaI,EAAE,4CAA6C,CAAEqJ,KAAMgD,EAAQrG,KAC5Ed,QAASlF,EAAE,qBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,WACT2G,EAAejG,EAChB,EACDX,SAAAA,GATM,KAcZ,SAAC,KAAD,CAAaqC,SAAU,CAAE/G,MAAOqF,EAAErF,MAAO8B,KAAMuD,EAAEvD,OAlBjD,KAsBN,iBAAKvF,MAAO,CAAEwE,MAAO,QAArB,UACG1B,EAAE,kBADL,SAGGY,EAAAA,EAAAA,IAAiBoF,EAAEyD,mBAGxB,SAACnI,EAAA,EAAD,CAAKqL,GAAI,EAAT,UACE,SAAC,IAAD,UAAcN,EAAQrG,SAI7B,CAED,OACE,UAAC/J,GAAD,WACGyP,EAAUlP,KAAI,SAAAgH,GAAC,OACd,SAACgJ,EAAD,CAAU3M,KAAM2D,GADF,IAGfoI,IACC,SAAC,KAAD,CACEjL,MAAOiL,EAAWjL,MAClBf,YAAagM,EAAWhM,YACxBsF,QAAS0G,EAAW1G,QACpBD,OAAQ2G,EAAW3G,OACnBG,OAAQwG,EAAWxG,OACnBE,UAAWsG,EAAWtG,UACtBD,SAAUuG,EAAWvG,aAK9B,CAED,IAAMpJ,GAAMsB,EAAAA,QAAAA,IAAH,4VAwBTkO,GAAkBnO,aAAe,CAC/BoO,UAAW,GACXC,UAAW,WAAQ,G,iHCtHN,SAASiB,GAAT,GAAuG,IAA9E9E,EAA6E,EAA7EA,QAAS+E,EAAoE,EAApEA,SAAU9E,EAA0D,EAA1DA,MAAO1C,EAAmD,EAAnDA,SAAU2C,EAAyC,EAAzCA,UAAWC,EAA8B,EAA9BA,QAAS6E,EAAqB,EAArBA,kBACtF3E,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAA8B3M,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAA0BlD,EAAAA,EAAAA,UAAS,IAAnC,eAAOiK,EAAP,KAAcC,EAAd,KACQ1F,GAAMD,EAAAA,EAAAA,oBAANC,EAER,GAAwBxE,EAAAA,EAAAA,UAAS,IAAjC,eAAOyG,EAAP,KAAauG,EAAb,KAEMG,EAAQ,yCAAG,4FACV1G,EADU,uBAEbyD,EAAS1F,EAAE,oCAFE,iCAMf0F,EAAS,MACThH,GAAW,GAPI,kBAUPyJ,EAAI4E,uBAAuB,CAAE9N,MAAO,CAAE6I,QAAAA,EAASrF,KAAMR,EAAM4K,SAAAA,KAVpD,OAWb7E,IAXa,kDAaPe,GAASjD,EAAAA,EAAAA,GAAY,EAAD,IAC1BJ,EAASqD,GACTd,EAAQ,EAAD,IAfM,yBAiBbvJ,GAAW,GAjBE,6EAAH,qDAqBd,OACE,UAACqI,EAAA,QAAD,CACEpG,MAAOX,EAAE,uBACTuD,WAAS,EACT5H,MAAI,EACJO,QAAS,SAAAJ,GAAC,OAAIA,EAAEC,iBAAN,EACVF,QAASwJ,EACT2H,sBAAoB,EACpBzQ,WAAY,CAAEW,MAAO,CAAE+P,UAAW,SAClC3R,SACE,iCACE,SAACsL,EAAA,QAAD,CAAQ1K,QAASmJ,EAAU3D,MAAM,UAAUtF,KAAK,QAAhD,SACG4D,EAAE,oBAEL,UAAC4G,EAAA,QAAD,CACE1K,QAASyM,EACTjH,MAAM,UACNtF,KAAK,QACLU,SAAU2B,IAAYwD,EACtBI,QAAQ,YACRyE,WAAS,EACT,UAAQ,4BAPV,UAQGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MAC/B4D,EAAE,6CAtBX,WA0BE,SAACuG,EAAA,EAAD,CAAmB5E,UAAU,MAA7B,UACE,SAACF,EAAA,EAAD,CAAYE,UAAU,MAAtB,UACE,UAACuB,EAAA,EAAD,CAAahG,MAAO,CAAEiG,MAAO,QAAUd,QAAQ,WAA/C,WACE,SAACe,EAAA,EAAD,UAAapD,EAAE,sBACf,SAACqD,EAAA,EAAD,CACE,UAAQ,iCACR9D,MAAO0C,EACPqB,SAAU,SAAAxH,GACR4J,EAAS,MACT8C,EAAQ1M,EAAEiG,OAAOxC,MAClB,EACDgE,WAAS,EACT5D,MAAOK,EAAE,mBACTlD,SAAU2B,EACVyK,WAAY,SAAApN,GACI,UAAVA,EAAEmB,MACJnB,EAAEE,iBACF2M,IAEH,EAfH,SAgBGZ,EACEtI,QAAO,SAAAuG,GAAC,OAAI8G,GAAgC,UAAX9G,EAAEvD,IAA3B,IACRjG,KAAI,SAAA2M,GAAC,OACJ,SAAC1F,EAAA,EAAD,CAAuBlE,MAAO4J,EAAE1G,KAAM,iDAAyC0G,EAAE1G,MAAjF,UACE,0BAAO0G,EAAExI,OAASwI,EAAE1G,QADP0G,EAAE1G,KADb,eASbgD,IACD,SAACe,EAAA,EAAD,CAAOmD,KAAK,QAAQtH,QAAQ,OAA5B,SACGoD,MAKV,CClFD,SAASyH,GAAT,GAAmD,IAArBzQ,EAAoB,EAApBA,OAAQiL,EAAY,EAAZA,SAC5B1H,GAAMD,EAAAA,EAAAA,oBAANC,EAEFiC,GADY+J,EAAAA,EAAAA,MAAVjE,MACWoF,MAAK,SAAA3J,GAAC,OAAIA,EAAEf,OAASiF,EAASzF,IAAxB,IACzB,OACE,4BACE,yBACyBjC,EAAX,WAAXvD,EAAwB,wCAA6C,2CAEvEwF,IACC,SAACX,EAAA,EAAD,CAAKqL,GAAI,EAAGS,WAAW,OAAvB,SACGpN,EAAE,yCAGNiC,IAAQ,SAACX,EAAA,EAAD,CAAKqL,GAAI,EAAT,SAAa1K,EAAKrC,gBAGhC,CAOc,SAASyN,GAAT,GAAwC,IAAD,EAAlBC,EAAkB,EAAlBA,KAAM3E,EAAY,EAAZA,SAChC3I,GAAMD,EAAAA,EAAAA,oBAANC,EACAuN,GAAYC,EAAAA,EAAAA,MAAZD,QACR,GASIvB,EAAAA,EAAAA,MARFjE,EADF,EACEA,MACAD,EAFF,EAEEA,QACA2F,EAHF,EAGEA,cACSC,EAJX,EAIEC,QACAC,EALF,EAKEA,uBACAC,EANF,EAMEA,iBACAC,EAPF,EAOEA,cACAC,EARF,EAQEA,SAEM5F,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACA2D,GAAoBC,EAAAA,GAAAA,eAApBD,gBACR,GAA8BtQ,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAA0ClD,EAAAA,EAAAA,UAAS,MAAnD,eAAOwS,EAAP,KAAsBC,EAAtB,KACA,GAA8CzS,EAAAA,EAAAA,WAAS,GAAvD,eAAO0S,EAAP,KAAwBC,EAAxB,KACA,GAA4B3S,EAAAA,EAAAA,UAAS,IAArC,eAAO4S,EAAP,KAAeC,EAAf,KAEMC,GAAapE,IAAIoD,EAAM,cAAgB,IAAI9Q,KAAI,SAAAgH,GAAC,yBAAUA,GAAV,IAAa+K,QAAS/K,EAAEgL,SAAWC,EAAAA,gBAAAA,SAAnC,IAEhDC,EAAoB,yCAAG,WAAMhH,GAAN,gFACvBjJ,EADuB,wDAI3BC,GAAW,GAJgB,SAMnBiQ,EAASjH,EAAS8G,SAAWC,EAAAA,gBAAAA,QAA0B,qBAAuB,qBAN3D,SAOnBtG,EAAIwG,GAAQ,CAAE1P,MAAO,CAAE6I,QAAAA,EAAS8G,QAAStB,EAAKpM,IAAK2N,WAAYnH,EAASrL,MAPrD,OAQzBqR,IARyB,kDAUzB5B,GAAgBhG,EAAAA,EAAAA,GAAY,EAAD,IAAO,CAAEsG,iBAAkB,IAAM/J,QAAS,UAV5C,yBAYzB3D,GAAW,GACXuP,EAAiB,MAbQ,6EAAH,sDA+CpBa,GAAa,SAACC,EAAerH,GACjC,OAAI4F,EAAKpM,MAAQqM,EAAQD,KAAKpM,KAAOqM,EAAQD,KAAKuB,YAActB,EAAQD,KAAKuB,aAAenH,EAASrL,GAC5F,CACL2S,WAAW,EACX3P,QAASW,EAAE,yCAIV+O,EAODjH,IAAYJ,EAASuH,OAAO5S,IAAwB,UAAlBqL,EAASjF,KACtC,CACLuM,WAAW,EACX3P,QAASW,EAAE,+BAIR,CACLgP,WAAW,GAdJ,CACLA,WAAW,EACX3P,QAASW,EAAE,8BAchB,EAEKkP,GAAoBZ,EAAU7O,QAAO,SAAA+D,GAAC,OAAK4K,GAAU5K,EAAE7C,MAAMwO,SAASf,IAAW5K,EAAEf,KAAK0M,SAASf,EAA3D,IAE5C,OACE,UAAC,GAAD,YACE,UAAC,KAAD,YACE,gBAAK7M,UAAU,OAAf,UACE,SAAC,KAAD,CACE6N,YAAapP,EAAE,wBACfT,MAAO6O,EACP9K,SAAU,SAAAxH,GAAC,OAAIuS,EAAUvS,EAAEiG,OAAOxC,MAAvB,OAGf,gBAAKgC,UAAU,QAAf,SACGqM,KAA4BN,EAAK+B,WAChC,SAAC,IAAD,CAAY5C,WAAW,cAAvB,UACE,UAAC7F,EAAA,QAAD,CACEvE,QAAQ,YACRX,MAAM,UACN,UAAQ,iBACRxF,QAAS,kBAAMiS,GAAmB,EAAzB,EAJX,WAKE,SAACmB,EAAA,EAAD,CAASpS,MAAO,CAAEqS,SAAU,GAAInS,YAAa,KAC5C4C,EAAE,kCAOb,UAACsB,EAAA,EAAD,WACG4N,GAAkB1S,KAAI,SAAAgH,GAAC,OACtB,SAAC,IAAD,CAAYiJ,WAAW,cAAvB,SACG,SAAAC,GAAG,OACF,UAACpL,EAAA,EAAD,CAAKC,UAAU,gBAAgBiJ,QAAQ,OAAOC,eAAe,gBAAgB+E,WAAW,SAAS7C,GAAI,EAArG,WACE,UAACrL,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAA/B,WACE,gBAEEnI,wBAAyB,CACvBC,OAAQmI,KAAkB,CACxB9O,MAAO6C,EAAE7C,OAAS6C,EAAEf,KACpBwM,OAAQzL,EAAEyL,QAAUzL,EAAEyL,OAAOxM,KAC7BiN,UAAWlM,EAAEyL,QAAUzL,EAAEyL,OAAO5S,GAChCsT,UAAWrC,EAAKtL,SAChB4N,eAAgBtC,EAAKuC,OACrBtB,QAAS/K,EAAE+K,QACXuB,eAAgBhC,EAChB3K,MAAO,cAIb,iBAAK5B,UAAU,OAAf,WACE,UAACD,EAAA,EAAD,CAAKC,UAAU,QAAQiJ,QAAQ,OAAOgF,WAAW,SAAjD,UACGO,KAAWvM,EAAE7C,QACd,iBAAKY,UAAU,eAAf,YACKkM,GAAiBjK,EAAEyL,OAAO5S,KAAOoR,IAAiB,SAACuC,EAAA,EAAD,IACpDxM,EAAE+K,UAAW,SAAC0B,GAAA,EAAD,YAGfxC,GAAiBjK,EAAEyL,OAAO5S,KAAOoR,IAClC,iBAAKlM,UAAU,MAAf,UACGiC,EAAEyL,OAAO5S,KAAOoR,IAAkBI,EAAiBqC,MAAK,SAAAC,GAAC,OAAIA,EAAET,YAAclM,EAAEyL,OAAO5S,EAA7B,MACxD,SAACqE,EAAA,EAAD,CAASC,MAAOX,EAAE,qCAAlB,UACE,SAACsB,EAAA,EAAD,CACEK,UAAWyO,GAAAA,EACXlT,MAAO,CAAEqS,SAAU,SACnB7N,MAAM,aACN2O,GAAI,QAIV,0BAAOrQ,EAAE,wBAAyB,CAAEyC,KAAMe,EAAEyL,OAAOxM,mBAK3D,SAACnB,EAAA,EAAD,UACGwN,GAAWpC,EAAKlJ,GAAGwL,WAClB,UAACpI,EAAA,QAAD,CACEvE,QAAQ,WACRX,MAAO8B,EAAE+K,QAAU,UAAY,YAC/BrS,QAAS,kBAxIPoU,EAwI2B9M,GAvI1CgL,SAAWC,EAAAA,gBAAAA,QACZR,EAAiB,CACftN,MAAOX,EAAE,8BACTJ,aAAa,SAACsN,GAAD,CAAoBzQ,OAAO,SAASiL,SAAU4I,IAC3DpL,QAASlF,EAAE,iBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,WACToJ,EAAqB4B,EACtB,EACDjL,SAAU,WACR3G,GAAW,GACXuP,EAAiB,KAClB,EACDvM,MAAO,YAETuM,EAAiB,CACftN,MAAOX,EAAE,8BACTJ,aAAa,SAACsN,GAAD,CAAoBzQ,OAAO,SAASiL,SAAU4I,IAC3DpL,QAASlF,EAAE,iBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,WACToJ,EAAqB4B,EACtB,EACDjL,SAAU,WACR3G,GAAW,GACXuP,EAAiB,KAClB,IA3Ba,IAAAqC,CAwIO,EAHX,UAIG9M,EAAE+K,SACD,SAACe,EAAA,EAAD,CAASpS,MAAO,CAAEqS,SAAU,GAAInS,YAAa,MAE7C,SAAC6S,GAAA,EAAD,CAAY/S,MAAO,CAAEqT,OAAQ,GAAInT,YAAa,KAE/CoG,EAAE+K,QAAUvO,EAAE,iBAAmBA,EAAE,qBAGtC,SAACU,EAAA,EAAD,CAASC,MAAOmO,GAAWpC,EAAKlJ,GAAGnE,QAAnC,UACE,SAACmR,GAAA,EAAD,CAAkBtT,MAAO,CAAEwE,MAAO,gBA1DxC,GAFgB,KAoEtBwN,GAAkBxL,SAAU,SAACC,GAAA,QAAD,UAAQ3D,EAAE,qBAGzCkO,IACC,SAACtB,GAAD,CACE9E,QAASA,EACT+E,SAAUS,EAAKpM,IACf6G,MAAOA,EACP1C,SAAU,kBAAM8I,GAAmB,EAAzB,EACVnG,UAAW,WACTW,IACAwF,GAAmB,EACpB,EACDrB,kBAAmBiB,KAAY,UAACA,EAAS0C,gBAAV,OAAC,EAAmBC,SAItD1C,IACC,SAAC,KAAD,CACErN,MAAOqN,EAAcrN,MACrBf,YAAaoO,EAAcpO,YAC3BsF,QAAS8I,EAAc9I,QACvBD,OAAQ+I,EAAc/I,OACtBG,OAAQ4I,EAAc5I,OACtBE,UAAW0I,EAAc1I,UACzBD,SAAU2I,EAAc3I,SACxB3D,MAAOsM,EAActM,UAK9B,CD1JDkL,GAActP,aAAe,CAC3B2K,QAAS,WAAQ,EACjBF,MAAO,GACP+E,mBAAmB,GC3ErBI,GAAmB5P,aAAe,CAAC,EAyOnC+P,GAAU/P,aAAe,CACvBqL,SAAU,WAAQ,GAGpB,IAAM1M,GAAMsB,EAAAA,QAAAA,IAAH,6rBCnRM,SAASoT,GAAT,GAA+E,IAF9EC,EAAahC,EAEgBtB,EAAgD,EAAhDA,KAAMjI,EAA0C,EAA1CA,SAAU2C,EAAgC,EAAhCA,UAAWC,EAAqB,EAArBA,QAASpK,EAAY,EAAZA,SAC/E,GAAgCwD,EAAAA,EAAAA,MAAxB8G,EAAR,EAAQA,IAAW0I,EAAnB,EAAa5P,KACLsM,GAAYC,EAAAA,EAAAA,MAAZD,QACR,GAA6BvB,EAAAA,EAAAA,MAArBlE,EAAR,EAAQA,QAAS6F,EAAjB,EAAiBA,QACT3N,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GAA8BxE,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAAwBlD,EAAAA,EAAAA,WAAS,GAAjC,eAAOsV,EAAP,KAAaC,EAAb,KAIMC,EAAkB,yCAAG,WAAMhL,GAAN,iFACjB9E,EAAkB8E,EAAlB9E,IAAKmO,EAAarJ,EAAbqJ,UACT5Q,EAFqB,wDAKzBC,GAAW,GALc,kBAOjByJ,EAAI6I,mBAAmB,CAC3B/R,MAAO,CACL6I,QAAAA,EACAwF,KAAM,CACJpM,IAAAA,EACAmO,UAAWA,MAZM,OAgBvB0B,GAAQ,GACR/I,IACA2F,IAlBuB,kDAoBvBvO,EAAAA,GAAAA,OAAY0G,EAAAA,EAAAA,GAAY,EAAD,KACvBmC,IArBuB,yBAuBvBvJ,GAAW,GAvBY,6EAAH,sDA2BlBuS,EAAiB,CACrBtQ,MAAO2M,EAAK+B,SAAWrP,EAAE,2BAA6BA,EAAE,0BACxDJ,YAAa0N,EAAK+B,SAAWrP,EAAE,sCAAwCA,EAAE,qCACzEkF,QAASlF,EAAE,kBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,WACT0L,EAAmB1D,EACpB,EACDjI,SAAU,WACR3G,GAAW,GACXqS,GAAQ,GACR1L,GACD,EACD3D,MAAO4L,EAAK+B,SAAW,QAAU,WAG7B3C,EAAMmE,EAASK,YAxDH,SAACL,EAAUjC,GAAX,OAAuBiC,EAASK,WAAaL,EAASK,UAAUhQ,MAAQ0N,CAAxE,CAwDiBuC,CAAYN,EAAUvD,EAAKpM,OAvDhD0P,EAuDgErD,EAAQD,KAvD3DsB,EAuDiEtB,EAAKpM,MAvD1D0P,GAAeA,EAAY1P,MAAQ0N,IAyD1E,OAAKlC,GAKH,gCACuB,oBAAb7O,EAA0BA,EAAS,CAAE6O,IAAAA,EAAK/Q,KArDzC,kBAAMoV,GAAQ,EAAd,IAqDmDlT,EAE3DiT,GACC,SAAC,KAAD,CACEnQ,MAAOsQ,EAAetQ,MACtBf,YAAaqR,EAAerR,YAC5BsF,QAAS+L,EAAe/L,QACxBD,OAAQgM,EAAehM,OACvBG,OAAQ6L,EAAe7L,OACvBE,UAAW2L,EAAe3L,UAC1BD,SAAU4L,EAAe5L,SACzB3D,MAAOuP,EAAevP,QAEtB,QAlBC,IAqBV,CAUDiP,GAAmBrT,aAAe,CAChCgQ,KAAM,CAAC,EACPtF,UAAW,WAAQ,EACnB3C,SAAU,WAAQ,EAClB4C,QAAS,WAAQ,EACjBpK,SAAU,M,oCCtGL,SAASuT,GAAYvB,EAAQ/H,GAClC,IAAMuJ,EAASC,OAAO/O,IAAIgP,WAAa,IACvC,OAAI1B,GAAUA,EAAO2B,WAAWC,EAAAA,wBACvBC,KAAQL,EAAQ,eAAgBvJ,EAAS+H,EAAO8B,QAAQF,EAAAA,uBAAwB,KAGlF5B,CACR,CCkBc,SAAS+B,GAAT,GAAiD,IAA/BhD,EAA8B,EAA9BA,QAASvJ,EAAqB,EAArBA,SAAUwM,EAAW,EAAXA,QAC1C1J,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAAmD6D,EAAAA,EAAAA,MAA3CjE,EAAR,EAAQA,MAAOD,EAAf,EAAeA,QAAS8F,EAAxB,EAAwBA,uBAChB5N,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GAAkCxE,EAAAA,EAAAA,UAAS,MAA3C,eAAOkQ,EAAP,KAAkBoG,EAAlB,KACA,GAAwBtW,EAAAA,EAAAA,UAAS,MAAjC,eAAO8R,EAAP,KAAayE,EAAb,KACQjG,GAAoBC,EAAAA,GAAAA,eAApBD,gBACR,GAAsBtQ,EAAAA,EAAAA,UAASqW,GAAW,QAA1C,eAAOG,EAAP,KAAYC,EAAZ,KAEMC,EAAO,yCAAG,kHAEM/J,EAAIgK,aAAa,CACjCC,QAAS,CAAEnT,MAAO,CAAE6I,QAAAA,EAASwF,KAAM,CAAEpM,IAAK0N,KAC1CyD,qBAAsB,CAAEpT,MAAO,CAAE6I,QAAAA,EAAS+E,SAAU+B,MAJ1C,QAEN1P,EAFM,QAOJkT,QAAQ9E,OACdpO,EAAIkT,QAAQ9E,KAAKuC,OAASuB,GAAYlS,EAAIkT,QAAQ9E,KAAKuC,OAAQ/H,IAGjEiK,EAAQ7S,EAAIkT,QAAQ9E,MAAQ,CAAC,GAC7BwE,EAAa5S,EAAImT,qBAAqBlT,MAAQ,IAZlC,gDAcZ2M,GAAgBhG,EAAAA,EAAAA,GAAY,EAAD,IAAO,CAAEsG,iBAAkB,IAAM/J,QAAS,UAdzD,yDAAH,sDAkBb/C,EAAAA,EAAAA,YAAU,WACJwI,GACFoK,GAEH,GAAE,CAACtD,EAAS9G,KAQbwK,EAAAA,EAAAA,IAAgBC,EAAAA,OAAAA,cANI,SAAA1S,GACdA,EAAKiI,UAAYA,GAAWjI,EAAKyN,MAAQzN,EAAKyN,KAAKpM,MAAQ0N,GAC7DsD,GAEH,GAEiD,CAACtD,EAAS9G,KAE5DxI,EAAAA,EAAAA,YAAU,WACJoM,IAAcA,EAAUhI,QAAkB,cAARsO,GACpCC,EAAO,OAEV,GAAE,CAACvG,IAGJ,IAuCM8G,EAAa,CACjBvR,KAAM,CACJtB,MAAOK,EAAE,oBACTT,MAAO,OACPoC,UA3CS,WAYX,OAXa2L,EACT,CACE,CAAE7K,KAAMzC,EAAE,oBAAqBT,MAAO+N,EAAKtL,UAC3C,CAAES,KAAMzC,EAAE,gBAAiBT,MAAO+N,EAAKmF,OACvC,CAAEhQ,KAAMzC,EAAE,0BAA2BT,MAAO+N,EAAK+B,SAAWrP,EAAE,cAAgBA,EAAE,cAChF,CAAEyC,KAAMzC,EAAE,yBAA0BT,OAAOqB,EAAAA,EAAAA,IAAiB0M,EAAKoF,YACjE,CAAEjQ,KAAMzC,EAAE,oBAAqBT,OAAOqB,EAAAA,EAAAA,IAAiB0M,EAAK1K,YAC5D,CAAEH,KAAMzC,EAAE,iBAAkBT,MAAO+N,EAAK7E,QAAU,OAClDhJ,OAAO7D,SACT,IAEQY,KAAI,SAAAmW,GACd,OAAIA,EAAIlQ,OAASzC,EAAE,eAEf,SAAC4S,GAAA,EAAD,CACEC,eAAe,MAEfC,UAAW,IACXrQ,KAAMkQ,EAAIlQ,KACVsQ,cAAe,kBAAM/S,EAAE,aAAR,EALjB,SAMG2S,EAAIpT,OAJAoT,EAAIlQ,OAUb,SAACmQ,GAAA,EAAD,CACE1V,MAAO,CAAEsS,WAAY,cACrBqD,eAAe,MAEfC,UAAW,IACXrQ,KAAMkQ,EAAIlQ,KALZ,SAMGkQ,EAAIpT,OAHAoT,EAAIlQ,KAMd,GACF,GAQC6L,UAAW,CACT3O,MAAOK,EAAE,mBACTT,MAAO,YACPoC,UAAW,kBACT,SAAC0L,GAAD,CACEC,KAAMA,EACNxF,QAASA,EACTC,MAAOA,EACPY,SAAU,WACRuJ,EAAQpK,GACRmK,EAAO,YACR,EACDtG,UAAW,WACTuG,EAAQpK,EACT,GAXM,GAeb4D,UAAW,CACT/L,MAAOK,EAAE,kCACTT,MAAO,YACPoC,UAAW,kBACT,SAAC8J,GAAD,CAAmBC,UAAWA,GAAa,GAAI5D,QAASA,EAAS6D,UAAW,kBAAMuG,EAAQpK,EAAd,GADnE,IAMTkL,EAAOC,OAAOpO,OAAO2N,GACxBhW,KAAI,kBAAuB,CAAEmD,MAAzB,EAAGA,MAA6BJ,MAAhC,EAAUA,MAAV,IACJE,QAAO,SAAA+D,GACN,MAAgB,cAAZA,EAAEjE,OACGqO,GAA0BlC,KAAeA,EAAUhI,MAI7D,IACGwP,EAAYV,EAAWR,IAAQQ,EAAWvR,KAKhD,OACE,SAAC8F,EAAA,QAAD,CACEpG,MAAOX,EAAE,iBACTnE,QAASwJ,EACT1J,MAAI,EACJY,WAAY,CAAEW,MAAO,CAAEiW,SAAU,IAAKlG,UAAW,SACjD1J,WAAS,EACTjI,QACEgS,IACE,SAAC,IAAD,CAAYb,WAAW,cAAvB,UACE,SAACkE,GAAD,CAAoBrD,KAAMA,EAA1B,SACG,gBAAG3R,EAAH,EAAGA,KAAH,OACC,UAACyX,GAAD,CAAalX,QAASP,EAAtB,UACG2R,EAAK+B,UACJ,SAACgE,GAAA,EAAD,CAAiBnW,MAAO,CAAEqS,SAAU,QAASnS,YAAa,YAE1D,SAACkW,GAAA,EAAD,CAAgBpW,MAAO,CAAEqS,SAAU,QAASnS,YAAa,WAE1DkQ,EAAK+B,SAAWrP,EAAE,2BAA6BA,EAAE,4BAPrD,MAVX,UAwBE,UAAC,GAAD,YACIsN,IACA,SAACiG,GAAD,WACE,SAACtQ,EAAA,QAAD,MAIHqK,IACC,4BAEE,UAAChM,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAASjO,UAAU,OAAlD,WACE,SAAC,KAAD,CACEiS,IAAKlG,EAAKuC,OACV3S,MAAO,CAAEiG,MAAO,GAAIoN,OAAQ,GAAIkD,gBAAiB,cAAerW,YAAa,OAE/E,UAACkE,EAAA,EAAD,YACE,SAACA,EAAA,EAAD,CAAKC,UAAU,OAAf,SAAuB+L,EAAKtL,YAC5B,SAACV,EAAA,EAAD,CAAKC,UAAU,MAAMoL,GAAI,EAAzB,UACE,SAAC,UAAD,UAAaW,EAAKpM,eAMxB,SAACI,EAAA,EAAD,CAAKoS,GAAI,EAAGnS,UAAU,OAAtB,UACE,SAACoS,GAAA,EAAD,CAAMX,KAAMA,EAAMY,QAAS5B,EAAK1O,SAtDxB,SAAAuQ,GAClB5B,EAAO4B,EACR,EAoDkEC,cAAc,YAIvE,gBAAKvS,UAAU,OAAf,UACE,SAAC2R,EAAUvR,UAAX,aAOb,CAQDiQ,GAAOtU,aAAe,CACpBuU,QAAS,QAGX,I,GAAM5V,GAAMsB,EAAAA,QAAAA,IAAH,6RAqBHgW,GAAShW,EAAAA,QAAAA,IAAH,8HAQN6V,GAAc7V,EAAAA,QAAAA,IAAH,qU,oCCvPF,SAASwW,KACtB,IAAahW,GAAWsD,EAAAA,EAAAA,MAAhB8G,IACR,GAAsBrF,EAAAA,EAAAA,YAAWwB,EAAAA,eAAzBtE,EAAR,EAAQA,EAAGC,EAAX,EAAWA,OACX,GAAoD+L,EAAAA,EAAAA,MAA5ClE,EAAR,EAAQA,QAASkM,EAAjB,EAAiBA,YAAarG,EAA9B,EAA8BA,QAASzF,EAAvC,EAAuCA,SACvC,GAAoC1M,EAAAA,EAAAA,UAAS,MAA7C,eAAOoQ,EAAP,KAAmBC,EAAnB,KACA,GAA8BrQ,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KAEMuV,EAAgB,yCAAG,6FAAS1K,EAAT,EAASA,UAC5B9K,EADmB,wDAIvBC,GAAW,GAJY,kBAMfX,EAAOkW,iBAAiB,CAAEhV,MAAO,CAAE6I,QAAAA,EAASyB,SAAAA,KAN7B,cAOrBoE,IAPqB,WAQfuG,EAAAA,EAAAA,IAAM,KARS,0DAUrBnO,QAAQN,MAAR,MAVqB,yBAYrB/G,GAAW,GACXmN,EAAc,MAbO,6EAAH,sDAiBhBxG,EAAW,WACf3G,GAAW,GACXmN,EAAc,KACf,EAEKQ,EAAU,SAAAC,GACd,OAAKpE,GAGEoB,EAAAA,EAAAA,IAAc,CAAEC,SAAU+C,EAAO/C,SAAUrB,SAAAA,IAFzC,EAGV,EAEKiM,EAAU,CACd,CACExU,MAAOK,EAAE,sBACTyC,KAAM,WACN2R,QAAS,CACPC,MAAM,EACNC,qBAAsB,SAAAC,GACpB,IAAMvO,EAAIgO,EAAYO,GACtB,OAAKrM,GAGE,SAAC,IAAD,UAAcmE,EAAQrG,MAFpB,SAACwO,GAAA,EAAD,CAAkBpY,KAAM,IAGlC,IAGL,CACEuD,MAAOK,EAAE,eACTyC,KAAM,OACNgS,MAAO,IAET,CACE9U,MAAOK,EAAE,iBACTyC,KAAM,SACN2R,QAAS,CACPM,iBAAkB,SAAA5Y,GAChB,OAAOA,GAAK,IACb,IAGL,CACE6D,MAAOK,EAAE,yBACTyC,KAAM,mBACN2R,QAAS,CACPC,MAAM,EACNK,iBAAkB,SAAC5Y,EAAD,GAAsB,IAAD,EAAf6Y,EAAe,EAAfA,SAChB3O,EAAIgO,EAAYW,GAEtB,cAAO3O,QAAP,IAAOA,GAAP,UAAOA,EAAG4O,eAAV,aAAO,EAAY5S,QACpB,IAGL,CACErC,MAAOK,EAAE,kBACTyC,KAAM,aACN2R,QAAS,CACPM,iBAAkB,SAAA5Y,GAChB,OAAO,SAACgE,EAAA,EAAD,CAAcP,MAAOzD,EAAGmE,OAAQA,GACxC,IAGL,CACEN,MAAOK,EAAE,kBACTyC,KAAM,GACNU,MAAO,IACP0R,MAAO,SACPT,QAAS,CACPC,MAAM,EACNC,qBAAsB,SAAAC,GACpB,IAAMjE,EAAO0D,EAAYO,GAEzB,OACE,SAAC,IAAD,CAAY9H,WAAW,cAAvB,UACE,UAAC7F,EAAA,QAAD,CACE1K,QAAS,kBACP2P,EAAc,CACZlL,MAAOX,EAAE,8BACTJ,YAAaI,EAAE,mCAAoC,CAAEqJ,KAAMgD,EAAQiE,KACnEpL,QAASlF,EAAE,qBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,kBAAM2O,EAAiB3D,EAAvB,EACXjL,SAAAA,GAPK,EAUTjJ,KAAK,QACLsF,MAAM,QACNW,QAAQ,OAbV,WAcE,SAACyS,GAAA,QAAD,CAAY5X,MAAO,CAAEqS,SAAU,WAC9BvP,EAAE,qBAIV,KAKP,OACE,UAAC,GAAD,WACGgU,EAAYtQ,QACX,SAACqR,EAAA,GAAD,CACE9U,OAAQA,EACRJ,MAAI,QAAMmU,GACVG,QAASA,EACTa,iBAAkB,IAClBZ,QAAS,CACPa,UAAU,EACVxV,QAAQ,EACRyV,OAAO,MAIX,SAACvR,GAAA,QAAD,UAAQ3D,EAAE,kBAEX4L,IACC,SAAC,KAAD,CACEjL,MAAOiL,EAAWjL,MAClBf,YAAagM,EAAWhM,YACxBsF,QAAS0G,EAAW1G,QACpBD,OAAQ2G,EAAW3G,OACnBG,OAAQwG,EAAWxG,OACnBE,UAAWsG,EAAWtG,UACtBD,SAAUuG,EAAWvG,aAK9B,CAED,IAAMpJ,GAAMsB,EAAAA,QAAAA,IAAH,gDAMTwW,GAAYzW,aAAe,CAAC,E,0CCpKb,SAAS6X,GAAT,GAAmD,IAA1B7H,EAAyB,EAAzBA,KAAM8H,EAAmB,EAAnBA,gBAC5C,GAA2BpJ,EAAAA,EAAAA,MAAnBlE,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,MACT/H,GAAM8C,EAAAA,EAAAA,YAAWwB,EAAAA,eAAjBtE,EACR,GAA4DxE,EAAAA,EAAAA,WAAS,GAArE,eAAOoS,EAAP,KAA+ByH,EAA/B,KAEA,OACE,iCACE,SAAC,KAAD,CACE,UAAQ,iBACR/Z,QAAS,CACP,CACEsB,MAAM,SAAC0S,EAAA,EAAD,CAASC,SAAS,UACxB1S,KAAMmD,EAAE,uBACR,UAAW,wBACX9D,QAAS,SAAAJ,GACPA,EAAEC,kBACFsZ,GAA0B,EAC3B,GAGH,gBAAG1Y,EAAH,EAAGA,MAAH,OACE,SAACgU,GAAD,CAAoBrD,KAAMA,EAA1B,SACG,gBAASgI,EAAT,EAAG3Z,KAAH,OACC,UAAC8H,EAAA,EAAD,CACEzG,OAAK,EACLd,QAAS,SAAAJ,GACPA,EAAEC,kBACFY,IACA2Y,EAAExZ,EACH,EACD,UAAQ,sBAPV,WAQE,SAACyZ,GAAA,EAAD,CAAcrY,MAAO,CAAEC,SAAU,GAAIC,YAAa,GAAlD,SACGkQ,EAAK+B,UAAW,SAACgE,GAAA,EAAD,KAAsB,SAACC,GAAA,EAAD,OAEzC,SAACkC,GAAA,EAAD,CAAcnY,QAASiQ,EAAK+B,SAAWrP,EAAE,2BAA6BA,EAAE,8BAZ3E,GADiC,kBADtC,KAqBH4N,IACC,SAAChB,GAAD,CACE9E,QAASA,EACT+E,SAAUS,EAAKpM,IACf6G,MAAOA,EACP1C,SAAU,kBAAMgQ,GAA0B,EAAhC,EACVrN,UAAW,WACToN,IACAC,GAA0B,EAC3B,MAKV,CAODF,GAAc7X,aAAe,CAC3B8X,gBAAiB,WAAQ,GC5C3B,IAAMK,GAAW,OACXC,GAAY,QAEZC,GAAW,SAACC,EAAQnT,GACxB,IAAM6N,EAAOsF,EAAOzI,MAAK,SAAA3J,GAAC,OAAIA,EAAEvG,MAAQwF,CAAd,IAC1B,OAAW,OAAJ6N,QAAI,IAAJA,OAAA,EAAAA,EAAM/Q,QAAS,CACvB,EAWD,SAASsW,GAAT,GAA+B,IAATvI,EAAQ,EAARA,KACZtN,GAAM8C,EAAAA,EAAAA,YAAWwB,EAAAA,eAAjBtE,EAEFmE,GACJ,iBAAK5C,UAAU,eAAf,WACE,iBAAKA,UAAU,gBAAf,WACE,SAACuU,EAAA,QAAD,CACEtC,IAAKlG,EAAKuC,OACVzT,KAAM,GACN8E,IAAKoM,EAAKpM,IACVM,MAAM,SACNtE,MAAO,CAAE6Y,aAAc,OAAQC,SAAU,aAEzC1I,EAAK+B,WAAY,gBAAK9N,UAAU,gBACjC+L,EAAK2I,iBACJ,SAACvV,EAAA,EAAD,CAASC,MAAOX,EAAE,kCAAlB,UACE,SAACsB,EAAA,EAAD,CAAK4U,GAAI,EAAG3U,UAAU,OAAtB,UACE,SAACyO,EAAA,EAAD,YAKR,gBAAKzO,UAAU,cAAf,SAA8B+L,EAAKtL,cAIvC,OAAOsL,EAAK+B,SACVlL,GAEA,SAAC7C,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAA/B,UACE,SAAC9O,EAAA,EAAD,CAASC,MAAOX,EAAE,sCAAlB,SAA0DmE,KAG/D,CAMc,SAASgS,GAAT,GAA+B,IAATxM,EAAQ,EAARA,KACnC,GACEqC,EAAAA,EAAAA,MADMlE,EAAR,EAAQA,QAAS2F,EAAjB,EAAiBA,cAAeuG,EAAhC,EAAgCA,YAAajM,EAA7C,EAA6CA,MAAO4F,EAApD,EAAoDA,QAASC,EAA7D,EAA6DA,uBAAwB1F,EAArF,EAAqFA,SAAUC,EAA/F,EAA+FA,IAE/F,GAAsBrF,EAAAA,EAAAA,YAAWwB,EAAAA,eAAzBtE,EAAR,EAAQA,EAAGC,EAAX,EAAWA,OACX,GAAgDzE,EAAAA,EAAAA,WAAS,GAAzD,eAAO4a,EAAP,KAAyBC,EAAzB,KACA,GAAoD7a,EAAAA,EAAAA,WAAS,GAA7D,eAAO8a,EAAP,KAA2BC,EAA3B,KACA,GAAwC/a,EAAAA,EAAAA,WAAS,GAAjD,eAAOgb,EAAP,KAAqBC,EAArB,KACA,GAAwCjb,EAAAA,EAAAA,WAAS,GAAjD,eAAOkb,EAAP,KAAqBC,EAArB,KACA,GAA8Bnb,EAAAA,EAAAA,WAAS,GAAvC,gBAAOiD,GAAP,MAAgBC,GAAhB,MACA,IAA0BlD,EAAAA,EAAAA,UAAS,IAAnC,iBAAOob,GAAP,MAAcC,GAAd,MACA,IAAgCrb,EAAAA,EAAAA,YAAhC,iBAAOsb,GAAP,MAAiBC,GAAjB,MACA,IAAoCvb,EAAAA,EAAAA,UAAS,IAA7C,iBAAOwb,GAAP,MAAmBC,GAAnB,MACA,IAA4Bzb,EAAAA,EAAAA,UAAS,CACnCyG,KAAMwT,GACNyB,WAAY,GACZC,aAAa,EACb/Y,SAAU,GACVE,KAAM,IALR,iBAAO8P,GAAP,MAAeC,GAAf,MAQM+I,IAAYrP,GAAS,IAAIvL,KAAI,SAAAgH,GAAC,MAAK,CACvCf,KAAMe,EAAEf,KACR9B,MAAO6C,EAAE7C,MACT0W,IAAK1B,GAASqB,GAAYxT,EAAEf,MAHM,IAKpC2U,GAASE,QAAQ,CACf7U,KAAMgT,GACN9U,MAAO,cACP0W,IAAK1B,GAASqB,GAAYvB,MAE5B2B,GAASG,KAAK,CACZ9U,KAAMiT,GACN/U,MAAO,QACP0W,IAAK1B,GAASqB,GAAYtB,MAG5B,IAAM8B,GAAW,WACf,IAAMC,EAAQ,CAAC,EAEXrJ,GAAO+I,cACTM,EAAMpI,UAAW,GAGnBoI,EAAMxV,KAAOmM,GAAOnM,KAEhBmM,GAAO8I,aACTO,EAAMrJ,OAASA,GAAO8I,YAGxBxY,IAAW,GACXyJ,EACGqP,SAAS,CACRC,MAAAA,EACAlZ,OAAQ,CACND,KAAM8P,GAAO9P,KACbF,SAAUgQ,GAAOhQ,YAGpBsZ,MAAK,SAAAxY,GACJR,IAAW,IAEVQ,EAAI0X,OAAS,IAAIe,SAAQ,SAAAnU,GACxBA,EAAEyS,eA9GW,SAAC3I,EAAMG,GAC5B,IAAMtO,EAAOmO,EAAKgB,WAAa,GAC/B,QAAKnP,EAAKuE,SAIFvE,EAAK+Q,MAAK,SAAA0H,GAAC,OAAIA,EAAE3I,OAAO5S,KAAOoR,CAApB,GACpB,CAuG4BwI,CAAezS,EAAGiK,GACrCjK,EAAEqM,OAASuB,GAAY5N,EAAEqM,OAAQ/H,EAClC,IAED+O,GAAS3X,EAAI0X,OAAS,IACtBG,GAAY7X,EAAIX,OAAOJ,MACxB,IACA0Z,OAAM,SAAAC,GACLpZ,IAAW,GACXU,EAAAA,GAAAA,MAAY0Y,EAAIzY,QACjB,GACJ,GAEDC,EAAAA,EAAAA,YAAU,WACRkY,IACD,GAAE,CAAC,GAAD,OAAIpJ,GAAO+I,YAAX,YAA0B/I,GAAOnM,KAAjC,YAAyCmM,GAAO9P,KAAhD,YAAwD8P,GAAOhQ,SAA/D,YAA2EgQ,GAAO8I,eAGrF5X,EAAAA,EAAAA,YAAU,WACR6I,EACG4P,uBACAL,MAAK,SAAAxY,GACJ+X,GAAc/X,EAAI0W,QAAU,GAC7B,IACAiC,OAAM,SAAAC,GACL1Y,EAAAA,GAAAA,MAAY0Y,EAAIzY,QACjB,GACJ,GAAE,KAEHiT,EAAAA,EAAAA,IAAgBC,EAAAA,OAAAA,cAAqB,SAAA1S,GAC/BA,EAAKiI,UAAYA,GACnB0P,IAEH,IAED,IAAMQ,GAAsBpK,EAEtBuG,GAAU,CACd,CACExU,MAAOK,EAAE,eACTyC,KAAM,WACN2R,QAAS,CACPE,qBAAsB,SAAAC,GACpB,IAAM/Q,EAAIoT,GAAMrC,GAEhB,OACE,gBAAK,gCAAwB/Q,EAAExB,UAA/B,UACE,SAAC6T,GAAD,CAAYvI,KAAM9J,KAGvB,IAGL,CACE7D,MAAOK,EAAE,kBACTyC,KAAM,MACN2R,QAAS,CACPM,iBAAkB,SAAA5Y,GAChB,OACE,SAACmc,EAAA,QAAD,CAAS7b,KAAM,GAAI8b,UAAU,EAA7B,SACGpc,GAGN,IAGL,CACE6D,MAAOK,EAAE,yBACTyC,KAAM,cACN2R,QAAS,CACPM,iBAAkB,SAAA5Y,GAChB,OAAO,SAACgE,EAAA,EAAD,CAAcP,MAAOzD,EAAGmE,OAAQA,GACxC,IAGL,CACEN,MAAOK,EAAE,kBACTyC,KAAM,GACNU,MAAO,IACP0R,MAAO,SACPsD,iBAAkB,SAClB/D,QAAS,CACPE,qBAAsB,SAAAC,GACpB,IAAM/Q,EAAIoT,GAAMrC,GAEhB,OACE,SAAC,IAAD,CAAY9H,WAAW,cAAvB,UACE,SAAC,GAAD,CAASa,KAAM9J,EAAG4R,gBAAiB,kBAAMuB,GAAgB,kBAAKnT,GAAN,IAASqO,QAAS,cAAvC,KAGxC,KAKDuG,GAAgB,GAClBJ,KACFI,GAAcb,MACZ,UAAC3Q,EAAA,QAAD,CACEvE,QAAQ,WACRnF,MAAO,CAAEmb,WAAY,EAAGjb,YAAa,IACrCsE,MAAM,UACNtF,KAAK,QACLF,QAAS,WACPua,GAAgB,EACjB,EAPH,WAQE,SAAC6B,EAAA,EAAD,CAAYpb,MAAO,CAAEqT,OAAQ,MAAOnT,YAAa,KAChD4C,EAAE,mBACFgU,EAAYtQ,OAAZ,YAA0BsQ,EAAYtQ,OAAtC,KAAkD,OAErD,SAAC,IAAD,CAAY+I,WAAW,cAAvB,UACE,UAAC7F,EAAA,QAAD,CACE1J,MAAO,CAAEmb,WAAY,EAAGjb,YAAa,IACrCiF,QAAQ,YACRkW,KAAK,MACL7W,MAAM,UACNtF,KAAK,QACL,UAAQ,gBACRF,QAAS,kBAAMma,GAAoB,EAA1B,EAPX,WAQE,SAAC/G,EAAA,EAAD,CAASpS,MAAO,CAAEqS,SAAU,QAASnS,YAAa,KACjD4C,EAAE,qBAKI,WAAT2J,GACFyO,GAAcb,MACZ,SAAC,IAAD,CAAYtV,KAAK,QAAjB,UACE,UAAC2E,EAAA,QAAD,CACE1J,MAAO,CAAEmb,WAAY,GACrBhW,QAAQ,YACRkW,KAAK,MACL7W,MAAM,QACNtF,KAAK,QACL,UAAQ,gBACRF,QAAS,kBAAMqa,GAAsB,EAA5B,EAPX,WAQE,SAACiC,EAAA,EAAD,CAAUtb,MAAO,CAAEqS,SAAU,QAASnS,YAAa,KAClD4C,EAAE,iCAOb,IAwBMyY,GAAe,CACnBpE,MAAM,EACNY,UAAU,EACVxV,QAAQ,EACRyV,OAAO,EACPwD,uBAAuB,EACvBC,WANmB,SAMR7c,EANQ,GAMW,IAAd8c,EAAa,EAAbA,UACRpV,EAAIoT,GAAMgC,GAChBjC,EAAgBnT,EACjB,EACDlF,KAAM8P,GAAO9P,KAAO,EACpBua,YAAazK,GAAOhQ,SACpByF,MAAOiT,GACPgC,mBAAoB,KAGtB,OACE,UAAC,GAAD,YACE,UAACxX,EAAA,EAAD,CAAKC,UAAU,OAAOiJ,QAAQ,OAA9B,WACE,gBAAKjJ,UAAU,OAAf,UACE,gBAAKA,UAAU,OAAf,SACG6V,GAAS5a,KAAI,SAAAgH,GAAC,OACb,iBACEjC,UAAS,cAAS6M,GAAOnM,OAASuB,EAAEf,KAAO,SAAW,IACtDvG,QAAS,kBAhDF+F,EAgDqBuB,EAAEf,UA/CtChE,IAIJ4P,IAAU,SAAA7K,GAAC,yBAAUA,GAAV,IAAavB,KAAAA,EAAMkV,aAAa,EAAOD,WAAY,GAAI5Y,KAAM,GAA7D,KALQ,IAAA2D,CAgDE,EAFX,WAIE,iBAAMV,UAAU,OAAhB,SAAwBiC,EAAE7C,SAC1B,iBAAMY,UAAWwX,IAAW,QAAS,CAAE,UAAWvV,EAAE6T,IAAM,MAA1D,SAAmE7T,EAAE6T,QAFhE7T,EAAEf,KAJI,SAWnB,gBAAKlB,UAAU,QAAf,UACE,SAACwT,EAAA,GAAD,CACExT,UAAU,aACVyT,iBAAkB,IAClB/U,OAAQA,EACRU,OACE,gBAAKY,UAAU,qBAAf,UACE,SAACyX,EAAA,EAAD,CACEC,SACE,SAACC,EAAA,EAAD,CACEpc,SAAU2B,GACViD,MAAM,UACNyX,QAAS/K,GAAO+I,YAChB7T,SAAU,SAAAxH,GAAC,OA7DHyD,EA6D2BzD,EAAEiG,OAAOoX,aA5D9D9K,IAAU,SAAA7K,GAAC,yBAAUA,GAAV,IAAa2T,YAAa5X,EAAOjB,KAAM,GAAvC,IADe,IAAAiB,CA6DG,IAGfI,MAAOK,EAAE,qCAIfH,KAAM+W,GACNzC,QAASA,GACTiE,cAAeA,GACfhE,QAASqE,GACTha,QAASA,GACT6E,SArEY,SAAC,GAAuC,IAArChF,EAAoC,EAApCA,KAAMua,EAA8B,EAA9BA,YAAa3B,EAAiB,EAAjBA,WACtC9I,GAAOhQ,WAAaya,EACtBxK,IAAU,SAAA7K,GAAC,yBAAUA,GAAV,IAAapF,SAAUya,EAAava,KAAM,GAA1C,IACF8P,GAAO9P,OAASA,EAAO,GAChC+P,IAAU,SAAA7K,GAAC,yBAAUA,GAAV,IAAalF,KAAMA,EAAO,GAA1B,IAGT8P,GAAO8I,aAAeA,GACxB7I,IAAU,SAAA7K,GAAC,yBAAUA,GAAV,IAAa0T,WAAAA,EAAY5Y,KAAM,GAA/B,GAEd,UAgEG,SAACyI,EAAA,QAAD,CACEpG,MAAOX,EAAE,mBACTnE,QAAS,kBAAM4a,GAAgB,EAAtB,EACT9a,KAAM6a,EACNrD,SAAS,KACT5P,WAAS,EALX,UAME,SAACwQ,GAAD,MAGD2C,IACC,SAAC9E,GAAD,CAAQvM,SAAU,kBAAMsR,EAAgB,KAAtB,EAA6B/H,QAAS8H,EAAaxV,IAAK2Q,QAAS6E,EAAa7E,UAEjGuE,IACC,SAACvO,EAAD,CACEC,QAASA,EACTI,SAAUA,EACVH,MAAOA,EACP1C,SAAU,kBAAMgR,GAAoB,EAA1B,EACVrO,UAAW,WACT2F,IACA0I,GAAoB,EACrB,IAGJC,IACC,SAAC1M,GAAD,CACE9B,QAASA,EACTI,SAAUA,EACVH,MAAOA,EACP1C,SAAU,kBAAMkR,GAAsB,EAA5B,EACVvO,UAAW,WACT2F,IACA4I,GAAsB,EACvB,MAKV,CAED,IAAMta,GAAMsB,EAAAA,QAAAA,IAAH,g0EA6DkB,SAAAhC,GAAK,OAAIA,EAAM0I,MAAMU,YAAYE,OAAOuU,EAAnC,G,6fCndjB,SAASC,EAAT,GAA4E,IAAtDvR,EAAqD,EAArDA,QAASzC,EAA4C,EAA5CA,SAAU2C,EAAkC,EAAlCA,UAAWC,EAAuB,EAAvBA,QAASqR,EAAc,EAAdA,KAAMhJ,EAAQ,EAARA,KACxEnI,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAA8B3M,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAA0BlD,EAAAA,EAAAA,UAAS,IAAnC,eAAOiK,EAAP,KAAcC,EAAd,KACQ1F,GAAMD,EAAAA,EAAAA,oBAANC,EAER,GAA0BxE,EAAAA,EAAAA,UAAS8U,EAAK3P,OAAS,IAAjD,eAAOA,EAAP,KAAc4Y,EAAd,KACA,GAAsC/d,EAAAA,EAAAA,UAAS8U,EAAK1Q,aAAe,IAAnE,eAAOA,EAAP,KAAoB4Z,EAApB,KAEM7Q,EAAQ,yCAAG,kGACT8Q,EAAS9Y,EAAMkI,OADN,uBAGbnD,EAAS1F,EAAE,mCAHE,+BAOXyZ,EAAO/V,OAAS,IAPL,uBAQbgC,EAAS1F,EAAE,mCAAoC,CAAE0D,OAAQ,MAR5C,6BAYTgW,EAAO9Z,EAAY+R,QAAQ,MAAO,KAZzB,wBAcbjM,EAAS1F,EAAE,yCAdE,8BAkBTyC,EAAgB,WAAT6W,EAAoBK,IAAIF,GAAUnJ,EAAK7N,KAEpDiD,EAAS,MACThH,GAAW,GArBI,UAwBA,WAAT4a,EAxBS,kCAyBLnR,EAAIyR,WAAW,CAAE3a,MAAO,CAAE6I,QAAAA,EAASrF,KAAAA,EAAM9B,MAAO8Y,EAAQ7Z,YAAa8Z,KAzBhE,iDA2BLvR,EAAI0R,WAAW,CAAE5a,MAAO,CAAE6I,QAAAA,EAAS7F,KAAM,CAAEQ,KAAAA,EAAM9B,MAAO8Y,EAAQ7Z,YAAa8Z,MA3BxE,QA6Bb1R,IA7Ba,mDA+BPe,GAASjD,EAAAA,EAAAA,GAAY,EAAD,IAC1BJ,EAASqD,GACTd,EAAQ,EAAD,IAjCM,yBAmCbvJ,GAAW,GAnCE,8EAAH,qDAuCRuK,GACJ,2BACY,WAATqQ,IACC,SAAC7X,EAAA,EAAD,CAAYE,UAAU,MAAMzE,MAAO,CAAE4c,WAAY,IAAjD,UACE,SAAC1Q,EAAA,EAAD,CACEzJ,MAAM,KACN4H,aAAa,MACblF,QAAQ,WACRI,KAAK,MACL,UAAQ,yBACRc,WAAS,EACTuD,WAAS,EACTvH,MAAO+Q,EAAK7N,KACZ3F,UAAQ,OAKd,SAAC2E,EAAA,EAAD,CAAYE,UAAU,MAAMzE,MAAO,CAAE8F,UAAW,IAAhD,UACE,SAACoG,EAAA,EAAD,CACEzJ,MAAOK,EAAE,gBACTuH,aAAa,MACblF,QAAQ,WACRI,KAAK,QACL,UAAQ,0BACRc,WAAS,EACTuD,WAAS,EACTvH,MAAOoB,EACP2C,SAAU,SAAAxH,GACR4J,EAAS,MACT6T,EAASzd,EAAEiG,OAAOxC,MACnB,EACDzC,SAAmB,WAATwc,GAAqB7a,EAC/Bsb,WAAY/Z,EAAE,sCAIlB,SAACyB,EAAA,EAAD,CAAYE,UAAU,MAAMzE,MAAO,CAAE8F,UAAW,GAAIoE,aAAc,IAAlE,UACE,SAACgC,EAAA,EAAD,CACEzJ,MAAOK,EAAE,sBACTuH,aAAa,MACblF,QAAQ,WACRI,KAAK,cACL,UAAQ,gCACRc,WAAS,EACTuD,WAAS,EACTvH,MAAOK,EACP0D,SAAU,SAAAxH,GACR4J,EAAS,MACT8T,EAAe1d,EAAEiG,OAAOxC,MACzB,EACDzC,SAAU2B,EACVub,WAAS,EACTC,KAAM,SAMd,OACE,UAAClT,EAAA,QAAD,CACEpG,MAAgB,WAAT2Y,EAAoBtZ,EAAE,8BAAgC,GAC7DuD,WAAS,EACT5H,MAAI,EACJE,QAASwJ,EACTqE,iBAAiB,EACjBpO,SACE,iCACE,SAACsL,EAAA,QAAD,CAAQ1K,QAASmJ,EAAU3D,MAAM,UAAUtF,KAAK,QAAhD,SACG4D,EAAE,oBAEL,UAAC4G,EAAA,QAAD,CACE,UAAQ,sBACR1K,QAASyM,EACTjH,MAAM,UACNtF,KAAK,QACLU,SAAU2B,EACV4D,QAAQ,YACRyE,WAAS,EAPX,UAQGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MACX4D,EAAX,WAATsZ,EAAsB,gBAAqB,uBApBpD,WAwBE,SAAC/S,EAAA,EAAD,CAAmB5E,UAAU,MAA7B,SAAoCsH,MACjCxD,IACD,SAACe,EAAA,EAAD,CAAOmD,KAAK,QAAQtH,QAAQ,OAAOnF,MAAO,CAAEiG,MAAO,OAAQ+W,OAAQ,GAAnE,SACGzU,MAKV,CCrID,SAAS0U,EAAT,GAAqF,IAA3D9U,EAA0D,EAA1DA,SAAU2C,EAAgD,EAAhDA,UAAWL,EAAqC,EAArCA,SAAUyS,EAA2B,EAA3BA,SAAUrL,EAAiB,EAAjBA,cACzD5G,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAA0E6D,EAAAA,EAAAA,MAAlEjE,EAAR,EAAQA,MAAOsS,EAAf,EAAeA,YAAavS,EAA5B,EAA4BA,QAAkB4F,EAA9C,EAAqCC,QAAsB2M,EAA3D,EAA2DA,WACnDta,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GAA0BxE,EAAAA,EAAAA,UAAS,IAAnC,eAAO+e,EAAP,KAAcC,EAAd,KACA,GAAoChf,EAAAA,EAAAA,WAAS,GAA7C,eAAOif,EAAP,KAAmBC,EAAnB,KACA,GAAoClf,EAAAA,EAAAA,UAAS,MAA7C,eAAOoQ,EAAP,KAAmBC,EAAnB,KACA,GAA8BrQ,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KAEMuD,GAAO0Y,IAAU5S,EAAMoF,MAAK,SAAA3J,GAAC,OAAIA,EAAEf,OAAS2X,CAAf,KAE7BQ,IAAcC,EAAAA,EAAAA,IAAgBT,GAE9BU,GAAc,yCAAG,WAAMrY,GAAN,0EACjBhE,EADiB,iEAGnBC,GAAW,GAHQ,SAIbyJ,EAAI4S,WAAW,CAAE9b,MAAO,CAAE6I,QAAAA,EAASrF,KAAAA,KAJtB,OAKnBkF,IALmB,gDAOnBvI,EAAAA,GAAAA,MAAY,KAAIC,SAPG,yBASnBX,GAAW,GACXmN,EAAc,MAVK,4EAAH,sDAcdqG,GAAO,yCAAG,WAAO8I,EAAMvY,GAAb,gGACI0F,EAAI8S,qBAAqB,CAAEhc,MAAO,CAAE6I,QAASkT,EAAM/Y,KAAM,CAAEQ,KAAAA,MAD/D,OACRvD,EADQ,OAERgc,EAAiBhc,EAAImb,aAAe,GACpCc,EAAWd,EAAY7d,KAAI,SAAAgH,GAAC,yBAC7BA,GAD6B,IAEhC4X,KAAMF,EAAehL,MAAK,SAAAC,GAAC,OAAIA,EAAE1N,OAASe,EAAEf,IAAjB,KAFK,IAIlC+X,EAASW,GAPK,2CAAH,wDAUPE,GAAM,yCAAG,gGACb3c,GAAW,GAEL4c,EAAaf,EAAM9a,QAAO,SAAA+D,GAAC,OAAIA,EAAE4X,IAAN,IAAY5e,KAAI,SAAAgH,GAAC,OAAIA,EAAEf,IAAN,IAHrC,kBAML0F,EAAIoT,yBAAyB,CAAEtc,MAAO,CAAE6I,QAAAA,EAASsS,SAAUnY,GAAKQ,KAAM6Y,WAAAA,KANjE,OAOXlc,EAAAA,GAAAA,QAAcY,EAAE,uBAChBgI,IARW,gDAUX5I,EAAAA,GAAAA,OAAY0G,EAAAA,EAAAA,GAAY,EAAD,KAVZ,yBAYXpH,GAAW,GAZA,4EAAH,sDAgBZY,EAAAA,EAAAA,YAAU,WACJwI,GAAWsS,GACblI,GAAQpK,EAASsS,EAEpB,GAAE,CAACtS,EAASsS,IAEb,IAAMoB,GAAsBlB,IAAevL,EAE3C,OACE,UAAChI,EAAA,QAAD,CACEpG,MAAOX,EAAE,mBACTnE,QAASwJ,EACT1J,MAAI,EACJ4H,WAAS,EACTkY,QACE1M,IACC6L,KACC,iCACE,SAACc,EAAA,EAAD,CAAYxf,QAAS,kBAAMwe,EAAczY,GAApB,EAA2B,kCAA0BA,GAAKQ,MAAQrG,KAAK,QAA5F,UACE,SAACuf,EAAA,QAAD,CAAUC,KAAK,eAEjB,SAACF,EAAA,EAAD,CACExf,QAAS,kBACP2P,EAAc,CACZlL,MAAOX,EAAE,8BACTJ,YAAaI,EAAE,mCAAoC,CAAEyC,KAAMR,GAAKtB,QAChEuE,QAASlF,EAAE,qBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,WACTwV,GAAe7Y,GAAKQ,KACrB,EACD4C,SAAU,WACR3G,GAAW,GACXmN,EAAc,KACf,GAZI,EAeT,oCAA4B5J,GAAKQ,MACjCrG,KAAK,QAjBP,UAkBE,SAACyf,EAAA,EAAD,CAAYD,KAAK,iBAKzBtgB,SACGkgB,KACC,iCACE,SAAC5U,EAAA,QAAD,CAAQ1K,QAASmJ,EAAU3D,MAAM,UAAjC,SACG1B,EAAE,oBAEL,UAAC4G,EAAA,QAAD,CACE1K,QAASmf,GACT3Z,MAAM,UACN5E,SAAU2B,IAAYwD,GACtBI,QAAQ,YACRyE,WAAS,EACT,UAAQ,8BANV,UAOGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MAC/B4D,EAAE,qBAjDb,WAsDE,UAAC/D,EAAD,YACIgG,KACA,SAACsR,EAAD,WACE,SAACtQ,EAAA,QAAD,MAKHhB,KACC,iBAAKV,UAAU,iBAAf,WACE,iBAAKA,UAAU,SAAf,WACE,gBAAKA,UAAU,QAAf,SAAwBU,GAAKtB,SAC7B,gBAAKY,UAAU,cAAf,SAA8BU,GAAKrC,kBAIrC,iBAAK2B,UAAU,OAAf,WACE,gBAAKA,UAAU,QAAf,SAAwBvB,EAAE,wBAC1B,gBAAKuB,UAAU,OAAf,SACGgZ,EAEE9a,QAAO,SAAA+D,GAAC,OAAKgY,IAAsBhY,EAAE4X,IAA7B,IACR5e,KAAI,SAAAgH,GAAC,OACJ,gBAAKjC,UAAU,OAAf,UACE,SAACyX,EAAA,EAAD,CACEC,SACE,SAACC,EAAA,EAAD,CACEpc,SAAU0e,GACVrC,QAAS3V,EAAE4X,KACX9X,SAAU,WACRkX,GAAS,SAAAlQ,GAAK,OACZA,EAAM9N,KAAI,SAAA2T,GAIR,OAHIA,EAAE1N,OAASe,EAAEf,OACf0N,EAAEiL,MAAQjL,EAAEiL,MAEPjL,CACR,GANW,GAQf,EACD1N,KAAMe,EAAEf,OAGZ9C,MAAO6D,EAAE5D,eApBT,eA8BjB6a,IACC,SAACpB,EAAD,CACEvR,QAASA,EACTzC,SAAU,kBAAMqV,EAAc,KAApB,EACV1S,UAAW,WACT0S,EAAc,MACdhN,GACD,EACD4L,KAAK,SACLc,SAAUK,EAAWhY,KACrB6N,KAAMmK,IAIT7O,IACC,SAAC,IAAD,CACEjL,MAAOiL,EAAWjL,MAClBf,YAAagM,EAAWhM,YACxBsF,QAAS0G,EAAW1G,QACpBD,OAAQ2G,EAAW3G,OACnBG,OAAQwG,EAAWxG,OACnBE,UAAWsG,EAAWtG,UACtBD,SAAUuG,EAAWvG,aAK9B,CDnDDgU,EAAW/b,aAAe,CACxB2K,QAAS,WAAQ,EACjBqR,KAAM,SACNhJ,KAAM,CAAC,GCkDT,OAAewL,EAAAA,EAAAA,GAAe3B,EAAgB,eAU9CA,EAAe7c,aAAe,CAC5ByR,eAAe,GAGjB,IC3OIgN,ED2OE9f,EAAMsB,EAAAA,QAAAA,IAAH,swBA6CHgW,EAAShW,EAAAA,QAAAA,IAAH,4H,gFCtRRye,GAAY,CAAC,QAAS,WAE1B,SAASC,KAAiS,OAApRA,GAAWhJ,OAAOiJ,OAASjJ,OAAOiJ,OAAOd,OAAS,SAAUrZ,GAAU,IAAK,IAAIoa,EAAI,EAAGA,EAAIC,UAAU1Y,OAAQyY,IAAK,CAAE,IAAIja,EAASka,UAAUD,GAAI,IAAK,IAAIlf,KAAOiF,EAAc+Q,OAAOoJ,UAAUC,eAAeC,KAAKra,EAAQjF,KAAQ8E,EAAO9E,GAAOiF,EAAOjF,GAAU,CAAE,OAAO8E,CAAQ,EAAUka,GAASO,MAAMC,KAAML,UAAY,CAElV,SAASM,GAAyBxa,EAAQya,GAAY,GAAc,MAAVza,EAAgB,MAAO,CAAC,EAAG,IAAkEjF,EAAKkf,EAAnEpa,EAEzF,SAAuCG,EAAQya,GAAY,GAAc,MAAVza,EAAgB,MAAO,CAAC,EAAG,IAA2DjF,EAAKkf,EAA5Dpa,EAAS,CAAC,EAAO6a,EAAa3J,OAAO4J,KAAK3a,GAAqB,IAAKia,EAAI,EAAGA,EAAIS,EAAWlZ,OAAQyY,IAAOlf,EAAM2f,EAAWT,GAAQQ,EAASG,QAAQ7f,IAAQ,IAAa8E,EAAO9E,GAAOiF,EAAOjF,IAAQ,OAAO8E,CAAQ,CAFhNgb,CAA8B7a,EAAQya,GAAuB,GAAI1J,OAAO+J,sBAAuB,CAAE,IAAIC,EAAmBhK,OAAO+J,sBAAsB9a,GAAS,IAAKia,EAAI,EAAGA,EAAIc,EAAiBvZ,OAAQyY,IAAOlf,EAAMggB,EAAiBd,GAAQQ,EAASG,QAAQ7f,IAAQ,GAAkBgW,OAAOoJ,UAAUa,qBAAqBX,KAAKra,EAAQjF,KAAgB8E,EAAO9E,GAAOiF,EAAOjF,GAAQ,CAAE,OAAO8E,CAAQ,CAM3e,SAASob,GAAaC,EAAMC,GAC1B,IAAI1c,EAAQyc,EAAKzc,MACb2c,EAAUF,EAAKE,QACf/hB,EAAQmhB,GAAyBU,EAAMpB,IAE3C,OAAoB,gBAAoB,MAAOC,GAAS,CACtD9Y,MAAO,GACPoN,OAAQ,GACRgN,QAAS,YACT3B,KAAM,OACN4B,MAAO,6BACPC,IAAKJ,EACL,kBAAmBC,GAClB/hB,GAAQoF,EAAqB,gBAAoB,QAAS,CAC3DtE,GAAIihB,GACH3c,GAAS,KAAMob,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3E/V,EAAG,gVACH4V,KAAM,aAEV,CAEA,I,GAAI8B,GAA0B,aAAiBP,ICPzCQ,IDQS,ICRC,SAACjO,EAAWkO,GAC1B,QAAKlO,IAIGkO,EAAS1N,MAAK,SAAA1M,GAAC,OAAKA,EAAEqa,KAAKnW,WAAalE,EAAE1B,GAAGG,IAA9B,GACxB,GAEc,SAAS6b,GAAT,GAAyE,IAAhDzY,EAA+C,EAA/CA,SAAU2C,EAAqC,EAArCA,UAAWnI,EAA0B,EAA1BA,KAAMgO,EAAoB,EAApBA,iBACzD1F,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAA2B6D,EAAAA,EAAAA,MAAnBjE,EAAR,EAAQA,MAAOD,EAAf,EAAeA,QACP9H,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GAA8BxE,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAAkClD,EAAAA,EAAAA,UAASqE,EAAK6P,WAAa,IAA7D,eAAOA,EAAP,KAAkBqO,EAAlB,KACA,GAA4BviB,EAAAA,EAAAA,UAASqE,EAAK4I,QAAU,IAApD,eAAOA,EAAP,KAAeC,EAAf,KACA,GAAgClN,EAAAA,EAAAA,UAASmf,IAAU9a,EAAK+d,WAAa,IAArE,eAAOA,EAAP,KAAiBI,EAAjB,KAEMC,EAAYpQ,EAAiBqQ,WAAU,SAAA1a,GAAC,OAAIA,EAAEkM,YAAc7P,EAAK6P,SAAzB,IAExCyO,EAAsB,yCAAG,+FACzB1f,EADyB,wDAKvB6R,EAAO,CACXZ,UAAAA,EACAjH,OAAAA,EACAmV,SAAAA,GAGIQ,GAXuB,OAWLvQ,IAEL,IAAfoQ,EACFG,EAAY9G,QAAQhH,GAEpB8N,EAAYH,GAAa3N,EAhBE,SAoB3B5R,GAAW,GApBgB,SAqBrByJ,EAAIgW,uBAAuB,CAAElf,MAAO,CAAE6I,QAAAA,EAAS+F,iBAAkBuQ,KArB5C,yBAsBrBlK,EAAAA,EAAAA,IAAM,KAtBe,QAuB3BxV,GAAW,GACXU,EAAAA,GAAAA,QAAcY,EAAE,uBAChBgI,IAzB2B,kDA2B3BtJ,GAAW,GACXU,EAAAA,GAAAA,MAAY,KAAIC,SA5BW,0DAAH,qDAgC5B,OACE,SAAC0H,EAAA,QAAD,CACEpG,MAAOX,EAAE,gCACTrE,MAAI,EACJ+N,iBAAiB,EACjBnN,WAAY,CAAEW,MAAO,CAAE+P,UAAW,SAClC1J,WAAS,EACT8a,SACE,SAAC3C,EAAA,EAAD,CAAYxf,QAASmJ,EAAU,UAAQ,uBAAuBjJ,KAAK,QAAnE,UACE,SAACkiB,GAAA,EAAD,MAGJhjB,SACE,iCACE,SAACsL,EAAA,QAAD,CAAQ1K,QAASmJ,EAAU3D,MAAM,UAAjC,SACG1B,EAAE,oBAEL,UAAC4G,EAAA,QAAD,CACE1K,QAAS,kBAAMiiB,GAAN,EACTzc,MAAM,UACN5E,UAAW6gB,GAAQjO,EAAWkO,IAAanf,EAC3C4D,QAAQ,YACRyE,WAAS,EACT,UAAQ,eANV,UAOGrI,IAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,MAC/B4D,EAAE,qBAxBX,UA4BE,SAAC,GAAD,WACE,iBAAKuB,UAAU,iBAAf,WACE,SAAC6H,EAAA,EAAD,CACE7F,WAAS,EACT,UAAQ,mBACR6L,YAAapP,EAAE,2BACfT,MAAOmQ,EACPpM,SAAU,SAAAib,GACRR,EAAaQ,EAAMxc,OAAOxC,MAC3B,KAGH,SAAC6J,EAAA,EAAD,CACElM,MAAO,CAAE8F,UAAW,IACpBO,WAAS,EACT,UAAQ,sBACR6L,YAAapP,EAAE,iBACfT,MAAOkJ,EACPnF,SAAU,SAAAib,GACR7V,EAAU6V,EAAMxc,OAAOxC,MACxB,KAGH,UAAC+B,EAAA,EAAD,CAAKqL,GAAG,OAAOnC,QAAQ,OAAOC,eAAe,gBAAgB+E,WAAW,SAAxE,WACE,SAAClO,EAAA,EAAD,CAAKC,UAAU,YAAf,SAA4BvB,EAAE,gCAC9B,SAACsB,EAAA,EAAD,WACE,SAACsF,EAAA,QAAD,CACEvE,QAAQ,WACRX,MAAM,UACN,UAAQ,cACRxF,QAAS,WACP8hB,GAAY,SAAAhY,GACV,IAAM9G,GAAG,OAAO8G,GAEhB,OADA9G,EAAIoY,QAAQ,CAAEuG,KAAM,CAAEnW,SAAU,IAAM5F,GAAI,CAAEG,KAAMuc,GAAAA,MAAAA,SAC3Ctf,CACR,GACF,EAVH,SAWGc,EAAE,oBAKT,UAACsB,EAAA,EAAD,CAAKC,UAAU,OAAOoL,IAAK,GAA3B,UACGiR,EAASphB,KAAI,SAAC8T,EAAM5T,GAAP,OACZ,UAAC4E,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAAS/E,eAAe,gBAAgBgU,GAAI,EAA3E,WACE,UAACnd,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAASkP,SAAU,EAAlD,WACE,SAACpd,EAAA,EAAD,CAAKod,SAAU,EAAGC,UAAW,EAA7B,UACE,SAACvV,EAAA,EAAD,CACE7F,WAAS,EACTnH,KAAK,QACL,0BAAkBM,EAAlB,SACA0S,YAAY,iCACZ7P,MAAO+Q,EAAKuN,KAAKnW,SACjBpE,SAAU,SAAAib,GACR,IAAQhf,EAAUgf,EAAMxc,OAAhBxC,MACRye,GAAY,SAAAhY,GACV,IAAM9G,GAAG,OAAO8G,GAEhB,OADA9G,EAAIxC,GAAOmhB,KAAKnW,SAAWnI,EACpBL,CACR,GACF,OAIL,SAACoC,EAAA,EAAD,CAAK+W,WAAY,EAAG3E,GAAI,EAAxB,UACE,SAAC,GAAD,OAIF,SAACpS,EAAA,EAAD,CAAKod,SAAU,EAAGC,UAAW,EAA7B,UACE,SAACvV,EAAA,EAAD,CACE7F,WAAS,EACTnH,KAAK,QACLwiB,QAAM,EACNrf,MAAO+Q,EAAKxO,GAAGG,KACfqB,SAAU,SAAAxH,GACRkiB,GAAY,SAAAhY,GACV,IAAM9G,GAAG,OAAO8G,GAEhB,OADA9G,EAAIxC,GAAOoF,GAAGG,KAAOnG,EAAEiG,OAAOxC,MACvBL,CACR,GACF,EACDmD,QAAQ,WAZV,SAaG0F,EACEtI,QAAO,SAAAuG,GAAC,MAAe,UAAXA,EAAEvD,IAAN,IACRjG,KAAI,SAAA2M,GAAC,OACJ,SAAC1F,GAAA,EAAD,CAAuBlE,MAAO4J,EAAE1G,KAAM,mDAA2C0G,EAAE1G,MAAnF,UACE,0BAAO0G,EAAExI,OAASwI,EAAE1G,QADP0G,EAAE1G,KADb,YAUd,SAACnB,EAAA,EAAD,CAAK+W,WAAY,EAAGnC,GAAI,EAAxB,UACE,SAACwF,EAAA,EAAD,CACExf,QAAS,WACP8hB,GAAY,SAAAhY,GACV,IAAM9G,GAAG,OAAO8G,GAEhB,OADA9G,EAAI2f,OAAOniB,EAAO,GACXwC,CACR,GACF,EACD9C,KAAK,QARP,UASE,SAACyf,EAAA,EAAD,UA9DM,KAoEZ+B,EAASla,SACT,SAACpC,EAAA,EAAD,CAAKmd,GAAI,EAAG/c,MAAM,iBAAiB6N,SAAS,OAA5C,UACE,SAAC5L,EAAA,QAAD,UAAQ3D,EAAE,6BAQzB,CASD8d,GAAcxgB,aAAe,CAC3BuC,KAAM,CAAC,EACPgO,iBAAkB,IAGpB,I,GAAM5R,GAAMsB,EAAAA,QAAAA,IAAH,kVCrNT,SAASuhB,GAAT,GAAsD,IAA5BzZ,EAA2B,EAA3BA,SAAU0J,EAAiB,EAAjBA,cAC1B5G,GAAQ9G,EAAAA,EAAAA,MAAR8G,IACR,GAAsC6D,EAAAA,EAAAA,MAA9BlE,EAAR,EAAQA,QAAS+F,EAAjB,EAAiBA,iBACT7N,GAAMD,EAAAA,EAAAA,oBAANC,EACR,GAAoCxE,EAAAA,EAAAA,UAAS,MAA7C,eAAOoQ,EAAP,KAAmBC,EAAnB,KACA,GAA8BrQ,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,EAAP,KAAgBC,EAAhB,KACA,GAA0ClD,EAAAA,EAAAA,WAAS,GAAnD,eAAOujB,EAAP,KAAsBC,EAAtB,KACA,GAA4BxjB,EAAAA,EAAAA,UAAS,IAArC,eAAO4S,EAAP,KAAeC,EAAf,KAEM4Q,EAAmB,yCAAG,WAAM/d,GAAN,kFACtBzC,EADsB,wDAOX,KAFT/B,EAAQmR,EAAiBqQ,WAAU,SAAA1a,GAAC,OAAIA,EAAEkM,YAAcxO,CAApB,MAIxC9B,EAAAA,GAAAA,MAAY,0BAGRgf,GAZoB,OAYFvQ,IACZgR,OAAOniB,EAAO,GAbA,SAgBxBgC,GAAW,GAhBa,UAiBlByJ,EAAIgW,uBAAuB,CAAElf,MAAO,CAAE6I,QAAAA,EAAS+F,iBAAkBuQ,KAjB/C,0BAkBlBlK,EAAAA,EAAAA,IAAM,KAlBY,QAmBxBxV,GAAW,GACXU,EAAAA,GAAAA,QAAcY,EAAE,uBAChB6L,GAAc,GArBU,kDAuBxBnN,GAAW,GACXU,EAAAA,GAAAA,MAAY,KAAIC,SAxBQ,0DAAH,sDA4BnB6f,EAAkBrR,EAAiBpO,QACvC,SAAA+D,GAAC,OAAK4K,GAAU5K,EAAEkM,UAAUyP,cAAchQ,SAASf,EAAO+Q,cAAzD,IAGH,OACE,UAACpY,EAAA,QAAD,CACEpG,MAAOX,EAAE,gCACTrE,MAAI,EACJE,QAASwJ,EACT9B,WAAS,EACThH,WAAY,CAAEW,MAAO,CAAE+P,UAAW,SALpC,WAME,SAAC,GAAD,WACE,iBAAK1L,UAAU,iBAAf,WACE,gBAAKA,UAAU,YAAf,SAA4BvB,EAAE,2CAE9B,UAACsB,EAAA,EAAD,CAAKK,UAAWyd,EAAAA,EAAYzS,GAAI,EAAhC,WACE,gBAAKpL,UAAU,OAAf,UACE,SAAC,IAAD,CACE6N,YAAapP,EAAE,iCACfT,MAAO6O,EACP9K,SAAU,SAAAxH,GAAC,OAAIuS,EAAUvS,EAAEiG,OAAOxC,MAAvB,OAGf,gBAAKgC,UAAU,QAAf,SACGwN,IACC,UAACnI,EAAA,QAAD,CACEvE,QAAQ,YACRX,MAAM,UACN,UAAQ,qBACRxF,QAAS,kBAAM8iB,EAAiB,CAAE1F,KAAM,OAA/B,EAJX,WAKE,SAAChK,EAAA,EAAD,CAASpS,MAAO,CAAEqS,SAAU,GAAInS,YAAa,KAC5C4C,EAAE,qBAMX,iBAAKuB,UAAU,OAAf,UACG2d,EAAgB1iB,KAAI,SAAAgH,GAAC,OACpB,UAAClC,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAAS/E,eAAe,gBAAgBkC,GAAG,OAA1E,WACE,UAACrL,EAAA,EAAD,CAAK+W,WAAY,EAAjB,WACE,SAAC,UAAD,CACEH,UAAU,EACVmG,SACE,SAAC/c,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAASa,GAAI,EAA5C,UACE,SAACyF,GAAA,QAAD,CAAQ5U,IAAKsC,EAAEkM,UAAWtT,KAAM,OAGpCijB,aAAa,EAPf,UAQE,iBAAMniB,MAAO,CAAEqS,SAAU,IAAzB,SAAgC/L,EAAEkM,gBAEjClM,EAAEiF,SACH,SAACnH,EAAA,EAAD,CAAKge,GAAI,IAAK/P,SAAU,GAAI4D,SAAS,QAArC,SACG3P,EAAEiF,aAIT,SAACnH,EAAA,EAAD,CAAKI,MAAM,OAAOwU,GAAG,OAAOwI,SAAU,EAAtC,SACGlb,EAAEoa,UAAYpa,EAAEoa,SAASla,OAAzB,UACMF,EAAEoa,SAASla,OADjB,YAC2B1D,EAAE,8BAC1BA,EAAE,gCAER,UAACsB,EAAA,EAAD,CAAK+W,WAAY,EAAG7N,QAAQ,OAAOgF,WAAW,SAA9C,WACE,SAACkM,EAAA,EAAD,CACExf,QAAS,kBAAM8iB,EAAiB,CAAE1F,KAAM,SAAUzZ,KAAM8a,IAAUnX,IAAzD,EACT,UAAQ,oBACRpH,KAAK,QAHP,UAIE,SAACuf,EAAA,QAAD,OAEF,SAACD,EAAA,EAAD,CACE,UAAQ,sBACRxf,QAAS,kBACP2P,EAAc,CACZlL,MAAOX,EAAE,iBACTJ,YAAaI,EAAE,gCACfkF,QAASlF,EAAE,qBACXiF,OAAQjF,EAAE,iBACVsF,UAAW,kBAAM2Z,EAAoBzb,EAAEkM,UAA5B,EACXrK,SAAU,WACR3G,GAAW,GACXmN,EAAc,KACf,GAVI,EAaTzP,KAAK,QAfP,UAgBE,SAACyf,EAAA,EAAD,WA/Cc,KAoDpBhO,EAAiBnK,SAAU,SAACC,EAAA,QAAD,UAAQ3D,EAAE,0BAK5C+e,IACC,SAACjB,GAAD,CACExE,KAAMyF,EAAczF,KACpBzZ,KAAMkf,EAAclf,KACpBgO,iBAAkB8M,IAAU9M,GAC5BxI,SAAU,kBAAM2Z,EAAiB,KAAvB,EACVhX,UAAW,WACTgX,EAAiB,KAClB,IAIJpT,IACC,SAAC,IAAD,CACEjL,MAAOiL,EAAWjL,MAClBf,YAAagM,EAAWhM,YACxBsF,QAAS0G,EAAW1G,QACpBD,OAAQ2G,EAAW3G,OACnBG,OAAQwG,EAAWxG,OACnBE,UAAWsG,EAAWtG,UACtBD,SAAUuG,EAAWvG,aAK9B,CAODyZ,GAAexhB,aAAe,CAC5ByR,eAAe,GAGjB,I,GAAA,IAAe+M,EAAAA,EAAAA,GAAegD,GAAgB,eAExC7iB,GAAMsB,EAAAA,QAAAA,IAAH,0HC5KM,SAASgiB,KACtB,IAAQvf,GAAM8C,EAAAA,EAAAA,YAAWwB,EAAAA,eAAjBtE,EACR,GAAgCqB,EAAAA,EAAAA,MAAxB8G,EAAR,EAAQA,IAAW0I,EAAnB,EAAa5P,KACb,GAQI+K,EAAAA,EAAAA,MAPFjE,EADF,EACEA,MACAD,EAFF,EAEEA,QACA2F,EAHF,EAGEA,cACA+R,EAJF,EAIEA,SACS9R,EALX,EAKEC,QACAC,EANF,EAMEA,uBACAE,EAPF,EAOEA,cAGF,GAAoCtS,EAAAA,EAAAA,WAAS,GAA7C,eAAOikB,EAAP,KAAmBC,EAAnB,KACA,GAAoClkB,EAAAA,EAAAA,WAAS,GAA7C,eAAOif,EAAP,KAAmBC,EAAnB,KACA,GAAoDlf,EAAAA,EAAAA,UAAS,MAA7D,eAAOmkB,EAAP,KAA2BC,EAA3B,KACA,GAA4BpkB,EAAAA,EAAAA,UAAS,IAArC,eAAO4S,EAAP,KAAeC,EAAf,KACA,GAA8B7S,EAAAA,EAAAA,WAAS,GAAvC,eAAOiD,GAAP,KAAgBC,GAAhB,KAEMmhB,GAAe,yCAAG,uFAClBphB,GADkB,wDAItBC,IAAW,GAJW,kBAMdyJ,EAAI2X,uBAAuB,CAAE7gB,MAAO,CAAE6I,QAAAA,EAASiY,QAASnS,KAN1C,cAOpBF,IAPoB,UAQdwG,EAAAA,EAAAA,IAAM,KARQ,OASpB9U,EAAAA,GAAAA,QAAcY,EAAE,yBAChBtB,IAAW,GAVS,kDAYpBU,EAAAA,GAAAA,MAAY,KAAMC,SAClBX,IAAW,GAbS,0DAAH,qDAiBfshB,GAAgBjY,EAAMtI,QAAO,SAAA+D,GAAC,OAAK4K,GAAU5K,EAAE7C,MAAMwO,SAASf,IAAW5K,EAAEf,KAAK0M,SAASf,EAA3D,IAEpC,OACE,UAAC,GAAD,YACE,UAAC,IAAD,YACE,gBAAK7M,UAAU,OAAf,UACE,SAAC,IAAD,CACE6N,YAAapP,EAAE,wBACfT,MAAO6O,EACP9K,SAAU,SAAAxH,GAAC,OAAIuS,EAAUvS,EAAEiG,OAAOxC,MAAvB,OAGf,gBAAKgC,UAAU,QAAf,UACE,UAAC,IAAD,CAAYkL,WAAW,cAAvB,WACE,SAACwT,EAAA,EAAD,CACE5d,QAAQ,WACR6d,gBAAiB,CAAE,UAAW,wBAC9BC,MACE,SAACF,EAAA,OAAD,CACE,UAAQ,6BACR/jB,QAAS,WACP2jB,IACD,EAJH,UAKE,UAACve,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAA/B,UACG/Q,KAAW,SAACwE,EAAA,QAAD,CAAS7G,KAAM,CAAC,GAAI,IAAKc,MAAO,CAAEE,YAAa,MAC3D,UAACkE,EAAA,EAAD,WAC4BtB,EAAzB4N,EAA2B,gCAAqC,iCACjE,SAACtM,EAAA,EAAD,CAAKiO,SAAU,GAAI7N,MAAM,OAAzB,SAEM1B,EADH4N,EACK,mCACA,6CAhBlB,SAsBG,kBACC,UAAChH,EAAA,QAAD,CACEvE,QAAQ,WACR,UAAQ,yBACRnG,QAAS,WACP0jB,GAAsB,EACvB,EALH,WAME,SAAC5P,EAAA,EAAD,CAAoB9S,MAAO,CAAEqS,SAAU,GAAInS,YAAa,KACvD4C,EAAE,0CARN,IAaF6Q,EAAS3P,MAAQ4G,IAChB,UAAClB,EAAA,QAAD,CACE1J,MAAO,CAAEkjB,WAAY,IACrB/d,QAAQ,YACRkW,KAAK,MACL7W,MAAM,UACN,UAAQ,cACRxF,QAAS,kBAAMwjB,GAAc,EAApB,EANX,WAOE,SAACpQ,EAAA,EAAD,CAASpS,MAAO,CAAEqS,SAAU,GAAInS,YAAa,KAC5C4C,EAAE,wBAOb,SAACsB,EAAA,EAAD,CAAKqL,GAAI,KAET,SAACrL,EAAA,EAAD,CAAKC,UAAU,OAAf,SACGye,GAAcxjB,KAAI,SAAAyF,GAAI,OACrB,UAACX,EAAA,EAAD,CACE,6BAAqBW,EAAKQ,MAC1BlB,UAAU,OACViJ,QAAQ,OACRgF,WAAW,SACXtT,QAAS,kBAAMwe,EAAczY,EAApB,EALX,WAOE,UAACX,EAAA,EAAD,CAAKkJ,QAAQ,OAAOgF,WAAW,SAA/B,WACE,gBACEtS,MAAO,CAAEiG,MAAO,KAChBkd,IAAI,GACJ7M,IAAK/D,IAAkB,CACrB9O,MAAOsB,EAAKtB,MACZsO,OAAQuQ,EACR9P,UAAWjC,EACXkC,UAAW,YACX2Q,WAAW,EACXxQ,eAAgBhC,OAGpB,SAACxM,EAAA,EAAD,CAAK4U,GAAI,EAAG3U,UAAU,QAAtB,SACGU,EAAKtB,YAIV,SAACW,EAAA,EAAD,CAAKC,UAAU,cAAf,SAA8BU,EAAKrC,eAEnC,SAAC,IAAD,CAAY6M,WAAW,cAAvB,UACE,gBAAKlL,UAAU,SAAf,UAAyBsZ,EAAAA,EAAAA,IAAgB5Y,EAAKQ,OAAQ,SAAC8d,EAAA,EAAD,KAAe,SAAC5E,EAAA,QAAD,UAtBlE1Z,EAAKQ,KAPS,MAmCxBgd,IACC,SAACpG,EAAD,CACEvR,QAASA,EACTzC,SAAU,kBAAMqa,GAAc,EAApB,EACV1X,UAAW,WACT0X,GAAc,GACdhS,GACD,IAIJ+M,IACC,SAAC,EAAD,CACEpV,SAAU,kBAAMqV,EAAc,KAApB,EACV1S,UAAW,WACT0S,EAAc,MACdhN,GACD,EACD/F,SAAU,WACR+S,EAAc,MACdhN,GACD,EACD4L,KAAK,SACLc,SAAUK,EAAWhY,KACrB6N,KAAMmK,IAKTkF,IAAsB,SAAC,GAAD,CAAgBta,SAAU,kBAAMua,GAAsB,EAA5B,MAGtD,CAED,IAAM3jB,GAAMsB,EAAAA,QAAAA,IAAH,2iBAmCTgiB,GAAajiB,aAAe,CAAC,C,uICtOvBkjB,GAAcjjB,EAAAA,EAAAA,UAAO,gBAAGM,EAAH,EAAGA,SAAatC,GAAhB,mBACzB,SAAC,KAAD,kBACMA,GADN,IAEEc,GAAG,iBACHgG,QAAQ,WACRoe,WAAY,CACVC,gBAAgB,SAAC,UAAD,KAElBtkB,KAAK,QAPP,SAQGyB,IATsB,GAAPN,CAAH,6pBAyCjB,K,sDC3CM6hB,E,SAAa7hB,QAAAA,IAAH,ocA8BhB,K,qOCvBMojB,GAAsBljB,EAAAA,EAAAA,eAAc,CAAC,GACnCC,EAAuBijB,EAAvBjjB,SAAuBijB,EAAbhjB,SAElB,SAASijB,EAAT,GAAkE,IAAlC/iB,EAAiC,EAAjCA,SAAmBgjB,EAAc,EAAvBC,QAClC/iB,GAASC,EAAAA,EAAAA,KACT+iB,EAAgBC,KAAKC,UAAUJ,GACrC,GAA4BrlB,EAAAA,EAAAA,UAAS,CAAC,GAAtC,eAAOgT,EAAP,KAAe0S,EAAf,KACMJ,GAAUK,EAAAA,EAAAA,UAAQ,kBAAMN,EAAWphB,QAAO,SAAA2hB,GAAM,OAAIC,EAAAA,EAAAA,IAAwBD,EAA5B,GAA9B,GAAoE,CAACL,KAE7FzO,EAAAA,EAAAA,IAAgBC,EAAAA,OAAAA,eAAsB,SAAA1S,GAChCA,GACFqhB,GAAU,SAAAI,GAAG,yBAAUA,GAAV,cAAgBzhB,EAAKuhB,QAArB,kBAAmCE,EAAIzhB,EAAKuhB,SAAYvhB,IAAxD,GAEhB,IAED,OAAoD0hB,EAAAA,EAAAA,IAAwBT,GAApEU,EAAR,EAAQA,qBAAsBC,EAA9B,EAA8BA,kBAExBC,GAAgBP,EAAAA,EAAAA,UAAQ,WAC5B,IAAMQ,GAAM,UAAQnT,GAKpB,OAJAyE,OAAO4J,KAAK2E,GAAsB7J,SAAQ,SAAA1a,GACxC,IAAMsC,EAAQoiB,EAAO1kB,IAAQ,CAAC,EAC9B0kB,EAAO1kB,IAAP,kBAAmBsC,GAAUiiB,EAAqBvkB,GACnD,IACM0kB,CACR,GAAE,CAACnT,EAAQgT,IAENI,EAAe,yCAAG,mFAClBd,EAAQpd,OAAS,GACnB3F,EAAO8jB,aAAa,CAClB5iB,MAAO,CAAE6hB,QAAAA,KAHS,2CAAH,sDAgBrBxhB,EAAAA,EAAAA,YAAU,WACRsiB,GACD,GAAE,CAACd,IAEJ,IAAMvhB,EAAQ,CACZoO,QAASiU,EACTE,aAdmB,SAAAV,GACfA,GACFrjB,EAAO8jB,aAAa,CAClB5iB,MAAO,CAAE6hB,QAAS,CAACM,KAGxB,EASCjZ,IAAKpK,EACLyQ,OAAQkT,EACRD,kBAAAA,EACAM,wBAAyBL,EAAcD,IAGzC,OAAO,SAAC/jB,EAAD,CAAU6B,MAAOA,EAAjB,SAAyB1B,GACjC,CAOD,SAASmkB,IACP,OAA6Elf,EAAAA,EAAAA,YAAW6d,GACxF,MAAO,CAAEnS,OADT,EAAQA,OACSuT,wBADjB,EAAgBA,wBAC0BN,kBAD1C,EAAyCA,kBACoBK,aAD7D,EAA4DA,aAE7D,C,oQC1DKG,GAAcxkB,EAAAA,EAAAA,eAAc,CAAC,GAC3BC,EAAuBukB,EAAvBvkB,SAAuBukB,EAAbtkB,SA4DlB,SAASukB,EAAT,GAA8C,IAAtBpa,EAAqB,EAArBA,QAASjK,EAAY,EAAZA,SAC/B,GAAgCwD,EAAAA,EAAAA,MAAxB8G,EAAR,EAAQA,IAAW0I,EAAnB,EAAa5P,KACCkhB,GAAcC,EAAAA,EAAAA,MAApBviB,KACAwiB,GAAmBC,EAAAA,EAAAA,MAAnBD,eACAZ,GAAsBO,EAAAA,EAAAA,MAAtBP,kBAER,GAAsCjmB,EAAAA,EAAAA,UAAS,IAA/C,eAAOwY,EAAP,KAAoBuO,EAApB,KACA,GAA0B/mB,EAAAA,EAAAA,UAAS,IAAnC,eAAOuM,EAAP,KAAcya,EAAd,KACA,GAAsChnB,EAAAA,EAAAA,UAAS,IAA/C,eAAO6e,EAAP,KAAoBoI,EAApB,KAEM1U,EAAWoU,EAAUhV,MAAK,SAAA3J,GAAC,OAAIA,EAAEkf,KAAKxhB,MAAQ4G,CAAnB,IAC3B0X,EArEY,SAAC1X,EAAS+I,EAAU9C,GACtC,OAAIjG,IAAY+I,EAAS3P,IAChB2P,EAASpO,KAGdsL,GACK4U,EAAAA,EAAAA,gBAAe5U,GAGjB,EACR,CA2DkB6U,CAAY9a,EAAS+I,EAAU9C,GAC1CD,EA1DqB,SAAChG,EAAS+I,EAAU9C,GAC/C,GAAIA,EAAU,CACZ,IAAM8U,EAAS9U,EAAS+U,aAAa3V,MAAK,SAAA3J,GAAC,OAAIA,EAAEvG,MAAQ8lB,EAAAA,0BAAAA,uBAAd,IAC3C,OAAOF,EAASA,EAAOtjB,MAAQ,MAChC,CAED,MAAO,SACR,CAmDuByjB,CAAqBlb,EAAS+I,EAAU9C,GACxDF,EAlDoB,SAAC/F,EAAS+I,EAAU9C,GAC9C,OAAIjG,IAAY+I,EAAS3P,IAChB2P,EAAShD,kBAAoB,GAGlCE,GACKA,EAASF,kBAGX,EACR,CAwC0BoV,CAAoBnb,EAAS+I,EAAU9C,GAC1DN,EAvCiB,SAAC3F,EAAS+I,EAAU9C,GAC3C,OAAIjG,IAAY+I,EAAS3P,IAChB4G,EAGLiG,KACYA,EAAS+U,cAAgB,IAAI3V,MAAK,SAAA3J,GAAC,MAAc,oBAAVA,EAAEvG,GAAN,KAAoC,CAAC,GAC1EsC,OAGP,EACR,CA4BuB2jB,CAAiBpb,EAAS+I,EAAU9C,GACpDH,EA3B0B,SAAC9F,EAAS+I,EAAU9C,GACpD,OAAIjG,IAAY+I,EAAS3P,KACoB,IAApC2P,EAASjD,wBAGdG,IACyC,IAApCA,EAASH,sBAInB,CAiBgCuV,CAA0Brb,EAAS+I,EAAU9C,GAEtEmE,EAAO,yCAAG,WAAMhR,GAAN,qGAEMiH,EAAIgK,aAAa,CACjCiR,SAAU,CAAEnkB,MAAO,CAAE6I,QAAS5G,IAC9BmiB,eAAgB,CAAEpkB,MAAO,CAAE6I,QAAS5G,IACpCoiB,eAAgB,CAAErkB,MAAO,CAAE6I,QAAS5G,MAL1B,OAENhC,EAFM,OAQZsjB,GACGtjB,EAAIkkB,SAASrb,OAAS,IAEpBtI,QAAO,SAAA+D,GAAC,OAAK+f,EAAAA,YAAAA,MAAAA,MAAuB,SAAApT,GAAC,OAAIA,EAAE1N,OAASe,EAAEf,QAAU0N,EAAEzI,UAAYyI,EAAEqT,GAA3C,GAA7B,IAERhnB,KAAI,SAAAgH,GAEH,OADAA,EAAE5D,YAAc4D,EAAE5D,aAAF,uCAAiD4f,EAAjD,eAAgEhc,EAAE7C,OAC3E6C,CACR,KAELif,EAAevjB,EAAImkB,eAAehJ,aAAe,IACjDkI,EAAerjB,EAAIokB,eAAetP,aAAe,IAnBrC,gDAqBZ5U,EAAAA,GAAAA,MAAY,KAAIC,SArBJ,yDAAH,sDAyBPmY,EAAQ,yCAAG,mJAA2B,CAAC,EAAnBC,EAAT,EAASA,MAAOlZ,EAAhB,EAAgBA,OACzBU,EAAQ,CAAE6I,QAAAA,GACZvJ,IACFU,EAAMV,OAASA,GAGbkZ,IACFxY,EAAMwY,MAAQA,GAGhBxY,EAAMoV,KAAO,CAAEoP,aAAc,GAVd,kBAYRtb,EAAIqP,SAAS,CAAEvY,MAAAA,KAZP,2CAAH,sDAmBdK,EAAAA,EAAAA,YAAU,WACR4S,EAAQpK,EACT,GAAE,CAACA,IAEJ,IAAM4b,EAAc,SAAA7jB,GACdA,EAAKiI,UAAYA,GACnBoK,EAAQpK,EAEX,GAEDwK,EAAAA,EAAAA,IAAgBC,EAAAA,OAAAA,WAAmBmR,EAAa,CAAC5b,KACjDwK,EAAAA,EAAAA,IAAgBC,EAAAA,OAAAA,aAAqBmR,EAAa,CAAC5b,KACnDwK,EAAAA,EAAAA,IAAgBC,EAAAA,OAAAA,aAAqBmR,EAAa,CAAC5b,IAEnD,IAAMjI,EAAO,CACXiI,QAAAA,EACA2F,cAAAA,EACA+R,SAAAA,EACAxL,YAAAA,EACAjM,MAAAA,EACAsS,YAAAA,EACAxM,iBAAAA,EACAyM,WAAYxS,IAAY+I,EAAS3P,IACjC0M,uBAAAA,EACAD,QA1Bc,kBAAMuE,EAAQpK,EAAd,EA2BdgG,cAAAA,EACA5F,SACEJ,IAAY+I,EAAS3P,KACjByiB,EAAAA,EAAAA,IAAY9S,GACZwR,EAAe,CAAEnhB,IAAK4G,EAASsZ,OAAQ,CAAE7hB,MAAOkiB,KACtD1T,SAAAA,EACA5F,IAAK,CACHqP,SAAAA,EACAO,qBArCyB,kBAAM5P,EAAI4P,qBAAqB,CAAE9Y,MAAO,CAAE6I,QAAAA,IAA1C,IAyC7B,OAAO,SAACpK,EAAD,CAAU6B,MAAOM,EAAjB,SAAwBhC,GAChC,CASD,SAASmO,IACP,OAAOlJ,EAAAA,EAAAA,YAAWmf,EACnB,CAJDC,EAAa5kB,aAAe,CAAC,C,kSC5KvBsmB,EAAOC,KAAQ,SAAAC,GAAG,OAAIC,IAAuBC,IAAQ,IAAIC,IAAIH,GAAKI,OAAQC,EAAAA,uBAAxD,IAGlBC,EAAQ,CAAC,EAER,SAASC,EAAT,GAAqG,IAAzEC,EAAwE,EAAxEA,KAAwE,IAAlEC,gBAAAA,OAAkE,MAAhDR,IAAgD,MAAxBS,aAAAA,OAAwB,SAGnGC,GAAmBC,EAAAA,EAAAA,QAAOJ,EAAK7kB,QAAO,SAAAqkB,GAAG,OAAIM,EAAMN,EAAV,IAAgBtnB,KAAI,SAAAsnB,GAAG,OAAIM,EAAMN,EAAV,KAChEa,EAAYF,EAAiB7Q,QAAQlQ,SAAW4gB,EAAK5gB,OAC3D,GAAkClI,EAAAA,EAAAA,UAASmpB,EAAYF,EAAiB7Q,QAAU,IAAlF,eAAOgR,EAAP,KAAkBC,EAAlB,KACA,GAA8BrpB,EAAAA,EAAAA,WAAUmpB,GAAxC,eAAOlmB,EAAP,KAAgBC,EAAhB,KACMomB,GAAsB3D,EAAAA,EAAAA,UAAQ,WAClC,OAAK1iB,GAAWmmB,EAAUlhB,OACjBkhB,EAAU,GAEZ,IACR,GAAE,CAACA,EAAWnmB,IA8Bf,OA5BAa,EAAAA,EAAAA,YAAU,WACR,IAAQ,OAAJglB,QAAI,IAAJA,OAAA,EAAAA,EAAM5gB,QAAS,IAAMihB,EAAW,CAClC,IAAMI,EAAQ,yCAAG,4FAEfrmB,GAAW,IACP8lB,EAHW,iCAIGQ,EAAAA,EAAAA,cAAaV,EAAM,CAAEC,gBAAAA,IAJxB,QAIbU,EAJa,QAKLtN,SAAQ,SAAArH,GACd8T,EAAM9T,EAAKwT,KAAOxT,CACnB,IAPY,yCASQ0U,EAAAA,EAAAA,cACnBV,EAAK7kB,QAAO,SAAAqkB,GAAG,OAAKM,EAAMN,EAAX,IACf,CAAES,gBAAAA,IAXS,eAaN5M,SAAQ,SAAArH,GACb8T,EAAM9T,EAAKwT,KAAOxT,CACnB,IACD2U,EAAUX,EAAK9nB,KAAI,SAAAsnB,GAAG,OAAIM,EAAMN,EAAV,IAAgBzP,MAAK,SAAC6Q,EAAGC,GAAJ,OAAUA,EAAEC,MAAQF,EAAEE,KAAtB,IAhB9B,QAkBfP,EAAaI,GACbvmB,GAAW,GAnBI,4CAAH,qDAqBdqmB,GACD,CAEF,GAAE,CAACT,EAAME,EAAcG,IAEjB,CACLC,UAAAA,EACAnmB,QAAAA,EACAqmB,oBAAAA,EACAO,eAAc,OAAEP,QAAF,IAAEA,OAAF,EAAEA,EAAqBhB,IAExC,CAMM,SAASwB,EAAyBvX,GACvC,IAAQwX,GAAYjD,EAAAA,EAAAA,MAAZiD,QACAtlB,GAAW6C,EAAAA,EAAAA,YAAWwB,EAAAA,eAAtBrE,OACFqkB,GAAOnD,EAAAA,EAAAA,UAAQ,WACnB,OAAKpT,GAIEyX,EAAAA,EAAAA,IAAgB,CAAEtkB,IAAK6M,EAAS2U,KAAKxhB,IAAKqkB,QAAAA,EAASngB,QAAQqgB,EAAAA,EAAAA,IAAqB1X,EAAU9N,KAHxF,EAIV,GAAE,CAAC8N,EAAU9N,EAAQslB,IACtB,EAAyDlB,EAAiB,CAAEC,KAAAA,EAAMC,gBAAiBX,IACnG,MAAO,CAAEU,KAAAA,EAAM7lB,QADf,EAAQA,QACgBqmB,oBADxB,EAAiBA,oBAC4BO,eAD7C,EAAsCA,eAEvC,CAMM,SAAS9D,EAAwBT,GAEtC,IAEI4E,EADJ,EAA+CrB,EAAiB,CAAEC,MADrDnD,EAAAA,EAAAA,UAAQ,kBAAML,EAAQtkB,KAAI,SAAA8T,GAAI,OAAIqV,EAAAA,EAAAA,IAAarV,EAAjB,GAAtB,GAA+C,CAACwQ,IACGyD,gBAAiBX,IAAjFgB,EAAR,EAAQA,UAAWnmB,EAAnB,EAAmBA,QAAS4mB,EAA5B,EAA4BA,eAE5B,GAAI5mB,EACFinB,EAAS,CACPlE,qBAAsBV,EAAQ8E,QAAO,SAACC,EAAKC,GAAN,eAAC,UAAmBD,GAApB,cAA0BC,EAAM,CAAErnB,SAAS,IAA3C,GAAsD,CAAC,GAC5FgjB,kBAAmB,UAEhB,CAAC,IAAD,EACCD,EAAuBoD,EAAUgB,QAAO,SAACC,EAAKC,GAElD,IAAM1E,EAAS,IAAI6C,IAAI6B,EAAIhC,KAAKiC,SAEhC,OADAF,EAAIzE,IAAJ,kBAAmB0E,GAAnB,IAAwB1E,OAAAA,IACjByE,CACR,GAAE,CAAC,GAEEG,GAAgB,UAAApB,EAAUzX,MAAK,SAAAmD,GAAI,OAAIA,EAAK2V,UAAT,WAAnB,eAAyCnC,MAAOuB,EACtEK,EAAS,CACPlE,qBAAAA,EACAC,kBAAmBuE,EAAgB,IAAI/B,IAAI+B,GAAeD,SAAW,KAExE,CACD,OAAOL,CACR,C,wBClHD,MAA+DQ,EAAQ,OAA/DC,EAAR,EAAQA,cAAeC,EAAvB,EAAuBA,cAAeC,EAAtC,EAAsCA,qBA4FtCC,EAAOC,QA7EmB,WAWf,IACLC,EADK,yDAAP,CAAC,EAAM,IAVTvX,OAAAA,OAUS,MAVA,GAUA,MATTtO,MAAAA,OASS,MATD,GASC,MART+O,UAAAA,OAQS,MARG,GAQH,MAPTC,UAAAA,OAOS,MAPG,GAOH,MANTG,eAAAA,OAMS,MANQ,UAMR,MALTF,eAAAA,OAKS,MALQ,GAKR,EAJTrB,EAIS,EAJTA,QACA+R,EAGS,EAHTA,UAGS,IAFTnd,MAAAA,OAES,MAFD,OAEC,MADToN,OAAAA,OACS,MADA,OACA,EAGPiW,EADqB,YAAnB1W,EACOsW,EACmB,SAAnBtW,EACAuW,EAAqB3W,GAErByW,EAAcrW,GAGzB,IAAM2W,EAAS,eAAH,OAAkBtjB,EAAlB,qBAAoCoN,EAApC,4QAGN5P,EAAM+C,QAAU,EACX,GAGL/C,EAAM+C,QAAU,EACX,GAGF,GAXG,uFAYuE/C,EAAM+lB,cAZ7E,uVAeNzX,EAAOvL,OAAS,GACX,GAGF,GAnBG,8EAoB8DuL,EApB9D,swFA4BiBW,EA5BjB,iQA+BsLD,EA/BtL,ouGAkCyKD,EAlCzK,uQAsCM8W,EAAOG,WAtCb,6CAuCiBH,EAAOI,SAvCxB,4CA2CZrY,EACI,6KACA,GA7CQ,YAiDZ,OAAI+R,EACK,2BAAP,OAAkCuG,mBAAmBJ,IAGhDA,CACR,C,wBC1FD,IAAQK,EAAUZ,EAAQ,MAAlBY,MACAC,EAAWb,EAAQ,OAAnBa,OAYFZ,EAAgB,SAACa,GACrB,GAAIA,EAAW,CACb,IAAMC,EAmDV,SAAkBD,GAChB,IAMIE,EACAC,EAPEzlB,EAAQslB,EAAUrV,QAAQ,IAAK,IAC/BxI,EAAIie,SAAS1lB,EAAM2lB,MAAM,EAAG,GAAI,IAAM,IACtCC,EAAIF,SAAS1lB,EAAM2lB,MAAM,EAAG,GAAI,IAAM,IACtClC,EAAIiC,SAAS1lB,EAAM2lB,MAAM,EAAG,GAAI,IAAM,IACtCE,EAAMC,KAAKD,IAAIpe,EAAGme,EAAGnC,GACrBsC,EAAMD,KAAKC,IAAIte,EAAGme,EAAGnC,GAGrBuC,GAAKH,EAAME,GAAO,EAExB,GAAIF,IAAQE,EACVP,EAAI,EACJC,EAAI,MACC,CACL,IAAMnhB,EAAIuhB,EAAME,EAEhB,OADAN,EAAIO,EAAI,GAAM1hB,GAAK,EAAIuhB,EAAME,GAAOzhB,GAAKuhB,EAAME,GACvCF,GACN,KAAKpe,EACH+d,GAAKI,EAAInC,GAAKnf,GAAKshB,EAAInC,EAAI,EAAI,GAC/B,MACF,KAAKmC,EACHJ,GAAK/B,EAAIhc,GAAKnD,EAAI,EAClB,MACF,KAAKmf,EACH+B,GAAK/d,EAAIme,GAAKthB,EAAI,EAItBkhB,GAAK,CACN,CAED,MAAO,CAACA,EAAGC,EAAGO,EACf,CApFmBC,CAASX,GAKnBY,EAAS,CAACX,EAAQ,IACpBA,EAAQ,GAAK,GACfW,EAAOrQ,KAAK,IAEZqQ,EAAOrQ,KAAK0P,EAAQ,IAGlBA,EAAQ,GAAK,GACfW,EAAOrQ,KAAK,IACH0P,EAAQ,GAAK,GACtBW,EAAOrQ,KAAK,IAEZqQ,EAAOrQ,KAAK0P,EAAQ,IAGtB,IAAMY,EAAe,CAACD,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAK,IAElDE,EAAWC,EAAQ,WAAR,EAAYH,GAG7B,MAAO,CACLjB,WAHqBoB,EAAQ,WAAR,EAAYF,GAIjCjB,SAAUkB,EAEb,CAED,MAAO,CACLnB,WAAY,UACZC,SAAU,UAEb,EAED,SAASoB,EAAwB9mB,GAC/B,MAAO,IAAP,OAAW4lB,EAAMC,EAAOkB,KAAKC,QAAQhnB,IAAMmmB,OAAO,GACnD,CAuDD,SAASU,EAASb,EAAGC,EAAGO,GACtB,IAAIve,EACAme,EACAnC,EAEJ,GAAU,IAANgC,EACFhe,EAAIue,EACJJ,EAAII,EACJvC,EAAIuC,MACC,CACL,IAAMS,EAAU,SAACC,EAAGC,EAAGC,GACrB,IAAItoB,EAAIsoB,EAGR,OAFItoB,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUooB,EAAc,GAATC,EAAID,GAASpoB,EACpCA,EAAI,GAAcqoB,EAClBroB,EAAI,EAAI,EAAUooB,GAAKC,EAAID,IAAM,EAAI,EAAIpoB,GAAK,EAC3CooB,CACR,EAEKC,EAAIX,EAAI,GAAMA,GAAK,EAAIP,GAAKO,EAAIP,EAAIO,EAAIP,EACxCiB,EAAI,EAAIV,EAAIW,EAClBlf,EAAIgf,EAAQC,EAAGC,EAAGnB,EAAI,EAAI,GAC1BI,EAAIa,EAAQC,EAAGC,EAAGnB,GAClB/B,EAAIgD,EAAQC,EAAGC,EAAGnB,EAAI,EAAI,EAC3B,CAED,MAAO,IAAP,OAAW,CAACM,KAAKe,MAAU,IAAJpf,GAAUqe,KAAKe,MAAU,IAAJjB,GAAUE,KAAKe,MAAU,IAAJpD,IAC9D3oB,KAAI,SAACV,GAAD,OAAOA,EAAE0sB,SAAS,IAAIC,SAAS,EAAG,EAAlC,IACJC,KAAK,IACT,CAEDpC,EAAOC,QAAU,CACfJ,cAAAA,EACAE,qBAvFF,SAA8BnlB,GAC5B,OAAOilB,EAAc6B,EAAwB9mB,GAC9C,EAsFCklB,cA7IoB,CACpBO,WAAY,UACZC,SAAU,WA4IVoB,wBAAAA,E","sources":["components/actions.js","contexts/audit-log.js","components/relative-time.js","components/audit-logs.js","components/click-to-copy.js","hooks/mobile-width.js","components/confirm.js","components/delete-confirm.js","components/passport-tag.js","components/team/members/invite-member.js","components/team/members/transfer-node.js","components/team/members/passport-issuances.js","components/team/members/issue-passport.js","components/team/members/passports.js","components/team/members/toggle-user-approval.js","components/team/members/util.js","components/team/members/member.js","components/team/members/invitations.js","components/team/members/actions.js","components/team/members/index.js","components/team/passports/mutate-role.js","components/team/passports/detail.js","icons/long-arrow.svg","components/team/passports/trusted-issuer.js","components/team/passports/trusted-issuers.js","components/team/passports/index.js","components/team/search-input.js","components/team/styles/list-header.js","contexts/domain-status.js","contexts/team.js","hooks/url-evaluation.js","../../auth/lib/util/create-passport-svg.js","../../auth/lib/util/passport-color.js"],"sourcesContent":["import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\n\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\n\nexport default function Actions({ actions, ...props }) {\n const [anchorEl, setAnchorEl] = useState(null);\n\n const open = Boolean(anchorEl);\n\n const onOpen = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(e.currentTarget);\n };\n\n const onClose = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(null);\n };\n\n return (\n <Div {...props}>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"actions-menu\"\n aria-haspopup=\"true\"\n data-cy=\"actions-menu-icon\"\n onClick={onOpen}\n size=\"large\">\n <MoreHorizIcon />\n </IconButton>\n\n <Menu\n id=\"actions-menu\"\n data-cy=\"actions-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={onClose}\n PaperProps={{}}>\n {actions.map((action, index) => {\n if (typeof action === 'function') {\n return action({ close: onClose });\n }\n const { icon, text, onClick, disabled = false, ...opts } = action;\n return (\n <MenuItem\n {...opts}\n disabled={disabled}\n dense\n onClick={e => {\n onClose();\n onClick(e);\n }}\n // eslint-disable-next-line react/no-array-index-key\n key={index}>\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>{icon}</ListItemIcon>\n <ListItemText primary={text} />\n </MenuItem>\n );\n })}\n </Menu>\n </Div>\n );\n}\n\nActions.propTypes = {\n actions: PropTypes.array,\n};\n\nActions.defaultProps = {\n actions: [],\n};\n\nconst Div = styled.div``;\n","import { createContext, useState, useContext, useEffect } from 'react';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport getClient from '../libs/node';\n\nconst AuditLogContext = createContext({});\nconst { Provider, Consumer } = AuditLogContext;\n\n// eslint-disable-next-line react/prop-types\nfunction AuditLogProvider({ children, scope = '' }) {\n const client = getClient();\n const [auditLogs, setAuditLogs] = useState([]);\n const [paging, setPaging] = useState({ total: 0, pageSize: 20, pageCount: 0, page: 1 });\n const [loading, setLoading] = useState(false);\n const [category, setCategory] = useLocalStorage(`audit-log-category-${scope}`, 'all');\n\n const fetchLogs = async ({ page = 1, silent = true } = {}) => {\n if (loading) {\n return;\n }\n if (!silent) {\n setLoading(true);\n }\n try {\n // eslint-disable-next-line no-shadow\n const res = await client.getAuditLogs({\n input: { paging: { page }, category: category === 'all' ? '' : category, scope },\n });\n setAuditLogs(res.list);\n setPaging(res.paging);\n setLoading(false);\n } catch (err) {\n Toast.error(err.message);\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchLogs({ page: 1, silent: false });\n }, []); // eslint-disable-line\n\n useEffect(() => {\n fetchLogs({ page: 1, silent: false });\n }, [category]); // eslint-disable-line\n\n const value = {\n loading,\n fetch: fetchLogs,\n filter: { category, scope },\n categories: [\n { value: 'all', label: 'All', description: '' },\n { value: 'blocklet', label: 'Blocklet Management', description: '' },\n { value: 'server', label: 'Server Management', description: '' },\n { value: 'team', label: 'Team Management', description: '' },\n { value: 'security', label: 'Security', description: '' },\n { value: 'certificates', label: 'Certificate Management', description: '' },\n { value: 'integrations', label: 'Integration Management', description: '' },\n { value: 'gateway', label: 'Gateway', description: '' },\n ],\n setCategory,\n data: auditLogs,\n paging,\n };\n\n return <Provider value={{ auditLogs: value }}>{children}</Provider>;\n}\n\nfunction useAuditLogContext() {\n const { auditLogs } = useContext(AuditLogContext);\n return auditLogs;\n}\n\nexport { AuditLogContext, AuditLogProvider, Consumer as AuditLogConsumer, useAuditLogContext };\n","import PropTypes from 'prop-types';\nimport prettyMs from 'pretty-ms-i18n';\nimport Tooltip from '@mui/material/Tooltip';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { formatToDatetime } from '../libs/util';\n\nexport default function RelativeTime({ value }) {\n const { t, locale } = useLocaleContext();\n if (!value) {\n return '-';\n }\n\n const prettyOption = {\n locale: locale === 'zh' ? 'zh_CN' : 'zh_US',\n compact: true,\n };\n\n const valTime = new Date(value).getTime();\n const now = Date.now();\n\n if (valTime > now) {\n const time = prettyMs(valTime - now, prettyOption);\n\n return (\n <Tooltip title={formatToDatetime(value)} placement=\"top-end\" enterTouchDelay={0}>\n <span>{t('common.afterTime', { time })}</span>\n </Tooltip>\n );\n }\n\n const time = prettyMs(now - valTime, prettyOption);\n return (\n <Tooltip title={formatToDatetime(value)} placement=\"top-end\" enterTouchDelay={0}>\n <span>{t('common.timeAgo', { time })}</span>\n </Tooltip>\n );\n}\n\nRelativeTime.propTypes = {\n value: PropTypes.any,\n};\n\nRelativeTime.defaultProps = {\n value: '',\n};\n","/* eslint-disable react/prop-types */\nimport styled from '@emotion/styled';\nimport { Link } from 'react-router-dom';\nimport MarkdownPreview from '@uiw/react-markdown-preview';\n\nimport DidAvatar from '@arcblock/did-connect/lib/Avatar';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Pagination from '@mui/lab/Pagination';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\n\nimport { useAuditLogContext, AuditLogProvider } from '../contexts/audit-log';\nimport { useNodeContext } from '../contexts/node';\nimport RelativeTime from './relative-time';\n\nconst getUserLink = (log, info) => {\n if (log.scope === info.did) {\n return `/team/members?did=${log.actor.did}`;\n }\n\n return `/blocklets/${log.scope}/members?did=${log.actor.did}`;\n};\n\nfunction AuditLog({ log }) {\n const { info } = useNodeContext();\n return (\n <Box className=\"log-entry\" data-cy=\"log-entry\">\n <div className=\"log-author\">\n <DidAvatar did={log.actor.did} size={36} shape=\"circle\" />\n </div>\n <div className=\"log-body\">\n <Typography className=\"log-header\" color=\"textSecondary\" component=\"p\" gutterBottom>\n <Link to={getUserLink(log, info)} target=\"_blank\">\n {log.actor.fullName}\n {log.actor.role ? `(${log.actor.role})` : ''}\n </Link>{' '}\n - {log.action}\n </Typography>\n <Typography className=\"log-content\" color=\"textPrimary\" component=\"div\" data-color-mode=\"light\" gutterBottom>\n <MarkdownPreview source={log.content} linkTarget=\"_blank\" />\n </Typography>\n <Box className=\"log-meta\" variant=\"body2\">\n {!!log.ip && (\n <Typography component=\"span\" color=\"textSecondary\">\n {`IP: ${log.ip}`}\n </Typography>\n )}\n {!!log.env.os?.name && (\n <Typography component=\"span\" color=\"textSecondary\">\n {log.env.os.name}({log.env.os.version})\n </Typography>\n )}\n {!!log.env.browser?.name && (\n <Typography component=\"span\" color=\"textSecondary\">\n {log.env.browser.name}({log.env.browser.version})\n </Typography>\n )}\n <Typography component=\"span\" color=\"textSecondary\">\n <RelativeTime value={log.createdAt} />\n </Typography>\n </Box>\n </div>\n </Box>\n );\n}\n\nfunction AuditLogs() {\n const { t } = useLocaleContext();\n const { data, loading, paging, filter, categories, setCategory, fetch } = useAuditLogContext();\n\n if (loading) {\n return (\n <div style={{ textAlign: 'center', marginTop: '50px' }}>\n <Spinner />\n </div>\n );\n }\n\n return (\n <Div data-cy=\"audit-logs\">\n <Box className=\"log-controls\">\n <FormControl style={{ width: '240px' }} variant=\"outlined\">\n <InputLabel>{t('common.filter')}</InputLabel>\n <Select\n data-cy=\"filter-by-category-trigger\"\n value={filter.category}\n onChange={e => setCategory(e.target.value)}\n fullWidth\n label={t('common.category')}\n disabled={loading}>\n {categories.map(x => (\n <MenuItem key={x.label} value={x.value} data-cy={`filter-by-category-${x.value}`}>\n <Box>\n <span>{x.label}</span>\n </Box>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n {data.length === 0 && <Empty>{t('common.empty')}</Empty>}\n {data.length > 0 && data.map(x => <AuditLog key={x.id} log={x} />)}\n {paging.pageCount > 1 && (\n <Pagination\n page={paging.page}\n count={paging.pageCount}\n onChange={(e, page) => fetch({ page })}\n showFirstButton\n showLastButton\n />\n )}\n </Div>\n );\n}\n\nexport default function WrappedAuditLogs({ scope }) {\n return (\n <AuditLogProvider scope={scope}>\n <AuditLogs />\n </AuditLogProvider>\n );\n}\n\nconst Div = styled.div`\n .log-controls {\n display: flex;\n justify-content: space-between;\n }\n .log-entry {\n display: flex;\n margin: 16px 0;\n\n .log-author {\n margin-right: 8px;\n }\n\n .log-body {\n flex: 1;\n\n a {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n\n .log-header {\n }\n\n .log-content {\n p {\n margin-bottom: 4px;\n }\n ul,\n ol {\n padding-left: 2rem;\n }\n li {\n list-style-type: disc;\n }\n }\n\n .log-meta {\n margin-top: 4px;\n\n span {\n font-size: 0.8rem;\n display: inline-block;\n margin-right: 8px;\n padding-right: 8px;\n border-right: 1px solid #ccc;\n\n &:last-of-type {\n border-right: none;\n }\n }\n }\n }\n }\n`;\n","import { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport Copy from '@arcblock/ux/lib/ClickToCopy';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function ClickToCopy({ children, ...rest }) {\n const { t } = useContext(LocaleContext);\n return (\n <Copy tip={t('common.copyTip')} copiedTip={t('common.copiedTip')} {...rest}>\n {children}\n </Copy>\n );\n}\n\nClickToCopy.propTypes = {\n children: PropTypes.any.isRequired,\n};\n","import { useTheme } from '@mui/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\n\nfunction useMobileWidth() {\n const theme = useTheme();\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('md'));\n const minWidth = isBreakpointsDownSm ? 300 : theme.breakpoints.values.sm;\n return { minWidth };\n}\n\nexport default useMobileWidth;\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\n\nimport Dialog from '@mui/material/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Alert from '@mui/material/Alert';\nimport useTheme from '@mui/material/styles/useTheme';\nimport useMediaQuery from '@mui/material/useMediaQuery';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { formatError } from '../libs/util';\nimport useMobileWidth from '../hooks/mobile-width';\n\nexport default function ConfirmDialog({\n title,\n description,\n showCancel,\n cancel,\n confirm,\n color,\n params: initialParams,\n onCancel,\n onConfirm,\n}) {\n const [params, setParams] = useState(initialParams);\n const [open, setOpen] = useState(true);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t: changeLocale } = useLocaleContext();\n const theme = useTheme();\n\n const onCallback = async cb => {\n if (typeof cb === 'function') {\n setLoading(true);\n try {\n await cb(params);\n setOpen(false);\n } catch (err) {\n setError(formatError(err));\n console.error(err);\n } finally {\n setLoading(false);\n }\n } else {\n setOpen(false);\n }\n };\n\n const t = typeof title === 'function' ? title() : title;\n const d = typeof description === 'function' ? description(params, setParams, setError) : description;\n\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('md'));\n\n const handleClick = e => {\n e.stopPropagation();\n };\n const { minWidth } = useMobileWidth();\n\n return (\n <StyledDialog onClick={handleClick} fullScreen={isBreakpointsDownSm} open={open} style={{ minWidth }}>\n <DialogTitle>{t}</DialogTitle>\n <DialogContent style={{ minWidth }}>\n <DialogContentText component=\"div\">{d}</DialogContentText>\n {!!error && (\n <Alert severity=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </DialogContent>\n <DialogActions className=\"delete-actions\" style={{ padding: '8px 24px 24px' }}>\n {showCancel && (\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onCancel);\n }}\n color=\"inherit\"\n data-cy=\"cancel-confirm-dialog\"\n size=\"small\">\n {cancel || changeLocale('common.cancel')}\n </Button>\n )}\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onConfirm);\n }}\n color={color}\n size=\"small\"\n // eslint-disable-next-line no-underscore-dangle\n disabled={params.__disableConfirm || loading}\n variant=\"contained\"\n data-cy=\"submit-confirm-dialog\"\n autoFocus>\n {loading && <Spinner size={[16, 10]} />}\n {confirm}\n </Button>\n </DialogActions>\n </StyledDialog>\n );\n}\n\nConfirmDialog.propTypes = {\n title: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n showCancel: PropTypes.bool,\n cancel: PropTypes.string,\n color: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nConfirmDialog.defaultProps = {\n onCancel: () => {},\n showCancel: true,\n cancel: '',\n confirm: 'Confirm',\n color: 'error',\n params: {},\n};\n\nconst StyledDialog = styled(Dialog)`\n .delete-actions .Mui-disabled {\n color: rgba(0, 0, 0, 0.26) !important;\n box-shadow: none;\n background-color: rgba(0, 0, 0, 0.12) !important;\n }\n`;\n","/* eslint-disable react/no-unstable-nested-components */\n/* eslint-disable react/no-danger */\n/* eslint-disable react/prop-types */\nimport PropTypes from 'prop-types';\n\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\n\nimport Alert from '@mui/material/Alert';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ClickToCopy from './click-to-copy';\n\nimport Confirm from './confirm';\n\nexport default function CancelConfirm({\n title,\n description,\n confirmPlaceholder,\n cancel,\n confirm,\n params: initialParams,\n onCancel,\n onConfirm,\n keyName,\n}) {\n const { t } = useLocaleContext();\n\n const confirmSetting = {\n title: () => (\n <div>\n {title}\n {` (${keyName})`}\n </div>\n ),\n description: (params, setParams) => {\n const setValue = value => {\n // eslint-disable-next-line no-underscore-dangle\n setParams({ ...value, __disableConfirm: value.__disableConfirm });\n };\n\n return (\n <div>\n <Alert severity=\"warning\" style={{ width: '100%' }}>\n {t('common.notice')}\n </Alert>\n <div style={{ marginTop: 24, marginBottom: 24 }} dangerouslySetInnerHTML={{ __html: description }} />\n <div style={{ marginBottom: 24 }}>\n {t('common.click')}:<ClickToCopy data-cy=\"click-copy\">{keyName}</ClickToCopy>\n </div>\n <Typography component=\"div\">\n <TextField\n label={confirmPlaceholder}\n autoComplete=\"off\"\n data-cy=\"delete-confirm-input\"\n variant=\"outlined\"\n fullWidth\n autoFocus\n value={params.inputVal}\n onChange={e => {\n setValue({ ...params, inputVal: e.target.value, __disableConfirm: keyName !== e.target.value });\n }}\n />\n </Typography>\n </div>\n );\n },\n confirm,\n cancel,\n onConfirm,\n onCancel,\n params: {\n inputVal: '',\n __disableConfirm: true,\n ...initialParams,\n },\n };\n\n return (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n );\n}\n\nCancelConfirm.propTypes = {\n title: PropTypes.any.isRequired,\n keyName: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n confirmPlaceholder: PropTypes.any.isRequired,\n cancel: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nCancelConfirm.defaultProps = {\n onCancel: () => {},\n cancel: '',\n confirm: 'Confirm',\n params: {},\n};\n","import PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\n\nimport CloseIcon from '@mui/icons-material/Close';\n\nexport default function PassportTag(props) {\n const { passport, onDelete, ...rest } = props;\n return (\n <Tag {...rest}>\n {passport.title || passport.name}{' '}\n {!!onDelete && <CloseIcon data-cy=\"delete-issuance\" className=\"delete\" onClick={onDelete} />}\n </Tag>\n );\n}\n\nPassportTag.propTypes = {\n passport: PropTypes.object.isRequired,\n onDelete: PropTypes.func,\n};\n\nPassportTag.defaultProps = {\n onDelete: null,\n};\n\nconst Tag = styled.span`\n display: inline-flex;\n padding: 2px 8px;\n background: ${props => props.theme.palette.primary.main};\n border-radius: 100vw;\n font-weight: 400;\n font-size: 12px;\n line-height: 22px;\n color: #fff;\n align-items: center;\n .delete {\n font-size: 1em;\n margin-left: 6px;\n cursor: pointer;\n }\n`;\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Typography from '@mui/material/Typography';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport ClickToCopy from '../../click-to-copy';\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError, getInviteLink, formatToDatetime } from '../../../libs/util';\n\nexport default function InviteMember({ teamDid, roles, onCancel, onSuccess, onError, endpoint }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [inviteInfo, setInviteInfo] = useState('');\n const [role, setRole] = useState('');\n const [remark, setRemark] = useState('');\n\n const onCreate = async () => {\n if (!role) {\n setError(t('team.member.error.passportEmpty'));\n return;\n }\n\n const trimRemark = remark.trim();\n\n setError(null);\n setLoading(true);\n\n try {\n const { inviteInfo: info } = await api.createMemberInvitation({\n input: { teamDid, role, remark: trimRemark },\n });\n setInviteInfo(info);\n setActiveStep(1);\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n const steps = [\n {\n body: (\n <Typography component=\"div\">\n <FormControl style={{ width: '100%' }} variant=\"outlined\">\n <InputLabel>{t('common.passport')}</InputLabel>\n <Select\n data-cy=\"invite-member-select-role\"\n value={role}\n onChange={e => {\n setError(null);\n setRole(e.target.value);\n }}\n fullWidth\n label={t('common.passport')}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onCreate();\n }\n }}>\n {roles\n .filter(d => d.name !== 'owner')\n .map(r => (\n <MenuItem key={r.name} value={r.name} data-cy={`invite-member-select-option-${r.name}`}>\n <span>{r.title || r.name}</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <div style={{ marginTop: 20, marginBottom: 10 }} />\n <TextField\n label={t('common.remark')}\n autoComplete=\"off\"\n variant=\"outlined\"\n fullWidth\n style={{ marginBottom: 8 }}\n value={remark}\n onChange={e => {\n setError(null);\n setRemark(e.target.value);\n }}\n disabled={loading}\n data-cy=\"invite-member-input-remark\"\n />\n <div style={{ marginTop: 20, marginBottom: 10 }} />\n </Typography>\n ),\n cancel: t('common.cancel'),\n confirm: t('team.member.inviteDialog.createInviteLink'),\n onCancel,\n onConfirm: onCreate,\n },\n {\n // eslint-disable-next-line react/no-unstable-nested-components\n body: () => {\n const link = getInviteLink({\n inviteId: inviteInfo.inviteId,\n endpoint,\n });\n return (\n <div>\n <Bold>\n {t('team.member.inviteDialog.createSuccessTip', { expireDate: formatToDatetime(inviteInfo.expireDate) })}\n </Bold>\n <div style={{ marginTop: '40px' }} />\n <ClickToCopy>{link}</ClickToCopy>\n </div>\n );\n },\n confirm: t('common.confirm'),\n onConfirm: onSuccess,\n },\n ];\n const step = steps[activeStep];\n\n return (\n <Dialog\n title={t('common.invite')}\n fullWidth\n open\n showCloseButton={false}\n actions={\n <>\n {step.cancel && (\n <Button onClick={step.onCancel} color=\"inherit\" size=\"small\">\n {step.cancel}\n </Button>\n )}\n <Button\n onClick={step.onConfirm}\n color=\"primary\"\n size=\"small\"\n disabled={loading || !role}\n variant=\"contained\"\n autoFocus>\n {loading && <Spinner size={[16, 10]} />}\n {step.confirm}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">{typeof step.body === 'function' ? step.body() : step.body}</DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\">\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nInviteMember.propTypes = {\n teamDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n roles: PropTypes.array,\n endpoint: PropTypes.string,\n};\n\nInviteMember.defaultProps = {\n onError: () => {},\n roles: [],\n endpoint: '',\n};\n\nconst Bold = styled.div`\n font-size: 16px;\n font-weight: bold;\n`;\n","/* eslint-disable react/no-unstable-nested-components */\nimport { useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport useAsync from 'react-use/lib/useAsync';\nimport get from 'lodash/get';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\n\nimport Connect from '@arcblock/did-connect/lib/Connect';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport ClickToCopy from '../../click-to-copy';\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError, getInviteLink, formatToDatetime, getWebWalletUrl } from '../../../libs/util';\nimport { SessionContext } from '../../../contexts/session';\n\nexport default function TransferMember({ teamDid, onCancel, onSuccess, onError, endpoint }) {\n const { api, info } = useNodeContext();\n const { api: sessionAPI } = useContext(SessionContext);\n const [loading, setLoading] = useState(false);\n const { locale } = useLocaleContext();\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n const [openTransferNFTAuth, setOpenTransferNFTAuth] = useState(false);\n const [activeStep, setActiveStep] = useState(0);\n const [inviteInfo, setInviteInfo] = useState('');\n const [remark, setRemark] = useState('');\n\n const needTransferNFT = !!get(info, 'ownerNft.did');\n\n const delegationState = useAsync(async () => {\n if (needTransferNFT) {\n const { state } = await api.getDelegationState();\n return state;\n }\n\n return { delegated: true };\n });\n\n if (delegationState.loading) {\n return (\n <Dialog title={t('team.transferNode.inviteDialog.title')} fullWidth open onClose={onCancel}>\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Spinner />\n </div>\n </Dialog>\n );\n }\n\n if (delegationState.error) {\n return (\n <Dialog title={t('team.transferNode.inviteDialog.title')} fullWidth open onClose={onCancel}>\n <Alert type=\"error\" variant=\"icon\">\n {formatError(delegationState.error)}\n </Alert>\n </Dialog>\n );\n }\n\n const onCreate = async () => {\n setError(null);\n setLoading(true);\n\n try {\n const { inviteInfo: tmpInviteInfo } = await api.createTransferInvitation({\n input: { teamDid, role: 'owner', remark: remark.trim() },\n });\n setInviteInfo(tmpInviteInfo);\n setActiveStep(steps.length - 1); // 跳转到最后一步\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n const handleTransferNFT = () => {\n setOpenTransferNFTAuth(true);\n setActiveStep(1);\n };\n\n const handleCancelTransferNFT = () => {\n setOpenTransferNFTAuth(false);\n setActiveStep(0);\n };\n\n const steps = [\n {\n body: (\n <Typography component=\"div\">\n <Alert type=\"warning\">\n <Typography>{t('team.transferNode.inviteDialog.tips.progress')}</Typography>\n <Typography>{t('team.transferNode.inviteDialog.tips.newOwnerPermissions')}</Typography>\n </Alert>\n <Alert type=\"warning\">\n <Typography>{t('team.transferNode.inviteDialog.tips.revoke')}</Typography>\n </Alert>\n <div style={{ marginTop: 20, marginBottom: 10 }} />\n <TextField\n label={t('common.remark')}\n autoComplete=\"off\"\n variant=\"outlined\"\n fullWidth\n style={{ marginBottom: 8 }}\n value={remark}\n onChange={e => {\n setError(null);\n setRemark(e.target.value);\n }}\n disabled={loading}\n data-cy=\"transfer-node-input-remark\"\n />\n <div style={{ marginTop: 20, marginBottom: 10 }} />\n </Typography>\n ),\n cancel: t('common.cancel'),\n confirm: t('team.transferNode.inviteDialog.createInviteLink'),\n onCancel,\n onConfirm: needTransferNFT && !get(delegationState, 'value.delegated') ? handleTransferNFT : onCreate,\n },\n {\n body: () => {\n return (\n <Connect\n action=\"delegate-transfer-nft\"\n open={openTransferNFTAuth}\n locale={locale}\n checkFn={sessionAPI.get}\n onClose={handleCancelTransferNFT}\n onSuccess={onCreate}\n checkTimeout={5 * 60 * 1000}\n webWalletUrl={getWebWalletUrl(info)}\n extraParams={{ targetDID: info.did }}\n messages={{\n title: t('team.transferNode.delegateDialog.title'),\n scan: t('team.transferNode.delegateDialog.scan'),\n confirm: t('team.transferNode.delegateDialog.confirm'),\n success: t('team.transferNode.delegateDialog.success'),\n }}\n popup\n />\n );\n },\n },\n {\n body: () => {\n const link = getInviteLink({\n inviteId: inviteInfo.inviteId,\n endpoint,\n });\n return (\n <div>\n <Bold>\n {t('team.transferNode.inviteDialog.createSuccessTip', {\n expireDate: formatToDatetime(inviteInfo.expireDate),\n })}\n </Bold>\n <div style={{ marginTop: '40px' }} />\n <ClickToCopy>{link}</ClickToCopy>\n </div>\n );\n },\n confirm: t('common.confirm'),\n onConfirm: onSuccess,\n },\n ];\n const step = steps[activeStep];\n\n return (\n <Dialog\n title={t('team.transferNode.inviteDialog.title')}\n fullWidth\n open\n showCloseButton={false}\n actions={\n <>\n {step.cancel && (\n <Button onClick={step.onCancel} color=\"inherit\" size=\"small\">\n {step.cancel}\n </Button>\n )}\n <Button\n onClick={step.onConfirm}\n color=\"primary\"\n size=\"small\"\n disabled={loading}\n variant=\"contained\"\n autoFocus>\n {loading && <Spinner size={[16, 10]} />}\n {step.confirm}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">{typeof step.body === 'function' ? step.body() : step.body}</DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\">\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nTransferMember.propTypes = {\n teamDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n endpoint: PropTypes.string,\n};\n\nTransferMember.defaultProps = {\n onError: () => {},\n endpoint: '',\n};\n\nconst Bold = styled.div`\n font-size: 16px;\n font-weight: bold;\n`;\n","/* eslint-disable react/prop-types */\nimport { useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\n\nimport { useSnackbar } from 'notistack';\nimport Box from '@mui/material/Box';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport Confirm from '../../confirm';\nimport Permission from '../../permission';\nimport ClickToCopy from '../../click-to-copy';\nimport PassportTag from '../../passport-tag';\nimport { getIssuePassportLink, formatToDatetime } from '../../../libs/util';\n\nexport default function PassportIssuances({ issuances, teamDid, onRefresh }) {\n const { api: client } = useNodeContext();\n const { t } = useContext(LocaleContext);\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n const { enqueueSnackbar } = useSnackbar();\n const { endpoint } = useTeamContext();\n\n const deleteIssuance = async ({ id }) => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await client.deletePassportIssuance({ input: { teamDid, sessionId: id } });\n onRefresh();\n } catch (error) {\n enqueueSnackbar(error.message, { autoHideDuration: 5000, variant: 'error' });\n } finally {\n setLoading(false);\n setDelConfirm(null);\n }\n };\n\n const onCancel = () => {\n setLoading(false);\n setDelConfirm(null);\n };\n\n const getLink = column => (endpoint ? getIssuePassportLink({ id: column.id, endpoint }) : '');\n\n // eslint-disable-next-line react/prop-types\n // eslint-disable-next-line react/no-unstable-nested-components\n function Issuance({ data: d }) {\n return (\n <div className=\"issuance\">\n <Box display=\"flex\" justifyContent=\"space-between\">\n <Permission permission=\"mutate_team\">\n {can =>\n can ? (\n <PassportTag\n passport={{ title: d.title, name: d.name }}\n onDelete={() =>\n setDelConfirm({\n title: t('team.passport.issuance.delete.title'),\n description: t('team.passport.issuance.delete.description', { link: getLink(d) }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n deleteIssuance(d);\n },\n onCancel,\n })\n }\n />\n ) : (\n <PassportTag passport={{ title: d.title, name: d.name }} />\n )\n }\n </Permission>\n <div style={{ color: '#999' }}>\n {t('common.expires')}\n :&nbsp;\n {formatToDatetime(d.expireDate)}\n </div>\n </Box>\n <Box mt={2}>\n <ClickToCopy>{getLink(d)}</ClickToCopy>\n </Box>\n </div>\n );\n }\n\n return (\n <Div>\n {issuances.map(x => (\n <Issuance data={x} />\n ))}\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .MuiTableHead-root {\n display: none;\n }\n .issuance {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n .MuiTypography-root {\n display: inline-block;\n width: 100%;\n background: #f3f3f3;\n border-radius: 4px;\n padding-top: 6px;\n padding-bottom: 6px;\n }\n }\n`;\n\nPassportIssuances.propTypes = {\n teamDid: PropTypes.string.isRequired,\n issuances: PropTypes.array,\n onRefresh: PropTypes.func,\n};\n\nPassportIssuances.defaultProps = {\n issuances: [],\n onRefresh: () => {},\n};\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Typography from '@mui/material/Typography';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError } from '../../../libs/util';\n\nexport default function IssuePassport({ teamDid, ownerDid, roles, onCancel, onSuccess, onError, showOwnerPassport }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [role, setRole] = useState('');\n\n const onCreate = async () => {\n if (!role) {\n setError(t('team.member.error.passportEmpty'));\n return;\n }\n\n setError(null);\n setLoading(true);\n\n try {\n await api.createPassportIssuance({ input: { teamDid, name: role, ownerDid } });\n onSuccess();\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Dialog\n title={t('team.passport.issue')}\n fullWidth\n open\n onClick={e => e.stopPropagation()}\n onClose={onCancel}\n disableEscapeKeyDown\n PaperProps={{ style: { minHeight: 'auto' } }}\n actions={\n <>\n <Button onClick={onCancel} color=\"inherit\" size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={onCreate}\n color=\"primary\"\n size=\"small\"\n disabled={loading || !role}\n variant=\"contained\"\n autoFocus\n data-cy=\"issue-passport-create-btn\">\n {loading && <Spinner size={[16, 10]} />}\n {t('team.passport.issuance.create.title')}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">\n <Typography component=\"div\">\n <FormControl style={{ width: '100%' }} variant=\"outlined\">\n <InputLabel>{t('common.passport')}</InputLabel>\n <Select\n data-cy=\"issue-passport-select-passport\"\n value={role}\n onChange={e => {\n setError(null);\n setRole(e.target.value);\n }}\n fullWidth\n label={t('common.passport')}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onCreate();\n }\n }}>\n {roles\n .filter(d => showOwnerPassport || d.name !== 'owner')\n .map(r => (\n <MenuItem key={r.name} value={r.name} data-cy={`issue-passport-select-option-${r.name}`}>\n <span>{r.title || r.name}</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Typography>\n </DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\">\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nIssuePassport.propTypes = {\n teamDid: PropTypes.string.isRequired,\n ownerDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n roles: PropTypes.array,\n showOwnerPassport: PropTypes.bool,\n};\n\nIssuePassport.defaultProps = {\n onError: () => {},\n roles: [],\n showOwnerPassport: false,\n};\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport { useSnackbar } from 'notistack';\nimport get from 'lodash/get';\nimport upperFirst from 'lodash/upperFirst';\n\nimport AddIcon from '@mui/icons-material/Add';\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\nimport ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport RevokeIcon from '@arcblock/icons/lib/RevokeIcon';\nimport ExternalIssuerIcon from '@arcblock/icons/lib/ExternalIssuerIcon';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nimport { PASSPORT_STATUS } from '@abtnode/constant';\n\nimport createPassportSvg from '@abtnode/auth/lib/util/create-passport-svg';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useSessionContext } from '../../../contexts/session';\nimport { useTeamContext } from '../../../contexts/team';\nimport { formatError } from '../../../libs/util';\nimport Confirm from '../../confirm';\nimport Permission from '../../permission';\nimport SearchInput from '../search-input';\nimport ListHeader from '../styles/list-header';\nimport IssuePassport from './issue-passport';\n\nfunction ConfirmDescription({ action, passport }) {\n const { t } = useLocaleContext();\n const { roles } = useTeamContext();\n const role = roles.find(x => x.name === passport.role);\n return (\n <div>\n <div>\n {action === 'enable' ? t('team.member.enablePassportDescription') : t('team.member.revokePassportDescription')}\n </div>\n {role && (\n <Box mt={3} fontWeight=\"bold\">\n {t('team.member.passportPermissionTitle')}\n </Box>\n )}\n {role && <Box mt={1}>{role.description}</Box>}\n </div>\n );\n}\nConfirmDescription.propTypes = {\n action: PropTypes.string.isRequired,\n passport: PropTypes.object.isRequired,\n};\nConfirmDescription.defaultProps = {};\n\nexport default function Passports({ user, onCreate }) {\n const { t } = useLocaleContext();\n const { session } = useSessionContext();\n const {\n roles,\n teamDid,\n teamIssuerDid,\n refresh: refreshTeam,\n enablePassportIssuance,\n trustedPassports,\n passportColor,\n blocklet,\n } = useTeamContext();\n const { api } = useNodeContext();\n const { enqueueSnackbar } = useSnackbar();\n const [loading, setLoading] = useState(false);\n const [toggleConfirm, setToggleConfirm] = useState(null);\n const [showIssueDialog, setShowIssueDialog] = useState(false);\n const [search, setSearch] = useState('');\n\n const passports = (get(user, 'passports') || []).map(x => ({ ...x, revoked: x.status === PASSPORT_STATUS.REVOKED }));\n\n const togglePassportStatus = async passport => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n const method = passport.status === PASSPORT_STATUS.REVOKED ? 'enableUserPassport' : 'revokeUserPassport';\n await api[method]({ input: { teamDid, userDid: user.did, passportId: passport.id } });\n refreshTeam();\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n } finally {\n setLoading(false);\n setToggleConfirm(null);\n }\n };\n\n const confirmToggle = item =>\n item.status === PASSPORT_STATUS.REVOKED\n ? setToggleConfirm({\n title: t('team.member.enablePassport'),\n description: <ConfirmDescription action=\"enable\" passport={item} />,\n confirm: t('common.enable'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n togglePassportStatus(item);\n },\n onCancel: () => {\n setLoading(false);\n setToggleConfirm(null);\n },\n color: 'primary',\n })\n : setToggleConfirm({\n title: t('team.member.revokePassport'),\n description: <ConfirmDescription action=\"revoke\" passport={item} />,\n confirm: t('common.revoke'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n togglePassportStatus(item);\n },\n onCancel: () => {\n setLoading(false);\n setToggleConfirm(null);\n },\n });\n\n const revokeInfo = (hasPermission, passport) => {\n if (user.did === session.user.did && session.user.passportId && session.user.passportId === passport.id) {\n return {\n revokable: false,\n message: t('team.passport.shouldNotDeleteCurrent'),\n };\n }\n\n if (!hasPermission) {\n return {\n revokable: false,\n message: t('team.passport.noPermission'),\n };\n }\n\n if (teamDid === passport.issuer.id && passport.name === 'owner') {\n return {\n revokable: false,\n message: t('team.passport.noPermission'),\n };\n }\n\n return {\n revokable: true,\n };\n };\n\n const filteredPassports = passports.filter(x => !search || x.title.includes(search) || x.name.includes(search));\n\n return (\n <Div>\n <ListHeader>\n <div className=\"left\">\n <SearchInput\n placeholder={t('team.passport.search')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n />\n </div>\n <div className=\"right\">\n {enablePassportIssuance && !!user.approved && (\n <Permission permission=\"mutate_team\">\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-cy=\"issue-passport\"\n onClick={() => setShowIssueDialog(true)}>\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.passport.issue')}\n </Button>\n </Permission>\n )}\n </div>\n </ListHeader>\n\n <Box>\n {filteredPassports.map(x => (\n <Permission permission=\"mutate_team\">\n {can => (\n <Box className=\"passport-item\" display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" mt={3}>\n <Box display=\"flex\" alignItems=\"center\">\n <div\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: createPassportSvg({\n title: x.title || x.name,\n issuer: x.issuer && x.issuer.name,\n issuerDid: x.issuer && x.issuer.id,\n ownerName: user.fullName,\n ownerAvatarUrl: user.avatar,\n revoked: x.revoked,\n preferredColor: passportColor,\n width: '120px',\n }),\n }}\n />\n <div className=\"body\">\n <Box className=\"title\" display=\"flex\" alignItems=\"center\">\n {upperFirst(x.title)}\n <div className=\"status-icons\">\n {!!teamIssuerDid && x.issuer.id !== teamIssuerDid && <ExternalIssuerIcon />}\n {x.revoked && <RevokeIcon />}\n </div>\n </Box>\n {!!teamIssuerDid && x.issuer.id !== teamIssuerDid && (\n <div className=\"tip\">\n {x.issuer.id !== teamIssuerDid && !trustedPassports.some(y => y.issuerDid === x.issuer.id) && (\n <Tooltip title={t('team.passport.notTrustedIssuerTip')}>\n <Box\n component={ErrorOutlineIcon}\n style={{ fontSize: '1.3em' }}\n color=\"error.main\"\n mr={0.5}\n />\n </Tooltip>\n )}\n <span>{t('team.passport.issueBy', { name: x.issuer.name })}</span>\n </div>\n )}\n </div>\n </Box>\n <Box>\n {revokeInfo(can, x).revokable ? (\n <Button\n variant=\"outlined\"\n color={x.revoked ? 'primary' : 'secondary'}\n onClick={() => confirmToggle(x)}>\n {x.revoked ? (\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n ) : (\n <RevokeIcon style={{ height: 16, marginRight: 4 }} />\n )}\n {x.revoked ? t('common.enable') : t('common.revoke')}\n </Button>\n ) : (\n <Tooltip title={revokeInfo(can, x).message}>\n <ErrorOutlineIcon style={{ color: '#ddd' }} />\n </Tooltip>\n )}\n </Box>\n </Box>\n )}\n </Permission>\n ))}\n {!filteredPassports.length && <Empty>{t('common.empty')}</Empty>}\n </Box>\n\n {showIssueDialog && (\n <IssuePassport\n teamDid={teamDid}\n ownerDid={user.did}\n roles={roles}\n onCancel={() => setShowIssueDialog(false)}\n onSuccess={() => {\n onCreate();\n setShowIssueDialog(false);\n }}\n showOwnerPassport={blocklet && !blocklet.settings?.owner}\n />\n )}\n\n {toggleConfirm && (\n <Confirm\n title={toggleConfirm.title}\n description={toggleConfirm.description}\n confirm={toggleConfirm.confirm}\n cancel={toggleConfirm.cancel}\n params={toggleConfirm.params}\n onConfirm={toggleConfirm.onConfirm}\n onCancel={toggleConfirm.onCancel}\n color={toggleConfirm.color}\n />\n )}\n </Div>\n );\n}\n\nPassports.propTypes = {\n user: PropTypes.object.isRequired,\n onCreate: PropTypes.func,\n};\n\nPassports.defaultProps = {\n onCreate: () => {},\n};\n\nconst Div = styled.div`\n .passport-item {\n .body {\n padding: 0;\n margin-left: 24px;\n margin-top: 0;\n }\n .title {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #222222;\n }\n .tip {\n display: flex;\n align-items: center;\n font-size: 14px;\n margin-top: 6px;\n color: #bbb;\n }\n .status-icons {\n svg {\n fill: #bfbfbf;\n height: 1.2em;\n margin-left: 0.4em;\n }\n }\n .MuiButton-outlinedSecondary {\n color: #f16e6e;\n fill: #f16e6e;\n background: #fcf3f3;\n border: 0;\n &:hover {\n border: 0;\n }\n }\n }\n`;\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport Confirm from '../../confirm';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { useSessionContext } from '../../../contexts/session';\nimport { formatError } from '../../../libs/util';\n\nconst isNodeOwner = (nodeInfo, userDid) => nodeInfo.nodeOwner && nodeInfo.nodeOwner.did === userDid;\nconst isSelf = (sessionUser, userDid) => sessionUser && sessionUser.did === userDid;\n\nexport default function ToggleUserApproval({ user, onCancel, onSuccess, onError, children }) {\n const { api, info: nodeInfo } = useNodeContext();\n const { session } = useSessionContext();\n const { teamDid, refresh } = useTeamContext();\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [show, setShow] = useState(false);\n\n const open = () => setShow(true);\n\n const updateUserApproval = async d => {\n const { did, approved } = d;\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await api.updateUserApproval({\n input: {\n teamDid,\n user: {\n did,\n approved: !approved,\n },\n },\n });\n setShow(false);\n onSuccess();\n refresh();\n } catch (error) {\n Toast.error(formatError(error));\n onError();\n } finally {\n setLoading(false);\n }\n };\n\n const approveConfirm = {\n title: user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin'),\n description: user.approved ? t('team.member.forbidLoginDescription') : t('team.member.allowLoginDescription'),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n updateUserApproval(user);\n },\n onCancel: () => {\n setLoading(false);\n setShow(false);\n onCancel();\n },\n color: user.approved ? 'error' : 'primary',\n };\n\n const can = nodeInfo.nodeOwner && !isNodeOwner(nodeInfo, user.did) && !isSelf(session.user, user.did);\n\n if (!can) {\n return null;\n }\n\n return (\n <>\n {typeof children === 'function' ? children({ can, open }) : children}\n\n {show ? (\n <Confirm\n title={approveConfirm.title}\n description={approveConfirm.description}\n confirm={approveConfirm.confirm}\n cancel={approveConfirm.cancel}\n params={approveConfirm.params}\n onConfirm={approveConfirm.onConfirm}\n onCancel={approveConfirm.onCancel}\n color={approveConfirm.color}\n />\n ) : null}\n </>\n );\n}\n\nToggleUserApproval.propTypes = {\n user: PropTypes.object,\n onSuccess: PropTypes.func,\n onCancel: PropTypes.func,\n onError: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n};\n\nToggleUserApproval.defaultProps = {\n user: {},\n onSuccess: () => {},\n onCancel: () => {},\n onError: () => {},\n children: null,\n};\n","import joinUrl from 'url-join';\n\nimport { USER_AVATAR_URL_PREFIX } from '@abtnode/constant';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function parseAvatar(avatar, teamDid) {\n const prefix = window.env.apiPrefix || '/';\n if (avatar && avatar.startsWith(USER_AVATAR_URL_PREFIX)) {\n return joinUrl(prefix, '/user/avatar', teamDid, avatar.replace(USER_AVATAR_URL_PREFIX, ''));\n }\n\n return avatar;\n}\n","/* eslint-disable react/no-unstable-nested-components */\nimport { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport { useSnackbar } from 'notistack';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Box from '@mui/material/Box';\nimport Avatar from '@mui/material/Avatar';\n\nimport Tabs from '@arcblock/ux/lib/Tabs';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport ForbidLoginIcon from '@arcblock/icons/lib/ForbidLoginIcon';\nimport AllowLoginIcon from '@arcblock/icons/lib/AllowLoginIcon';\n\nimport { EVENTS } from '@abtnode/constant';\n\nimport Permission from '../../permission';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { formatError, formatToDatetime } from '../../../libs/util';\nimport { useSubscription } from '../../../libs/ws';\nimport PassportIssuances from './passport-issuances';\nimport Passports from './passports';\nimport ToggleUserApproval from './toggle-user-approval';\nimport { parseAvatar } from './util';\n\nexport default function Member({ userDid, onCancel, initTab }) {\n const { api } = useNodeContext();\n const { roles, teamDid, enablePassportIssuance } = useTeamContext();\n const { t } = useLocaleContext();\n const [issuances, setIssuances] = useState(null);\n const [user, setUser] = useState(null);\n const { enqueueSnackbar } = useSnackbar();\n const [tab, setTab] = useState(initTab || 'info');\n\n const getData = async () => {\n try {\n const res = await api.doBatchQuery({\n getUser: { input: { teamDid, user: { did: userDid } } },\n getPassportIssuances: { input: { teamDid, ownerDid: userDid } },\n });\n\n if (res.getUser.user) {\n res.getUser.user.avatar = parseAvatar(res.getUser.user.avatar, teamDid);\n }\n\n setUser(res.getUser.user || {});\n setIssuances(res.getPassportIssuances.list || []);\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n }\n };\n\n useEffect(() => {\n if (teamDid) {\n getData();\n }\n }, [userDid, teamDid]); // eslint-disable-line\n\n const onUserEvent = data => {\n if (data.teamDid === teamDid && data.user && data.user.did === userDid) {\n getData();\n }\n };\n\n useSubscription(EVENTS.USER_UPDATED, onUserEvent, [userDid, teamDid]);\n\n useEffect(() => {\n if (issuances && !issuances.length && tab === 'issuances') {\n setTab('info');\n }\n }, [issuances]); // eslint-disable-line\n\n // tab\n const Info = () => {\n const rows = user\n ? [\n { name: t('team.member.name'), value: user.fullName },\n { name: t('common.email'), value: user.email },\n { name: t('team.member.allowLogin'), value: user.approved ? t('common.yes') : t('common.no') },\n { name: t('team.member.lastLogin'), value: formatToDatetime(user.updatedAt) },\n { name: t('common.createdAt'), value: formatToDatetime(user.createdAt) },\n { name: t('common.remark'), value: user.remark || '--' },\n ].filter(Boolean)\n : [];\n\n return rows.map(row => {\n if (row.name === t('common.did')) {\n return (\n <InfoRow\n valueComponent=\"div\"\n key={row.name}\n nameWidth={120}\n name={row.name}\n nameFormatter={() => t('common.did')}>\n {row.value}\n </InfoRow>\n );\n }\n\n return (\n <InfoRow\n style={{ alignItems: 'flex-start' }}\n valueComponent=\"div\"\n key={row.name}\n nameWidth={120}\n name={row.name}>\n {row.value}\n </InfoRow>\n );\n });\n };\n\n const tabConfigs = {\n info: {\n label: t('common.basicInfo'),\n value: 'info',\n component: Info,\n },\n passports: {\n label: t('common.passport'),\n value: 'passports',\n component: () => (\n <Passports\n user={user}\n teamDid={teamDid}\n roles={roles}\n onCreate={() => {\n getData(teamDid);\n setTab('issuances');\n }}\n onRefresh={() => {\n getData(teamDid);\n }}\n />\n ),\n },\n issuances: {\n label: t('team.passport.issuance.pending'),\n value: 'issuances',\n component: () => (\n <PassportIssuances issuances={issuances || []} teamDid={teamDid} onRefresh={() => getData(teamDid)} />\n ),\n },\n };\n\n const tabs = Object.values(tabConfigs)\n .map(({ label, value }) => ({ label, value }))\n .filter(x => {\n if (x.value === 'issuances') {\n return enablePassportIssuance && issuances && !!issuances.length;\n }\n\n return true;\n });\n const tabConfig = tabConfigs[tab] || tabConfigs.info;\n const onTabChange = newTab => {\n setTab(newTab);\n };\n\n return (\n <Dialog\n title={t('common.member')}\n onClose={onCancel}\n open\n PaperProps={{ style: { maxWidth: 632, minHeight: '80vh' } }}\n fullWidth\n actions={\n user && (\n <Permission permission=\"mutate_team\">\n <ToggleUserApproval user={user}>\n {({ open }) => (\n <BlockButton onClick={open}>\n {user.approved ? (\n <ForbidLoginIcon style={{ fontSize: '1.2em', marginRight: '0.4em' }} />\n ) : (\n <AllowLoginIcon style={{ fontSize: '1.2em', marginRight: '0.4em' }} />\n )}\n {user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')}\n </BlockButton>\n )}\n </ToggleUserApproval>\n </Permission>\n )\n }>\n <Div>\n {!user && (\n <Center>\n <Spinner />\n </Center>\n )}\n\n {user && (\n <div>\n {/* info */}\n <Box display=\"flex\" alignItems=\"center\" className=\"info\">\n <Avatar\n src={user.avatar}\n style={{ width: 48, height: 48, backgroundColor: 'transparent', marginRight: 16 }}\n />\n <Box>\n <Box className=\"name\">{user.fullName}</Box>\n <Box className=\"did\" mt={1}>\n <DidAddress>{user.did}</DidAddress>\n </Box>\n </Box>\n </Box>\n\n {/* tabs */}\n <Box mx={3} className=\"tabs\">\n <Tabs tabs={tabs} current={tab} onChange={onTabChange} scrollButtons=\"auto\" />\n </Box>\n\n {/* body */}\n <div className=\"body\">\n <tabConfig.component />\n </div>\n </div>\n )}\n </Div>\n </Dialog>\n );\n}\n\nMember.propTypes = {\n userDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n initTab: PropTypes.string,\n};\n\nMember.defaultProps = {\n initTab: 'info',\n};\n\nconst Div = styled.div`\n .info {\n .name {\n font-weight: 400;\n font-size: 18px;\n line-height: 25px;\n color: #222222;\n }\n }\n\n .tabs {\n margin-top: 24px;\n margin-left: 0;\n margin-right: 0;\n }\n\n .body {\n margin-top: 24px;\n }\n`;\n\nconst Center = styled.div`\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n`;\n\nconst BlockButton = styled.div`\n flex-shrink: 0;\n width: 100%;\n height: 64px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: #999;\n fill: #999;\n font-size: 16px;\n border-top: 1px solid #f0f0f0;\n position: sticky;\n bottom: 0;\n background: #fff;\n z-index: 10;\n`;\n","/* eslint-disable react/no-unstable-nested-components */\nimport { useContext, useState } from 'react';\nimport styled from '@emotion/styled';\n\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport Datatable from '@arcblock/ux/lib/Datatable';\nimport RelativeTime from '@arcblock/ux/lib/RelativeTime';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport Confirm from '../../confirm';\nimport Permission from '../../permission';\nimport ClickToCopy from '../../click-to-copy';\nimport { sleep, getInviteLink } from '../../../libs/util';\n\nexport default function Invitations() {\n const { api: client } = useNodeContext();\n const { t, locale } = useContext(LocaleContext);\n const { teamDid, invitations, refresh, endpoint } = useTeamContext();\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const deleteInvitation = async ({ inviteId }) => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await client.deleteInvitation({ input: { teamDid, inviteId } });\n refresh();\n await sleep(800);\n } catch (error) {\n console.error(error);\n } finally {\n setLoading(false);\n setDelConfirm(null);\n }\n };\n\n const onCancel = () => {\n setLoading(false);\n setDelConfirm(null);\n };\n\n const getLink = column => {\n if (!endpoint) {\n return '';\n }\n return getInviteLink({ inviteId: column.inviteId, endpoint });\n };\n\n const columns = [\n {\n label: t('team.inviting.link'),\n name: 'inviteId',\n options: {\n sort: false,\n customBodyRenderLite: rawIndex => {\n const d = invitations[rawIndex];\n if (!endpoint) {\n return <CircularProgress size={16} />;\n }\n return <ClickToCopy>{getLink(d)}</ClickToCopy>;\n },\n },\n },\n {\n label: t('common.role'),\n name: 'role',\n widtn: 70,\n },\n {\n label: t('common.remark'),\n name: 'remark',\n options: {\n customBodyRender: e => {\n return e || '--';\n },\n },\n },\n {\n label: t('team.inviting.inviter'),\n name: 'inviter.fullName',\n options: {\n sort: false,\n customBodyRender: (e, { rowIndex }) => {\n const d = invitations[rowIndex];\n\n return d?.inviter?.fullName;\n },\n },\n },\n {\n label: t('common.expires'),\n name: 'expireDate',\n options: {\n customBodyRender: e => {\n return <RelativeTime value={e} locale={locale} />;\n },\n },\n },\n {\n label: t('common.actions'),\n name: '',\n width: 100,\n align: 'center',\n options: {\n sort: false,\n customBodyRenderLite: rawIndex => {\n const item = invitations[rawIndex];\n\n return (\n <Permission permission=\"mutate_team\">\n <Button\n onClick={() =>\n setDelConfirm({\n title: t('team.inviting.delete.title'),\n description: t('team.inviting.delete.description', { link: getLink(item) }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => deleteInvitation(item),\n onCancel,\n })\n }\n size=\"small\"\n color=\"error\"\n variant=\"text\">\n <DeleteIcon style={{ fontSize: '1.2em' }} />\n {t('common.delete')}\n </Button>\n </Permission>\n );\n },\n },\n },\n ];\n\n return (\n <Div>\n {invitations.length ? (\n <Datatable\n locale={locale}\n data={[...invitations]}\n columns={columns}\n verticalKeyWidth={100}\n options={{\n download: false,\n filter: false,\n print: false,\n }}\n />\n ) : (\n <Empty>{t('common.empty')}</Empty>\n )}\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Div>\n );\n}\n\nconst Div = styled.div`\n margin-top: -20px;\n`;\n\nInvitations.propTypes = {};\n\nInvitations.defaultProps = {};\n","import { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport MenuItem from '@mui/material/MenuItem';\nimport AddIcon from '@mui/icons-material/Add';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ForbidLoginIcon from '@arcblock/icons/lib/ForbidLoginIcon';\nimport AllowLoginIcon from '@arcblock/icons/lib/AllowLoginIcon';\n\nimport { useTeamContext } from '../../../contexts/team';\nimport Actions from '../../actions';\nimport IssuePassport from './issue-passport';\nimport ToggleUserApproval from './toggle-user-approval';\n\nexport default function MemberActions({ user, onIssuePassport }) {\n const { teamDid, roles } = useTeamContext();\n const { t } = useContext(LocaleContext);\n const [enablePassportIssuance, setEnablePassportIssuance] = useState(false);\n\n return (\n <>\n <Actions\n data-cy=\"member-actions\"\n actions={[\n {\n icon: <AddIcon fontSize=\"small\" />,\n text: t('team.passport.issue'),\n 'data-cy': 'action-issue-passport',\n onClick: e => {\n e.stopPropagation();\n setEnablePassportIssuance(true);\n },\n },\n // eslint-disable-next-line react/no-unstable-nested-components\n ({ close }) => (\n <ToggleUserApproval user={user} key=\"toggle-approval\">\n {({ open: o }) => (\n <MenuItem\n dense\n onClick={e => {\n e.stopPropagation();\n close();\n o(e);\n }}\n data-cy=\"action-toggle-block\">\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>\n {user.approved ? <ForbidLoginIcon /> : <AllowLoginIcon />}\n </ListItemIcon>\n <ListItemText primary={user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')} />\n </MenuItem>\n )}\n </ToggleUserApproval>\n ),\n ]}\n />\n {enablePassportIssuance && (\n <IssuePassport\n teamDid={teamDid}\n ownerDid={user.did}\n roles={roles}\n onCancel={() => setEnablePassportIssuance(false)}\n onSuccess={() => {\n onIssuePassport();\n setEnablePassportIssuance(false);\n }}\n />\n )}\n </>\n );\n}\n\nMemberActions.propTypes = {\n user: PropTypes.object.isRequired,\n onIssuePassport: PropTypes.func,\n};\n\nMemberActions.defaultProps = {\n onIssuePassport: () => {},\n};\n","/* eslint-disable react/no-unstable-nested-components */\n/* eslint-disable jsx-a11y/aria-role */\nimport { useContext, useState, useEffect } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Tooltip from '@mui/material/Tooltip';\nimport Box from '@mui/material/Box';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport AddIcon from '@mui/icons-material/Add';\nimport LoopIcon from '@mui/icons-material/Loop';\nimport Address from '@arcblock/did-connect/lib/Address';\nimport Avatar from '@arcblock/did-connect/lib/Avatar';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport PersonIcon from '@arcblock/icons/lib/PersonIcon';\nimport ExternalIssuerIcon from '@arcblock/icons/lib/ExternalIssuerIcon';\nimport Datatable from '@arcblock/ux/lib/Datatable';\nimport RelativeTime from '@arcblock/ux/lib/RelativeTime';\nimport Toast from '@abtnode/ux/lib/toast';\nimport { EVENTS } from '@abtnode/constant';\n\nimport { useSubscription } from '../../../libs/ws';\nimport { useTeamContext } from '../../../contexts/team';\nimport Permission from '../../permission';\nimport InviteMember from './invite-member';\nimport TransferMember from './transfer-node';\nimport Member from './member';\nimport Invitations from './invitations';\nimport Actions from './actions';\nimport { parseAvatar } from './util';\n\nconst ROLE_ALL = '$all';\nconst ROLE_NONE = '$none';\n\nconst getCount = (counts, name) => {\n const item = counts.find(x => x.key === name);\n return item?.value || 0;\n};\n\nconst isFromExternal = (user, teamIssuerDid) => {\n const list = user.passports || [];\n if (!list.length) {\n return false;\n }\n\n return !list.some(z => z.issuer.id === teamIssuerDid);\n};\n\nfunction SimpleInfo({ user }) {\n const { t } = useContext(LocaleContext);\n\n const main = (\n <div className=\"member-block\">\n <div className=\"member-avatar\">\n <Avatar\n src={user.avatar}\n size={24}\n did={user.did}\n shape=\"circle\"\n style={{ borderRadius: '100%', overflow: 'hidden' }}\n />\n {!user.approved && <did className=\"badge-block\" />}\n {user.isFromExternal && (\n <Tooltip title={t('team.passport.externalPassport')}>\n <Box ml={1} className=\"icon\">\n <ExternalIssuerIcon />\n </Box>\n </Tooltip>\n )}\n </div>\n <div className=\"member-text\">{user.fullName}</div>\n </div>\n );\n\n return user.approved ? (\n main\n ) : (\n <Box display=\"flex\" alignItems=\"center\">\n <Tooltip title={t('team.member.forbidLoginDescription')}>{main}</Tooltip>\n </Box>\n );\n}\n\nSimpleInfo.propTypes = {\n user: PropTypes.object.isRequired,\n};\n\nexport default function MemberList({ type }) {\n const { teamDid, teamIssuerDid, invitations, roles, refresh, enablePassportIssuance, endpoint, api } =\n useTeamContext();\n const { t, locale } = useContext(LocaleContext);\n const [showInviteMember, setShowInviteMember] = useState(false);\n const [showTransferMember, setShowTransferMember] = useState(false);\n const [showInviting, setShowInviting] = useState(false);\n const [memberDialog, setMemberDialog] = useState(false); // member, inviting\n const [loading, setLoading] = useState(false);\n const [users, setUsers] = useState([]);\n const [rowCount, setRowCount] = useState();\n const [userCounts, setUserCounts] = useState([]);\n const [search, setSearch] = useState({\n role: ROLE_ALL,\n searchText: '',\n hideBlocked: false,\n pageSize: 10,\n page: 1,\n });\n\n const sideList = (roles || []).map(x => ({\n name: x.name,\n title: x.title,\n num: getCount(userCounts, x.name),\n }));\n sideList.unshift({\n name: ROLE_ALL,\n title: 'All Members',\n num: getCount(userCounts, ROLE_ALL),\n });\n sideList.push({\n name: ROLE_NONE,\n title: 'Other',\n num: getCount(userCounts, ROLE_NONE),\n });\n\n const getUsers = () => {\n const query = {};\n\n if (search.hideBlocked) {\n query.approved = true;\n }\n\n query.role = search.role;\n\n if (search.searchText) {\n query.search = search.searchText;\n }\n\n setLoading(true);\n api\n .getUsers({\n query,\n paging: {\n page: search.page,\n pageSize: search.pageSize,\n },\n })\n .then(res => {\n setLoading(false);\n\n (res.users || []).forEach(x => {\n x.isFromExternal = isFromExternal(x, teamIssuerDid);\n x.avatar = parseAvatar(x.avatar, teamDid);\n });\n\n setUsers(res.users || []);\n setRowCount(res.paging.total);\n })\n .catch(err => {\n setLoading(false);\n Toast.error(err.message);\n });\n };\n\n useEffect(() => {\n getUsers();\n }, [`${search.hideBlocked}-${search.role}-${search.page}-${search.pageSize}-${search.searchText}`]); //eslint-disable-line\n\n // user counts\n useEffect(() => {\n api\n .getUsersCountPerRole()\n .then(res => {\n setUserCounts(res.counts || []);\n })\n .catch(err => {\n Toast.error(err.message);\n });\n }, []); //eslint-disable-line\n\n useSubscription(EVENTS.USER_UPDATED, data => {\n if (data.teamDid === teamDid) {\n getUsers();\n }\n });\n\n const isInvitationEnabled = enablePassportIssuance;\n\n const columns = [\n {\n label: t('common.name'),\n name: 'fullName',\n options: {\n customBodyRenderLite: rawIndex => {\n const x = users[rawIndex];\n\n return (\n <div data-cy={`member-name-${x.fullName}`}>\n <SimpleInfo user={x} />\n </div>\n );\n },\n },\n },\n {\n label: t('common.address'),\n name: 'did',\n options: {\n customBodyRender: e => {\n return (\n <Address size={14} copyable={false}>\n {e}\n </Address>\n );\n },\n },\n },\n {\n label: t('team.member.lastLogin'),\n name: 'lastLoginAt',\n options: {\n customBodyRender: e => {\n return <RelativeTime value={e} locale={locale} />;\n },\n },\n },\n {\n label: t('common.actions'),\n name: '',\n width: 100,\n align: 'center',\n verticalKeyAlign: 'center',\n options: {\n customBodyRenderLite: rawIndex => {\n const x = users[rawIndex];\n\n return (\n <Permission permission=\"mutate_team\">\n <Actions user={x} onIssuePassport={() => setMemberDialog({ ...x, initTab: 'issuances' })} />\n </Permission>\n );\n },\n },\n },\n ];\n\n const customButtons = [];\n if (isInvitationEnabled) {\n customButtons.push(\n <Button\n variant=\"outlined\"\n style={{ flexShrink: 0, marginRight: 16 }}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n setShowInviting(true);\n }}>\n <PersonIcon style={{ height: '1em', marginRight: 4 }} />\n {t('common.inviting')}\n {invitations.length ? ` (${invitations.length})` : ''}\n </Button>,\n <Permission permission=\"mutate_team\">\n <Button\n style={{ flexShrink: 0, marginRight: 16 }}\n variant=\"contained\"\n edge=\"end\"\n color=\"primary\"\n size=\"small\"\n data-cy=\"invite-member\"\n onClick={() => setShowInviteMember(true)}>\n <AddIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('team.invite')}\n </Button>\n </Permission>\n );\n\n if (type === 'server') {\n customButtons.push(\n <Permission role=\"owner\">\n <Button\n style={{ flexShrink: 0 }}\n variant=\"contained\"\n edge=\"end\"\n color=\"error\"\n size=\"small\"\n data-cy=\"invite-member\"\n onClick={() => setShowTransferMember(true)}>\n <LoopIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('team.transferNode.name')}\n </Button>\n </Permission>\n );\n }\n }\n\n const onRoleChange = role => {\n if (loading) {\n return;\n }\n\n setSearch(x => ({ ...x, role, hideBlocked: false, searchText: '', page: 1 }));\n };\n\n const onHideBlockedChange = value => {\n setSearch(x => ({ ...x, hideBlocked: value, page: 1 }));\n };\n\n const onTableChange = ({ page, rowsPerPage, searchText }) => {\n if (search.pageSize !== rowsPerPage) {\n setSearch(x => ({ ...x, pageSize: rowsPerPage, page: 1 }));\n } else if (search.page !== page + 1) {\n setSearch(x => ({ ...x, page: page + 1 }));\n }\n\n if (search.searchText !== searchText) {\n setSearch(x => ({ ...x, searchText, page: 1 }));\n }\n };\n\n const tableOptions = {\n sort: false,\n download: false,\n filter: false,\n print: false,\n expandableRowsOnClick: true,\n onRowClick(e, { dataIndex }) {\n const x = users[dataIndex];\n setMemberDialog(x);\n },\n page: search.page - 1,\n rowsPerPage: search.pageSize,\n count: rowCount,\n searchDebounceTime: 600,\n };\n\n return (\n <Div>\n <Box className=\"main\" display=\"flex\">\n <div className=\"left\">\n <div className=\"tabs\">\n {sideList.map(x => (\n <div\n className={`tab ${search.role === x.name ? 'active' : ''}`}\n onClick={() => onRoleChange(x.name)}\n key={x.name}>\n <span className=\"text\">{x.title}</span>\n <span className={classnames('badge', { 'is-rect': x.num > 999 })}>{x.num}</span>\n </div>\n ))}\n </div>\n </div>\n <div className=\"right\">\n <Datatable\n className=\"main-table\"\n verticalKeyWidth={100}\n locale={locale}\n title={\n <div className=\"table-toolbar-left\">\n <FormControlLabel\n control={\n <Checkbox\n disabled={loading}\n color=\"primary\"\n checked={search.hideBlocked}\n onChange={e => onHideBlockedChange(e.target.checked)}\n />\n }\n label={t('team.member.hideBlockedMember')}\n />\n </div>\n }\n data={users}\n columns={columns}\n customButtons={customButtons}\n options={tableOptions}\n loading={loading}\n onChange={onTableChange}\n />\n </div>\n </Box>\n\n <Dialog\n title={t('common.inviting')}\n onClose={() => setShowInviting(false)}\n open={showInviting}\n maxWidth=\"lg\"\n fullWidth>\n <Invitations />\n </Dialog>\n\n {memberDialog && (\n <Member onCancel={() => setMemberDialog(null)} userDid={memberDialog.did} initTab={memberDialog.initTab} />\n )}\n {showInviteMember && (\n <InviteMember\n teamDid={teamDid}\n endpoint={endpoint}\n roles={roles}\n onCancel={() => setShowInviteMember(false)}\n onSuccess={() => {\n refresh();\n setShowInviteMember(false);\n }}\n />\n )}\n {showTransferMember && (\n <TransferMember\n teamDid={teamDid}\n endpoint={endpoint}\n roles={roles}\n onCancel={() => setShowTransferMember(false)}\n onSuccess={() => {\n refresh();\n setShowTransferMember(false);\n }}\n />\n )}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .main {\n .left {\n width: 168px;\n flex-shrink: 0;\n margin-right: 65px;\n .tabs {\n padding-top: 16px;\n .tab {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n transition: background 0.4s;\n\n width: 168px;\n height: 36px;\n border-radius: 8px;\n\n cursor: pointer;\n user-select: none;\n\n &:nth-child(n + 2) {\n margin-top: 24px;\n }\n\n &.active {\n background: #f2f2f2;\n }\n\n &:hover {\n background: #f2f2f2;\n }\n\n .text {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n\n color: #222222;\n }\n\n .badge {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20px;\n height: 20px;\n border-radius: 100%;\n color: #fff;\n background: #666666;\n font-size: 10px;\n font-weight: 400;\n &.is-rect {\n width: auto;\n border-radius: 8px;\n padding: 0 4px;\n }\n }\n }\n }\n @media (max-width: ${props => props.theme.breakpoints.values.md}px) {\n display: none;\n }\n }\n .right {\n flex-grow: 1;\n }\n }\n\n .member-block {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n .member-avatar {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .member-text {\n margin-left: 10px;\n }\n .badge-block {\n width: 14px;\n height: 14px;\n position: absolute;\n right: -4px;\n top: -4px;\n background: #ff5757;\n border-radius: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n &::after {\n content: '';\n width: 6px;\n height: 2px;\n background: #fefefe;\n }\n }\n }\n\n .table-toolbar-left {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 7px 0;\n label span:first-child {\n display: flex;\n }\n }\n`;\n\nMemberList.propTypes = {\n type: PropTypes.oneOf(['server', 'blocklet']).isRequired,\n};\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport md5 from 'md5';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError } from '../../../libs/util';\n\nexport default function MutateRole({ teamDid, onCancel, onSuccess, onError, mode, item }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [title, setTitle] = useState(item.title || '');\n const [description, setDescription] = useState(item.description || '');\n\n const onCreate = async () => {\n const _title = title.trim();\n if (!_title) {\n setError(t('team.passport.error.titleEmpty'));\n return;\n }\n\n if (_title.length > 64) {\n setError(t('team.passport.error.titleTooLong', { length: 64 }));\n return;\n }\n\n const desc = description.replace(/\\n/g, ' ');\n if (!desc) {\n setError(t('team.passport.error.descriptionEmpty'));\n return;\n }\n\n const name = mode === 'create' ? md5(_title) : item.name;\n\n setError(null);\n setLoading(true);\n\n try {\n if (mode === 'create') {\n await api.createRole({ input: { teamDid, name, title: _title, description: desc } });\n } else {\n await api.updateRole({ input: { teamDid, role: { name, title: _title, description: desc } } });\n }\n onSuccess();\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n const body = (\n <div>\n {mode === 'update' && (\n <Typography component=\"div\" style={{ paddingTop: 24 }}>\n <TextField\n label=\"ID\"\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"url\"\n data-cy=\"mutate-role-input-name\"\n fullWidth\n autoFocus\n value={item.name}\n disabled\n />\n </Typography>\n )}\n\n <Typography component=\"div\" style={{ marginTop: 24 }}>\n <TextField\n label={t('common.title')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"title\"\n data-cy=\"mutate-role-input-title\"\n fullWidth\n autoFocus\n value={title}\n onChange={e => {\n setError(null);\n setTitle(e.target.value);\n }}\n disabled={mode === 'update' || loading}\n helperText={t('team.passport.create.titleTip')}\n />\n </Typography>\n\n <Typography component=\"div\" style={{ marginTop: 24, marginBottom: 24 }}>\n <TextField\n label={t('common.description')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"description\"\n data-cy=\"mutate-role-input-description\"\n fullWidth\n autoFocus\n value={description}\n onChange={e => {\n setError(null);\n setDescription(e.target.value);\n }}\n disabled={loading}\n multiline\n rows={3}\n />\n </Typography>\n </div>\n );\n\n return (\n <Dialog\n title={mode === 'create' ? t('team.passport.create.title') : ''}\n fullWidth\n open\n onClose={onCancel}\n showCloseButton={false}\n actions={\n <>\n <Button onClick={onCancel} color=\"inherit\" size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n data-cy=\"mutate-role-confirm\"\n onClick={onCreate}\n color=\"primary\"\n size=\"small\"\n disabled={loading}\n variant=\"contained\"\n autoFocus>\n {loading && <Spinner size={[16, 10]} />}\n {mode === 'create' ? t('common.create') : t('common.update')}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">{body}</DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\" style={{ width: '100%', margin: 0 }}>\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nMutateRole.propTypes = {\n teamDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n mode: PropTypes.oneOf(['create', 'update']),\n item: PropTypes.object,\n};\n\nMutateRole.defaultProps = {\n onError: () => {},\n mode: 'create',\n item: {},\n};\n","import { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport IconButton from '@mui/material/IconButton';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport DeleteIcon from '@arcblock/icons/lib/DeleteIcon';\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { formatError, isProtectedRole } from '../../../libs/util';\nimport { withPermission } from '../../permission';\nimport Confirm from '../../confirm';\nimport MutateRole from './mutate-role';\n\nfunction PassportDetail({ onCancel, onSuccess, onDelete, roleName, hasPermission }) {\n const { api } = useNodeContext();\n const { roles, permissions, teamDid, refresh: refreshTeam, isNodeTeam } = useTeamContext();\n const { t } = useLocaleContext();\n const [binds, setBinds] = useState([]);\n const [updateForm, setUpdateForm] = useState(false);\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const role = cloneDeep(roles.find(x => x.name === roleName));\n\n const isProtected = isProtectedRole(roleName);\n\n const deletePassport = async name => {\n if (loading) return;\n try {\n setLoading(true);\n await api.deleteRole({ input: { teamDid, name } });\n onDelete();\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n setDelConfirm(null);\n }\n };\n\n const getData = async (team, name) => {\n const res = await api.getPermissionsByRole({ input: { teamDid: team, role: { name } } });\n const permissionList = res.permissions || [];\n const bindList = permissions.map(x => ({\n ...x,\n bind: permissionList.some(y => y.name === x.name),\n }));\n setBinds(bindList);\n };\n\n const onBind = async () => {\n setLoading(true);\n\n const grantNames = binds.filter(x => x.bind).map(x => x.name);\n\n try {\n await api.updatePermissionsForRole({ input: { teamDid, roleName: role.name, grantNames } });\n Toast.success(t('common.saveSuccess'));\n onSuccess();\n } catch (err) {\n Toast.error(formatError(err));\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (teamDid && roleName) {\n getData(teamDid, roleName);\n }\n }, [teamDid, roleName]); // eslint-disable-line\n\n const readPermissionsOnly = isNodeTeam || !hasPermission;\n\n return (\n <Dialog\n title={t('common.passport')}\n onClose={onCancel}\n open\n fullWidth\n toolbar={\n hasPermission &&\n !isProtected && (\n <>\n <IconButton onClick={() => setUpdateForm(role)} data-cy={`edit-passport-${role.name}`} size=\"large\">\n <EditIcon fill=\"#bfbfbf\" />\n </IconButton>\n <IconButton\n onClick={() =>\n setDelConfirm({\n title: t('team.passport.delete.title'),\n description: t('team.passport.delete.description', { name: role.title }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n deletePassport(role.name);\n },\n onCancel: () => {\n setLoading(false);\n setDelConfirm(null);\n },\n })\n }\n data-cy={`delete-passport-${role.name}`}\n size=\"large\">\n <DeleteIcon fill=\"#bfbfbf\" />\n </IconButton>\n </>\n )\n }\n actions={\n !readPermissionsOnly && (\n <>\n <Button onClick={onCancel} color=\"inherit\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={onBind}\n color=\"primary\"\n disabled={loading || !role}\n variant=\"contained\"\n autoFocus\n data-cy=\"bind-permission-btn-confirm\">\n {loading && <Spinner size={[16, 10]} />}\n {t('common.save')}\n </Button>\n </>\n )\n }>\n <Div>\n {!role && (\n <Center>\n <Spinner />\n </Center>\n )}\n\n {/* content */}\n {role && (\n <div className=\"dialog-content\">\n <div className=\"header\">\n <div className=\"title\">{role.title}</div>\n <div className=\"description\">{role.description}</div>\n </div>\n\n {/* bind permission */}\n <div className=\"bind\">\n <div className=\"title\">{t('common.permission')}</div>\n <div className=\"list\">\n {binds\n // if readonly, show obtained permissions only\n .filter(x => (readPermissionsOnly ? x.bind : true))\n .map(x => (\n <div className=\"item\">\n <FormControlLabel\n control={\n <Checkbox\n disabled={readPermissionsOnly}\n checked={x.bind}\n onChange={() => {\n setBinds(state =>\n state.map(y => {\n if (y.name === x.name) {\n y.bind = !y.bind;\n }\n return y;\n })\n );\n }}\n name={x.name}\n />\n }\n label={x.description}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </Div>\n\n {updateForm && (\n <MutateRole\n teamDid={teamDid}\n onCancel={() => setUpdateForm(null)}\n onSuccess={() => {\n setUpdateForm(null);\n refreshTeam();\n }}\n mode=\"update\"\n roleName={updateForm.name}\n item={updateForm}\n />\n )}\n\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Dialog>\n );\n}\n\nexport default withPermission(PassportDetail, 'mutate_team');\n\nPassportDetail.propTypes = {\n roleName: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n hasPermission: PropTypes.bool,\n};\n\nPassportDetail.defaultProps = {\n hasPermission: false,\n};\n\nconst Div = styled.div`\n .header {\n .title {\n font-weight: 400;\n font-size: 24px;\n line-height: 28px;\n color: #222222;\n }\n\n .description {\n margin-top: 16px;\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #999999;\n }\n }\n\n .bind {\n margin-top: 24px;\n .title {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n margin-bottom: 24px;\n }\n .item {\n margin-top: 24px;\n }\n\n .MuiFormControlLabel-label {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #666;\n }\n\n .PrivateSwitchBase-root-45 {\n padding: 0;\n padding-right: 12px;\n }\n }\n`;\n\nconst Center = styled.div`\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n`;\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLongArrow(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 65,\n height: 16,\n viewBox: \"0 0 65 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.7071 8.70711C65.0976 8.31658 65.0976 7.68342 64.7071 7.29289L58.3431 0.928932C57.9526 0.538408 57.3195 0.538408 56.9289 0.928932C56.5384 1.31946 56.5384 1.95262 56.9289 2.34315L62.5858 8L56.9289 13.6569C56.5384 14.0474 56.5384 14.6805 56.9289 15.0711C57.3195 15.4616 57.9526 15.4616 58.3431 15.0711L64.7071 8.70711ZM0 9H64V7H0V9Z\",\n fill: \"#666666\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLongArrow);\nexport default __webpack_public_path__ + \"static/media/long-arrow.ac9ed1f84fbdaee4f8ebb14e2827f438.svg\";\nexport { ForwardRef as ReactComponent };","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Box from '@mui/material/Box';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport IconButton from '@mui/material/IconButton';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport DeleteIcon from '@arcblock/icons/lib/DeleteIcon';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nimport { ROLES } from '@abtnode/constant';\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { sleep } from '../../../libs/util';\nimport { ReactComponent as LongArrow } from '../../../icons/long-arrow.svg';\n\nconst canSave = (issuerDid, mappings) => {\n if (!issuerDid) {\n return false;\n }\n\n return !mappings.some(x => !x.from.passport || !x.to.role);\n};\n\nexport default function TrustedIssuer({ onCancel, onSuccess, data, trustedPassports }) {\n const { api } = useNodeContext();\n const { roles, teamDid } = useTeamContext();\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [issuerDid, setIssuerDid] = useState(data.issuerDid || '');\n const [remark, setRemark] = useState(data.remark || '');\n const [mappings, setMappings] = useState(cloneDeep(data.mappings) || []);\n\n const editIndex = trustedPassports.findIndex(x => x.issuerDid === data.issuerDid);\n\n const configTrustedPassports = async () => {\n if (loading) {\n return;\n }\n\n const item = {\n issuerDid,\n remark,\n mappings,\n };\n\n const trustedList = [...trustedPassports];\n\n if (editIndex === -1) {\n trustedList.unshift(item);\n } else {\n trustedList[editIndex] = item;\n }\n\n try {\n setLoading(true);\n await api.configTrustedPassports({ input: { teamDid, trustedPassports: trustedList } });\n await sleep(800);\n setLoading(false);\n Toast.success(t('common.saveSuccess'));\n onSuccess();\n } catch (err) {\n setLoading(false);\n Toast.error(err.message);\n }\n };\n\n return (\n <Dialog\n title={t('team.passport.trustedIssuers')}\n open\n showCloseButton={false}\n PaperProps={{ style: { minHeight: '80vh' } }}\n fullWidth\n prepend={\n <IconButton onClick={onCancel} data-cy=\"trusted-issuer-close\" size=\"large\">\n <ArrowBackIcon />\n </IconButton>\n }\n actions={\n <>\n <Button onClick={onCancel} color=\"inherit\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={() => configTrustedPassports()}\n color=\"primary\"\n disabled={!canSave(issuerDid, mappings) || loading}\n variant=\"contained\"\n autoFocus\n data-cy=\"save-mapping\">\n {loading && <Spinner size={[16, 10]} />}\n {t('common.save')}\n </Button>\n </>\n }>\n <Div>\n <div className=\"dialog-content\">\n <TextField\n fullWidth\n data-cy=\"input-issuer-did\"\n placeholder={t('team.passport.issuerDid')}\n value={issuerDid}\n onChange={event => {\n setIssuerDid(event.target.value);\n }}\n />\n\n <TextField\n style={{ marginTop: 16 }}\n fullWidth\n data-cy=\"input-issuer-remark\"\n placeholder={t('common.remark')}\n value={remark}\n onChange={event => {\n setRemark(event.target.value);\n }}\n />\n\n <Box mt=\"30px\" display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\n <Box className=\"dialog-h1\">{t('team.passport.mappingRule')}</Box>\n <Box>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n data-cy=\"add-mapping\"\n onClick={() => {\n setMappings(d => {\n const res = [...d];\n res.unshift({ from: { passport: '' }, to: { role: ROLES.GUEST } });\n return res;\n });\n }}>\n {t('team.add')}\n </Button>\n </Box>\n </Box>\n\n <Box className=\"list\" mt={-0.5}>\n {mappings.map((item, index) => (\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\" my={3}>\n <Box display=\"flex\" alignItems=\"center\" flexGrow={1}>\n <Box flexGrow={1} flexBasis={1}>\n <TextField\n fullWidth\n size=\"small\"\n data-cy={`input-${index}-from`}\n placeholder=\"Issuer’s Passport Name/ID\"\n value={item.from.passport}\n onChange={event => {\n const { value } = event.target;\n setMappings(d => {\n const res = [...d];\n res[index].from.passport = value;\n return res;\n });\n }}\n />\n </Box>\n\n <Box flexShrink={0} mx={4}>\n <LongArrow />\n </Box>\n\n {/* role */}\n <Box flexGrow={1} flexBasis={1}>\n <TextField\n fullWidth\n size=\"small\"\n select\n value={item.to.role}\n onChange={e => {\n setMappings(d => {\n const res = [...d];\n res[index].to.role = e.target.value;\n return res;\n });\n }}\n variant=\"outlined\">\n {roles\n .filter(d => d.name !== 'owner')\n .map(r => (\n <MenuItem key={r.name} value={r.name} data-cy={`passport-mapping-select-option-${r.name}`}>\n <span>{r.title || r.name}</span>\n </MenuItem>\n ))}\n </TextField>\n </Box>\n </Box>\n\n {/* delete */}\n <Box flexShrink={0} ml={4}>\n <IconButton\n onClick={() => {\n setMappings(d => {\n const res = [...d];\n res.splice(index, 1);\n return res;\n });\n }}\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n </Box>\n </Box>\n ))}\n\n {!mappings.length && (\n <Box my={2} color=\"text.secondary\" fontSize=\"16px\">\n <Empty>{t('common.empty')}</Empty>\n </Box>\n )}\n </Box>\n </div>\n </Div>\n </Dialog>\n );\n}\n\nTrustedIssuer.propTypes = {\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n trustedPassports: PropTypes.array,\n data: PropTypes.object,\n};\n\nTrustedIssuer.defaultProps = {\n data: {},\n trustedPassports: [],\n};\n\nconst Div = styled.div`\n .dialog-h1 {\n font-size: 18px;\n }\n\n .MuiOutlinedInput-root {\n border-radius: 36px;\n .MuiSelect-root.MuiOutlinedInput-input {\n padding-top: 8.5px;\n padding-bottom: 8.5px;\n }\n }\n\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n`;\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Box from '@mui/material/Box';\nimport AddIcon from '@mui/icons-material/Add';\nimport IconButton from '@mui/material/IconButton';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport DeleteIcon from '@arcblock/icons/lib/DeleteIcon';\nimport Avatar from '@arcblock/did-connect/lib/Avatar';\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport { withPermission } from '../../permission';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { sleep } from '../../../libs/util';\nimport Confirm from '../../confirm';\nimport ListHeader from '../styles/list-header';\nimport SearchInput from '../search-input';\nimport TrustedIssuer from './trusted-issuer';\n\nfunction TrustedIssuers({ onCancel, hasPermission }) {\n const { api } = useNodeContext();\n const { teamDid, trustedPassports } = useTeamContext();\n const { t } = useLocaleContext();\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n const [trustedIssuer, setTrustedIssuer] = useState(false);\n const [search, setSearch] = useState('');\n\n const deleteTrustedIssuer = async did => {\n if (loading) {\n return;\n }\n\n const index = trustedPassports.findIndex(x => x.issuerDid === did);\n\n if (index === -1) {\n // should not be here\n Toast.error('Cannot find passports');\n }\n\n const trustedList = [...trustedPassports];\n trustedList.splice(index, 1);\n\n try {\n setLoading(true);\n await api.configTrustedPassports({ input: { teamDid, trustedPassports: trustedList } });\n await sleep(800);\n setLoading(false);\n Toast.success(t('common.saveSuccess'));\n setDelConfirm(false);\n } catch (err) {\n setLoading(false);\n Toast.error(err.message);\n }\n };\n\n const filteredIssuers = trustedPassports.filter(\n x => !search || x.issuerDid.toLowerCase().includes(search.toLowerCase())\n );\n\n return (\n <Dialog\n title={t('team.passport.trustedIssuers')}\n open\n onClose={onCancel}\n fullWidth\n PaperProps={{ style: { minHeight: '80vh' } }}>\n <Div>\n <div className=\"dialog-content\">\n <div className=\"dialog-h1\">{t('team.passport.trustedPassportIssuers')}</div>\n\n <Box component={ListHeader} mt={3}>\n <div className=\"left\">\n <SearchInput\n placeholder={t('team.passport.searchIssuerDid')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n />\n </div>\n <div className=\"right\">\n {hasPermission && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-cy=\"add-trusted-issuer\"\n onClick={() => setTrustedIssuer({ mode: 'add' })}>\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.add')}\n </Button>\n )}\n </div>\n </Box>\n\n <div className=\"list\">\n {filteredIssuers.map(x => (\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\" mt=\"20px\">\n <Box flexShrink={0}>\n <DidAddress\n copyable={false}\n prepend={\n <Box display=\"flex\" alignItems=\"center\" mr={1}>\n <Avatar did={x.issuerDid} size={20} />\n </Box>\n }\n showDidLogo={false}>\n <span style={{ fontSize: 16 }}>{x.issuerDid}</span>\n </DidAddress>\n {!!x.remark && (\n <Box pl={3.5} fontSize={12} maxWidth=\"300px\">\n {x.remark}\n </Box>\n )}\n </Box>\n <Box color=\"gray\" ml=\"28px\" flexGrow={1}>\n {x.mappings && x.mappings.length\n ? `${x.mappings.length} ${t('team.passport.mappingRule')}`\n : t('team.passport.defaultRule')}\n </Box>\n <Box flexShrink={0} display=\"flex\" alignItems=\"center\">\n <IconButton\n onClick={() => setTrustedIssuer({ mode: 'update', data: cloneDeep(x) })}\n data-cy=\"edit-mapping-rule\"\n size=\"large\">\n <EditIcon />\n </IconButton>\n <IconButton\n data-cy=\"delete-mapping-rule\"\n onClick={() =>\n setDelConfirm({\n title: t('common.delete'),\n description: t('common.delConfirmDescription'),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => deleteTrustedIssuer(x.issuerDid),\n onCancel: () => {\n setLoading(false);\n setDelConfirm(null);\n },\n })\n }\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n </Box>\n </Box>\n ))}\n {!trustedPassports.length && <Empty>{t('common.empty')}</Empty>}\n </div>\n </div>\n </Div>\n\n {trustedIssuer && (\n <TrustedIssuer\n mode={trustedIssuer.mode}\n data={trustedIssuer.data}\n trustedPassports={cloneDeep(trustedPassports)}\n onCancel={() => setTrustedIssuer(null)}\n onSuccess={() => {\n setTrustedIssuer(null);\n }}\n />\n )}\n\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Dialog>\n );\n}\n\nTrustedIssuers.propTypes = {\n onCancel: PropTypes.func.isRequired,\n hasPermission: PropTypes.bool,\n};\n\nTrustedIssuers.defaultProps = {\n hasPermission: false,\n};\n\nexport default withPermission(TrustedIssuers, 'mutate_team');\n\nconst Div = styled.div`\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n`;\n","import { useContext, useState } from 'react';\nimport styled from '@emotion/styled';\n\nimport AddIcon from '@mui/icons-material/Add';\nimport Box from '@mui/material/Box';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport SplitButton from '@arcblock/ux/lib/SplitButton';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport LockIcon from '@arcblock/icons/lib/LockIcon';\nimport ExternalIssuerIcon from '@arcblock/icons/lib/ExternalIssuerIcon';\n\nimport createPassportSvg from '@abtnode/auth/lib/util/create-passport-svg';\nimport Toast from '@abtnode/ux/lib/toast';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { sleep, isProtectedRole } from '../../../libs/util';\nimport Permission from '../../permission';\nimport SearchInput from '../search-input';\nimport ListHeader from '../styles/list-header';\nimport Detail from './detail';\nimport MutateRole from './mutate-role';\nimport TrustedIssuers from './trusted-issuers';\n\nexport default function PassportList() {\n const { t } = useContext(LocaleContext);\n const { api, info: nodeInfo } = useNodeContext();\n const {\n roles,\n teamDid,\n teamIssuerDid,\n teamName,\n refresh: refreshTeam,\n enablePassportIssuance,\n passportColor,\n } = useTeamContext();\n\n const [showCreate, setShowCreate] = useState(false);\n const [updateForm, setUpdateForm] = useState(false);\n const [showTrustedIssuers, setShowTrustedIssuers] = useState(null);\n const [search, setSearch] = useState('');\n const [loading, setLoading] = useState(false);\n\n const toggleShowIssue = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await api.configPassportIssuance({ input: { teamDid, enable: !enablePassportIssuance } });\n refreshTeam();\n await sleep(800);\n Toast.success(t('common.configSuccess'));\n setLoading(false);\n } catch (error) {\n Toast.error(error.message);\n setLoading(false);\n }\n };\n\n const filteredRoles = roles.filter(x => !search || x.title.includes(search) || x.name.includes(search));\n\n return (\n <Div>\n <ListHeader>\n <div className=\"left\">\n <SearchInput\n placeholder={t('team.passport.search')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n />\n </div>\n <div className=\"right\">\n <Permission permission=\"mutate_team\">\n <SplitButton\n variant=\"outlined\"\n menuButtonProps={{ 'data-cy': 'trusted-issuers-more' }}\n menu={\n <SplitButton.Item\n data-cy=\"config-show-issue-passport\"\n onClick={() => {\n toggleShowIssue();\n }}>\n <Box display=\"flex\" alignItems=\"center\">\n {loading && <Spinner size={[16, 10]} style={{ marginRight: 8 }} />}\n <Box>\n {enablePassportIssuance ? t('team.passport.disableIssuance') : t('team.passport.enableIssuance')}\n <Box fontSize={12} color=\"#888\">\n {enablePassportIssuance\n ? t('team.passport.disableIssuanceTip')\n : t('team.passport.enableIssuanceTip')}\n </Box>\n </Box>\n </Box>\n </SplitButton.Item>\n }>\n {() => (\n <Button\n variant=\"outlined\"\n data-cy=\"config-trusted-issuers\"\n onClick={() => {\n setShowTrustedIssuers(true);\n }}>\n <ExternalIssuerIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.passport.trustedPassportIssuers')}\n </Button>\n )}\n </SplitButton>\n\n {nodeInfo.did !== teamDid && (\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n edge=\"end\"\n color=\"primary\"\n data-cy=\"create-role\"\n onClick={() => setShowCreate(true)}>\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.add')}\n </Button>\n )}\n </Permission>\n </div>\n </ListHeader>\n\n <Box mt={3} />\n\n <Box className=\"list\">\n {filteredRoles.map(role => (\n <Box\n data-cy={`passport-${role.name}`}\n className=\"item\"\n display=\"flex\"\n alignItems=\"center\"\n onClick={() => setUpdateForm(role)}\n key={role.name}>\n <Box display=\"flex\" alignItems=\"center\">\n <img\n style={{ width: 120 }}\n alt=\"\"\n src={createPassportSvg({\n title: role.title,\n issuer: teamName,\n issuerDid: teamIssuerDid,\n ownerName: 'Your Name',\n isDataUrl: true,\n preferredColor: passportColor,\n })}\n />\n <Box ml={3} className=\"title\">\n {role.title}\n </Box>\n </Box>\n\n <Box className=\"description\">{role.description}</Box>\n\n <Permission permission=\"mutate_team\">\n <div className=\"action\">{isProtectedRole(role.name) ? <LockIcon /> : <EditIcon />}</div>\n </Permission>\n </Box>\n ))}\n </Box>\n\n {showCreate && (\n <MutateRole\n teamDid={teamDid}\n onCancel={() => setShowCreate(false)}\n onSuccess={() => {\n setShowCreate(false);\n refreshTeam();\n }}\n />\n )}\n\n {updateForm && (\n <Detail\n onCancel={() => setUpdateForm(null)}\n onSuccess={() => {\n setUpdateForm(null);\n refreshTeam();\n }}\n onDelete={() => {\n setUpdateForm(null);\n refreshTeam();\n }}\n mode=\"update\"\n roleName={updateForm.name}\n item={updateForm}\n />\n )}\n\n {/* showTrustedIssuers */}\n {showTrustedIssuers && <TrustedIssuers onCancel={() => setShowTrustedIssuers(false)} />}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .list {\n .item {\n padding: 12px;\n margin: 12px -12px;\n cursor: pointer;\n transition: box-shadow 0.4s;\n &:hover {\n box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.1);\n }\n }\n\n .title {\n font-weight: 400;\n font-size: 18px;\n width: 80px;\n line-height: 21px;\n color: #222222;\n }\n\n .description {\n flex: 1;\n margin-left: 64px;\n color: #999999;\n }\n\n .action {\n color: #bfbfbf;\n fill: #bfbfbf;\n }\n }\n`;\n\nPassportList.propTypes = {};\n\nPassportList.defaultProps = {};\n","import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport SearchIcon from '@mui/icons-material/Search';\n\nconst SearchInput = styled(({ children, ...props }) => (\n <TextField\n {...props}\n id=\"outlined-basic\"\n variant=\"outlined\"\n InputProps={{\n startAdornment: <SearchIcon />,\n }}\n size=\"small\">\n {children}\n </TextField>\n))`\n .MuiOutlinedInput-root {\n color: #999;\n &.MuiInputBase-adornedStart .MuiSvgIcon-root {\n color: #bfbfbf;\n }\n opacity: 1;\n border-radius: 36px;\n background: #f8f8f8;\n padding-left: 16px;\n input {\n padding-left: 8px;\n font-weight: bold;\n &::placeholder {\n opacity: 1;\n color: #bfbfbf;\n }\n padding-top: 8.5px;\n padding-bottom: 8.5px;\n }\n }\n\n .MuiOutlinedInput-notchedOutline,\n .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline,\n .Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: #eee;\n border-width: 1px;\n }\n`;\n\nexport default SearchInput;\n","import styled from '@emotion/styled';\n\nconst ListHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 14px;\n .left,\n .right {\n }\n .right {\n display: flex;\n align-items: center;\n }\n .tabs {\n .MuiButton-root {\n border: none;\n color: #999;\n &.active {\n color: #222;\n }\n }\n }\n\n @media (max-width: 600px) {\n display: block;\n .right {\n margin-top: 12px;\n }\n }\n`;\n\nexport default ListHeader;\n","import { createContext, useContext, useState, useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { EVENTS } from '@abtnode/constant';\nimport getClient from '../libs/node';\nimport { useSubscription } from '../libs/ws';\nimport { shouldCheckDomainStatus } from '../libs/util';\nimport { useDomainsAccessibility } from '../hooks/url-evaluation';\n\nconst DomainStatusContext = createContext({});\nconst { Provider, Consumer } = DomainStatusContext;\n\nfunction DomainStatusProvider({ children, domains: domainList }) {\n const client = getClient();\n const domainListStr = JSON.stringify(domainList);\n const [status, setStatus] = useState({});\n const domains = useMemo(() => domainList.filter(domain => shouldCheckDomainStatus(domain)), [domainListStr]); // eslint-disable-line\n\n useSubscription(EVENTS.DOMAIN_STATUS, data => {\n if (data) {\n setStatus(pre => ({ ...pre, [data.domain]: { ...pre[data.domain], ...data } }));\n }\n });\n\n const { domainsAccessibility, recommendedDomain } = useDomainsAccessibility(domains);\n // 合并 domain 自身的状态 + 可访问性状态\n const domainsStatus = useMemo(() => {\n const merged = { ...status };\n Object.keys(domainsAccessibility).forEach(key => {\n const value = merged[key] || {};\n merged[key] = { ...value, ...domainsAccessibility[key] };\n });\n return merged;\n }, [status, domainsAccessibility]);\n\n const getDomainStatus = async () => {\n if (domains.length > 0) {\n client.checkDomains({\n input: { domains },\n });\n }\n };\n\n const updateStatus = domain => {\n if (domain) {\n client.checkDomains({\n input: { domains: [domain] },\n });\n }\n };\n\n useEffect(() => {\n getDomainStatus();\n }, [domains]); // eslint-disable-line\n\n const value = {\n refresh: getDomainStatus,\n updateStatus,\n api: client,\n status: domainsStatus,\n recommendedDomain,\n recommendedDomainStatus: domainsStatus[recommendedDomain],\n };\n\n return <Provider value={value}>{children}</Provider>;\n}\n\nDomainStatusProvider.propTypes = {\n children: PropTypes.any.isRequired,\n domains: PropTypes.array.isRequired,\n};\n\nfunction useDomainStatusContext() {\n const { status, recommendedDomainStatus, recommendedDomain, updateStatus } = useContext(DomainStatusContext);\n return { status, recommendedDomainStatus, recommendedDomain, updateStatus };\n}\n\nexport { DomainStatusContext, DomainStatusProvider, Consumer as DomainStatusConsumer, useDomainStatusContext };\n","import { createContext, useState, useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { RBAC_CONFIG, EVENTS } from '@abtnode/constant';\nimport { BLOCKLET_CONFIGURABLE_KEY } from '@blocklet/meta/lib/constants';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\n\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport { useNodeContext } from './node';\nimport { useBlockletContext } from './blocklets';\nimport { useRoutingContext } from './routing';\n\nimport { useSubscription } from '../libs/ws';\nimport { getEndPoint } from '../libs/util';\nimport { useDomainStatusContext } from './domain-status';\n\nconst TeamContext = createContext({});\nconst { Provider, Consumer } = TeamContext;\n\nconst getTeamName = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return nodeInfo.name;\n }\n\n if (blocklet) {\n return getDisplayName(blocklet);\n }\n\n return '';\n};\n\nconst getTeamPassportColor = (teamDid, nodeInfo, blocklet) => {\n if (blocklet) {\n const config = blocklet.environments.find(x => x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_PASSPORT_COLOR);\n return config ? config.value : 'auto';\n }\n\n return 'default';\n};\n\nconst getTrustedPassports = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return nodeInfo.trustedPassports || [];\n }\n\n if (blocklet) {\n return blocklet.trustedPassports || [];\n }\n\n return [];\n};\n\nconst getTeamIssuerDid = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return teamDid;\n }\n\n if (blocklet) {\n const item = (blocklet.environments || []).find(x => x.key === 'BLOCKLET_APP_ID') || {};\n return item.value || '';\n }\n\n return '';\n};\n\nconst getEnablePassportIssuance = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return nodeInfo.enablePassportIssuance !== false;\n }\n\n if (blocklet) {\n return blocklet.enablePassportIssuance !== false;\n }\n\n return true;\n};\n\nfunction TeamProvider({ teamDid, children }) {\n const { api, info: nodeInfo } = useNodeContext();\n const { data: blocklets } = useBlockletContext();\n const { getBlockletUrl } = useRoutingContext();\n const { recommendedDomain } = useDomainStatusContext();\n\n const [invitations, setInvitations] = useState([]);\n const [roles, setRoles] = useState([]);\n const [permissions, setPermissions] = useState([]);\n\n const blocklet = blocklets.find(x => x.meta.did === teamDid);\n const teamName = getTeamName(teamDid, nodeInfo, blocklet);\n const passportColor = getTeamPassportColor(teamDid, nodeInfo, blocklet);\n const trustedPassports = getTrustedPassports(teamDid, nodeInfo, blocklet);\n const teamIssuerDid = getTeamIssuerDid(teamDid, nodeInfo, blocklet);\n const enablePassportIssuance = getEnablePassportIssuance(teamDid, nodeInfo, blocklet);\n\n const getData = async did => {\n try {\n const res = await api.doBatchQuery({\n getRoles: { input: { teamDid: did } },\n getPermissions: { input: { teamDid: did } },\n getInvitations: { input: { teamDid: did } },\n });\n\n setRoles(\n (res.getRoles.roles || [])\n // exclude some roles: not passport or only for ci\n .filter(x => !RBAC_CONFIG.roles.some(y => y.name === x.name && (!y.passport || y.ci)))\n // backwards compatibility\n .map(x => {\n x.description = x.description || `Use this passport to connect ${teamName} as ${x.title}`;\n return x;\n })\n );\n setPermissions(res.getPermissions.permissions || []);\n setInvitations(res.getInvitations.invitations || []);\n } catch (err) {\n Toast.error(err.message);\n }\n };\n\n const getUsers = async ({ query, paging } = {}) => {\n const input = { teamDid };\n if (paging) {\n input.paging = paging;\n }\n\n if (query) {\n input.query = query;\n }\n\n input.sort = { lastLoginAt: -1 };\n\n return api.getUsers({ input });\n };\n\n const getUsersCountPerRole = () => api.getUsersCountPerRole({ input: { teamDid } });\n\n const refresh = () => getData(teamDid);\n\n useEffect(() => {\n getData(teamDid);\n }, [teamDid]); // eslint-disable-line\n\n const onUserEvent = data => {\n if (data.teamDid === teamDid) {\n getData(teamDid);\n }\n };\n\n useSubscription(EVENTS.USER_ADDED, onUserEvent, [teamDid]);\n useSubscription(EVENTS.USER_REMOVED, onUserEvent, [teamDid]);\n useSubscription(EVENTS.USER_UPDATED, onUserEvent, [teamDid]);\n\n const data = {\n teamDid,\n teamIssuerDid,\n teamName,\n invitations,\n roles,\n permissions,\n trustedPassports,\n isNodeTeam: teamDid === nodeInfo.did,\n enablePassportIssuance,\n refresh,\n passportColor,\n endpoint:\n teamDid === nodeInfo.did\n ? getEndPoint(nodeInfo)\n : getBlockletUrl({ did: teamDid, domain: { value: recommendedDomain } }),\n blocklet,\n api: {\n getUsers,\n getUsersCountPerRole,\n },\n };\n\n return <Provider value={data}>{children}</Provider>;\n}\n\nTeamProvider.propTypes = {\n teamDid: PropTypes.string.isRequired,\n children: PropTypes.object.isRequired,\n};\n\nTeamProvider.defaultProps = {};\n\nfunction useTeamContext() {\n return useContext(TeamContext);\n}\n\nexport { TeamContext, TeamProvider, Consumer as TeamConsumer, useTeamContext };\n","import { useState, useEffect, useMemo, useRef, useContext } from 'react';\nimport joinURL from 'url-join';\nimport { WELLKNOWN_PING_PREFIX } from '@abtnode/constant';\nimport { getAccessUrl } from '@abtnode/ux/src/util';\nimport { evaluateURLs } from '@abtnode/util/lib/url-evaluation';\nimport defaultCheckAccessible from '@abtnode/util/lib/url-evaluation/check-accessible-browser';\nimport memoize from 'lodash/memoize';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { useRoutingContext, getBlockletUrls } from '../contexts/routing';\nimport { getBlockletUrlParams } from '../libs/util';\n\n// 如果同一个页面中存在多个部分同时对同一个 url 检测 url 可访问性, 避免造成重复请求\nconst ping = memoize(url => defaultCheckAccessible(joinURL(new URL(url).origin, WELLKNOWN_PING_PREFIX)));\n\n// url <-> evaluation cache\nconst CACHE = {};\n\nexport function useUrlEvaluation({ urls, checkAccessible = defaultCheckAccessible, disableCache = false }) {\n // 基于 CACHE 初始化该 hook 的状态\n // FIXME: 最好解决源头的 material-table 渲染 BlockletInterface 时的 re-mount 问题 (#4897)\n const initialCachedRef = useRef(urls.filter(url => CACHE[url]).map(url => CACHE[url]));\n const allCached = initialCachedRef.current.length === urls.length;\n const [urlsState, setUrlsState] = useState(allCached ? initialCachedRef.current : []);\n const [loading, setLoading] = useState(!allCached);\n const recommendedUrlState = useMemo(() => {\n if (!loading && urlsState.length) {\n return urlsState[0];\n }\n return null;\n }, [urlsState, loading]);\n\n useEffect(() => {\n if (urls?.length > 0 && !allCached) {\n const evaluate = async () => {\n let results;\n setLoading(true);\n if (disableCache) {\n results = await evaluateURLs(urls, { checkAccessible });\n results.forEach(item => {\n CACHE[item.url] = item;\n });\n } else {\n const misses = await evaluateURLs(\n urls.filter(url => !CACHE[url]),\n { checkAccessible }\n );\n misses.forEach(item => {\n CACHE[item.url] = item;\n });\n results = urls.map(url => CACHE[url]).sort((a, b) => b.score - a.score);\n }\n setUrlsState(results);\n setLoading(false);\n };\n evaluate();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [urls, disableCache, allCached]);\n\n return {\n urlsState,\n loading,\n recommendedUrlState,\n recommendedUrl: recommendedUrlState?.url,\n };\n}\n\n/**\n * 主要对 blocklet 访问 urls 进行评估\n * @param {object} blocklet\n */\nexport function useBlockletUrlEvaluation(blocklet) {\n const { siteMap } = useRoutingContext();\n const { locale } = useContext(LocaleContext);\n const urls = useMemo(() => {\n if (!blocklet) {\n return [];\n }\n // getBlockletUrlParams 的调用是必须的, 会根据 blocklet 状态决定是否添加 \"__start__\" 参数, 以保证 blocklet 启动按钮可以正确的跳转到启动页面\n return getBlockletUrls({ did: blocklet.meta.did, siteMap, params: getBlockletUrlParams(blocklet, locale) });\n }, [blocklet, locale, siteMap]);\n const { loading, recommendedUrlState, recommendedUrl } = useUrlEvaluation({ urls, checkAccessible: ping });\n return { urls, loading, recommendedUrlState, recommendedUrl };\n}\n\n/**\n * 主要对 blocklet domains 对应的 urls 进行评估, 配合 DomainStatusProvider 使用\n * @param {string[]} domains\n */\nexport function useDomainsAccessibility(domains) {\n // 获取 blocklet domain 对应的访问 url\n const urls = useMemo(() => domains.map(item => getAccessUrl(item)), [domains]);\n const { urlsState, loading, recommendedUrl } = useUrlEvaluation({ urls, checkAccessible: ping });\n let result;\n if (loading) {\n result = {\n domainsAccessibility: domains.reduce((acc, cur) => ({ ...acc, [cur]: { loading: true } }), {}),\n recommendedDomain: null,\n };\n } else {\n const domainsAccessibility = urlsState.reduce((acc, cur) => {\n // 检测对象是 domain, 但检测可访问性用的是 domain 对应的 ping url, 所以需要取 hostname 作为结果\n const domain = new URL(cur.url).hostname;\n acc[domain] = { ...cur, domain };\n return acc;\n }, {});\n // 从排好优先级的 urls 中选择第一个可访问的 url 作为 recommendedDomain (对于自定义域名, 可能存在评分最高但不可访问的情况) (#5195)\n const accessibleUrl = urlsState.find(item => item.accessible)?.url || recommendedUrl;\n result = {\n domainsAccessibility,\n recommendedDomain: accessibleUrl ? new URL(accessibleUrl).hostname : null,\n };\n }\n return result;\n}\n","const { getNftBGColor, DEFAULT_COLOR, getNftBGColorFromDid } = require('./passport-color');\n\n/**\n * Generate Passport SVG\n *\n * @param {string} title passport title\n * @param {string} issuer issuer name\n * @param {string} issuerDid\n * @param {boolean} ownerName\n * @param {string} preferredColor\n * @param {boolean} ownerAvatarUrl\n * @param {boolean} revoked 是否撤销\n * @param {boolean} isDataUrl 返回生成 data url\n * @returns {string} svg xml or image data url\n */\nconst createPassportSvg = ({\n issuer = '',\n title = '',\n issuerDid = '',\n ownerName = '',\n preferredColor = 'default',\n ownerAvatarUrl = '',\n revoked,\n isDataUrl,\n width = '100%',\n height = '100%',\n} = {}) => {\n let colors;\n if (preferredColor === 'default') {\n colors = DEFAULT_COLOR;\n } else if (preferredColor === 'auto') {\n colors = getNftBGColorFromDid(issuerDid);\n } else {\n colors = getNftBGColor(preferredColor);\n }\n\n const svgXML = `<svg width=\"${width}\" height=\"${height}\" viewBox=\"0 0 424 564\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect x=\"1\" y=\"1\" width=\"422\" height=\"562\" rx=\"21\" fill=\"url(#paint0_linear_6_342)\"/>\n<text x=\"360\" y=\"65\" fill=\"white\" xml:space=\"preserve\" font-family=\"Roboto,Helvetica\" font-size=\"${(() => {\n if (title.length >= 6) {\n return 24;\n }\n\n if (title.length >= 8) {\n return 20;\n }\n\n return 28;\n })()}\" letter-spacing=\"0px\" style=\"dominant-baseline:middle;text-anchor:middle;\">${title.toUpperCase()}</text>\n<text opacity=\"0.4\" fill=\"white\" xml:space=\"preserve\" style=\"white-space: pre\" font-family=\"Roboto,Helvetica\" font-size=\"16\" font-weight=\"500\" letter-spacing=\"0px\"><tspan x=\"319\" y=\"40.9688\">PASSPORT</tspan></text>\n<text fill=\"white\" xml:space=\"preserve\" style=\"white-space: pre\" font-family=\"Roboto,Helvetica\" font-size=\"${(() => {\n if (issuer.length > 15) {\n return 20;\n }\n\n return 24;\n })()}\" font-weight=\"500\" letter-spacing=\"0px\"><tspan x=\"26\" y=\"60.2031\">${issuer}</tspan></text>\n<rect x=\"2\" y=\"102\" width=\"420\" height=\"168\" fill=\"black\" fill-opacity=\"0.3\"/>\n<circle cx=\"212\" cy=\"250\" r=\"60\" fill=\"#FBFBFB\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M212.224 247.722C218.932 247.722 224.37 242.284 224.37 235.575C224.37 228.867 218.932 223.429 212.224 223.429C205.515 223.429 200.077 228.867 200.077 235.575C200.077 242.284 205.515 247.722 212.224 247.722ZM188.857 272.018C188.857 274.573 190.929 276.645 193.484 276.645H230.962C231.28 276.645 231.597 276.612 231.908 276.547C234.41 276.025 236.014 273.574 235.492 271.072L234.335 265.533C232.991 259.099 227.319 254.489 220.746 254.489H203.7C197.127 254.489 191.455 259.099 190.112 265.533L188.955 271.072C188.89 271.383 188.857 271.7 188.857 272.018Z\" fill=\"#FBFBFB\" />\n<path d=\"M231.908 276.547L232.215 278.016L231.908 276.547ZM235.492 271.072L236.96 270.765H236.96L235.492 271.072ZM234.335 265.533L232.866 265.839L234.335 265.533ZM190.112 265.533L191.58 265.839L190.112 265.533ZM188.955 271.072L187.487 270.765H187.487L188.955 271.072ZM222.87 235.575C222.87 241.455 218.104 246.222 212.224 246.222V249.222C219.761 249.222 225.87 243.112 225.87 235.575H222.87ZM212.224 224.929C218.104 224.929 222.87 229.695 222.87 235.575H225.87C225.87 228.038 219.761 221.929 212.224 221.929V224.929ZM201.577 235.575C201.577 229.695 206.344 224.929 212.224 224.929V221.929C204.687 221.929 198.577 228.038 198.577 235.575H201.577ZM212.224 246.222C206.344 246.222 201.577 241.455 201.577 235.575H198.577C198.577 243.112 204.687 249.222 212.224 249.222V246.222ZM193.484 275.145C191.757 275.145 190.357 273.745 190.357 272.018H187.357C187.357 275.402 190.1 278.145 193.484 278.145V275.145ZM230.962 275.145H193.484V278.145H230.962V275.145ZM231.601 275.079C231.391 275.123 231.177 275.145 230.962 275.145V278.145C231.383 278.145 231.803 278.102 232.215 278.016L231.601 275.079ZM234.023 271.379C234.376 273.069 233.292 274.726 231.601 275.079L232.215 278.016C235.527 277.324 237.652 274.078 236.96 270.765L234.023 271.379ZM232.866 265.839L234.023 271.379L236.96 270.765L235.803 265.226L232.866 265.839ZM220.746 255.989C226.609 255.989 231.668 260.1 232.866 265.839L235.803 265.226C234.314 258.097 228.029 252.989 220.746 252.989V255.989ZM203.7 255.989H220.746V252.989H203.7V255.989ZM191.58 265.839C192.779 260.1 197.838 255.989 203.7 255.989V252.989C196.417 252.989 190.132 258.097 188.643 265.226L191.58 265.839ZM190.423 271.379L191.58 265.839L188.643 265.226L187.487 270.765L190.423 271.379ZM190.357 272.018C190.357 271.803 190.379 271.589 190.423 271.379L187.487 270.765C187.401 271.177 187.357 271.597 187.357 272.018H190.357Z\" fill=\"#BFBFBF\" />\n<circle cx=\"212\" cy=\"250\" r=\"60\" fill=\"url(#raduisImage)\"/>\n<defs>\n<pattern id=\"raduisImage\" patternUnits=\"userSpaceOnUse\" width=\"424\" height=\"564\">\n<image x=\"152\" y=\"190\" href=\"${ownerAvatarUrl}\" width=\"120\" height=\"120\" />\n</pattern>\n</defs>\n<text x=\"215\" y=\"350\" fill=\"white\" xml:space=\"preserve\" style=\"dominant-baseline:middle;text-anchor:middle;\" font-family=\"Roboto,Helvetica\" font-size=\"28\" font-weight=\"500\" letter-spacing=\"0px\">${ownerName}</text>\n<text opacity=\"0.4\" fill=\"white\" xml:space=\"preserve\" style=\"white-space: pre\" font-family=\"Roboto,Helvetica\" font-size=\"18\" font-weight=\"500\" letter-spacing=\"0px\"><tspan x=\"26\" y=\"407.652\">ISSUER DID</tspan></text>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28.6722 423.313H45.3819C46.4294 423.313 47.2787 424.162 47.2787 425.21V433.79C47.2787 434.838 46.4294 435.687 45.3819 435.687H28.6722C27.9517 435.687 27.3249 435.285 27.0039 434.694H26.1167C26.4887 435.746 27.4924 436.5 28.6722 436.5H45.3819C46.8784 436.5 48.0916 435.287 48.0916 433.79V425.21C48.0916 423.713 46.8784 422.5 45.3819 422.5H28.6722C27.3296 422.5 26.215 423.477 26 424.758H26.8295C27.0321 423.929 27.7803 423.313 28.6722 423.313ZM27.8801 432.096C27.7831 432.089 27.6966 432.082 27.6204 432.075V427.526C27.7243 427.512 27.8351 427.505 27.9528 427.505C28.0705 427.498 28.1848 427.494 28.2955 427.494C29.1057 427.494 29.6978 427.688 30.0717 428.076C30.4457 428.464 30.6326 429.035 30.6326 429.79C30.6326 430.51 30.4353 431.074 30.0406 431.483C29.6528 431.892 29.0538 432.096 28.2436 432.096H27.8801ZM32.0141 431.421C32.208 430.957 32.305 430.413 32.305 429.79C32.305 429.139 32.208 428.582 32.0141 428.118C31.8202 427.654 31.5432 427.273 31.1832 426.975C30.8231 426.677 30.3903 426.459 29.8848 426.321C29.3862 426.182 28.8288 426.113 28.2125 426.113C27.9216 426.113 27.5719 426.127 27.1634 426.154C26.7617 426.175 26.3739 426.22 26 426.29V433.301C26.3739 433.377 26.7548 433.425 27.1426 433.446C27.5304 433.474 27.8697 433.488 28.1605 433.488C28.7976 433.488 29.3723 433.412 29.8848 433.259C30.3972 433.107 30.83 432.878 31.1832 432.574C31.5432 432.269 31.8202 431.885 32.0141 431.421ZM35.2788 426.196H33.6585V433.394H35.2788V426.196ZM38.5654 432.075C38.6416 432.082 38.7281 432.089 38.8251 432.096H39.1886C39.9988 432.096 40.5978 431.892 40.9856 431.483C41.3803 431.074 41.5776 430.51 41.5776 429.79C41.5776 429.035 41.3907 428.464 41.0167 428.076C40.6428 427.688 40.0507 427.494 39.2405 427.494C39.1298 427.494 39.0155 427.498 38.8978 427.505C38.7801 427.505 38.6693 427.512 38.5654 427.526V432.075ZM43.25 429.79C43.25 430.413 43.153 430.957 42.9591 431.421C42.7652 431.885 42.4882 432.269 42.1282 432.574C41.775 432.878 41.3422 433.107 40.8298 433.259C40.3173 433.412 39.7426 433.488 39.1055 433.488C38.8147 433.488 38.4754 433.474 38.0876 433.446C37.6998 433.425 37.3189 433.377 36.945 433.301V426.29C37.3189 426.22 37.7067 426.175 38.1084 426.154C38.5169 426.127 38.8666 426.113 39.1574 426.113C39.7738 426.113 40.3312 426.182 40.8298 426.321C41.3353 426.459 41.7681 426.677 42.1282 426.975C42.4882 427.273 42.7652 427.654 42.9591 428.118C43.153 428.582 43.25 429.139 43.25 429.79ZM45.1907 428.355C44.8209 428.355 44.5161 428.055 44.5161 427.686C44.5161 427.316 44.8209 427.016 45.1907 427.016C45.5604 427.016 45.8652 427.316 45.8652 427.686C45.8652 428.055 45.5604 428.355 45.1907 428.355ZM45.1907 431.855C44.8209 431.855 44.5161 431.555 44.5161 431.185C44.5161 430.815 44.8209 430.516 45.1907 430.516C45.5604 430.516 45.8652 430.815 45.8652 431.185C45.8652 431.555 45.5604 431.855 45.1907 431.855Z\" fill=\"white\"/>\n<text fill=\"white\" xml:space=\"preserve\" style=\"white-space: pre\" font-family=\"Roboto,Helvetica\" font-size=\"15\" font-weight=\"500\" letter-spacing=\"0px\"><tspan x=\"54.0916\" y=\"434.969\">${issuerDid}</tspan></text>\n<rect x=\"1\" y=\"1\" width=\"422\" height=\"562\" rx=\"21\" stroke=\"#F0F0F0\" stroke-width=\"2\"/>\n<defs>\n<linearGradient id=\"paint0_linear_6_342\" x1=\"414.5\" y1=\"562\" x2=\"-116.166\" y2=\"156.726\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"${colors.startColor}\"/>\n<stop offset=\"1\" stop-color=\"${colors.endColor}\"/>\n</linearGradient>\n</defs>\n${\n revoked\n ? '<circle cx=\"210\" cy=\"250\" r=\"120\" stroke=\"rgba(255,0,0,0.5)\" stroke-width=\"25\" /><line x1=\"132\" y1=\"168\" x2=\"296\" y2=\"323\" stroke=\"rgba(255,0,0,0.5)\" stroke-width=\"25\" />'\n : ''\n}\n</svg>`;\n\n if (isDataUrl) {\n return `data:image/svg+xml;utf8,${encodeURIComponent(svgXML)}`;\n }\n\n return svgXML;\n};\n\nmodule.exports = createPassportSvg;\n","const { toHex } = require('@ocap/util');\nconst { Hasher } = require('@ocap/mcrypto');\n\nconst DEFAULT_COLOR = {\n startColor: '#2B3845',\n endColor: '#5A7A8A',\n};\n\n/**\n * 将单个颜色转换为可用 nft 两个渐变背景色\n * @param {String} rgbString 背景色\n * @returns {Object}\n */\nconst getNftBGColor = (rgbString) => {\n if (rgbString) {\n const hsldata = rgbToHsl(rgbString);\n\n // 色相 h 随意\n // 饱和度 s 不可超过 0.8\n // 亮度 l 不可超过 0.6,0.3 以上\n const newHsl = [hsldata[0]];\n if (hsldata[1] > 0.7) {\n newHsl.push(0.7);\n } else {\n newHsl.push(hsldata[1]);\n }\n\n if (hsldata[2] > 0.6) {\n newHsl.push(0.6);\n } else if (hsldata[2] < 0.3) {\n newHsl.push(0.3);\n } else {\n newHsl.push(hsldata[2]);\n }\n\n const newRepeatHsl = [newHsl[0], newHsl[1], newHsl[2] - 0.1];\n\n const newColor = hslToRgb(...newHsl);\n const newRepeatColor = hslToRgb(...newRepeatHsl);\n\n return {\n startColor: newRepeatColor,\n endColor: newColor,\n };\n }\n\n return {\n startColor: '#2B3845',\n endColor: '#5A7A8A',\n };\n};\n\nfunction getPassportColorFromDid(did) {\n return `#${toHex(Hasher.SHA3.hash224(did)).slice(-6)}`;\n}\n\nfunction getNftBGColorFromDid(did) {\n return getNftBGColor(getPassportColorFromDid(did));\n}\n\n/**\n * RGB 转换为 HSL 颜色\n *\n * @param {String} rgbString rgb色值\n * @return {Array} HSL色值\n */\nfunction rgbToHsl(rgbString) {\n const color = rgbString.replace('#', '');\n const r = parseInt(color.slice(0, 2), 16) / 255;\n const g = parseInt(color.slice(2, 4), 16) / 255;\n const b = parseInt(color.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = 0;\n s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n }\n h /= 6;\n }\n\n return [h, s, l];\n}\n\n/**\n * HSL颜色值转换为RGB.\n * h, s, 和 l 设定在 [0, 1] 之间\n * @param {Number} h 色相\n * @param {Number} s 饱和度\n * @param {Number} l 亮度\n * @returns rgb string\n */\nfunction hslToRgb(h, s, l) {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = l;\n g = l;\n b = l;\n } else {\n const hue2rgb = (p, q, t2) => {\n let t = t2;\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return `#${[Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]\n .map((e) => e.toString(16).padStart(2, 0))\n .join('')}`;\n}\n\nmodule.exports = {\n getNftBGColor,\n getNftBGColorFromDid,\n DEFAULT_COLOR,\n getPassportColorFromDid,\n};\n"],"names":["Actions","actions","props","useState","anchorEl","setAnchorEl","open","Boolean","onClose","e","stopPropagation","preventDefault","Div","onClick","currentTarget","size","id","keepMounted","PaperProps","map","action","index","close","icon","text","disabled","opts","dense","key","style","minWidth","marginRight","primary","defaultProps","styled","AuditLogContext","createContext","Provider","Consumer","AuditLogProvider","children","scope","client","getClient","auditLogs","setAuditLogs","total","pageSize","pageCount","page","paging","setPaging","loading","setLoading","useLocalStorage","category","setCategory","fetchLogs","silent","getAuditLogs","input","res","list","Toast","message","useEffect","value","fetch","filter","categories","label","description","data","RelativeTime","useLocaleContext","t","locale","prettyOption","compact","valTime","Date","getTime","now","time","prettyMs","Tooltip","title","formatToDatetime","placement","enterTouchDelay","getUserLink","log","info","did","actor","AuditLog","useNodeContext","Box","className","shape","Typography","color","component","gutterBottom","Link","to","target","fullName","role","source","content","linkTarget","variant","ip","env","os","name","version","browser","createdAt","AuditLogs","useContext","textAlign","marginTop","Spinner","FormControl","width","InputLabel","Select","onChange","fullWidth","x","MenuItem","length","Empty","Pagination","count","showFirstButton","showLastButton","WrappedAuditLogs","theme","palette","main","ClickToCopy","rest","LocaleContext","tip","copiedTip","useTheme","useMediaQuery","breakpoints","down","values","sm","ConfirmDialog","showCancel","cancel","confirm","initialParams","params","onCancel","onConfirm","setParams","setOpen","error","setError","changeLocale","onCallback","cb","formatError","console","d","isBreakpointsDownSm","useMobileWidth","StyledDialog","fullScreen","DialogTitle","DialogContent","DialogContentText","Alert","severity","DialogActions","padding","Button","__disableConfirm","autoFocus","Dialog","CancelConfirm","confirmPlaceholder","keyName","confirmSetting","marginBottom","dangerouslySetInnerHTML","__html","autoComplete","inputVal","PassportTag","passport","onDelete","Tag","InviteMember","teamDid","roles","onSuccess","onError","endpoint","api","activeStep","setActiveStep","inviteInfo","setInviteInfo","setRole","remark","setRemark","onCreate","trimRemark","trim","createMemberInvitation","errMsg","step","body","onKeyPress","r","TextField","link","getInviteLink","inviteId","Bold","expireDate","showCloseButton","type","TransferMember","sessionAPI","SessionContext","openTransferNFTAuth","setOpenTransferNFTAuth","needTransferNFT","get","delegationState","useAsync","getDelegationState","state","delegated","display","justifyContent","createTransferInvitation","tmpInviteInfo","steps","handleCancelTransferNFT","Connect","checkFn","checkTimeout","webWalletUrl","getWebWalletUrl","extraParams","targetDID","messages","scan","success","popup","PassportIssuances","issuances","onRefresh","delConfirm","setDelConfirm","enqueueSnackbar","useSnackbar","useTeamContext","deleteIssuance","deletePassportIssuance","sessionId","autoHideDuration","getLink","column","getIssuePassportLink","Issuance","permission","can","mt","IssuePassport","ownerDid","showOwnerPassport","createPassportIssuance","disableEscapeKeyDown","minHeight","ConfirmDescription","find","fontWeight","Passports","user","session","useSessionContext","teamIssuerDid","refreshTeam","refresh","enablePassportIssuance","trustedPassports","passportColor","blocklet","toggleConfirm","setToggleConfirm","showIssueDialog","setShowIssueDialog","search","setSearch","passports","revoked","status","PASSPORT_STATUS","togglePassportStatus","method","userDid","passportId","revokeInfo","hasPermission","revokable","issuer","filteredPassports","includes","placeholder","approved","Add","fontSize","alignItems","createPassportSvg","issuerDid","ownerName","ownerAvatarUrl","avatar","preferredColor","upperFirst","ExternalIssuerIcon","RevokeIcon","some","y","ErrorOutlineIcon","mr","item","height","ErrorOutline","settings","owner","ToggleUserApproval","sessionUser","nodeInfo","show","setShow","updateUserApproval","approveConfirm","nodeOwner","isNodeOwner","parseAvatar","prefix","window","apiPrefix","startsWith","USER_AVATAR_URL_PREFIX","joinUrl","replace","Member","initTab","setIssuances","setUser","tab","setTab","getData","doBatchQuery","getUser","getPassportIssuances","useSubscription","EVENTS","tabConfigs","email","updatedAt","row","InfoRow","valueComponent","nameWidth","nameFormatter","tabs","Object","tabConfig","maxWidth","BlockButton","ForbidLoginIcon","AllowLoginIcon","Center","src","backgroundColor","mx","Tabs","current","newTab","scrollButtons","Invitations","invitations","deleteInvitation","sleep","columns","options","sort","customBodyRenderLite","rawIndex","CircularProgress","widtn","customBodyRender","rowIndex","inviter","align","Delete","Datatable","verticalKeyWidth","download","print","MemberActions","onIssuePassport","setEnablePassportIssuance","o","ListItemIcon","ListItemText","ROLE_ALL","ROLE_NONE","getCount","counts","SimpleInfo","Avatar","borderRadius","overflow","isFromExternal","ml","MemberList","showInviteMember","setShowInviteMember","showTransferMember","setShowTransferMember","showInviting","setShowInviting","memberDialog","setMemberDialog","users","setUsers","rowCount","setRowCount","userCounts","setUserCounts","searchText","hideBlocked","sideList","num","unshift","push","getUsers","query","then","forEach","z","catch","err","getUsersCountPerRole","isInvitationEnabled","Address","copyable","verticalKeyAlign","customButtons","flexShrink","PersonIcon","edge","Loop","tableOptions","expandableRowsOnClick","onRowClick","dataIndex","rowsPerPage","searchDebounceTime","classnames","FormControlLabel","control","Checkbox","checked","md","MutateRole","mode","setTitle","setDescription","_title","desc","md5","createRole","updateRole","paddingTop","helperText","multiline","rows","margin","PassportDetail","roleName","permissions","isNodeTeam","binds","setBinds","updateForm","setUpdateForm","cloneDeep","isProtected","isProtectedRole","deletePassport","deleteRole","team","getPermissionsByRole","permissionList","bindList","bind","onBind","grantNames","updatePermissionsForRole","readPermissionsOnly","toolbar","IconButton","EditIcon","fill","DeleteIcon","withPermission","_path","_excluded","_extends","assign","i","arguments","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgLongArrow","_ref","svgRef","titleId","viewBox","xmlns","ref","ForwardRef","canSave","mappings","from","TrustedIssuer","setIssuerDid","setMappings","editIndex","findIndex","configTrustedPassports","trustedList","prepend","ArrowBack","event","ROLES","my","flexGrow","flexBasis","select","splice","TrustedIssuers","trustedIssuer","setTrustedIssuer","deleteTrustedIssuer","filteredIssuers","toLowerCase","ListHeader","showDidLogo","pl","PassportList","teamName","showCreate","setShowCreate","showTrustedIssuers","setShowTrustedIssuers","toggleShowIssue","configPassportIssuance","enable","filteredRoles","SplitButton","menuButtonProps","menu","marginLeft","alt","isDataUrl","LockIcon","SearchInput","InputProps","startAdornment","DomainStatusContext","DomainStatusProvider","domainList","domains","domainListStr","JSON","stringify","setStatus","useMemo","domain","shouldCheckDomainStatus","pre","useDomainsAccessibility","domainsAccessibility","recommendedDomain","domainsStatus","merged","getDomainStatus","checkDomains","updateStatus","recommendedDomainStatus","useDomainStatusContext","TeamContext","TeamProvider","blocklets","useBlockletContext","getBlockletUrl","useRoutingContext","setInvitations","setRoles","setPermissions","meta","getDisplayName","getTeamName","config","environments","BLOCKLET_CONFIGURABLE_KEY","getTeamPassportColor","getTrustedPassports","getTeamIssuerDid","getEnablePassportIssuance","getRoles","getPermissions","getInvitations","RBAC_CONFIG","ci","lastLoginAt","onUserEvent","getEndPoint","ping","memoize","url","defaultCheckAccessible","joinURL","URL","origin","WELLKNOWN_PING_PREFIX","CACHE","useUrlEvaluation","urls","checkAccessible","disableCache","initialCachedRef","useRef","allCached","urlsState","setUrlsState","recommendedUrlState","evaluate","evaluateURLs","results","a","b","score","recommendedUrl","useBlockletUrlEvaluation","siteMap","getBlockletUrls","getBlockletUrlParams","result","getAccessUrl","reduce","acc","cur","hostname","accessibleUrl","accessible","require","getNftBGColor","DEFAULT_COLOR","getNftBGColorFromDid","module","exports","colors","svgXML","toUpperCase","startColor","endColor","encodeURIComponent","toHex","Hasher","rgbString","hsldata","h","s","parseInt","slice","g","max","Math","min","l","rgbToHsl","newHsl","newRepeatHsl","newColor","hslToRgb","getPassportColorFromDid","SHA3","hash224","hue2rgb","p","q","t2","round","toString","padStart","join"],"sourceRoot":""}