{"version":3,"file":"static/js/1447.cd40c9d4.chunk.js","mappings":"2LAIA,MAAMA,UAAkBC,EAAAA,UAAiB,cAAD,yBACtCC,gBAAkB,CAACC,EAAMC,KAErB,SAAC,UAAD,IACMC,KAAKC,MACTF,KAAMA,EACNG,KAAMJ,EAAKI,KACXC,KAAML,EAAKK,KACXC,GAAIN,EAAKM,GACTC,MAAOP,EAAKO,MACZC,MAAOR,EAAKQ,MACZC,MAAOT,EAAKS,MACZC,QAASV,EAAKU,QACdC,aAAcT,KAAKU,gBAAgBZ,GACnCa,SAAUb,EAAKc,gBACfC,QAASf,EAAKe,QACdC,SAAUhB,EAAKgB,SACfC,eAAgBjB,EAAKiB,eACrBC,kBAAmBhB,KAAKC,MAAMe,oBAlBE,KAuBtCN,gBAAmBZ,GACVA,EAAKmB,YAAYC,QAAO,CAACT,EAAcU,KAC5C,MAAMC,EAAUC,OAAOC,OAAOtB,KAAKC,MAAMsB,cAAcC,MAAMC,GACpDA,EAAErB,KAAOe,IAKlB,OAHIC,EAAQH,YAAYS,OAAS,IAC/BjB,EAAe,IAAIA,KAAiBT,KAAKU,gBAAgBU,KAEpD,IAAIX,EAAcW,EAAzB,GACC,IAhCiC,KAmCtCO,eAAiB,CAAC7B,EAAMM,IAClBN,EAAKmB,aAAenB,EAAKmB,YAAYS,OAAS,EACzC1B,KAAKH,gBAAgBC,EAAM,WACzBA,EAAK8B,SACP5B,KAAKH,gBAAgBC,EAAM,YACzBA,EAAK+B,KACP7B,KAAKH,gBAAgBC,EAAM,QACzBA,EAAKgC,QACP9B,KAAKH,gBAAgBC,EAAM,gBAD7B,CA1C6B,CA+CtCiC,SACE,MAAM,aAAER,EAAF,MAAgBlB,GAAUL,KAAKC,MACrC,OACE,SAAC,IAAD,CAAM+B,GAAI,CAAEC,MAAO,QAAUC,gBAAc,EAA3C,SACGb,OAAOC,OAAOC,GACZY,QAAQrC,GACAA,EAAKO,QAAUA,IAEvB+B,KAAKtC,IAEF,SAAC,WAAD,UACGE,KAAK2B,eAAe7B,EAAMA,EAAKM,KADbN,EAAKM,OAOrC,EAGH,W,iMCvDA,MAAMiC,GAAqBC,EAAAA,EAAAA,IAAOC,EAAAA,EAAPD,EAAqB,QAAC,MAAEE,GAAH,QAAgB,CAC9DC,SAAUD,EAAME,QAAQ,GADsB,IAI1CC,GAAqBL,EAAAA,EAAAA,IAAOC,EAAAA,EAAPD,EAAqB,QAAC,MAAEE,GAAH,QAAgB,CAC9D,wBAAyB,CACvBC,SAAUD,EAAME,QAAQ,IAFoB,IAK1CE,GAAiBN,EAAAA,EAAAA,IAAOO,EAAAA,GAAPP,EAAiB,QAAC,MAAEE,GAAH,QAAgB,CACtDM,aAAc,aACd,oBAAqB,CACnBC,WAAW,GAAD,OAAKP,EAAME,QAAQ,GAAnB,kBAA+BF,EAAMQ,QAAQC,WAAWC,OAClE,iBAAkB,CAChBC,gBAAiBX,EAAMQ,QAAQI,OAAOtC,UAExC,uBAAwB,CACtBqC,gBAAiBX,EAAMQ,QAAQI,OAAOtC,UAExC,UAAW,CACTuC,YAAab,EAAMQ,QAAQI,OAAOE,QAXA,IAAxC,oJAgBA,MAAMC,UAAsB3D,EAAAA,cAAqB,cAAD,oEAC9B,KACd,MAAM,MAAEW,GAAUP,KAAKC,MACvB,OAAO,SAAC,IAAD,UAAeM,GAAtB,IAH4C,gDAM3B,KACjB,MAAM,MAAEA,EAAF,SAASI,GAAaX,KAAKC,MAEjC,OAAOU,GACL,UAACgC,EAAD,YACIpC,IAAS,iBAAMiD,MAAOC,EAAAA,EAAb,+BACX,SAAC,IAAD,QAGF,UAACd,EAAD,YACIpC,IAAS,iBAAMiD,MAAOC,EAAAA,EAAb,+BACX,SAAC,IAAD,MARJ,IAT4C,gDAsBhC,KACZ,MAAM,aAAEhD,GAAiBT,KAAKC,MAC9B,OAAOQ,GAAgBA,EAAaiB,OAAS,CAA7C,IAxB4C,gDA2BrB,CAAC3B,EAAMK,KAC9B,MAAM,cAAEsD,GAAkB1D,KAAKC,MAC/ByD,EAAcC,QAAd,gBAA+B5D,EAA/B,YAA+CK,EAA/C,IA7B4C,gDAgC1B,KAClB,MAAM,MAAEoC,EAAF,MAASnC,EAAT,MAAgBC,EAAhB,QAAuBO,GAAYb,KAAKC,MACxC2D,GAAU,OAAG5D,KAAH,QAChB,OAAOa,EACH,CACEgD,YAAarB,EAAME,QAAQ,EAAY,EAARrC,GAC/B0C,WAAW,GAAD,OAAKP,EAAME,QAAQ,IAAnB,kBAAiCpC,GAC3CwD,aAAcF,EAAa,EAAIpB,EAAME,QAAQ,IAE/C,CACEmB,YAAarB,EAAME,QAAQ,EAAY,EAARrC,GAC/ByD,aAAcF,EAAa,EAAIpB,EAAME,QAAQ,GARnD,GAnC4C,CA+C9CX,SACE,MAAM,KACJhC,EADI,SAEJe,EAFI,aAGJL,EAHI,SAIJE,EAJI,MAKJN,EALI,MAMJE,EANI,GAOJH,EAPI,eAQJW,GACEf,KAAKC,MACH2D,GAAU,OAAG5D,KAAH,QAChB,OACE,iCACE,UAAC4C,EAAD,CACEmB,SAAO,EACPjD,SAAUA,EACVkD,QAAM,EACNC,IAAKjE,KAAKC,MAAMO,QAChB0D,KAAK,QACLC,gBAAc,EACd,gBAAeP,EAAU,kBAAcxD,GAAO,KAC9C,gBAAeO,EACfyD,QAAS,MACP,OAAApE,KAAA,MAA4BD,EAAMK,EAAlC,EAEF4B,IAAE,OAAEhC,KAAF,QAZJ,WAcE,SAACqC,EAAD,WACE,SAAC,IAAD,CACE/B,MAAM,UACN+D,QAAStD,EACTuD,SAAWC,IACTvE,KAAKC,MAAMe,kBAAkBhB,KAAKC,MAAMG,GAAxC,EAEFgE,QAAUG,GAAMA,EAAEC,kBAClBC,KAAK,QACLC,UAAW,EACXC,eAAa,MAGhBpE,IAAK,OAAIP,KAAJ,QACL4D,IAAU,OAAI5D,KAAJ,WAEZ4D,IACC,SAAC,IAAD,CAAUxD,GAAE,kBAAaA,GAAMwE,GAAIjE,EAAUkE,QAAS,IAAtD,UACE,SAAC,UAAD,IACM7E,KAAKC,MACTI,MAAOA,EAAQ,EACfkB,aAAcd,EACdO,kBAAmBhB,KAAKC,MAAMe,wBAMzC,EAGH,WAAe8D,EAAAA,EAAAA,GAAUvB,E,qYC7GzB,MAAMwB,GAAoBzC,EAAAA,EAAAA,IAAO0C,EAAAA,GAAP1C,EAAa,QAAC,MAAEE,GAAH,QAAgB,CACrDyC,QAASzC,EAAME,QAAQ,GACvBwC,OAAQ,OACRC,UAAW,OAH0B,IAMjCC,GAAsB9C,EAAAA,EAAAA,IAAO0C,EAAAA,GAAP1C,EAAa,QAAC,MAAEE,GAAH,QAAgB,CACvD6C,UAAW7C,EAAME,QAAQ,GACzByC,UAAW,OACX,uBAAwB,CACtBlD,MAAO,QACPqD,QAAS,KAEX,UAAW,CACT,uBAAwB,CACtBA,QAAS,KAEX,6BAA8B,CAC5BC,UAAW,iCACXC,gBAAiB,kCAEnB,6BAA8B,CAC5BC,gBAAiB,mBAGrBC,UAAW,OAnB4B,IAsBnCC,GAAsBrD,EAAAA,EAAAA,IAAO0C,EAAAA,GAAP1C,EAAa,QAAC,MAAEE,GAAH,QAAgB,CACvDoD,aAAcpD,EAAME,QAAQ,GADW,IAInCmD,GAAwBvD,EAAAA,EAAAA,IAAO0C,EAAAA,GAAP1C,EAAa,QAAC,MAAEE,GAAH,QAAgB,CACzDoD,aAAcpD,EAAME,QAAQ,GADa,IAIrCoD,GAAsBxD,EAAAA,EAAAA,IAAO0C,EAAAA,GAAP1C,EAAa,QAAC,MAAEE,GAAH,QAAgB,CACvDkD,UAAW,MAD4B,IAInCK,GAAazD,EAAAA,EAAAA,IAAO0C,EAAAA,GAAP1C,EAAa,QAAC,MAAEE,GAAH,QAAgB,CAC9CwD,QAAS,OACTC,eAAgB,WAFc,IAK1BC,GAAuB5D,EAAAA,EAAAA,IAAO6D,EAAAA,EAAP7D,EAAuB,QAAC,MAAEE,EAAF,MAAS4D,GAAV,QAAuB,CACzEJ,QAAS,OACTC,eAAgB,gBAChBhB,QAAS,sBACToB,aAAc,sBACdtD,WAAYqD,EAAQ,IAAM,EAAI,sBAAwB,qBALJ,IAQ9CE,GAAsBhE,EAAAA,EAAAA,IAAOiE,EAAAA,EAAPjE,EAAsB,QAAC,MAAEE,GAAH,QAAgB,CAChEgE,UAAW,OACXC,SAAU,WACV,WAAY,CACVT,QAAS,QACTU,QAAQ,KACRzE,MAAO,OACP0E,WAAY,UACZ9C,YAAa,OARiC,IAY5C+C,GAAetE,EAAAA,EAAAA,IAAO,SAAPA,EAAiB,QAAC,MAAEE,GAAH,QAAgB,CACpDiE,SAAU,WACVxE,MAAO,oBACPiD,OAAQ,OACR2B,IAAK,IACLC,KAAM,IACNC,OAAQ,OAN4B,IAYtC,SAASC,EAAT,GAA8D,IAAzB,SAAEC,EAAF,SAAYC,GAAY,EAG3D,OAFAC,EAAAA,EAAAA,YAAU,IAAMF,OAET,yBAAMC,GACd,0JAED,MAAME,UAAoBxH,EAAAA,cAAqB,cAAD,mCAC5CyH,MAAQ,CACNC,YAAY,EACZC,WAAW,EACXC,aAAa,EACbC,WAAW,EACXC,qBAAqB,EACrBC,aAAY,oBAAE3H,KAAKC,MAAM2H,eAAb,iBAAE,EAAoBC,uBAAtB,aAAE,EAAqCC,iBAAvC,QAAoD,OAChEC,gBAAiB/H,KAAKgI,aACtBC,kBAAcC,EACdC,YAAY,EACZC,uBAAuB,EACvBC,iBAAiB,EACjBC,iBAAkB,KAClBC,aAAa,EACbC,SAAUxI,KAAKyI,cAAczI,KAAKC,MAAM2H,QAAQY,WAfN,KAkB5CE,WAAa,EAlB+B,gDAoBnBtI,KACvB,OAAAJ,KAAA,MAA6BI,EAA7B,IArB0C,gDAwBjBuI,GAClB,IAAIC,SAASC,IAClB,MAAMC,EAAe,IAAK9I,KAAKqH,MAAMU,iBAC/BgB,EAAcD,EAAaH,GAC3BK,EAAW3H,OAAOC,OAAOwH,GAAc5H,QAAO,CAAC+H,EAAOnJ,IACpCA,EAAKM,KAAOuI,EAEzB,IACFM,EACH,CAACnJ,EAAKM,KAAN,OAAWJ,KAAX,MAA0CF,IAGrC,IACFmJ,EACH,CAACnJ,EAAKM,KAAN,OAAWJ,KAAX,MACEF,EACAgJ,EACAC,KAIL,CAAC,GAEJ/I,KAAKkJ,SAAS,CAAEnB,gBAAiBiB,GAAYH,EAA7C,MA/CwC,gDAmDfE,IAC3B,IAAII,EAAU,IAAKJ,GACnB,MAAO,IACFA,EACHjI,UAAWqI,EAAQvF,WACnBhD,gBAAiBuI,EAAQvF,YACpBuF,EAAQvI,gBACTuI,EAAQvI,gBALd,IArD0C,gDA8Db,CAACd,EAAMgJ,EAAcC,KAC3C,IACFjJ,EACHc,iBAC+C,IAA7CmI,EAAYK,WAAWC,QAAQvJ,EAAKM,KAEhCN,EAAKc,gBACXE,WAAUiI,EAAYnF,YAAa9D,EAAKgB,aArEA,KAyE5CwI,kBAAoB,KAClBtJ,KAAKC,MAAMyD,cAAc6F,UACvB,+BACCC,IACCxJ,KAAKkJ,SACH,CACEjB,aAAcuB,IAEhB,KACExJ,KAAKyJ,eAAL,GALJ,IAWJzJ,KAAKC,MAAMyD,cAAc6F,UAAU,yBAA0BnJ,KAC3D,OAAAJ,KAAA,MAA2BI,EAA3B,GADF,EAxF0C,KA6F5CsJ,qBAAuB,KACrB1J,KAAKC,MAAMyD,cAAciG,YAAY,8BAArC,EA9F0C,KAiG5CC,YAAeC,IACbA,EAAI3E,OA1GiB,GA0GR2E,EAAIC,wBAAwB5E,OACzC2E,EAAI5H,MA3GiB,GA2GT4H,EAAIE,WAAhB,EAnG0C,KAsG5CC,iBAAoBH,GACXA,EAAIC,wBAAwB5E,OAAS+E,IAvGF,KA0G5CC,UAAaL,GACJ,IAAIjB,SAAQ,CAACC,EAASsB,KAC3BN,EAAIO,OAAS,KACPpK,KAAKgK,iBAAiBH,IAGxB7J,KAAK4J,YAAYC,GAFjBhB,EAAQgB,EAIT,EAEHA,EAAIQ,QAAU,IAAMF,EAAON,EAA3B,IApHwC,KAwH5CS,aAAe,CAACC,EAASC,KAMvB,MAAMhI,GAAQiI,EAAAA,EAAAA,WAAUzK,KAAKC,MAAMyK,aAAe1K,KAAKC,MAAMuC,MAAO,CAAC,GAErE,OAAO,IAAIoG,SAASC,KACE8B,EAAAA,EAAAA,GAAWH,GACnBzI,QACV,SAAC,IAAD,WACE,SAAC,IAAD,CAAeS,MAAOA,EAAtB,UACE,SAACwE,EAAD,CACEC,SAAU,KACR4B,GAAS,EAFb,SAKG0B,QART,GAFF,EAhI0C,KAkJ5CK,mBAAsBxK,IACpB,IAAIyK,EAAMjJ,SAASkJ,cAAc,OAEjC,OADAD,EAAIzK,GAAKA,EACFyK,CAAP,EArJ0C,KAwJ5CE,UAAY,KACV/K,KAAKgL,IAAMhL,KAAK4K,mBAAmB,OAC5B5K,KAAKsK,cACV,SAAC,UAAD,CACEW,kBAAmBjL,KAAKqH,MAAMU,gBAC9BmD,aAAclL,KAAKC,MAAMkL,MAAMD,aAC/BE,KAAMpL,KAAKqH,MAAMM,eAEnB3H,KAAKgL,MAhKmC,KAoK5CK,cAAgB,KACdrL,KAAK0G,QAAU1G,KAAK4K,mBAAmB,WAChC5K,KAAKsK,aAAatK,KAAKqH,MAAMY,aAAcjI,KAAK0G,UAtKb,KAyK5C4E,mBAAqB,IACZ1C,QAAQ2C,WACb,IAAIvL,KAAK0G,QAAQ8E,qBAAqB,QAAQpJ,KAAKyH,GAC1C7J,KAAKkK,UAAUL,MA5KgB,KAiL5C4B,uBAAyB,KACvBC,OAAOC,MACL,0EAGF3L,KAAKkJ,SAAS,CACZf,YAAY,EACZF,kBAAcC,EACdT,WAAW,IAGN,MA5LmC,KA+L5CmE,kBAAoB,KAClB,MAAMC,EAAcH,OAAOI,KAAK,GAAI,SAEpC,OAAoB,OAAhBD,EACK7L,KAAKyL,0BAGdI,EAAYjK,SAASmK,KAAKC,mBACxB,YADF,kBAEapK,SAASrB,MAFtB,yCAGkBqB,SAASqK,SAASC,SAHpC,aAGiDtK,SAASqK,SAASE,KAHnE,6/BA4CON,EAAP,EAlP0C,KAqP5CO,qBAAuB,KACrBpM,KAAKgL,IAAM,KACXhL,KAAK0G,QAAU,IAAf,EAvP0C,KA0P5C2F,qBAAuB,KASrBrM,KAAKsM,oBAAmB,GACxBtM,KAAKkJ,SAAS,CACZf,YAAY,EACZF,kBAAcC,EACdH,gBAAiB/H,KAAKgI,cAHxB,EApQ0C,KA2Q5CuE,4BAA+BtE,IAC7B,MAAMuE,EAAWvE,EAAawE,iBAAiB,CAAC,KAAM,OAItD,IAAIC,GAAY,EACZC,GAAkB,EAEtB,IAAK,IAAIlL,EAAI,EAAGA,EAAI+K,EAAS9K,OAAQD,IACN,OAAzB+K,EAAS/K,GAAGmL,UAAqBF,IACnCC,GAAkB,GAES,OAAzBH,EAAS/K,GAAGmL,WACdF,GAAY,GAKa,OAAzBF,EAAS/K,GAAGmL,UACgB,SAA5B5M,KAAKqH,MAAMM,cACVgF,IAEDH,EAAS/K,GAAG+B,MAAMqJ,gBAAkB,SACpCL,EAAS/K,GAAG+B,MAAMsJ,YAAc,QAGxB,IAANrL,GAAoC,OAAzB+K,EAAS/K,GAAGmL,UAAsBF,IAC/CF,EAAS/K,GAAG+B,MAAMqJ,gBAAkB,SACpCL,EAAS/K,GAAG+B,MAAMsJ,YAAc,QAGL,OAAzBN,EAAS/K,GAAGmL,WACdF,GAAY,EAEf,EA7SyC,KAkT5CjD,cAAgB,KAEdb,QAAQmE,IAAI,CACkB,SAA5B/M,KAAKqH,MAAMM,cAA2B3H,KAAK+K,YAC3C/K,KAAKqL,kBACJ2B,MAAK,KAENhN,KAAKsL,qBAAqB0B,MAAK,KAE7B,MAAM/E,EAAerG,SAASkJ,cAAc,OAE5C9K,KAAKgL,KAAO/C,EAAagF,YAAYjN,KAAKgL,KAE1C/C,EAAagF,YAAYjN,KAAK0G,SAG9B1G,KAAKuM,4BAA4BtE,GAEjC,MAAMiF,EAAYlN,KAAK4L,oBAKvB,IAAK,MAAMpI,KAAS5B,SAAS6K,iBAAiB,kBAAmB,CAE/D,MAAMU,EAAIvL,SAASkJ,cAAc,SAEjCqC,EAAEF,YAAYrL,SAASwL,eAAe,KAGtC,MAAM,YAAEC,EAAF,MAAeC,GAAU9J,EAE/B,GAAI6J,EAEFF,EAAEF,YAAYrL,SAASwL,eAAeC,IACtCH,EAAUtL,SAASmK,KAAKkB,YAAYE,OAE/B,CAELD,EAAUtL,SAASmK,KAAKkB,YAAYE,GACpC,IAAK,MAAMI,KAAQD,EAAME,SACvB,IACEL,EAAEG,MAAMG,WAAWF,EAAKG,QAGzB,CAFC,MAAOC,GACPC,QAAQC,KAAR,wCAAuCN,QAAvC,IAAuCA,OAAvC,EAAuCA,EAAMG,SAC9C,CAEJ,CACF,CAGDR,EAAUtL,SAASkM,KAAKb,YAAYhF,GAIpCiF,EAAUa,QAGVb,EAAUc,QAGVhO,KAAKqM,sBAAL,GAtDF,GALF,EApT0C,KAoX5C4B,qBAAwBC,IACtB,MAAM,MAAE/C,GAAUnL,KAAKC,MACvB,IAAIkO,EAAwB,IAAInO,KAAKqH,MAAM+G,oBAEvCC,EAAiBlD,EAAMmD,eACzBH,EACAD,EAAQ9N,IAEViO,EAAetN,gBAAkBsN,EAAetN,eAChDf,KAAKuO,kBAAkBF,EAAgBA,EAAetN,gBAEtDf,KAAKkJ,SAAS,CACZkF,mBAAoBD,EACpBzG,qBAAqB,GAFvB,EA/X0C,KA4hB5C8G,qBAAwBC,IACtB,MAAMC,EAAU,IAAK1O,KAAKqH,MAAMU,iBAC1B4G,GAAeD,EAAQD,GAAY1N,eAEnC6N,EAAY,IACbF,EAAQD,GACX1N,gBAAiB2N,EAAQD,GAAY1N,gBAEvC2N,EAAQD,GAAcG,EAMtB,IAAIC,EAAmB7O,KAAK8O,mBAC1BL,EACAE,EACAD,GAGEA,EAAQD,GAAYM,UAAYJ,IAClCE,EAAmB7O,KAAKgP,oBAAoBP,EAAYI,IAGtDH,EAAQD,GAAYM,WAAaJ,IACnCE,EAAmB7O,KAAKiP,sBACtBR,EACAI,IAIJ7O,KAAKkJ,SAAS,CAAEnB,gBAAiB8G,IAAoB,KACnD7O,KAAKkP,0BAAL,GADF,EA3jB0C,KAgkB5C5C,mBAAsB6C,IACpB,MAAMC,EAAY,IAAKpP,KAAKqH,MAAMU,iBAElC1G,OAAOgO,KAAKD,GAAWE,SAASC,IAC9B,MAAMX,EAAY,IACbQ,EAAUG,GACbxO,eAAgBoO,GAElBC,EAAUG,GAAOX,CAAjB,IAGF5O,KAAKkJ,SAAS,CACZxB,oBAAqByH,EACrBpH,gBAAiBqH,EACjBhH,sBAAuB+G,GAHzB,EA3kB0C,KAklB5CK,8BAAiCtB,IAC/B,MAAM,YAAE1G,EAAF,UAAeD,EAAf,WAA0BD,GAAetH,KAAKqH,MAEpD,IAAIoI,EAAmB,GACvB,MAAM5E,EAAMjJ,SAASkJ,cAAc,OACnCD,EAAI6E,UAAYxB,EAAQyB,KAEnBrI,GACHsI,MAAMC,KAAKhF,EAAIW,qBAAqB,MAAM8D,SAAS/E,IACjDkF,EAAiBK,KAAKvF,EAAtB,IAGC/C,GACHoI,MAAMC,KAAKhF,EAAIW,qBAAqB,WAAW8D,SAAS/E,IACtDkF,EAAiBK,KAAKvF,EAAtB,IAGChD,IACHqI,MAAMC,KAAKhF,EAAI4B,iBAAiB,8BAA8B6C,SAC3D/E,IACCkF,EAAiBK,KAAKvF,EAAtB,IAGJ2D,EAAQ6B,OAAS,IAInB,IAAIC,EAAgBnF,EAAI4B,iBAAiB,mBACzC,IAAK,IAAIhL,EAAI,EAAGA,EAAIuO,EAActO,OAAQD,IACxCuO,EAAcvO,GAAGwO,aAAa,YAAa,QAC3CD,EAAcvO,GAAGyO,KAAO,IAG1B,IAAK,IAAIzO,EAAI,EAAGA,EAAIgO,EAAiB/N,OAAQD,IAC3CgO,EAAiBhO,GAAG0O,WAAWC,YAAYX,EAAiBhO,IAI9D,OADAyM,EAAQyB,KAAO9E,EAAI6E,UACZxB,CAAP,EAxnB0C,KA2nB5CmC,uBAA0BnC,IACpBA,EAAQoC,UAAYpC,EAAQoC,SAAS5O,OAAS,GAChDwM,EAAQoC,SAAShB,SAASiB,IACxB,GAAIA,EAAWD,UAAYC,EAAWD,SAAS5O,OAAS,EACtD,OAAO1B,KAAKqQ,uBAAuBE,GAEnCA,EAAavQ,KAAKwP,8BAA8Be,EACjD,IAGLrC,EAAUlO,KAAKwP,8BAA8BtB,IAroBH,KAyoB5CgB,yBAA2B,KACzB,MAAMG,EAAOhO,OAAOgO,KAAKrP,KAAKqH,MAAMU,iBACpC,IAAIK,GAAwB,EAE5B,IAAK,IAAI3G,EAAI,EAAGA,EAAI4N,EAAK3N,OAAQD,IAC3BzB,KAAKqH,MAAMU,gBAAgBsH,EAAK5N,IAAIV,iBACtCqH,GAAwB,GAG5BpI,KAAKkJ,SAAS,CAAEd,sBAAuBA,GAAvC,EAlpB0C,KAqpB5CoI,kBAAqBC,IACZ,CAAEC,eAAe,EAAMnQ,MAAOkQ,EAASlQ,MAAOH,GAAIqQ,EAASrQ,KAtpBxB,KAypB5CuQ,oBAAsB,KACpB,MAAM,gBAAE5I,GAAoB/H,KAAKqH,MAE3BuJ,EAAsBvP,OAAOgO,KAAKtH,GAAiB5F,QACtDoN,GAAQxH,EAAgBwH,GAAKxO,iBAI1B8P,EAAwBD,EAAoBxO,KAC/ChC,GAAO2H,EAAgB3H,GAAIwB,WAyB9B,MAAMkP,EArBe9Q,KAAKC,MAAMkL,MAAM4F,aAAaF,GAE3BzO,KAAK4O,IAC3B,GAAIA,EAAK,CACP,IAAIC,EAAa5P,OAAOgO,KAAKtH,GAAiBvG,MAC3C+N,GAAQxH,EAAgBwH,GAAK3N,WAAaoP,EAAIE,mBAEjD,MAAO,CACLA,iBAAkBF,EAAIE,iBACtBrJ,gBAAiBmJ,EAAInJ,gBACrByI,SAAUvI,EAAgBkJ,GAAYX,SAEzC,CAEA,IAOmClO,KAAI,CAAC4O,EAAK5K,SAClC8B,IAAR8I,EACKhR,KAAKwQ,kBACVzI,EAAgB6I,EAAoBxK,KAGjC4K,IAGT,IAAIG,EAAU,GAad,OAXAL,EAAyBxB,SAAS1N,IAAc,IAAD,EAC7C,UAAIA,QAAJ,IAAIA,GAAJ,UAAIA,EAAU0O,gBAAd,OAAI,EAAoB5O,OAAQ,CAC9B,IAAI0P,EAAmB,GACf,OAARxP,QAAQ,IAARA,GAAAA,EAAU0O,SAAShB,SAASpB,IAC1BkD,EAAiBtB,KAAK9P,KAAKqQ,uBAAuBnC,GAAlD,IAEFtM,EAAS0O,SAAWc,CACrB,CACDD,EAAQrB,KAAKlO,EAAb,IAGKuP,CAAP,EAjtB0C,KAotB5CE,UAAY,KACVrR,KAAKkJ,SAAS,CAAEf,YAAY,IAC5B,MAAMmJ,EAAmBtR,KAAK2Q,sBAC9B3Q,KAAKC,MAAMyD,cAAcC,QACvB,6BACA2N,EAFF,EAvtB0C,KAwvB5CC,oBAAsB,KAElB,+BACGC,EAAAA,EAAAA,eACC,UAAC,IAAD,CAAQC,sBAAsB,EAAM3F,KAAM9L,KAAKqH,MAAMc,WAArD,WACE,SAAC,IAAD,KACA,SAAC,IAAD,8BACA,SAAC,IAAD,WACE,UAAC,IAAD,oGAGE,mBACA,0BAINvG,SAAS8P,eAAe,WAxwBY,KA8wB5CC,2BAA6B,KAC3B3R,KAAKkJ,UAAU0I,IAAD,CACZvJ,iBAAkBuJ,EAAUvJ,mBAD9B,EA/wB0C,KAoxB5CwJ,qBAAuB,KACrB,MAAM,cAAEnO,EAAF,wBAAiBoO,GAA4B9R,KAAKC,OAClD,gBAAE8H,GAAoB/H,KAAKqH,MACjC,OACE,iCACE,SAAC,IAAD,CAAY0K,MAAM,SAASC,QAAQ,KAAnC,wBAGA,UAACnM,EAAD,CAAuB2E,WAAS,EAAC1K,MAAI,EAArC,WACE,SAAC,IAAD,CAAYkS,QAAQ,KAApB,+BAEA,SAAC,KAAD,CAAMC,GAAI,GAAInS,MAAI,EAAlB,UACE,SAAC,IAAD,CACEoS,MAAM,wBACNC,SACE,SAAC,IAAD,CACE7R,MAAM,UACN+D,QAASrE,KAAKqH,MAAMK,oBACpBpD,SAAU,IACRtE,KAAKsM,oBAAoBtM,KAAKqH,MAAMK,uBAI1C0K,MAAM,wBACNC,eAAe,cAKrB,SAAC,IAAD,CAAYL,QAAQ,KAApB,+BAEA,SAAC5M,EAAD,CAAqBtF,MAAI,EAAC0K,WAAS,EAAnC,UACE,SAAC,UAAD,CACE9G,cAAeA,EACfnC,aAAcwG,EACd1H,MAAO,EACPW,kBAAmBhB,KAAKwO,yBAI3BsD,GAA2B9R,KAAKsS,wBAChCtS,KAAKuR,wBAtCV,EAvxB0C,KAk0B5CgB,oBAAuBnM,IACrBpG,KAAKkJ,SAAS,CACZZ,iBAAkBlC,EAClBmC,aAAa,GAFf,EAn0B0C,KAy0B5CiK,qBAAuB,KACrBxS,KAAKkJ,SAAS,CACZZ,iBAAkB,KAClBC,aAAa,GAFf,EA10B0C,KAu1B5CkK,aAAe,KACb,MAAM,YAAElK,EAAF,SAAeC,EAAf,iBAAyBF,GAAqBtI,KAAKqH,MACnDmL,EAAuBxS,KAAKwS,qBAElC,SAASE,IAAoB,IAAD,IAC1B,MAAMlQ,GAAQmQ,EAAAA,EAAAA,KACRC,GAAaC,EAAAA,EAAAA,GAAcrQ,EAAMsQ,YAAYC,KAAK,OAExD,OACE,UAAC,IAAD,CACEH,WAAYA,EACZ9G,KAAMvD,EACNyK,WAAY,CAAExP,MAAO,CAAEvB,OAAQ2Q,GAAc,QAC7CK,cAAe,CACbzP,MAAO,CAAEiC,gBAAiB,wBAE5ByN,QAAS,IAAMV,IAPjB,WASE,SAAClM,EAAD,WACE,SAACM,EAAD,CACErG,MAAK,UAAEiI,EAASF,UAAX,aAAE,EAA4B6K,KACnCC,IAAG,UAAE5K,EAASF,UAAX,aAAE,EAA4BzG,UAGrC,SAAC,IAAD,WACE,SAAC,IAAD,CAAQmQ,QAAQ,YAAY5N,QAAS,IAAMoO,IAA3C,UACE,SAAC,IAAD,CAAYR,QAAQ,QAApB,4BAKT,CACD,OACE,+BACGR,EAAAA,EAAAA,eACC,SAACkB,EAAD,IACA9Q,SAAS8P,eAAe,UAJ9B,EAv3B0C,KAi4B5C2B,uBAAyB,KACvB,MAAM,SAAE7K,EAAF,YAAYD,GAAgBvI,KAAKqH,MAmDvC,OACE,iCACE,SAAC,IAAD,CAAY0K,MAAM,SAASC,QAAQ,KAAnC,sBAGA,SAAC,IAAD,CAAYA,QAAQ,KAApB,0BACA,SAAC5M,EAAD,WACE,SAAC,IAAD,UAAOoD,EAASpG,KAxDG,CAACkR,EAASlN,KACjC,MAAMmN,EAA2B,KAAjBD,EAAQH,KAClBK,EAA2B,KAAjBF,EAAQzR,KAClB4R,GAAYD,EACZL,EAAOI,EAAUD,EAAQH,KAAO,cAChCO,EAAWF,EAAU,WAAU,iBAC/BG,EAAYH,EAAU,UAAY,iBAClCI,EAAWJ,GACf,SAAC,IAAD,CAAexR,GAAI,CAAEC,MAAO,UAC1B,KAEJ,OACE,0BACE,UAACiE,EAAD,CACEuN,SAAUA,EACVrN,MAAOA,EACPhC,QAAS,IAAMpE,KAAKuS,oBAAoBnM,GAH1C,WAKE,SAAC,IAAD,CACEpE,GAAI,CACF6R,UAAYN,EAAqB,UAAX,SACtBjT,MAAQiT,EAAmB,UAAT,QAHtB,SAMGJ,IAEFK,IACC,SAAC,IAAD,CACEtD,KAAMoD,EAAQzR,KACdiS,OAAO,SACP9R,GAAI,CAAEkD,OAAQ,OAAQD,QAAS,QAC/B3E,MAAOqT,EACP3B,QAAQ,YACR+B,UAAWH,EACXxP,QAAU4P,GAAUA,EAAMxP,kBAP5B,UASE,SAAC,IAAD,CAAYwN,QAAQ,QAAQiC,QAAQ,SAApC,SACGP,OAILF,IACA,SAAC,IAAD,CAAYxR,GAAI,CAAE6R,UAAW,UAA7B,gCA9BIzN,EADZ,QA+CGmC,GAAevI,KAAKyS,iBATzB,CAr7B0C,CAqY5CyB,6BAA6BzD,IACvB7M,EAAAA,EAAAA,YAAW6M,KACbA,EAAS7M,YAAa,EACtB6M,EAASvQ,KAAKoP,SAAS6E,IACrBnU,KAAKkU,6BAA6BC,EAAa1D,EAA/C,IAGL,CAED2D,4BAA4BC,GAK1B,IAAIC,EAAa,GAEjBjT,OAAOgO,KAAKgF,GAAW/E,SAASC,KAC1B8E,EAAU9E,GAAKzN,QAAQyS,QAAUF,EAAU9E,GAAK1N,KAAK0S,UACvDD,EAAWxE,KAAK0E,SAASjF,WAClB8E,EAAU9E,GAClB,IAGHlO,OAAOgO,KAAKgF,GAAW/E,SAASC,IAC9B,IAAIzP,EAAOuU,EAAU9E,GAGjBkF,EAAc3U,EAAK4U,YAAYvS,QAChCwS,IAAWL,EAAWM,SAASD,KAElC7U,EAAK4U,YAAcD,EAEnB,IAAII,EAAiB/U,EAAKmB,YAAYkB,QACnC/B,IAAQkU,EAAWM,SAASxU,KAE/BN,EAAKmB,YAAc4T,CAAnB,GAEH,CAED7M,aAIE,MAAM,QAAEJ,GAAY5H,KAAKC,MAEnB6U,EAAiB9U,KAAKC,MAAMkL,MAAMD,aAElC6J,EAAa,IADA,IAAKnN,IACamN,WAC/BC,EAAkBC,KAAKC,MAAMD,KAAKE,UAAUJ,IAC5CK,GAAgBC,EAAAA,EAAAA,wBAAuBL,EAAgB9U,MAC7D,IAAIkO,EAAqBpO,KAAKC,MAAMkL,MAAMmK,oBAE1C,MAAMjG,EAAOhO,OAAOgO,KAAK+F,GACnBG,EAAWlG,EAAK3N,OAAS,EAE/B2N,EAAKC,SAASC,IACZ,IAAI3N,EAAWwT,EAAc7F,GAC7B,MAAMiG,EAAiB5T,EAAS8S,YAAYtS,KAAKhC,GAAQA,EAAMmV,IACzDE,EAAgB7T,EAASwH,WAAWhH,KAAKhC,GAAQA,EAAMmV,IACvDG,EAAoB9T,EAASX,YAAYmB,KAC5ChC,GAAQA,EAAMmV,IAejB,GAZA3T,EAASxB,IAAMmV,EACf3T,EAASmN,SAAWnN,EAASmN,SACxBnN,EAASmN,UAAYwG,EACtB,KACJ3T,EAAS8S,YAAcc,EACvB5T,EAASwH,WAAaqM,EACtB7T,EAASX,YAAcyU,EAEvB9T,EAASb,gBAAiB,EAC1Ba,EAASf,SAAU,EAGfe,EAASA,SAAU,CAAC,IAAD,EACrB,IAAI+T,EAAWb,EAAetT,MAC3BmU,GAAaA,EAASzE,mBAAqBtP,EAASA,WAEvDA,EAASgU,kBACC,OAARD,QAAQ,IAARA,GAAA,UAAAA,EAAU9N,uBAAV,eAA2BgO,sBAAuB,GACrD,CACD,GAAIjU,EAASA,SAAU,CACrBA,EAAS0O,SAAW,GACGlC,EAAmBjM,QACvC+L,GAAYA,EAAQgD,mBAAqBtP,EAASA,WAEpC0N,SAASpB,GAAYtM,EAAS0O,SAASR,KAAK5B,IAC9D,KAGH,IAAI4H,EAAiB,CAAC,EAOtB,OANAzG,EAAKC,SAASC,IACZ,IAAIwG,EAAYvB,SAASjF,GAAOgG,EAChCO,EAAeC,GAAaX,EAAc7F,EAA1C,IAGFvP,KAAKoU,4BAA4B0B,GAC1BA,CACR,CAEDhH,mBAAmBL,EAAYpK,EAAS+K,GAWtC,OAVqBA,EAAUX,GAAYiG,YAC9BpF,SAAS0G,IACpB,MAAMpH,EAAY,IACbQ,EAAU4G,GACbjV,eAAgBsD,GAElB+K,EAAU4G,GAAYpH,EACtB5O,KAAK8O,mBAAmBkH,EAAU3R,EAAS+K,EAA3C,IAGKA,CACR,CAEDJ,oBAAoBP,EAAYW,GAC9B,MAAML,EAAWK,EAAUX,GAAYM,SACjCkH,EAAgB,IAAK7G,EAAUL,GAAWhO,gBAAgB,GAOhE,OANAqO,EAAUL,GAAYkH,EAElB7G,EAAUL,GAAUA,WACtBK,EAAYpP,KAAKgP,oBAAoBD,EAAUK,IAG1CA,CACR,CAEDH,sBAAsBR,EAAYW,GAChC,MAAML,EAAWK,EAAUX,GAAYM,SAUvC,GANEK,EAAUL,GAAU2F,YAAYvS,QAAQwS,KAClCA,EAAMvU,KAAOqO,IAAcW,EAAUuF,GAAO5T,kBAG/CW,OAAS,EAGZ,OAAO0N,EAGT,MAAM6G,EAAgB,IAAK7G,EAAUL,GAAWhO,gBAAgB,GAMhE,OALAqO,EAAUL,GAAYkH,EAElB7G,EAAUL,GAAUA,WACtBK,EAAYpP,KAAKiP,sBAAsBF,EAAUK,IAE5CA,CACR,CAmMDkD,wBACE,OACE,SAACxM,EAAD,CACEhG,MAAI,EACJ0K,WAAS,EACT0L,aAAa,SACbC,WAAW,SACXlQ,eAAe,SALjB,UAOE,SAAC,IAAD,CACE3F,MAAM,UACN0R,QAAQ,YACRyB,SAAUzT,KAAKqH,MAAMc,aAAenI,KAAKqH,MAAMe,sBAC/C2L,WAAW,SAAC,IAAD,IACX3P,QAASpE,KAAKqR,UALhB,UAOE,SAAC,IAAD,CACE7N,MAAO,CAAE4S,YAAa,OAAQC,WAAY,QAC1CpC,QAAQ,SAFV,yBASP,CA0FDxL,cAAcD,GAIZ,OAHkB,OAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAUrG,QAC5BmR,GAAYA,EAAQH,MAAQG,EAAQzR,MAGxC,CA8GDE,SACE,MAAM,kBAAEuU,GAAsBtW,KAAKC,OAC7B,gBAAEoI,EAAF,SAAmBG,GAAaxI,KAAKqH,MAE3C,OACE,8BACIgB,GAkCA,UAACtD,EAAD,CAAmByF,WAAS,EAAC+L,KAAK,SAASC,UAAU,SAArD,WACE,SAAC7Q,EAAD,CACEwQ,WAAW,SACXlQ,eAAe,gBACfnG,MAAI,EACJ0K,WAAS,EAJX,UAME,SAAC,KAAD,CAAM1K,MAAI,EAACmS,GAAI,EAAf,UACE,SAAC,IAAD,CACE3R,MAAM,UACNkD,MAAO,CAAEK,YAAa,GACtBkQ,WAAW,SAAC,IAAD,IACX3P,QAAS,IAAMpE,KAAK2R,6BAJtB,UAME,SAAC,IAAD,CAAYsC,QAAQ,SAApB,6BAILjU,KAAKqT,6BAnDR,UAACtO,EAAD,CAAmByF,WAAS,EAAC+L,KAAK,SAASC,UAAU,SAArD,WACE,UAAC7Q,EAAD,CACEwQ,WAAW,SACXlQ,eAAe,gBACfnG,MAAI,EACJ0K,WAAS,EAJX,WAME,SAAC,KAAD,CAAM1K,MAAI,EAACmS,GAAI,EAAf,UACE,SAAC,IAAD,CACE3R,MAAM,UACNkD,MAAO,CAAEK,YAAa,GACtBkQ,WAAW,SAAC,IAAD,IACX3P,QAASkS,EAJX,UAME,SAAC,IAAD,CAAYrC,QAAQ,SAApB,2BAGJ,SAAClO,EAAD,CAAYjG,MAAI,EAACmS,GAAI,EAArB,UACW,OAARzJ,QAAQ,IAARA,OAAA,EAAAA,EAAU9G,QAAS,IAClB,SAAC,IAAD,CACEpB,MAAM,UACNkD,MAAO,CAAEK,YAAa,GACtB4S,SAAS,SAAC,IAAD,IACTrS,QAAS,IAAMpE,KAAK2R,6BAJtB,UAME,SAAC,IAAD,CAAYsC,QAAQ,SAApB,4BAKPjU,KAAK6R,2BA0Bf,EAGH,WAAe6E,EAAAA,EAAAA,IAAatP,E,oHCtnC5B,MAAMuP,UAAwB/W,EAAAA,cAK5BgX,YAAY3W,GACV4W,MAAM5W,GADW,KAJnBoH,MAAQ,CACNyP,gBAAiB,IAGA,KAMnBxN,kBAAoB,KAClB,MAAM,kBAAE2B,EAAF,aAAqBC,EAArB,KAAmCE,GAASpL,KAAKC,MAEjD8W,EAAe/W,KAAKgX,mBACxB/L,EACAC,EACAE,GAEF/J,OAAOgO,KAAK0H,GAAczH,SAASC,IACjCvP,KAAKiX,mBAAmBF,EAAaxH,GAAMnE,EAA3C,IAGFpL,KAAKkJ,SAAS,CAAE4N,gBAAiB9W,KAAK8W,iBAAtC,EAlBiB,KAsCnBG,mBAAqB,CAACrV,EAAUwJ,KAE9B,GAAa,YAATA,IAC8B,IAA5BxJ,EAASb,eACX,OAIJ,IAAImW,GAAuB,OAARtV,QAAQ,IAARA,OAAA,EAAAA,EAAUgU,mBAAoB,IAC7CuB,EAAmB,EACnB9W,EAAQ,EAKRuB,EAASwH,WAAW1H,SACtBrB,IACA6W,IACAC,GAAoBvV,EAASwH,WAAW1H,QAIrCE,EAASA,UACZ5B,KAAK8W,gBAAgBhH,KAAK,CACxBvP,MAAOqB,EAASrB,MAChBF,MAAO8W,EACPpW,eAAgBa,EAASb,iBAKzBa,EAAS0O,WACXjQ,IACIA,GAAS6W,GACXtV,EAAS0O,SAAShB,SAASpB,IACzBlO,KAAK8W,gBAAgBhH,KAAK,CACxBvP,MAAO2N,EAAQ6B,OACf1P,MAAO8W,IAETnX,KAAKoX,0BACHlJ,EACAgJ,EACA7W,EAAQ,EACR8W,EAAmB,EAJrB,IAQL,EArFgB,KAwFnBC,0BAA4B,CAC1BlJ,EACAgJ,EACA7W,EACA8W,KAEIjJ,EAAQoC,UAAYjQ,GAAS6W,GAC/BhJ,EAAQoC,SAAShB,SAASiB,IACxBvQ,KAAK8W,gBAAgBhH,KAAK,CACxBvP,MAAOgQ,EAAWR,OAClB1P,MAAO8W,IAETnX,KAAKoX,0BACH7G,EACA2G,EACA7W,EAAQ,EACR8W,EAAmB,EAJrB,GAOH,EAzGDnX,KAAK8W,gBAAkB,GACvB9W,KAAKqX,qBAAsB,CAC5B,CAiBDL,mBAAmB/L,EAAmBC,GACpC,IAAIhL,EAAO,IAAK+K,GAahB,OAXA5J,OAAOgO,KAAKnP,GAAMoP,SAASC,IACzB,IAAI+H,EAAUpX,EAAKqP,GACnB,GAAI+H,EAAQ1V,SAAU,CAEpB,IAAI2V,EAAUrM,EAAa1J,MACxBwP,GAAQA,EAAIE,mBAAqBoG,EAAQ1V,WAG5C1B,EAAKqP,GAAKe,SAAWiH,EAAQjH,QAC9B,KAEIpQ,CACR,CA0ED6B,SACE,MAAM,gBAAE+U,GAAoB9W,KAAKqH,MACjC,OACE,UAAC,KAAD,CAAMmD,WAAS,EAACxI,GAAI,CAAEwV,eAAgB,UAAtC,WACE,SAAC,IAAD,CAAYxF,QAAQ,KAAKyF,cAAc,EAAvC,yCAGA,SAAC,IAAD,CAAMjU,MAAO,CAAEvB,MAAO,QAAUC,gBAAc,EAA9C,SACG4U,EAAgB1U,KAAI,CAACR,EAAUwE,KACvBxE,EAASb,gBACd,SAAC,KAAD,CAEE2W,OAAO,EACP1V,GAAI,CACF6B,YAAa,EAAqB,EAAjBjC,EAASvB,OAJ9B,UAOE,SAAC,IAAD,UAAeuB,EAASrB,SANnB6F,UAuBlB,EAGH,WAAetB,EAAAA,EAAAA,GAAU6R,E,6HChKlB,MAAMgB,EAAwBC,GAC5BA,EAAaC,MAAM,KAAKzV,KAAK0V,GAC3BA,EAAOvD,SAILwD,EAAkBH,GACPD,EAAqBC,GACpBI,KAAK,KAAKH,MAAM,KAG5BjU,EAAc9D,GAClBA,EAAKI,MAAQJ,EAAKI,KAAKwB,OAAS,EAG5BuW,EAAuB3H,GAC3BA,EAASpP,QAAO,CAACgX,EAAKhK,KAC3B,GAAIA,EAAQ6B,OAAQ,CAClB,IAAIoI,EAAiC,IAAKjK,GAC1CiK,EAA+B7H,SAAW,GAC1C4H,EAAM,IAAIA,EAAKC,EAChB,CACD,OAAIjK,EAAQoC,UAAYpC,EAAQoC,SAAS5O,OAAS,EACzC,IAAIwW,KAAQD,EAAoB/J,EAAQoC,WAE1C4H,CAAP,GACC,G,yFCvBL,MAAME,EAAqBlY,GAClBA,EAAKgB,QAAO,CAACwT,EAAa5U,MAC3B8D,EAAAA,EAAAA,YAAW9D,KACb4U,EAAc,IAAIA,KAAgB0D,EAAkBtY,EAAKI,QAEpD,IAAIwU,EAAa5U,EAAKM,MAC5B,IASQiV,EAAyB,SACpCnV,GAII,IAHJ6O,EAGG,uDAHQ,KACX1O,EAEG,uDAFK,EACRgY,EACG,uDADS,GAERC,EAAqBpY,EAAKgB,QAAO,CAAC+H,EAAOwH,MAC3CA,EAAW,IACNA,EAED1B,WACA1O,QACAY,YAAa,GACbyT,YAAa,GACbtL,WAAYiP,EACZ7X,QAASZ,EAAAA,cAIAM,MAAQuQ,EAASvQ,KAAKwB,OAAS,IAC1C+O,EAASiE,YAAc,IAClBjE,EAASiE,eACT0D,EAAkB3H,EAASvQ,OAEhCuQ,EAASxP,YAAc,IAClBwP,EAASxP,eACTwP,EAASvQ,KAAKkC,KAAKqO,GACbA,EAASrQ,MAIpB6I,EAAQ,IACHA,KACAoM,EAAuB5E,EAASvQ,KAAMuQ,EAASrQ,GAAIC,EAAQ,EAAG,IAC5DgY,EACH5H,EAASrQ,OAIR,IAAK6I,EAAY,CAACwH,EAASrQ,IAAKqQ,KACtC,CAAC,GAIJ,OAHApP,OAAOC,OAAOgX,GAAoBhJ,SAASiJ,WAClCA,EAAErY,IAAT,IAEKoY,CACR,C","sources":["plugins/DocumentHandler/printMenu/PrintList.js","plugins/DocumentHandler/printMenu/PrintListItem.js","plugins/DocumentHandler/printMenu/PrintWindow.js","plugins/DocumentHandler/printMenu/TableOfContents.js","plugins/DocumentHandler/utils/helpers.js","plugins/DocumentHandler/utils/stateConverter.js"],"sourcesContent":["import React from \"react\";\nimport List from \"@mui/material/List\";\nimport PrintListItem from \"./PrintListItem\";\n\nclass PrintList extends React.Component {\n getMenuItemType = (item, type) => {\n return (\n \n );\n };\n\n getSubMenuItems = (item) => {\n return item.menuItemIds.reduce((subMenuItems, subItemId) => {\n const subItem = Object.values(this.props.documentMenu).find((i) => {\n return i.id === subItemId;\n });\n if (subItem.menuItemIds.length > 0) {\n subMenuItems = [...subMenuItems, ...this.getSubMenuItems(subItem)];\n }\n return [...subMenuItems, subItem];\n }, []);\n };\n\n renderMenuItem = (item, id) => {\n if (item.menuItemIds && item.menuItemIds.length > 0) {\n return this.getMenuItemType(item, \"submenu\");\n } else if (item.document) {\n return this.getMenuItemType(item, \"document\");\n } else if (item.link) {\n return this.getMenuItemType(item, \"link\");\n } else if (item.maplink) {\n return this.getMenuItemType(item, \"maplink\");\n }\n };\n\n render() {\n const { documentMenu, level } = this.props;\n return (\n \n {Object.values(documentMenu)\n .filter((item) => {\n return item.level === level;\n })\n .map((item) => {\n return (\n \n {this.renderMenuItem(item, item.id)}\n \n );\n })}\n \n );\n }\n}\n\nexport default PrintList;\n","import React from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport { visuallyHidden } from \"@mui/utils\";\n\nimport { withTheme } from \"@emotion/react\";\nimport {\n Checkbox,\n Collapse,\n ListItem,\n ListItemIcon,\n ListItemText,\n} from \"@mui/material\";\nimport ExpandLess from \"@mui/icons-material/ExpandLess\";\nimport ExpandMore from \"@mui/icons-material/ExpandMore\";\nimport PrintList from \"./PrintList\";\n\nconst StyledListItemIcon = styled(ListItemIcon)(({ theme }) => ({\n minWidth: theme.spacing(3),\n}));\n\nconst StyledCollapseIcon = styled(ListItemIcon)(({ theme }) => ({\n \".MuiListItemIcon-root\": {\n minWidth: theme.spacing(4),\n },\n}));\nconst StyledListItem = styled(ListItem)(({ theme }) => ({\n overflowWrap: \"break-word\",\n \".MuiListItem-root\": {\n borderLeft: `${theme.spacing(1)} solid ${theme.palette.background.paper}`,\n \"&.Mui-selected\": {\n borderLeftColor: theme.palette.action.selected,\n },\n \"&.Mui-selected:hover\": {\n borderLeftColor: theme.palette.action.selected,\n },\n \"&:hover\": {\n borderColor: theme.palette.action.hover,\n },\n },\n}));\n\nclass PrintListItem extends React.PureComponent {\n #getListTitle = () => {\n const { title } = this.props;\n return {title};\n };\n\n #getCollapseIcon = () => {\n const { title, expanded } = this.props;\n\n return expanded ? (\n \n {!title && Minimera submeny}\n \n \n ) : (\n \n {!title && Maximera submeny}\n \n \n );\n };\n\n #hasSubMenu = () => {\n const { subMenuItems } = this.props;\n return subMenuItems && subMenuItems.length > 0;\n };\n\n #handleMenuButtonClick = (type, id) => {\n const { localObserver } = this.props;\n localObserver.publish(`print-${type}-clicked`, id);\n };\n\n #getMenuItemStyle = () => {\n const { theme, level, color, colored } = this.props;\n const hasSubMenu = this.#hasSubMenu();\n return colored\n ? {\n paddingLeft: theme.spacing(1 + level * 3),\n borderLeft: `${theme.spacing(0.5)} solid ${color}`,\n paddingRight: hasSubMenu ? 0 : theme.spacing(1),\n }\n : {\n paddingLeft: theme.spacing(1 + level * 3),\n paddingRight: hasSubMenu ? 0 : theme.spacing(1),\n };\n };\n\n render() {\n const {\n type,\n selected,\n subMenuItems,\n expanded,\n level,\n title,\n id,\n chosenForPrint,\n } = this.props;\n const hasSubMenu = this.#hasSubMenu();\n return (\n <>\n {\n this.#handleMenuButtonClick(type, id);\n }}\n sx={this.#getMenuItemStyle()}\n >\n \n {\n this.props.handleTogglePrint(this.props.id);\n }}\n onClick={(e) => e.stopPropagation()}\n edge=\"start\"\n tabIndex={-1}\n disableRipple\n />\n \n {title && this.#getListTitle()}\n {hasSubMenu && this.#getCollapseIcon()}\n \n {hasSubMenu && (\n \n \n \n )}\n \n );\n }\n}\n\nexport default withTheme(PrintListItem);\n","import React, { useEffect } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { createPortal } from \"react-dom\";\nimport { withSnackbar } from \"notistack\";\nimport {\n styled,\n StyledEngineProvider,\n ThemeProvider,\n useTheme,\n} from \"@mui/material/styles\";\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n FormControlLabel,\n Grid,\n LinearProgress,\n Typography,\n List,\n ListItemButton,\n DialogActions,\n useMediaQuery,\n} from \"@mui/material\";\n\nimport ArrowBackIcon from \"@mui/icons-material/ArrowBack\";\nimport ArrowForwardIcon from \"@mui/icons-material/ArrowForward\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\n\nimport { deepMerge } from \"utils/DeepMerge\";\n\nimport PrintList from \"./PrintList\";\nimport TableOfContents from \"./TableOfContents\";\nimport { getNormalizedMenuState } from \"../utils/stateConverter\";\nimport { hasSubMenu } from \"../utils/helpers\";\n\nconst GridGridContainer = styled(Grid)(({ theme }) => ({\n padding: theme.spacing(3),\n height: \"100%\",\n overflowX: \"auto\",\n}));\n\nconst GridMiddleContainer = styled(Grid)(({ theme }) => ({\n marginTop: theme.spacing(2),\n overflowX: \"auto\",\n \"&::-webkit-scrollbar\": {\n width: \"0.4em\",\n opacity: \"0\",\n },\n \"&:hover\": {\n \"&::-webkit-scrollbar\": {\n opacity: \"1\",\n },\n \"&::-webkit-scrollbar-track\": {\n boxShadow: \"inset 0 0 6px rgba(0,0,0,0.00)\",\n webkitBoxShadow: \"inset 0 0 6px rgba(0,0,0,0.00)\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n backgroundColor: \"rgba(0,0,0,.1)\",\n },\n },\n flexBasis: \"100%\",\n}));\n\nconst GridHeaderContainer = styled(Grid)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst GridSettingsContainer = styled(Grid)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst GridFooterContainer = styled(Grid)(({ theme }) => ({\n flexBasis: \"10%\",\n}));\n\nconst StyledGrid = styled(Grid)(({ theme }) => ({\n display: \"flex\",\n justifyContent: \"flex-end\",\n}));\n\nconst StyledListItemButton = styled(ListItemButton)(({ theme, index }) => ({\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: \"16px 10px 16px 10px\",\n borderBottom: \"1px solid lightgray\",\n borderLeft: index % 2 === 0 ? \"4px solid lightGray\" : \"4px solid darkGray\",\n}));\n\nconst StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n overflowY: \"clip\",\n position: \"relative\",\n \"&:before\": {\n display: \"block\",\n content: `\"\"`,\n width: \"100%\",\n paddingTop: \"141.15%\",\n paddingLeft: \"80%\",\n },\n}));\n\nconst StyledIframe = styled(\"iframe\")(({ theme }) => ({\n position: \"absolute\",\n width: \"calc(100% - 40px)\",\n height: \"100%\",\n top: \"0\",\n left: \"0\",\n margin: \"20px\",\n}));\n\nconst maxHeight = 950;\nconst imageResizeRatio = 0.7;\n\nfunction ComponentWithRenderCallback({ callback, children }) {\n useEffect(() => callback());\n\n return
{children}
;\n}\n\nclass PrintWindow extends React.PureComponent {\n state = {\n printLinks: true,\n printText: true,\n printImages: true,\n printMaps: false,\n allDocumentsToggled: false,\n tocPrintMode: this.props.options?.tableOfContents?.printMode ?? \"none\",\n menuInformation: this.createMenu(),\n printContent: undefined,\n pdfLoading: false,\n isAnyDocumentSelected: false,\n showAttachments: false,\n selectedPdfIndex: null,\n isModalOpen: false,\n pdfLinks: this.checkPdfLinks(this.props.options.pdfLinks),\n };\n\n internalId = 0;\n\n #handleSubMenuClicked = (id) => {\n this.#setItemStateProperties(id);\n };\n\n #setItemStateProperties = (idClicked) => {\n return new Promise((resolve) => {\n const currentState = { ...this.state.menuInformation };\n const clickedItem = currentState[idClicked];\n const newState = Object.values(currentState).reduce((items, item) => {\n const isClickedItem = item.id === idClicked;\n if (isClickedItem) {\n return {\n ...items,\n [item.id]: this.#setClickedItemProperties(item),\n };\n } else {\n return {\n ...items,\n [item.id]: this.#setNonClickedItemProperties(\n item,\n currentState,\n clickedItem\n ),\n };\n }\n }, {});\n\n this.setState({ menuInformation: newState }, resolve);\n });\n };\n\n #setClickedItemProperties = (clickedItem) => {\n let newItem = { ...clickedItem };\n return {\n ...clickedItem,\n selected: !newItem.hasSubMenu,\n expandedSubMenu: newItem.hasSubMenu\n ? !newItem.expandedSubMenu\n : newItem.expandedSubMenu,\n };\n };\n\n #setNonClickedItemProperties = (item, currentState, clickedItem) => {\n return {\n ...item,\n expandedSubMenu:\n clickedItem.allParents.indexOf(item.id) !== -1\n ? true\n : item.expandedSubMenu,\n selected: clickedItem.hasSubMenu ? item.selected : false,\n };\n };\n\n componentDidMount = () => {\n this.props.localObserver.subscribe(\n \"chapter-components-appended\",\n (renderedChapters) => {\n this.setState(\n {\n printContent: renderedChapters,\n },\n () => {\n this.printContents();\n }\n );\n }\n );\n\n this.props.localObserver.subscribe(\"print-submenu-clicked\", (id) => {\n this.#handleSubMenuClicked(id);\n });\n };\n\n componentWillUnmount = () => {\n this.props.localObserver.unsubscribe(\"chapter-components-appended\");\n };\n\n resizeImage = (img) => {\n img.height = img.getBoundingClientRect().height * imageResizeRatio;\n img.width = img.clientWidth * imageResizeRatio;\n };\n\n imageFitsOnePage = (img) => {\n return img.getBoundingClientRect().height < maxHeight * 0.9;\n };\n\n loadImage = (img) => {\n return new Promise((resolve, reject) => {\n img.onload = () => {\n if (this.imageFitsOnePage(img)) {\n resolve(img);\n } else {\n this.resizeImage(img);\n resolve(img);\n }\n };\n img.onerror = () => reject(img);\n });\n };\n\n customRender = (element, container) => {\n // Since the ThemeProvider seems to cache the theme in some way, we have to make sure to\n // create a new theme-reference to make sure that the correct theme is used when rendering.\n // If we don't create a new reference, the custom-theme will be overridden by the standard MUI-theme\n // since the standard MUI-theme is refreshed (and thereby has the highest css-specificity) sometimes.\n // This is quite messy, but get's the job done. See issue #999 for more info.\n const theme = deepMerge(this.props.customTheme || this.props.theme, {});\n // Make sure to render the components using the custom theme if it exists:\n return new Promise((resolve) => {\n const rootElement = createRoot(container);\n rootElement.render(\n \n \n {\n resolve();\n }}\n >\n {element}\n \n \n \n );\n });\n };\n\n createPrintElement = (id) => {\n let div = document.createElement(\"div\");\n div.id = id;\n return div;\n };\n\n renderToc = () => {\n this.toc = this.createPrintElement(\"toc\");\n return this.customRender(\n ,\n this.toc\n );\n };\n\n renderContent = () => {\n this.content = this.createPrintElement(\"content\");\n return this.customRender(this.state.printContent, this.content);\n };\n\n areAllImagesLoaded = () => {\n return Promise.allSettled(\n [...this.content.getElementsByTagName(\"img\")].map((img) => {\n return this.loadImage(img);\n })\n );\n };\n\n handleNewWindowBlocked = () => {\n window.alert(\n \"Please allow opening of popup windows in order to print this document.\"\n );\n\n this.setState({\n pdfLoading: false,\n printContent: undefined,\n printMaps: false,\n });\n\n return null;\n };\n\n createPrintWindow = () => {\n const printWindow = window.open(\"\", \"PRINT\");\n\n if (printWindow === null) {\n return this.handleNewWindowBlocked();\n }\n\n printWindow.document.head.insertAdjacentHTML(\n \"beforeend\",\n ` ${document.title}\n \n `\n );\n\n return printWindow;\n };\n\n clearPrintContainers = () => {\n this.toc = null;\n this.content = null;\n };\n\n handlePrintCompleted = () => {\n // Since we've altered the theme while printing, we must refresh to make sure\n // the original theme has the highest specificity when the printing is done.\n // Otherwise the entire application will follow the theming used in the print-contents.\n // FIXME: This might not be needed after the upgrade to React 18. Let's ensure that's the\n // case and remove if so.\n // this.props.app.refreshMUITheme();\n\n // Then we'll update the view\n this.toggleAllDocuments(false);\n this.setState({\n pdfLoading: false,\n printContent: undefined,\n menuInformation: this.createMenu(),\n });\n };\n\n addPageBreaksBeforeHeadings = (printContent) => {\n const headings = printContent.querySelectorAll([\"h1\", \"h2\"]);\n\n // We don't want page breaks before a H2 if there is a H1 immediately before.\n // In this case the H1 is the group parent heading.\n let isAfterH1 = false;\n let isConsecutiveH1 = false;\n\n for (let i = 0; i < headings.length; i++) {\n if (headings[i].nodeName === \"H1\" && isAfterH1) {\n isConsecutiveH1 = true;\n }\n if (headings[i].nodeName === \"H1\") {\n isAfterH1 = true;\n }\n\n //H1s are group headings and should start on a new page.\n if (\n headings[i].nodeName === \"H1\" &&\n this.state.tocPrintMode !== \"none\" &&\n !isConsecutiveH1\n ) {\n headings[i].style.pageBreakBefore = \"always\";\n headings[i].style.breakBefore = \"none\";\n }\n\n if (i !== 0 && headings[i].nodeName === \"H2\" && !isAfterH1) {\n headings[i].style.pageBreakBefore = \"always\";\n headings[i].style.breakBefore = \"none\";\n }\n\n if (headings[i].nodeName !== \"H1\") {\n isAfterH1 = false;\n }\n }\n };\n\n // Creates a new window, appends all elements that should be printed, and invokes\n // window.print(), allowing the user to save the document as a PDF (or print it straight away).\n printContents = () => {\n // We're gonna want to make sure everything is rendered...\n Promise.all([\n this.state.tocPrintMode !== \"none\" && this.renderToc(),\n this.renderContent(),\n ]).then(() => {\n // We're also gonna want to make sure all images has been loaded\n this.areAllImagesLoaded().then(() => {\n // Then we can create an element that will hold our TOC and print-content...\n const printContent = document.createElement(\"div\");\n // ...append the TOC to the element (only if applicable)...\n this.toc && printContent.appendChild(this.toc);\n // ...and append the actual content.\n printContent.appendChild(this.content);\n // Then we'll make sure to create page-breaks before headings to\n // create a more appealing document.\n this.addPageBreaksBeforeHeadings(printContent);\n // Then we'll create and open a new window in the browser\n const newWindow = this.createPrintWindow();\n\n // We're gonna need to get all the styles into the new window...\n // The styling is applied differently if we're in dev- or prod-mode.\n // (Both are handled with this solution). Let's loop every emotion-style-tag\n for (const style of document.querySelectorAll(\"[data-emotion]\")) {\n // Create a new style-tag\n const s = document.createElement(\"style\");\n // Append an empty text-node (TODO: Why? :) )\n s.appendChild(document.createTextNode(\"\"));\n // There's gonna be information in either the style-sheet or in the textContent\n // depending on if we're in dev- or prod-mode.\n const { textContent, sheet } = style;\n // In development we'll have pure text styling the components...\n if (textContent) {\n // In that case we can just append a text-node with that text\n s.appendChild(document.createTextNode(textContent));\n newWindow.document.head.appendChild(s);\n // While in prod, we'll have a stylesheet\n } else {\n // We have to append the new style to the document, otherwise the sheet will be null.\n newWindow.document.head.appendChild(s);\n for (const rule of sheet.cssRules) {\n try {\n s.sheet.insertRule(rule.cssText);\n } catch (error) {\n console.warn(`Could not insert rule: ${rule?.cssText}`);\n }\n }\n }\n }\n\n // Add our recently-created DIV to the new window's document\n newWindow.document.body.appendChild(printContent);\n\n // Invoke browser's print dialog - this will block the thread\n // until user does something with it.\n newWindow.print();\n\n // Once the print dialog has disappeared, let's close the new window\n newWindow.close();\n\n // When the user closes the print-window we have to do some cleanup...\n this.handlePrintCompleted();\n });\n });\n };\n\n handleCheckboxChange = (chapter) => {\n const { model } = this.props;\n let newChapterInformation = [...this.state.chapterInformation];\n\n let toggledChapter = model.getChapterById(\n newChapterInformation,\n chapter.id\n );\n toggledChapter.chosenForPrint = !toggledChapter.chosenForPrint;\n this.toggleSubChapters(toggledChapter, toggledChapter.chosenForPrint);\n\n this.setState({\n chapterInformation: newChapterInformation,\n allDocumentsToggled: false,\n });\n };\n\n setInitialMenuItemProperties(menuItem) {\n if (hasSubMenu(menuItem)) {\n menuItem.hasSubMenu = true;\n menuItem.menu.forEach((subMenuItem) => {\n this.setInitialMenuItemProperties(subMenuItem, menuItem);\n });\n }\n }\n\n removeNonPrintableDocuments(documents) {\n /*\n * Remove menu items that should not appear in the print menu.\n * Items that should be removed are: items without a document that are not a group parent. (maplinks, links)\n */\n let removedIds = [];\n\n Object.keys(documents).forEach((key) => {\n if (documents[key].maplink.trim() || documents[key].link.trim()) {\n removedIds.push(parseInt(key));\n delete documents[key];\n }\n });\n\n Object.keys(documents).forEach((key) => {\n let item = documents[key];\n\n //if a document has been removed from the printMenu, also remove its id from the children array of other documents.\n let newChildren = item.allChildren.filter(\n (child) => !removedIds.includes(child)\n );\n item.allChildren = newChildren;\n //also remove its id from the menuItemIds of other documents.\n let newMenuItemIds = item.menuItemIds.filter(\n (id) => !removedIds.includes(id)\n );\n item.menuItemIds = newMenuItemIds;\n });\n }\n\n createMenu() {\n /* \n Create a normalized menu structure for the print menu, similar to that of the panel menu, but only for printable documents. \n */\n const { options } = this.props;\n\n const modelDocuments = this.props.model.allDocuments;\n const newOptions = { ...options };\n const menuConfig = { ...newOptions }.menuConfig;\n const menuConfigClone = JSON.parse(JSON.stringify(menuConfig));\n const menuStructure = getNormalizedMenuState(menuConfigClone.menu);\n let chapterInformation = this.props.model.getAllChapterInfo();\n\n const keys = Object.keys(menuStructure);\n const idOffset = keys.length + 1; //used to give new ids, so printMenu items do not get the same id as panelMenu items\n\n keys.forEach((key) => {\n let document = menuStructure[key];\n const offsetChildren = document.allChildren.map((id) => (id += idOffset));\n const offsetParents = document.allParents.map((id) => (id += idOffset));\n const offsetMenuItemIds = document.menuItemIds.map(\n (id) => (id += idOffset)\n );\n\n document.id += idOffset;\n document.parentId = document.parentId\n ? (document.parentId += idOffset)\n : null;\n document.allChildren = offsetChildren;\n document.allParents = offsetParents;\n document.menuItemIds = offsetMenuItemIds;\n\n document.chosenForPrint = false;\n document.colored = true;\n\n //add the table of contents settings from the document json.\n if (document.document) {\n let modelDoc = modelDocuments.find(\n (modelDoc) => modelDoc.documentFileName === document.document\n );\n document.tocChapterLevels =\n modelDoc?.tableOfContents?.chapterLevelsToShow || 100;\n }\n if (document.document) {\n document.chapters = [];\n let documentChapters = chapterInformation.filter(\n (chapter) => chapter.documentFileName === document.document\n );\n documentChapters.forEach((chapter) => document.chapters.push(chapter));\n }\n });\n\n let menuWithOffset = {};\n keys.forEach((key) => {\n let keyOffset = parseInt(key) + idOffset;\n menuWithOffset[keyOffset] = menuStructure[key];\n });\n\n this.removeNonPrintableDocuments(menuWithOffset);\n return menuWithOffset;\n }\n\n toggleSubDocuments(documentId, checked, menuState) {\n const subDocuments = menuState[documentId].allChildren;\n subDocuments.forEach((subDocId) => {\n const updateDoc = {\n ...menuState[subDocId],\n chosenForPrint: checked,\n };\n menuState[subDocId] = updateDoc;\n this.toggleSubDocuments(subDocId, checked, menuState);\n });\n\n return menuState;\n }\n\n toggleParentChecked(documentId, menuState) {\n const parentId = menuState[documentId].parentId;\n const updatedParent = { ...menuState[parentId], chosenForPrint: true };\n menuState[parentId] = updatedParent;\n\n if (menuState[parentId].parentId) {\n menuState = this.toggleParentChecked(parentId, menuState);\n }\n\n return menuState;\n }\n\n toggleParentUnchecked(documentId, menuState) {\n const parentId = menuState[documentId].parentId;\n\n //if the parent has other children that are checked, do not toggle the parent.\n const hasOtherCheckedChildren =\n menuState[parentId].allChildren.filter((child) => {\n if (child.id !== documentId && menuState[child].chosenForPrint) {\n return true;\n } else return false;\n }).length > 0;\n\n if (hasOtherCheckedChildren) {\n return menuState;\n }\n\n const updatedParent = { ...menuState[parentId], chosenForPrint: false };\n menuState[parentId] = updatedParent;\n\n if (menuState[parentId].parentId) {\n menuState = this.toggleParentUnchecked(parentId, menuState);\n }\n return menuState;\n }\n\n toggleChosenForPrint = (documentId) => {\n const current = { ...this.state.menuInformation };\n const shouldPrint = !current[documentId].chosenForPrint;\n\n const updateDoc = {\n ...current[documentId],\n chosenForPrint: !current[documentId].chosenForPrint,\n };\n current[documentId] = updateDoc;\n\n /*\n update child documents (toggle subDocuments does not set state itself, but returns an object\n that we can use to update the state along with out parent document, so we only make one state update.) \n */\n let updatedMenuState = this.toggleSubDocuments(\n documentId,\n shouldPrint,\n current\n );\n\n if (current[documentId].parentId && shouldPrint) {\n updatedMenuState = this.toggleParentChecked(documentId, updatedMenuState);\n }\n\n if (current[documentId].parentId && !shouldPrint) {\n updatedMenuState = this.toggleParentUnchecked(\n documentId,\n updatedMenuState\n );\n }\n\n this.setState({ menuInformation: updatedMenuState }, () => {\n this.setIsAnyDocumentSelected();\n });\n };\n\n toggleAllDocuments = (toggled) => {\n const menuState = { ...this.state.menuInformation };\n\n Object.keys(menuState).forEach((key) => {\n const updateDoc = {\n ...menuState[key],\n chosenForPrint: toggled,\n };\n menuState[key] = updateDoc;\n });\n\n this.setState({\n allDocumentsToggled: toggled,\n menuInformation: menuState,\n isAnyDocumentSelected: toggled,\n });\n };\n\n removeTagsNotSelectedForPrint = (chapter) => {\n const { printImages, printText, printLinks } = this.state;\n\n let elementsToRemove = [];\n const div = document.createElement(\"div\");\n div.innerHTML = chapter.html;\n\n if (!printLinks) {\n Array.from(div.getElementsByTagName(\"a\")).forEach((element) => {\n elementsToRemove.push(element);\n });\n }\n if (!printImages) {\n Array.from(div.getElementsByTagName(\"figure\")).forEach((element) => {\n elementsToRemove.push(element);\n });\n }\n if (!printText) {\n Array.from(div.querySelectorAll(\"p, h1, h2, h3, h4, h5, h6\")).forEach(\n (element) => {\n elementsToRemove.push(element);\n }\n );\n chapter.header = \"\";\n }\n\n //ensure links to internal documents are no longer clickable.\n let documentLinks = div.querySelectorAll(\"[data-document]\");\n for (let i = 0; i < documentLinks.length; i++) {\n documentLinks[i].setAttribute(\"printMode\", \"true\");\n documentLinks[i].href = \"#\";\n }\n\n for (let i = 0; i < elementsToRemove.length; i++) {\n elementsToRemove[i].parentNode.removeChild(elementsToRemove[i]);\n }\n\n chapter.html = div.innerHTML;\n return chapter;\n };\n\n prepareChapterForPrint = (chapter) => {\n if (chapter.chapters && chapter.chapters.length > 0) {\n chapter.chapters.forEach((subChapter) => {\n if (subChapter.chapters && subChapter.chapters.length > 0) {\n return this.prepareChapterForPrint(subChapter);\n } else {\n subChapter = this.removeTagsNotSelectedForPrint(subChapter);\n }\n });\n }\n chapter = this.removeTagsNotSelectedForPrint(chapter);\n return chapter;\n };\n\n setIsAnyDocumentSelected = () => {\n const keys = Object.keys(this.state.menuInformation);\n let isAnyDocumentSelected = false;\n\n for (let i = 0; i < keys.length; i++) {\n if (this.state.menuInformation[keys[i]].chosenForPrint) {\n isAnyDocumentSelected = true;\n }\n }\n this.setState({ isAnyDocumentSelected: isAnyDocumentSelected });\n };\n\n createHeaderItems = (menuItem) => {\n return { isGroupHeader: true, title: menuItem.title, id: menuItem.id };\n };\n\n getDocumentsToPrint = () => {\n const { menuInformation } = this.state;\n\n const documentIdsForPrint = Object.keys(menuInformation).filter(\n (key) => menuInformation[key].chosenForPrint\n );\n\n //create those without documents (header items) as a header item object.\n const documentNamesForPrint = documentIdsForPrint.map(\n (id) => menuInformation[id].document\n );\n\n //TODO - now that we get the document chapters earlier, do we need to get the document here?\n const originalDocs = this.props.model.getDocuments(documentNamesForPrint);\n\n let docs = originalDocs.map((doc) => {\n if (doc) {\n let menuDocKey = Object.keys(menuInformation).find(\n (key) => menuInformation[key].document === doc.documentFileName\n );\n return {\n documentFileName: doc.documentFileName,\n tableOfContents: doc.tableOfContents,\n chapters: menuInformation[menuDocKey].chapters,\n };\n } else {\n return undefined;\n }\n });\n\n /*\n where getDocuments returns an empty string. This is a menuItem without a corresponding document, which\n is a menu parent.\n */\n const docsIncludingGroupParent = docs.map((doc, index) => {\n if (doc === undefined) {\n return this.createHeaderItems(\n menuInformation[documentIdsForPrint[index]]\n );\n }\n return doc;\n });\n\n let newDocs = [];\n\n docsIncludingGroupParent.forEach((document) => {\n if (document?.chapters?.length) {\n let preparedChapters = [];\n document?.chapters.forEach((chapter) => {\n preparedChapters.push(this.prepareChapterForPrint(chapter));\n });\n document.chapters = preparedChapters;\n }\n newDocs.push(document);\n });\n\n return newDocs;\n };\n\n createPDF = () => {\n this.setState({ pdfLoading: true });\n const documentsToPrint = this.getDocumentsToPrint();\n this.props.localObserver.publish(\n \"append-document-components\",\n documentsToPrint\n );\n };\n\n renderCreatePDFButton() {\n return (\n \n }\n onClick={this.createPDF}\n >\n \n Skriv ut\n \n \n \n );\n }\n\n renderLoadingDialog = () => {\n return (\n <>\n {createPortal(\n \n \n Din PDF skapas\n \n \n Det här kan ta en stund, speciellt om du har valt att skriva ut\n många dokument.\n
\n
\n
\n
\n
,\n document.getElementById(\"root\")\n )}\n \n );\n };\n\n toggleDocumentsAttachments = () => {\n this.setState((prevState) => ({\n showAttachments: !prevState.showAttachments,\n }));\n };\n\n renderPrintDocuments = () => {\n const { localObserver, documentWindowMaximized } = this.props;\n const { menuInformation } = this.state;\n return (\n <>\n \n Skapa PDF\n \n \n Inställningar\n\n \n \n this.toggleAllDocuments(!this.state.allDocumentsToggled)\n }\n />\n }\n label=\"Välj alla dokument\"\n labelPlacement=\"end\"\n />\n \n \n\n Valt innehåll\n\n \n \n \n\n {documentWindowMaximized && this.renderCreatePDFButton()}\n {this.renderLoadingDialog()}\n \n );\n };\n\n openAttachmentModal = (index) => {\n this.setState({\n selectedPdfIndex: index,\n isModalOpen: true,\n });\n };\n\n closeAttachmentModal = () => {\n this.setState({\n selectedPdfIndex: null,\n isModalOpen: false,\n });\n };\n\n checkPdfLinks(pdfLinks) {\n const updatedLinks = pdfLinks?.filter(\n (pdfLink) => pdfLink.name || pdfLink.link\n );\n return updatedLinks;\n }\n\n renderDialog = () => {\n const { isModalOpen, pdfLinks, selectedPdfIndex } = this.state;\n const closeAttachmentModal = this.closeAttachmentModal;\n\n function ResponsiveDialog() {\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down(\"sm\"));\n\n return (\n closeAttachmentModal()}\n >\n \n \n \n \n \n \n \n );\n }\n return (\n <>\n {createPortal(\n ,\n document.getElementById(\"root\")\n )}\n \n );\n };\n\n renderPrintAttachments = () => {\n const { pdfLinks, isModalOpen } = this.state;\n\n const renderAttachment = (pdfLink, index) => {\n const hasName = pdfLink.name !== \"\";\n const hasLink = pdfLink.link !== \"\";\n const disabled = !hasLink;\n const name = hasName ? pdfLink.name : \"Namn saknas\";\n const linkText = hasLink ? \"Öppna\" : \"Länk saknas\";\n const linkColor = hasLink ? \"primary\" : \"text.secondary\";\n const linkIcon = hasLink ? (\n \n ) : null;\n\n return (\n
\n this.openAttachmentModal(index)}\n >\n \n {name}\n \n {hasLink && (\n event.stopPropagation()}\n >\n \n {linkText}\n \n \n )}\n {!hasLink && (\n Länk saknas\n )}\n \n
\n );\n };\n\n return (\n <>\n \n Bilagor\n \n Innehåll\n \n {pdfLinks.map(renderAttachment)}\n \n {isModalOpen && this.renderDialog()}\n \n );\n };\n\n render() {\n const { togglePrintWindow } = this.props;\n const { showAttachments, pdfLinks } = this.state;\n\n return (\n <>\n {!showAttachments ? (\n \n \n \n }\n onClick={togglePrintWindow}\n >\n Tillbaka\n \n \n \n {pdfLinks?.length > 0 && (\n }\n onClick={() => this.toggleDocumentsAttachments()}\n >\n Bilagor\n \n )}\n \n \n {this.renderPrintDocuments()}\n \n ) : (\n \n \n \n }\n onClick={() => this.toggleDocumentsAttachments()}\n >\n Skapa Pdf\n \n \n \n {this.renderPrintAttachments()}\n \n )}\n \n );\n }\n}\n\nexport default withSnackbar(PrintWindow);\n","import React from \"react\";\nimport { withTheme } from \"@emotion/react\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport List from \"@mui/material/List\";\nimport { Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\n\nclass TableOfContents extends React.PureComponent {\n state = {\n titlesAndLevels: [],\n };\n\n constructor(props) {\n super(props);\n this.titlesAndLevels = [];\n this.previousGroupHeader = false;\n }\n\n componentDidMount = () => {\n const { documentMenuState, allDocuments, mode } = this.props;\n\n const tocStructure = this.createTocStructure(\n documentMenuState,\n allDocuments,\n mode\n );\n Object.keys(tocStructure).forEach((key) => {\n this.setTitlesAndLevels(tocStructure[key], mode);\n });\n\n this.setState({ titlesAndLevels: this.titlesAndLevels });\n };\n\n createTocStructure(documentMenuState, allDocuments) {\n let menu = { ...documentMenuState };\n //add the chapters from all documents onto the documentMenuState\n Object.keys(menu).forEach((key) => {\n let menuDoc = menu[key];\n if (menuDoc.document) {\n //get the corresponding chapters from allDocuments.\n let jsonDoc = allDocuments.find(\n (doc) => doc.documentFileName === menuDoc.document\n );\n //add the chapters to our doc in the menuState.\n menu[key].chapters = jsonDoc.chapters;\n }\n });\n return menu;\n }\n\n setTitlesAndLevels = (document, mode) => {\n //If the chosen config for table of contents is to only include printed documents in the toc. skip the document if it's not chosen for print.\n if (mode === \"partial\") {\n if (document.chosenForPrint !== true) {\n return;\n }\n }\n\n let levelsToShow = document?.tocChapterLevels || 100;\n let indentationLevel = 0;\n let level = 0;\n\n /*If a document is under a menu parent, push the level up, as the levelsToShow property\n in the document configuration is specific to that document, and does not take into account. that having\n a parent document may change it's level*/\n if (document.allParents.length) {\n level++;\n levelsToShow++;\n indentationLevel += document.allParents.length;\n }\n\n //Add the menu document title if it is a menu parent that just holds other documents;\n if (!document.document) {\n this.titlesAndLevels.push({\n title: document.title,\n level: indentationLevel,\n chosenForPrint: document.chosenForPrint,\n });\n }\n\n //add the documents chapters to the table of contents.\n if (document.chapters) {\n level++;\n if (level <= levelsToShow) {\n document.chapters.forEach((chapter) => {\n this.titlesAndLevels.push({\n title: chapter.header,\n level: indentationLevel,\n });\n this.setChapterTitlesAndLevels(\n chapter,\n levelsToShow,\n level + 1,\n indentationLevel + 1\n );\n });\n }\n }\n };\n\n setChapterTitlesAndLevels = (\n chapter,\n levelsToShow,\n level,\n indentationLevel\n ) => {\n if (chapter.chapters && level <= levelsToShow) {\n chapter.chapters.forEach((subChapter) => {\n this.titlesAndLevels.push({\n title: subChapter.header,\n level: indentationLevel,\n });\n this.setChapterTitlesAndLevels(\n subChapter,\n levelsToShow,\n level + 1,\n indentationLevel + 1\n );\n });\n }\n };\n\n render() {\n const { titlesAndLevels } = this.state;\n return (\n \n \n Innehållsförteckning\n \n \n {titlesAndLevels.map((document, index) => {\n return document.chosenForPrint ? (\n \n {document.title}\n \n ) : (\n \n {document.title}\n \n );\n })}\n \n \n );\n }\n}\n\nexport default withTheme(TableOfContents);\n","export const splitAndTrimOnCommas = (searchString) => {\n return searchString.split(\",\").map((string) => {\n return string.trim();\n });\n};\n\nexport const getStringArray = (searchString) => {\n let tempStringArray = splitAndTrimOnCommas(searchString);\n return tempStringArray.join(\" \").split(\" \");\n};\n\nexport const hasSubMenu = (item) => {\n return item.menu && item.menu.length > 0;\n};\n\nexport const flattenChaptersTree = (chapters) => {\n return chapters.reduce((acc, chapter) => {\n if (chapter.header) {\n let chapterStrippedFromSubChapters = { ...chapter };\n chapterStrippedFromSubChapters.chapters = [];\n acc = [...acc, chapterStrippedFromSubChapters];\n }\n if (chapter.chapters && chapter.chapters.length > 0) {\n return [...acc, ...flattenChaptersTree(chapter.chapters)];\n }\n return acc;\n }, []);\n};\n","import React from \"react\";\nimport { hasSubMenu } from \"../utils/helpers\";\n\nconst getAllChildrenIds = (menu) => {\n return menu.reduce((allChildren, item) => {\n if (hasSubMenu(item)) {\n allChildren = [...allChildren, ...getAllChildrenIds(item.menu)];\n }\n return [...allChildren, item.id];\n }, []);\n};\n/**\n * Function takes the hierarchial menu and flattens it into a normalized state where\n * the objects key is the id of the menu-item. The structure is now flat and every\n * object has references to parents, children etc.\n * While we are normalizing, we are also setting internal properties we later use\n * to make items selected, colored etc.\n */\nexport const getNormalizedMenuState = (\n menu,\n parentId = null,\n level = 0,\n parentIds = []\n) => {\n let normalizedItemList = menu.reduce((items, menuItem) => {\n menuItem = {\n ...menuItem,\n ...{\n parentId,\n level,\n menuItemIds: [],\n allChildren: [],\n allParents: parentIds,\n itemRef: React.createRef(),\n },\n };\n\n if (menuItem.menu && menuItem.menu.length > 0) {\n menuItem.allChildren = [\n ...menuItem.allChildren,\n ...getAllChildrenIds(menuItem.menu),\n ];\n menuItem.menuItemIds = [\n ...menuItem.menuItemIds,\n ...menuItem.menu.map((menuItem) => {\n return menuItem.id;\n }),\n ];\n\n items = {\n ...items,\n ...getNormalizedMenuState(menuItem.menu, menuItem.id, level + 1, [\n ...parentIds,\n menuItem.id,\n ]),\n };\n }\n return { ...items, ...{ [menuItem.id]: menuItem } };\n }, {});\n Object.values(normalizedItemList).forEach((n) => {\n delete n.menu;\n });\n return normalizedItemList;\n};\n"],"names":["PrintList","React","getMenuItemType","item","type","this","props","menu","icon","id","level","color","title","itemRef","subMenuItems","getSubMenuItems","expanded","expandedSubMenu","colored","selected","chosenForPrint","handleTogglePrint","menuItemIds","reduce","subItemId","subItem","Object","values","documentMenu","find","i","length","renderMenuItem","document","link","maplink","render","sx","width","disablePadding","filter","map","StyledListItemIcon","styled","ListItemIcon","theme","minWidth","spacing","StyledCollapseIcon","StyledListItem","ListItem","overflowWrap","borderLeft","palette","background","paper","borderLeftColor","action","borderColor","hover","PrintListItem","style","visuallyHidden","localObserver","publish","hasSubMenu","paddingLeft","paddingRight","divider","button","ref","size","disableGutters","onClick","checked","onChange","e","stopPropagation","edge","tabIndex","disableRipple","in","timeout","withTheme","GridGridContainer","Grid","padding","height","overflowX","GridMiddleContainer","marginTop","opacity","boxShadow","webkitBoxShadow","backgroundColor","flexBasis","GridHeaderContainer","marginBottom","GridSettingsContainer","GridFooterContainer","StyledGrid","display","justifyContent","StyledListItemButton","ListItemButton","index","borderBottom","StyledDialogContent","DialogContent","overflowY","position","content","paddingTop","StyledIframe","top","left","margin","ComponentWithRenderCallback","callback","children","useEffect","PrintWindow","state","printLinks","printText","printImages","printMaps","allDocumentsToggled","tocPrintMode","options","tableOfContents","printMode","menuInformation","createMenu","printContent","undefined","pdfLoading","isAnyDocumentSelected","showAttachments","selectedPdfIndex","isModalOpen","pdfLinks","checkPdfLinks","internalId","idClicked","Promise","resolve","currentState","clickedItem","newState","items","setState","newItem","allParents","indexOf","componentDidMount","subscribe","renderedChapters","printContents","componentWillUnmount","unsubscribe","resizeImage","img","getBoundingClientRect","clientWidth","imageFitsOnePage","maxHeight","loadImage","reject","onload","onerror","customRender","element","container","deepMerge","customTheme","createRoot","createPrintElement","div","createElement","renderToc","toc","documentMenuState","allDocuments","model","mode","renderContent","areAllImagesLoaded","allSettled","getElementsByTagName","handleNewWindowBlocked","window","alert","createPrintWindow","printWindow","open","head","insertAdjacentHTML","location","protocol","host","clearPrintContainers","handlePrintCompleted","toggleAllDocuments","addPageBreaksBeforeHeadings","headings","querySelectorAll","isAfterH1","isConsecutiveH1","nodeName","pageBreakBefore","breakBefore","all","then","appendChild","newWindow","s","createTextNode","textContent","sheet","rule","cssRules","insertRule","cssText","error","console","warn","body","print","close","handleCheckboxChange","chapter","newChapterInformation","chapterInformation","toggledChapter","getChapterById","toggleSubChapters","toggleChosenForPrint","documentId","current","shouldPrint","updateDoc","updatedMenuState","toggleSubDocuments","parentId","toggleParentChecked","toggleParentUnchecked","setIsAnyDocumentSelected","toggled","menuState","keys","forEach","key","removeTagsNotSelectedForPrint","elementsToRemove","innerHTML","html","Array","from","push","header","documentLinks","setAttribute","href","parentNode","removeChild","prepareChapterForPrint","chapters","subChapter","createHeaderItems","menuItem","isGroupHeader","getDocumentsToPrint","documentIdsForPrint","documentNamesForPrint","docsIncludingGroupParent","getDocuments","doc","menuDocKey","documentFileName","newDocs","preparedChapters","createPDF","documentsToPrint","renderLoadingDialog","createPortal","disableEscapeKeyDown","getElementById","toggleDocumentsAttachments","prevState","renderPrintDocuments","documentWindowMaximized","align","variant","xs","value","control","label","labelPlacement","renderCreatePDFButton","openAttachmentModal","closeAttachmentModal","renderDialog","ResponsiveDialog","useTheme","fullScreen","useMediaQuery","breakpoints","down","PaperProps","BackdropProps","onClose","name","src","renderPrintAttachments","pdfLink","hasName","hasLink","disabled","linkText","linkColor","linkIcon","fontStyle","target","startIcon","event","justify","setInitialMenuItemProperties","subMenuItem","removeNonPrintableDocuments","documents","removedIds","trim","parseInt","newChildren","allChildren","child","includes","newMenuItemIds","modelDocuments","menuConfig","menuConfigClone","JSON","parse","stringify","menuStructure","getNormalizedMenuState","getAllChapterInfo","idOffset","offsetChildren","offsetParents","offsetMenuItemIds","modelDoc","tocChapterLevels","chapterLevelsToShow","menuWithOffset","keyOffset","subDocId","updatedParent","alignContent","alignItems","marginRight","marginLeft","togglePrintWindow","wrap","direction","endIcon","withSnackbar","TableOfContents","constructor","super","titlesAndLevels","tocStructure","createTocStructure","setTitlesAndLevels","levelsToShow","indentationLevel","setChapterTitlesAndLevels","previousGroupHeader","menuDoc","jsonDoc","pageBreakAfter","gutterBottom","dense","splitAndTrimOnCommas","searchString","split","string","getStringArray","join","flattenChaptersTree","acc","chapterStrippedFromSubChapters","getAllChildrenIds","parentIds","normalizedItemList","n"],"sourceRoot":""}