{"version":3,"file":"896.4651539bf5432581.js","mappings":"+OACEA,oBAAyFA,yDAASA,qCAA4B,GAC5HA,gBAAMA,mDAAqHA,QAC3HA,oBAAUA,wBAAYA,SAAW,+BAD3BA,wPAMJA,iBAAsD,cACXA,8BAA2BA,QACpEA,mBAAuCA,SAAkCA,iCADhCA,qCACFA,4GAEzCA,iBAA8D,cACtBA,gBAAIA,QAC1CA,mBAAoCA,SAA0CA,iCAA1CA,yJAEtCA,iBAAgC,cACUA,8BAA0BA,QAClEA,mBAAsCA,8BAAwBA,iCADtBA,oCACFA,8DAExCA,iBAA8C,cACLA,8BAAyBA,QAChEA,mBAAqCA,SAA+BA,iCAD7BA,mCACFA,sEAEvCA,iBAAsC,cACMA,8BAAiCA,QAC3EA,mBAAwCA,SAAkBA,iCADhBA,2CACFA,yDAE1CA,iBAA+C,cACCA,8BAAgCA,QAC9EA,mBAA4CA,8BAAiEA,iCAD/DA,0CACFA,uGAxBhDA,8BAA8D,WACjCA,8BAA4BA,QACvDA,uBAIAA,uBAIAA,uBAIAA,uBAIAA,uBAIAA,uBAIAA,eACFA,8BA1B6BA,sCACrBA,yFAIAA,sIAIAA,gCAIAA,8CAIAA,sCAIAA,yEAMRA,4BAAoF,UAApFA,CAAoF,cAElCA,8BAAkCA,QAChFA,mBAA0CA,SAAgGA,QAC1IA,oBAA2BA,SAA4CA,UAEzEA,cACFA,8BALkDA,4CACJA,mHACfA,mFAI/BA,4BAAsF,UAAtFA,CAAsF,cAElCA,8BAAoCA,QACpFA,mBAA4CA,SAAoGA,QAChJA,oBAA2BA,SAA8CA,UAE3EA,cACFA,8BALoDA,8CACJA,uHACjBA,qFAI/BA,4BAAgC,UAAhCA,CAAgC,cAEaA,8BAA6BA,QACtEA,mBAAqCA,SAAoBA,QACzDA,oBAA2BA,SAAiBA,UAE9CA,cACFA,8BAL6CA,uCACJA,iCACVA,wDASzBA,oBAA6DA,SAAsBA,wCAAtBA,yEAF/DA,kBAAKA,sEAASA,2BAAyB,GACrCA,oBAAwCA,8BAA2CA,QACnFA,0BACAA,kBACFA,oCAH0CA,8CAChCA,wDAJZA,iBAA0C,aACXA,8BAAgCA,QAC7DA,wBAKFA,8BAN+BA,0CAC+DA,uCC9C7F,IAAMC,EAA0B,MAAjC,MAAOA,EAaXC,cARUC,kCAA+B,IAAIC,MAE7CD,eAAY,IAAIE,KAMM,CAEtBC,WACMH,KAAKI,iBACHJ,KAAKI,eAAeC,QAAQC,0BAAyBN,KAAKO,MAAQP,KAAKI,eAAeC,OAAOC,wBAAwBE,KAAKC,GAAKA,EAAEC,aACrIV,KAAKW,aAAeX,KAAKY,gBAAgBC,KACrCb,KAAKI,eAAeC,QAAQS,UAC9Bd,KAAKe,UAASC,MACZhB,KAAKI,eAAea,YACpBjB,KAAKI,eAAec,kBACpBlB,KAAKI,eAAee,eAAeN,KACnCb,KAAKI,eAAeC,OAAOS,QAAQM,OAI3C,CAEAC,cACMrB,KAAKI,iBACPJ,KAAKsB,UACHtB,KAAKI,eAAeC,QAAQiB,WACxBC,OACAC,GACEA,EAAIC,aACJD,EAAIE,mBAAqBC,QACzBH,EAAIE,mBAAqBC,UACzBH,EAAIE,mBAAqBC,cAE5BC,WAAa,GAIhB5B,KAAKsB,UAHFtB,KAAK6B,kBAGS7B,KAAK8B,4BAA4B9B,KAAKsB,UAAWK,gBAFjD3B,KAAKsB,UAAUC,OAAOC,GAAOA,EAAIE,mBAAqBC,gBAIzE3B,KAAKsB,aAAYS,MAAe/B,KAAKsB,WAEzC,CAEAQ,4BAA4BR,EAA+BI,GACzD,OAAOJ,EAAUU,KAAKR,GAAQA,EAAIE,mBAAqBA,GAAmB,EAAK,EACjF,CAEAO,6BACEjC,KAAKkC,6BAA6BC,MACpC,CAEAC,aAAaC,GACX,MAAMC,EAActC,KAAKsB,UAAUd,KAAKgB,GAAOA,EAAIa,IAAMA,IAAKC,YAC9DC,OAAOC,KAAKF,EAAa,SAC3B,EA9DWxC,SAA0B,oCAA1BA,EAA0B,EAA1BA,EAA0B,sBAA1BA,EAA0B2C,+lDDfvC5C,iBACEA,0BAIAA,sBACEA,qCA4BAA,qCAQAA,qCAQAA,qCAQAA,4BACEA,uBAQFA,mBAlEOA,2CAKYA,wCA4BAA,mFAQAA,qFAQAA,+BASXA,mr+JC5CCC,CAA0B,wECRhC,IAAM4C,EAAkB,MAAzB,MAAOA,EAJb3C,cAMEC,WAAQ,GAERG,WAqBEH,KAAK2C,MApB6D,CAChE,CAAChB,WAAqB,gBACtB,CAACA,SAAmB,cACpB,CAACA,UAAoB,eACrB,CAACA,SAAmB,cACpB,CAACA,aAAuB,kBACxB,CAACA,iBAA2B,sBAC5B,CAACA,iBAA2B,sBAC5B,CAACA,aAAuB,cACxB,CAACA,WAAqB,gBACtB,CAACA,UAAoB,eACrB,CAACA,UAAoB,eACrB,CAACA,WAAqB,gBACtB,CAACA,cAAwB,mBACzB,CAACA,eAAyB,oBAC1B,CAACA,eAAyB,oBAC1B,CAACA,eAAyB,oBAC1B,CAACA,eAAyB,qBAGI3B,KAAK4C,eAAiB,EACxD,EA1BWF,SAAkB,oCAAlBA,EAAkB,EAAlBA,EAAkB,sBAAlBA,EAAkBD,4JCP/B5C,gBAAmCA,8BAAuBA,eAAvBA,2EDOtB6C,CAAkB,8FEP/B7C,iBAAuD,UAC/CA,8BAA2BA,QACjCA,gBAAMA,8BAA4CA,iBAD5CA,qCACAA,uDCID,IAAMgD,EAA0B,MAAjC,MAAOA,EAJb9C,cAKWC,qBAAiB,GADf6C,SAA0B,oCAA1BA,EAA0B,EAA1BA,EAA0B,sBAA1BA,EAA0BJ,qMDNvC5C,4BAAMA,2ECMOgD,CAA0B,qCCNhC,IAAKC,EAcX,aAdWA,QAAe,KACzBA,wBACAA,oBACAA,kCACAA,oCACAA,oCACAA,2BACAA,wBACAA,8BACAA,6BACAA,kBACAA,8BACAA,yCACAA,uCAbUA,EAAZ,IAAYA,GAcX,kRCXGjD,SACEA,kBAA+BA,8BAAgCA,QAC/DA,kBAAiB,WAAjBA,CAAiB,cAEqCA,8BAAoCA,QACtFA,mBAAkDA,UAAqBA,YAG7EA,8BAPiCA,0CAGuBA,8CACAA,yDAKtDA,kBAA+BA,8BAA4BA,eAA5BA,gEAezBA,yBACEA,SACFA,kCAFgDA,sBAC9CA,sDAGJA,qBACEA,8BACFA,eADEA,8EAuBAA,yBAA6EA,SAA+CA,kCAAlEA,iBAAmBA,0EAE/EA,qBACEA,8BACFA,eADEA,2EAEFA,qBAEEA,8BACFA,eADEA,qFAvBRA,kBAE+D,WAF/DA,CAE+D,cAEXA,8BAA4BA,QAC5EA,kBAAmC,qBAE/BA,8BACFA,YAGJA,kBAAiC,eACUA,gCAAgCA,QACzEA,6BACEA,wBACAA,mCACEA,iDACFA,QACAA,+BAGAA,+BAIFA,8CArBgDA,sCAG5CA,oDAKqCA,4CAE+BA,oCACNA,4CAC9BA,uDAEtBA,6JAITA,+YAQTA,kBAAyF,qBAErFA,8BACFA,iBADEA,wEAKJA,kBAAgF,WAAhFA,CAAgF,cAEnCA,8BAA6BA,QACtEA,4BACEA,oBACFA,mBAHyCA,+DAkBzCA,SACEA,oBAA4CA,8BAA4BA,QAC1EA,eAD8CA,8DAG5CA,oBAA4CA,8BAA8BA,eAA9BA,mEAK1CA,yBACEA,SACFA,kCAFsEA,iBACpEA,0EAGJA,qBACEA,8BACFA,eADEA,4EAEFA,qBACEA,8BACFA,eADEA,kFAlBNA,kBACEA,iCAGAA,4CAGAA,4BACEA,oBACAA,kCACEA,gDAGFA,QACAA,+BAGAA,gCAGFA,uDAnBeA,sEAAoD,cAOHA,oCACKA,4CAC9BA,8DAIzBA,iJAGAA,sSA1BlBA,kBAA6E,WAA7EA,CAA6E,cAGlCA,8BAA8BA,QACrEA,4BACEA,oBACFA,UAGFA,yBAsBFA,8BA5B2CA,wCAMnCA,8DA8BNA,SACEA,kBAA+BA,8BAAgCA,QACjEA,eADiCA,kEAG/BA,kBAA+BA,8BAAkCA,eAAlCA,oEAQ3BA,qBACEA,8BACFA,eADEA,4EASFA,qBACEA,8BACFA,eADEA,4EAWFA,qBACEA,8BACFA,eADEA,4EAEFA,qBACEA,8BACFA,eADEA,yEAgBFA,qBACEA,8BACFA,eADEA,4EAEFA,qBACEA,8BACFA,eADEA,2FA/DVA,kBAKEA,gCAGAA,4CAGAA,kBAA+B,WAA/BA,CAA+B,cAG0BA,8BAA6BA,QAClFA,4BACEA,qBACAA,gCAGFA,UAGFA,mBAAuD,eACPA,gCAA2BA,QACzEA,6BACEA,qBACAA,gCAGFA,YAGJA,mBAA+B,YAA/BA,CAA+B,eAG0BA,kBAAKA,QAC1DA,6BACEA,qBACAA,gCAGAA,gCAGFA,UAGFA,mBAAiC,eACqBA,gCAAyBA,QAC7EA,6BAAqC,eAQjCA,8DAAYA,gCAA2B,GAPzCA,QAQAA,gCAGAA,gCAGFA,aAAiB,oCA9DrBA,wEAEeA,sEAAoD,cASVA,+CAGvCA,+KAOgCA,uCAGhCA,wLAYAA,sKAGAA,mKAOsCA,qCAUtCA,sKAGAA,kMAyBdA,uBAAwCA,SAAwDA,kDAAxDA,sFACxCA,qBACEA,8BACFA,eADEA,+EAmBFA,uBAAwCA,SAAiEA,kDAAjEA,2FACxCA,qBACEA,8BACFA,eADEA,+EAmBFA,uBAAwCA,SAAmEA,kDAAnEA,4FACxCA,qBACEA,8BACFA,eADEA,+EA5DRA,kBAAwF,YACvDA,8BAA+BA,QAE9DA,kBAAmC,cACQA,8BAA2BA,QACpEA,4BACEA,0BAUAA,+BACAA,gCAGFA,UAIFA,mBAAuC,eACQA,gCAA6BA,QAC1EA,6BACEA,2BAUAA,+BACAA,gCAGFA,UAIFA,mBAAwC,eACQA,gCAA+BA,QAC7EA,6BACEA,2BAUAA,+BACAA,gCAGFA,kCA7D6BA,0CAGYA,sCAWrCA,+CACSA,mCACCA,wIAQ+BA,yCAUzCA,mDAESA,mCACCA,oJAQgCA,2CAU1CA,oDAESA,mCACCA,+KAQlBA,kBAAuE,qBAEnEA,8BACFA,iBADEA,uDClPR,MAAMkD,GAAgC,CAAC,GAAI,GAAI,GAAI,IAuB5C,IAAMC,IAAyBC,EAA/B,MAgDLlD,YACmBmD,EACAC,EACAC,EACAC,GAHArD,mBACAA,sBACAA,wBACAA,sBAlDVA,mBAAe,EACfA,eAAW,EAEVA,sBAAmB,IAAIC,MACvBD,qBAAkB,IAAIC,MAEhCD,oBAAiBsD,IACjBtD,aAAUuD,IAEVvD,sBAAmB,IACnBA,0BAAuB,IACvBA,2BAAwB,IAKxBA,qBAAkB,GAClBA,iBAAiC,GACjCA,4BAAyB,IAAIwD,IAC7BxD,mBAAgB,IAAIwD,IAGpBxD,sBAAmBA,KAAKkD,YAAYO,MAAM,CACxCC,SAAU,CAAC,GAAIC,eACfC,YAAa,CAAC,GAAID,eAClBE,MAAO,CAAC,GAAI,CAACF,cAAqBA,aAClCG,MAAO,CAAC,MAGV9D,UAAkBA,KAAKkD,YAAYO,MAAM,CACvCM,YAAa,CAAC,KAAMJ,eACpBK,YAAa,CAAC,MACdC,eAAgB,CAAC,MACjBC,UAAW,EAAC,GACZC,QAAS,CAAC,MACVC,MAAO,CAAC,MACRC,WAAY,CAAC,KAAMV,eACnBW,aAActE,KAAKuE,iBACnBC,QAAS,CAAC,KAAM,CAACb,cAAqBA,eAAqB3D,KAAKyE,oBAChEC,YAAa,CAAC,KAAM,CAACf,cAAqBA,eAAqB3D,KAAK2E,wBACpEC,aAAc,CAAC,KAAM,CAACjB,cAAqBA,eAAqB3D,KAAK6E,yBACrEC,eAAgB,EAAC,KAGF9E,mBAAgB,IAAI+E,IAOlC,CAEH5E,WACEH,KAAKgF,eAAiBhF,KAAKiF,SAAS9D,eAAeN,KACnDb,KAAKK,OAASL,KAAKiF,SAAS5E,OAExBL,KAAKkF,eAAclF,KAAKmF,gBAAkB,GAAGnF,KAAKiF,SAASG,YAAYpF,KAAKiF,SAASI,aAEpFrF,KAAKsF,SAIRtF,KAAKuF,KAAKC,WAHVxF,KAAKyF,qBACLzF,KAAK0F,yBAKP1F,KAAK2F,WACP,CAEAA,YA6CE,GA5CA3F,KAAKc,QAAUd,KAAKiF,SAAS5E,QAAQS,SAASM,KAC9CpB,KAAKc,SAAWd,KAAK4F,iBAAiB5F,KAAKc,SAGtCd,KAAKc,UACRd,KAAKc,QAAUyC,QACfvD,KAAKuE,iBAAiBiB,WAGxBxF,KAAK6F,cAAcC,IACjB9F,KAAKqD,eAAe0C,sBAAsBC,UAAUC,IAClDjG,KAAKkG,YAAcD,EAGfjG,KAAKgF,iBAAmB1B,iBAC1BtD,KAAKkG,YAAclG,KAAKkG,YAAY3E,OAAOT,GAAWA,EAAQM,OAASmC,SAAezC,EAAQM,OAASmC,UAGzG,MAAM4C,EAAYnG,KAAKkG,YAAY1F,KAAK4F,GAAQA,EAAKhF,OAASpB,KAAKc,SAAUuB,GAE7ErC,KAAKqG,iBAAiBlE,KAAKgE,GAC3BnG,KAAKuF,KAAKe,IAAI,gBAAgBC,SAASvG,KAAKc,QAAO,IAInDd,KAAKK,SACPL,KAAKuF,KAAKiB,WAAWxG,KAAKK,QAC1BL,KAAKuF,KAAKiB,WAAW,CACnBxC,cAAehE,KAAKK,OAAO4D,eAC3BI,WAAYrE,KAAKK,OAAOgE,cAI5BrE,KAAKuF,KAAKiB,WAAW,CACnBrC,QAASnE,KAAKiF,SAASd,SAAStD,KAChCuD,MAAOpE,KAAKiF,SAASb,OAAOvD,OAGzBb,KAAKK,QAAQ4D,eAGhBjE,KAAKuF,KAAKe,IAAI,mBAAmBG,SAFjCzG,KAAKuF,KAAKe,IAAI,mBAAmBd,UAK/BxF,KAAKK,QAAQC,wBAAyB,CACxC,MAAMoG,EAAiC1G,KAAKK,QAAQC,wBAAwBE,KAAKC,GAAKA,EAAEC,YACpFgG,GAAgC1G,KAAKuE,iBAAiBiC,WAAWE,EAA8B,CAEvG,CAEAC,YAAYC,GACV,OAAOA,GAAQ,GAAGA,EAAKxB,YAAYwB,EAAKvB,WAC1C,CAIAwB,oBAAoBC,GAClB,OAAQA,EAAMC,UAAY,IAAMD,EAAMC,SAAW,IAAOhE,GAA8BiE,SAASF,EAAMC,SACvG,CAEAE,yBAAyBH,GACvB,MAAMX,EAAYnG,KAAKkG,YAAY1F,KAAK4F,GAAQA,EAAKhF,OAAS0F,EAAMI,OAAQ7E,GAC5ErC,KAAKqG,iBAAiBlE,KAAKgE,EAC7B,CAEAV,qBAEEzF,KAAK6F,cAAcC,IACjB9F,KAAKuF,KACFe,IAAI,eACHa,aAAaC,QACbC,KAAIH,IAEAlH,KAAKsH,uBADHJ,GAASA,EAAMK,QAAU,EACGvH,KAAKoD,iBAAiBoE,8BAA8B,CAAEpC,SAAU8B,IAEhE,IAAI1D,IAEpC,MAAMiE,EAAoBzH,KAAKuF,KAAKe,IAAI,cACpCY,GAAO7E,GACToF,GAAmBC,kBAEnBD,GAAmBE,UAAU,CAC3BC,SAAS,GACV,IAIN5B,aAILhG,KAAK6F,cAAcC,IACjB9F,KAAKuF,KACFe,IAAI,mBACHa,aAAaC,QACbC,KAAIH,IACF,GAAIlH,KAAKgE,YAAa,CAElBhE,KAAK6H,cADHX,GAASA,EAAMK,QAAU,EACNvH,KAAKmD,eAAe2E,sCAAsC,CAAE1C,SAAU8B,IAEtE,IAAI1D,IAG3B,MAAMuE,EAAwB/H,KAAKuF,KAAKe,IAAI,kBACtC0B,EAAqBhI,KAAKuF,KAAKe,IAAI,gBACpCY,IAAUc,GAAoBd,OAAOa,GAAuBvC,UAC7D0B,GAAO7E,GACT0F,GAAuBL,mBAEvBK,GAAuBE,cAActE,eACrCoE,GAAuBJ,UAAU,CAC/BC,SAAS,IACV,KAKR5B,aAILhG,KAAK6F,cAAcC,IACjB9F,KAAKuF,KACFe,IAAI,gBACHa,aAAaC,QACbC,KAAIH,IACFlH,KAAKgE,YAAckD,EACnB,MAAMa,EAAwB/H,KAAKuF,KAAKe,IAAI,kBAC/B,GAATY,GACFa,GAAuBtB,SACa,MAAhCsB,GAAuBb,OACzBa,GAAuBJ,UAAU,CAC/BC,SAAS,KAGbG,GAAuBvC,SAAO,IAInCQ,aAILhG,KAAK6F,cAAcC,IACjB9F,KAAKuF,KAAKe,IAAI,gBAAgBa,aAAanB,UAAUkB,IACnDlH,KAAKc,QAAUoG,EACflH,KAAKc,SAAWd,KAAK4F,iBAAiB5F,KAAKc,QAAO,GAGxD,CAEA8E,iBAAiB7B,GACf,OAAQA,GACN,KAAKR,QACL,KAAKA,QACHvD,KAAKuE,iBAAiBiB,UACtBxF,KAAKkI,6BACL,MACF,KAAK3E,OACHvD,KAAKuE,iBAAiBkC,SACtBzG,KAAKkI,6BACL,MACF,KAAK3E,QACL,KAAKA,QACHvD,KAAKuE,iBAAiBiB,UACtBxF,KAAKmI,iBAGTnI,KAAKuF,KAAKe,IAAI,gBAAgB8B,eAChC,CAEAF,6BAC6C,GAAvClI,KAAKuF,KAAKe,IAAI,gBAAgBY,MAChClH,KAAKqI,cAAc,kBAEnBrI,KAAKmI,gBAET,CAEAE,cAAcC,GACQtI,KAAKuF,KAAKe,IAAIgC,IACrB7B,QACf,CAEA0B,iBACEnI,KAAKuF,KAAKe,IAAI,mBAAmBd,UACjCxF,KAAKuF,KAAKe,IAAI,mBAAmBC,SAAS,MAC1CvG,KAAKuF,KAAKe,IAAI,gBAAgBC,UAAS,EACzC,CAEAb,wBACE1F,KAAK6F,cAAcC,IACjB9F,KAAKuF,KAAK4B,aAAanB,UAAUuC,IAE/BA,EAAOpC,UAAYnG,KAAKkG,YAAY1F,KAAK4F,GAAQA,EAAKhF,OAASmH,EAAOxE,cAAc1B,IAAM,KAE1FrC,KAAKwI,gBAAgBrG,KAAK,CAAEoG,SAAQE,QAASzI,KAAKuF,KAAKmD,OAAO,GAGpE,wCA/QW1F,GAAyB2F,uEAAzB3F,EAAyBP,mpID1CtC5C,kBAAmD,WAG/CA,iCASAA,0CAKAA,iBAAmC,UAAnCA,CAAmC,aAEUA,8BAAgCA,QACzEA,6BAAqC,mBAOjCA,2CAAmB+I,6BAAgC,GACnD/I,+BAGFA,QACAA,+BAGFA,YAKJA,2BA8BAA,yBAOAA,yBAUAA,yBAkCAA,4BAuEAA,4BAmEAA,0BAKFA,iCAxQ8BA,0BAGbA,sCAAoB,cAgBUA,2CASLA,wCAItBA,wIASfA,qHA6BGA,+DAOAA,gFAUAA,+DAoCHA,yFAqEGA,+DAmEAA,81/JCzNGmD,KAAyB6F,UADrCC,QACY9F,6HCrCXnD,iBAAyE,WAErEA,8BACFA,QACAA,iBAAiB,WACRA,gBAAIA,QACXA,gBAAMA,yBAAiDA,UAEzDA,kBAAiB,YACRA,gCAAwBA,QAC/BA,iBAAMA,UAA2BA,UAEnCA,kBAAiB,YACRA,gCAAyBA,QAChCA,iBAAMA,UAA+BA,UAEvCA,kBAAiB,YACRA,gCAA0BA,QACjCA,iBAAMA,gCAA0BA,UAElCA,kBAAiB,YACRA,gCAAsCA,QAC7CA,iBAAMA,UAA+BA,UAEvCA,kBAAiB,YACRA,mBAAMA,QACbA,iBAAMA,UAAgFA,UAExFA,kBAAiB,YACRA,mBAAMA,QACbA,iBAAMA,UAAoFA,kCA5B1FA,sDAIMA,yFAGCA,oCACDA,gEAGCA,qCACDA,+FAGCA,sCACDA,wCAGCA,kDACDA,oEAIAA,iNAIAA,0NC1BL,IAAMkJ,EAA+B,MAAtC,MAAOA,EALbhJ,cAOEC,cAAU,EAGVG,WACEH,KAAKgJ,iBACP,CAEAA,kBACE,OAAQhJ,KAAKiJ,aAAaC,UACxB,KAAKC,aACHnJ,KAAKkJ,SAAW,WAChB,MACF,KAAKC,WACHnJ,KAAKkJ,SAAW,SAChB,MACF,KAAKC,aACHnJ,KAAKkJ,SAAW,WAEtB,CAEAE,sBACEpJ,KAAKqJ,SAAWrJ,KAAKqJ,OACvB,EAxBWN,SAA+B,oCAA/BA,EAA+B,EAA/BA,EAA+B,sBAA/BA,EAA+BtG,2ZDT5C5C,iBAAyC,cACuCA,gCAAS+I,uBAAqB,GAC1G/I,sBAA6BA,iBAAKA,QAClCA,gBAAMA,8BAA6BA,UAErCA,yBAiCFA,eArCUA,0CAEAA,uCAEFA,wnCCIKkJ,CAA+B,2cCR1ClJ,iBAA0D,QACpDA,8BAAqCA,gCAArCA,2EAKFA,gDAQEA,sCAAgC,+BAAhCA,CAAgC,wCAM5BA,qBACEA,8BACFA,eADEA,oFAFJA,kBACEA,+BAGFA,+BAHcA,6HAiBNA,iBAA6DA,8BAAwBA,eAAxBA,4EAUzDA,8BAGEA,wFAAmBA,6BAA2B,GAAEA,aADhDA,yDASFA,gBAAsDA,SAAmBA,yCAAnBA,iEACtDA,oBAOEA,6DAAWA,qBAAiB,GAP9BA,2CAMEA,8CACgCA,gBAAmCA,eAAGA,mCAT1EA,iBACEA,0BACAA,2BAOkCA,0BACpCA,mDATSA,wDAGJA,uEAKsCA,+EA1B7CA,cAA6C,WACZA,yBAA8CA,QAC7EA,iBACEA,kBACAA,SACFA,QACAA,iBACEA,qCAIFA,QACAA,cAAI,aAAJA,CAAI,yBAEqDA,gFAAmBA,wBAAsB,GAAGA,YAGrGA,yBAWFA,+CA3BiCA,oDAG7BA,+BAIGA,8GAMgBA,kCAAmB,eAGnCA,kFAeXA,iCAMEA,sEAAoBA,2BAAuB,EAA3CA,CAA4C,gEACxBA,0BAAsB,GAC5CA,iCANEA,2BAAuB,gBAAvBA,CAAuB,8BAAvBA,CAAuB,iDAY3BA,qBACEA,8BACFA,eADEA,oFAEFA,6BACEA,+CAQFA,eADIA,8EAMAA,2CAMIA,mBAA4CA,8BAAkCA,wCAAlCA,gFAI5CA,kBAA+F,wBAClCA,yFAAmBA,4BAAyB,GAAEA,SAAkB,OAA1GA,8BAAe,mDAFpCA,cACEA,yBAGFA,+BAHQA,8GARZA,iBAAwC,OAAxCA,CAAwC,WAGlCA,SACAA,0BACFA,QACAA,iBAAsDA,yBAA6CA,QACnGA,uBAKFA,QACAA,cAAI,YAC8DA,UAAoBA,iDAXlFA,yEACOA,kCAE6CA,oDACjDA,gFAO2DA,mDAlH9EA,iBACEA,gCAWAA,kBAAmC,YAE/BA,yBAKAA,kBAAiC,WAAjCA,CAAiC,aAAjCA,CAAiC,UAAjCA,CAAiC,WAKCA,sBAASA,QAEnCA,eAAS,WAATA,CAAS,YAMTA,yBACFA,QACAA,kBACEA,0BA6BFA,UAGFA,yCASFA,UAGFA,mBAAoC,cACNA,gCAA4BA,QACxDA,gCAGAA,qCAUAA,qBAAwB,YAEpBA,kBAA+B,SAE/BA,yBACFA,QACAA,4BAiBFA,sCAnHHA,yNAUGA,6CAEIA,wCAkBOA,yCAGoBA,4CAiC1BA,oEAYuBA,wCAChBA,+IAGKA,8EAcRA,yDAEoBA,8EAyBrCA,kBACEA,6BACFA,QACAA,kBAA4B,WAA5BA,CAA4B,WAEjBA,8BAA2BA,QAClCA,iBAAOA,+CAAmEA,UAE5EA,mBAAgC,4BAK5BA,qEAAoBA,2BAAuB,EAA3CA,CAA4C,+DACxBA,0BAAsB,GAC5CA,WAAqB,yBAdPA,8CAIPA,qCACAA,yFAILA,gCAAoB,8BAApBA,CAAoB,kEAexBA,yBAAoFA,oEAAmBA,iBAAQ,wBAAEA,cAA7DA,gCAAjBA,6DACnCA,yBAKEA,oEAAmBA,iBAAQ,wBAAEA,iCAD7BA,qCAHAA,6CAA6C,iFAJnDA,kBAAmF,YAE/EA,+BACAA,+BAMAA,yBAIEA,mEAAmBA,oBAAW,wBAAEA,WAAa,yBAXlCA,wCAIVA,yDAIDA,0CACAA,kEAA0D,8DC3H3D,IAAMyJ,KAAoBrG,EAA1B,MA6CLlD,YACUwJ,EACAC,EACAC,EACAC,EACAC,EACAzG,EACD0G,EACCC,GACAC,GACAC,GACAC,GACAC,GACAC,IAZAlK,4BACAA,oBACAA,6BACAA,oBACAA,wBACAA,mBACDA,iBACCA,4BACAA,0BACAA,0BACAA,uBACAA,iBACAA,cAtDDA,oBAAyB,EAEfA,sBAAmB,IAAIC,MACvBD,qBAAkB,IAAIC,MACtBD,4BAAyB,IAAIC,MAMhDD,oBAAiBmK,IAEjBnK,6BAA0B,IAAI+E,KAW9B/E,+BAA2B,EAC3BA,wBAAoB,EACpBA,2BAAuB,EACvBA,gBAAY,EACZA,oBAAgB,EAChBA,2BAAuB,EACvBA,oBAAgB,EAChBA,0BAAsB,EACtBA,qBAAiB,EACjBA,wBAAoB,CAuBjB,CAEHG,WACEH,KAAKoK,wBAAwBtE,IAC3B9F,KAAKkK,MAAMG,KAAKrE,UAAUkB,IACxBlH,KAAKsK,eAAiBpD,EAAMoD,iBAAkB,KAKlDtK,KAAKuK,eAAiBvK,KAAKkD,YAAYO,MAAM,IAGxCzD,KAAKsK,gBAmBRtK,KAAKoK,wBAAwBtE,IAC3B9F,KAAKyJ,sBAAsBe,OAAOC,MAAmCzE,UAAU0E,IACzEA,IACF1K,KAAK2K,oBAAsBD,EAAOrG,YAAYhC,IAAM,GACpDrC,KAAK4K,gBAAkBF,EAAOpJ,UAAUC,OAAOC,GAAOA,EAAIE,kBAAoB1B,KAAK4C,cACnF5C,KAAK6K,cAAgBH,EACjB1K,KAAK6K,cAAc/J,UAASd,KAAK8K,0BAA4B9K,KAAK6K,cAAc/J,QAAQM,MACxFsJ,EAAOK,eACT/K,KAAKI,eAAiBsK,EAAOK,aAC7B/K,KAAKgL,mBAAqBN,EAAOK,aAAa9J,YAC9CjB,KAAKkB,kBAAoBlB,KAAKI,eAAec,uBAMrDlB,KAAKuK,eAAiBvK,KAAKkD,YAAYO,MAAM,CAC3CwH,gBAAiB,CAAC,MAClBC,OAAQ,CAAC,MACTC,KAAM,CAACnL,KAAK4K,gBAAgBpK,KAAKC,IAAMA,EAAE2K,aAAaD,KAAM,CAACxH,SAAe,QAG1E3D,KAAK4K,iBAAiBrD,OAAS,IAAGvH,KAAK4K,mBAAkB7I,MAAe/B,KAAK4K,kBAC7E5K,KAAKI,eAAee,eAAeN,OAASyC,QAC9CtD,KAAKqL,cAAgBrL,KAAKsL,mCAE1BtL,KAAKqL,eAAgB,EACrBrL,KAAKuL,qBAGPvL,KAAKwL,mBAAqBxL,KAAKyL,aAC3BzL,KAAK6K,cAAc/J,SAASM,MAAQmC,UACtCvD,KAAKuK,eAAejE,IAAI,SAAS2B,cAActE,eAC/C3D,KAAK0L,0BAA4B,CAC/BC,WAAY3L,KAAK4K,gBAAgBpK,KAAKC,IAAMA,EAAE2K,aAAa/I,IAAM,GACjEO,aAAc5C,KAAK4C,aACnBuI,KAAM,KACNS,eAAgB5L,KAAKuK,eAAesB,SAASV,KAAKzC,OAEpD1I,KAAK8L,mBAzDP9L,KAAKoK,wBAAwBtE,IAC3B9F,KAAKwJ,aAAagB,OAAOuB,MAA2B/F,UAAU0E,IACxDA,IACF1K,KAAKI,eAAiBsK,EACtB1K,KAAKgL,mBAAqBhL,KAAKI,eAAea,YAC9CjB,KAAKkB,kBAAoBlB,KAAKI,eAAec,kBAC7ClB,KAAKgM,iBAAmBhM,KAAKI,eAAe4L,kBAAoB,GAC5DhM,KAAKI,eAAeC,QAAQiB,YAC9BtB,KAAKiM,iBAAmBjM,KAAKkM,gBAAgBlM,KAAKI,eAAeC,OAAOiB,WACxEtB,KAAK4K,gBAAkB5K,KAAKI,eAAeC,OAAOiB,UAAUC,OAAOC,GAAOA,EAAIE,kBAAoB1B,KAAK4C,cACvG5C,KAAKmM,4BAAwB,IAKrCnM,KAAKqL,cAAgBrL,KAAKoM,yBA+C5BpM,KAAKqM,gBAELrM,KAAKoK,wBAAwBtE,IAAI9F,KAAK+J,kBAAkBuC,cAActM,KAAKuM,kBAEvEvM,KAAKsK,iBAAgBtK,KAAKwM,gBAAkBxM,KAAKyM,mBAErDzM,KAAK0M,cACL1M,KAAK2M,qBAAuB3M,KAAK4M,8BACnC,CAEAd,gBACE9L,KAAKoK,wBAAwBtE,IAC3B+G,OAAOC,KAAK9M,KAAKuK,eAAesB,UAAUkB,QAAQC,IACrC,UAAPA,GACoBhN,KAAKuK,eAAesB,SAASmB,GACrC7F,aAAanB,UAAUkB,IACnClH,KAAK0L,0BAA4B,IAC5B1L,KAAK0L,0BACRuB,QAAS/F,EACT0E,eAAgB5L,KAAKuK,eAAesB,SAASV,KAAKzC,OAEpD1I,KAAKkN,uBAAuB/K,KAAKnC,KAAK0L,0BAAyB,GAGxD,QAAPsB,GACkBhN,KAAKuK,eAAesB,SAASmB,GACrC7F,aAAanB,UAAUkB,IACjClH,KAAK0L,0BAA4B,IAC5B1L,KAAK0L,0BACRP,KAAMjE,EACN0E,eAAgB5L,KAAKuK,eAAesB,SAASV,KAAKzC,OAEpD1I,KAAKkN,uBAAuB/K,KAAKnC,KAAK0L,0BAAyB,EAChE,GAIT,CAEAgB,cACM1M,KAAKI,eAAeC,QAAUL,KAAKiB,aAOrCjB,KAAKgK,eAAemD,aAAa,CAAEC,KANI,CACrCC,SAAUrN,KAAKI,eAAeC,OAAOgC,GACrCiL,WAAYtN,KAAKiB,YACjBsM,YAAavN,KAAK4C,cAAgBjB,gBAA2B3B,KAAK4C,cAAgBjB,YAAuB3B,KAAK4C,aAAe,QAGpEoD,UAAU0E,IACnE1K,KAAKwN,SAAW9C,EACZ1K,KAAKwN,UAAUjG,OAAS,IAAGvH,KAAKwN,YAAWzL,MAAe/B,KAAKwN,UAAQ,EAGjF,CAGAlC,kCACE,OAAOtL,KAAKuL,qBAAuBvL,KAAK4C,eAAiBjB,gBAA2B3B,KAAK4C,eAAiBjB,WAC5G,CAEA4J,oBACE,YAAKkC,kBAAoBzN,KAAK4K,gBAAgB8C,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAC3EzB,KAAKyN,iBACd,CAGArB,wBACE,MAAMuB,EAAO3N,KAAKgL,mBACZ4C,EAAa5N,KAAKkB,kBAClBC,EAAiBnB,KAAKI,eAAee,eACrC4C,EAAc/D,KAAKI,eAAeC,QAAQS,SAASM,KACzD,GAAID,EAAeN,OAASyC,eAC1B,GAAc,IAATqK,GAAc5J,IAAgBR,UAA2B,IAAToK,GAAuB,IAATA,IAAe5J,IAAgBR,QAChG,OAAOqK,IAAezD,aAA0ByD,IAAezD,mBAE5D,IAAIhJ,EAAeN,OAASyC,QACjC,OAAOsK,IAAezD,aAA0ByD,IAAezD,eAC1D,GAAIhJ,EAAeN,OAASyC,gBACpB,IAATqK,EACF,OAAOC,IAAezD,aAA0ByD,IAAezD,eAGnE,OAAO,CACT,CAGAyC,+BACE,MAAMe,EAAO3N,KAAKiB,YAEZ4M,EAAc7N,KAAKgL,mBACnB7J,EAAiBnB,KAAKI,eAAee,eAO3C,OAJGA,EAAeN,OAASyC,eAA4BqK,IAASE,GAC7D1M,EAAeN,OAASyC,gBAA6BqK,IAASE,GAC9D1M,EAAeN,OAASyC,SAAsBqK,IAASE,IAPvC7N,KAAKkB,oBAS2BiJ,cAA2BnK,KAAKyL,YACrF,CAEAY,gBACE,OAAQrM,KAAK4C,cACX,KAAKjB,eACH3B,KAAK8N,SAAWC,cAChB/N,KAAKgO,oBAAsB,wBAC3BhO,KAAKuM,gBAAkBvM,KAAKiO,qBAC5BjO,KAAKkO,gBAAiB,EACtB,MACF,KAAKvM,YACH3B,KAAK8N,SAAWC,cAChB/N,KAAKgO,oBAAsB,oBAC3BhO,KAAKkO,gBAAiB,EACtB,MACF,KAAKvM,UACH3B,KAAK8N,SAAWC,UAChB/N,KAAKgO,oBAAsB,kBAC3BhO,KAAKuM,gBAAkB,QACvBvM,KAAKmO,WAAa,sBAClBnO,KAAKkO,eAAiBlO,KAAKsK,gBAAsC,GAApBtK,KAAKiB,YAClD,MACF,KAAKU,SACH3B,KAAK8N,SAAWC,SAChB/N,KAAKgO,oBAAsB,iBAC3BhO,KAAKuM,gBAAkBvM,KAAKiO,qBAC5B,MACF,KAAKtM,UACH3B,KAAK8N,SAAWC,UAChB/N,KAAKgO,oBAAsB,kBAC3BhO,KAAKuM,gBAAkBvM,KAAKgO,oBAC5BhO,KAAKmO,WAAa,sBAClB,MACF,KAAKxM,SACH3B,KAAK8N,SAAWC,SAChB/N,KAAKgO,oBAAsB,iBAC3BhO,KAAKuM,gBAAkBvM,KAAKgO,oBAC5BhO,KAAKmO,WAAa,qBAClB,MACF,KAAKxM,gBACH3B,KAAKgO,oBAAsB,wBAC3BhO,KAAKuM,gBAAkBvM,KAAKgO,oBAC5BhO,KAAKmO,WAAa,4BAClB,MACF,KAAKxM,gBACH3B,KAAK8N,SAAWC,iBAChB/N,KAAKgO,oBAAsB,wBAC3BhO,KAAKuM,gBAAkBvM,KAAKgO,oBAC5BhO,KAAKmO,WAAa,4BAClB,MACF,KAAKxM,SACH3B,KAAKuM,gBAAkBvM,KAAKiO,qBAI5BjO,KAAKI,eAAee,eAAeN,OAASyC,iBAC1CtD,KAAK8N,WAAaC,UACpB/N,KAAK8N,SAAWC,qBACP/N,KAAK8N,WAAaC,YAC3B/N,KAAK8N,SAAWC,sBAGtB,CAEAE,qBACE,GAAIjO,KAAKI,eAAee,eAAeN,OAASyC,cAC9C,OAAQtD,KAAK8K,2BACX,KAAKvH,QACL,KAAKA,OACH,MAAO,aACT,KAAKA,QACH,MAAO,oBACT,KAAKA,QACH,MAAO,UACT,KAAKA,QACH,MAAO,UAGb,GAAIvD,KAAKI,eAAee,eAAeN,OAASyC,eAC9C,OAAQtD,KAAK8K,2BACX,KAAKvH,QACL,KAAKA,OACH,MAAO,aACT,KAAKA,QACH,MAAO,cAGb,OAAIvD,KAAKI,eAAee,eAAeN,OAASyC,QACvCtD,KAAKgO,oBAGP,EACT,CAGA9B,gBAAgB5K,GACd,MAAMuM,EAAc7N,KAAKgL,mBACnB7J,EAAiBnB,KAAKI,eAAee,eACrC4C,EAAc/D,KAAKI,eAAeC,QAAQS,SAASM,KAEzD,GAAID,EAAeN,OAASyC,cAA0B,CACpD,GAAoB,IAAhBuK,GAAqB9J,IAAgBR,QACvC,OAAOjC,EAAUC,OAAOC,GAAOA,EAAIE,mBAAqBC,WACnD,GAAoB,IAAhBkM,GAAqB9J,IAAgBR,QAAa,CAC3D,MAAM6K,EAAgB,CAACzM,YAAsBA,SAAmBA,QAAkBA,SAAkB0M,WACpG,OAAO/M,EAAUC,OAAOC,GAAO4M,EAAcpH,SAASxF,EAAIE,kBAAiB,IAClD,IAAhBmM,GAAqB9J,IAAgBR,QAAa,CAC3D,MAAM6K,EAAgB,CAACzM,SAAmBA,QAAkBA,SAAkB0M,WAC9E,OAAO/M,EAAUC,OAAOC,GAAO4M,EAAcpH,SAASxF,EAAIE,kBAAiB,CACtE,GAAoB,IAAhBmM,GAAqB9J,IAAgBR,QAC9C,OAAOjC,EAAUC,OAAOC,GAAOA,EAAIE,mBAAqBC,iBACnD,GAAoB,IAAhBkM,GAAqB9J,IAAgBR,QAC9C,OAAOjC,EAAUC,OAAOC,GAAOA,EAAIE,mBAAqBC,gBAAwB,CAIpF,GAAIR,EAAeN,OAASyC,eAA2B,CACrD,GAAoB,IAAhBuK,EACF,OAAOvM,EAAUC,OAAOC,GAAOA,EAAIE,mBAAqBC,WACnD,GAAoB,IAAhBkM,GAAqB9J,IAAgBR,QAAa,CAC3D,MAAM6K,EAAgB,CAACzM,SAAmBA,QAAkBA,SAAkB0M,WAC9E,OAAO/M,EAAUC,OAAOC,GAAO4M,EAAcpH,SAASxF,EAAIE,kBAAiB,IAClD,IAAhBmM,GAAqB9J,IAAgBR,QAAa,CAC3D,MAAM6K,EAAgB,CAACzM,SAAmBA,UAAoBA,cAAwBA,cAAwBA,eAAwB0M,WACtI,OAAO/M,EAAUC,OAAOC,GAAO4M,EAAcpH,SAASxF,EAAIE,kBAAiB,EAI/E,OAAOJ,EAAUC,OAAOC,GAAOA,EAAIE,mBAAqBC,UAC1D,CAGAwK,2BACE,MAAMlH,EAAUjF,KAAKI,eACfuN,EAAO3N,KAAKgL,mBACZ1J,EAAYtB,KAAK4K,gBACjB7G,EAAckB,EAAQ5E,QAAQS,SAASM,KAEzC6D,EAAQ9D,eAAeN,OAASyC,cAErB,IAATqK,GAAc5J,IAAgBR,QAChCvD,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,WAC7F,IAATgM,GAAc5J,IAAgBR,QACvCvD,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,iBAC7F,IAATgM,GAAc5J,IAAgBR,UACvCvD,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,kBAExGsD,EAAQ9D,eAAeN,OAASyC,QAE5B,IAATqK,EACF3N,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,UAC7F,IAATgM,EACT3N,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,WAC7F,IAATgM,IACT3N,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,WAExGsD,EAAQ9D,eAAeN,OAASyC,gBAE5B,IAATqK,IACF3N,KAAKwL,kBAAoBlK,EAAUoM,KAAKlM,IAAQA,EAAI4J,aAAe5J,EAAIC,aAAeD,EAAIE,mBAAqBC,WAGrH,CAEA2M,qBAAqBC,EAAgBC,GACnC,MAAMC,EAAQF,EAAS1N,MAAM6N,YAAY,KACnCC,EAAYJ,EAAS1N,MAAM+N,MAAMH,GACvC,MAAO,GAAGF,EAAS1N,MAAM+N,MAAM,EAAGH,OAAWD,EAAkB,IAAIG,GACrE,CAEAE,gBAAgBC,GACd9O,KAAK+O,WAAY,EACjB,MAAM1B,EAAWrN,KAAKI,eAAeC,QAAQgC,GACvC0B,EAAc/D,KAAKI,eAAeC,QAAQS,SAASM,KACrDiM,GAAYtJ,GACd+K,EAAkB/B,QAAQwB,IACxB,MAAM1N,EAAOb,KAAKsO,qBAAqBC,EAAUvO,KAAK4K,gBAAgBrD,QAChEyH,EAAU,CACdC,aAAc,IAAIC,KAAK,CAACX,GAAW1N,EAAM,CAAEsO,KAAMZ,EAASY,OAC1DC,SAAU/B,EACVgC,iBAAkBrP,KAAK4C,aACvB0M,mBAAoBtP,KAAKI,eAAee,eAAeN,KACvD0O,YAAaxL,GAGf/D,KAAK2J,iBACF6F,oBAAoB,CAAEpC,KAAM4B,IAC5B5H,QACCC,KAAKqD,IACCA,EAAOrI,KACTrC,KAAK4K,gBAAkB,CAACF,KAAW1K,KAAK4K,iBACpC5K,KAAK4K,iBAAiBrD,OAAS,IAAGvH,KAAK4K,mBAAkB7I,MAAe/B,KAAK4K,kBACjF5K,KAAK+O,WAAY,EACjB/O,KAAKmM,2BAAwB,IAEhC,EACDsD,KAAI,KACEzP,KAAK0P,4BACP1P,KAAK2P,iBAAiBxN,KAAKnC,KAAK4K,gBAAe,IAIpD5E,WAAS,EAGlB,CAEA4J,eAAevN,GACbrC,KAAK+O,WAAY,EACjB/O,KAAK2J,iBACFkG,oBAAoB,CAAElE,WAAYtJ,IAClC+E,QACCC,KAAIqD,IACEA,IACF1K,KAAK4K,gBAAkB,IAAI5K,KAAK4K,gBAAgBrJ,OAAOC,GAAOA,EAAIa,IAAMA,IACxErC,KAAK+O,WAAY,EACjB/O,KAAKwL,mBAAoB,MAE5B,EACDiE,KAAI,KACEzP,KAAK0P,4BACP1P,KAAK8P,gBAAgB3N,KAAKE,EAAE,IAIjC2D,WACL,CAEA0J,2BACE,MAAM/B,EAAO3N,KAAKgL,mBACZ7J,EAAiBnB,KAAKI,eAAee,eACrC4C,EAAc/D,KAAKI,eAAeC,QAAQS,SAASM,KAEzD,GAAID,EAAeN,OAASyC,QAAoB,OAAO,EACvD,GAAInC,EAAeN,OAASyC,eAC1B,GAAa,IAATqK,GAAwB,IAATA,GAAc5J,IAAgBR,SAA0B,IAAToK,GAAc5J,IAAgBR,QAC9F,OAAO,UAEApC,EAAeN,OAASyC,iBACpB,IAATqK,GAAuB,IAATA,GAChB,OAAO,EAIX,OAAO,CACT,CAGAoC,SACM/P,KAAKsK,iBACFtK,KAAKuK,eAAesB,SAASX,OAAOhE,MAMrBlH,KAAK4J,UAAUpH,KAAKwN,IAAiBhQ,KAAKwM,iBAClDyD,cAAcjK,UAAUkK,IAChC,GAAiB,GAAbA,EAAoB,CACtBlQ,KAAKmQ,0BAA2B,EAChC,MAAMnB,EAA2C,CAC/CoB,cAAepQ,KAAK6K,cAAcE,cAAcqF,eAAiB,GACjEpE,iBAAkBkE,EAAUG,eAC5B5O,aAAa,EACb6O,SAAUC,eACVC,aAAcxQ,KAAK4C,aACnBzB,eAAgBnB,KAAK6K,cAAcE,cAAc5J,eAAeN,MAAQ,GACxE4P,oBAAqBzQ,KAAK2K,oBAC1BsC,QAASjN,KAAKuK,eAAesB,SAASX,OAAOhE,MAAMwJ,OACnD/E,WAAY3L,KAAK4K,gBAAgBpK,KAAKgB,IAAQA,EAAI4J,aAAe5J,EAAIC,cAAcY,IAAM,IAG3FrC,KAAK8J,kBAAkB6G,4BAA4B,CAAEvD,KAAM4B,IAAWhJ,UAAU0E,IAC1EA,GACF1K,KAAK6J,oBACF+G,QAAQ,kBACRC,iBACA7K,UAAU,KACThG,KAAKmQ,0BAA2B,EAChCnQ,KAAKiK,SAAS6G,MAAI,EACnB,EAEN,KA/BL9Q,KAAKuK,eAAesB,SAASX,OAAOvD,UAAU,CAC5CoJ,UAAU,IAEZ/Q,KAAKuK,eAAesB,SAASX,OAAO9C,iBAiC1C,CAEA4I,aAEOhR,KAAKsK,gBAAkBtK,KAAKiR,+BAAiCjR,KAAKI,eAAegQ,eACpFpQ,KAAK0J,aACFwH,gBAAgB,CACfC,OAAQnR,KAAKI,eAAegQ,cAC5BhD,KAAM,CACJQ,WAAYzD,4BAGfnE,UAAU0E,IACT1K,KAAKoR,gBAAkB1G,EACvB1K,KAAKuJ,qBAAqB8H,2CAA2CrR,KAAKI,eAAgBsK,EAAM,GAKlG1K,KAAKsK,iBACPtK,KAAKuK,eAAesB,SAASX,OAAOvD,UAAU,MAC1C3H,KAAKkO,iBAAmBlO,KAAKuK,eAAesB,SAASV,KAAKjE,OAC5DlH,KAAKuK,eAAesB,SAASV,KAAKxD,UAAU,CAC1CoJ,UAAU,IAEZ/Q,KAAKuK,eAAesB,SAASV,KAAK/C,kBAElCpI,KAAKmQ,0BAA2B,EAYhCnQ,KAAK8J,kBAAkB6G,4BAA4B,CAAEvD,KAXJ,CAC/CgD,cAAepQ,KAAKI,eAAegQ,eAAiB,GACpD3O,aAAa,EACb6O,SAAUC,eACVpP,eAAgBnB,KAAKI,eAAee,eAAeN,KACnD4P,oBAAqBzQ,KAAK2K,oBAC1BsC,QAASjN,KAAKuK,eAAesB,SAASX,OAAOhE,MAC7CyE,WAAY3L,KAAK4K,gBAAgB,GAAGvI,GACpCmO,aAAcxQ,KAAK4C,aACnBuI,KAAMnL,KAAKuK,eAAesB,SAASV,KAAKjE,SAE4BlB,UAAU0E,IAC1EA,GACF1K,KAAK6J,oBACF+G,QAAQ,iBACRC,iBACA7K,UAAU,KACThG,KAAKmQ,0BAA2B,EAChCnQ,KAAKiK,SAAS6G,MAAI,EACnB,IAKb,CAEAG,8BACE,MAAM9P,EAAiBnB,KAAKI,eAAee,eAG3C,GAAIA,EAAeN,OAASyC,cAA0B,CACpD,GAAItD,KAAK4C,eAAiBjB,UACxB,OAA6F,IAAtF3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,WAEvE,GAAI3B,KAAK4C,eAAiBjB,gBACxB,OAAmG,IAA5F3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,iBAEvE,GAAI3B,KAAK4C,eAAiBjB,gBACxB,OAAmG,IAA5F3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,gBAA8B,CAKvG,GAAIR,EAAeN,OAASyC,QAAoB,CAC9C,GAAItD,KAAK4C,eAAiBjB,SACxB,OAA4F,IAArF3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,UAEvE,GAAI3B,KAAK4C,eAAiBjB,UACxB,OAA6F,IAAtF3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,WAEvE,GAAI3B,KAAK4C,eAAiBjB,SACxB,OAA4F,IAArF3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,SAAuB,CAKhG,OAAIR,EAAeN,OAASyC,gBACtBtD,KAAK4C,eAAiBjB,YACqE,IAAtF3B,KAAK4K,gBAAgB0G,UAAU9P,GAAOA,EAAIE,kBAAoBC,UAK3E,CAEAS,aAAamM,GACXhM,OAAOC,KAAK+L,EAASjM,YAAa,SACpC,CAEAiP,cAAcC,GACZxR,KAAK8J,kBAAkB2H,uBAAuB,CAAED,cAAaxL,UAAU0E,IACjEA,IAAQ1K,KAAKwN,SAAWxN,KAAKwN,SAASjM,OAAOd,GAAKA,EAAE4B,IAAMmP,IAC1DxR,KAAKwN,UAAUjG,OAAS,IAAGvH,KAAKwN,YAAWzL,MAAe/B,KAAKwN,UAAQ,EAE/E,CAEAkE,SACE1R,KAAKiK,SAAS6G,MAChB,CAGAa,UAAU7K,GACMA,EAAM8K,OACV1K,MAAMK,QAAU,GAAoB,cAAfT,EAAM1F,MAAuC,WAAf0F,EAAM1F,MACjE0F,EAAM+K,gBAEV,CAGApF,kBACE,IAAIqF,EAAc,IAAIC,KACtBD,EAAYE,QAAQF,EAAYG,UAAY,IAC5C,MAAMC,EAAe,IAAIC,KACzBD,SAAaE,MAAQ,QACrBF,EAAaG,cAAe,EAC5BH,EAAaI,uBAAyB,QACtCJ,EAAaK,sBAAwB,QACrCL,EAAa7H,KAAO,CAClB1H,MAAO3C,KAAKmO,WACZqE,QAAS,sBACTC,aAAc,SACdX,YAAaA,EACbY,aAAc,CAAE7R,KAAM,SAAU8R,UAAW,iBAC3CC,YAAa,CAAE/R,KAAM,eAAgB8R,UAAW,kBAE3CT,CACT,wCA7oBW5I,GAAoBuJ,MAxB1BC,KAAoBD,oKAwBdvJ,EAAoB7G,46FD1CjC5C,iBACEA,wBAIAA,iCA6HAA,iCAqBAA,oCAGAA,wBAiBAA,4BACFA,eA3KQA,wCAIOA,iIA6HAA,iIAqBWA,2IAGlBA,yDAiBUA,kDAAiC,g9rKCjItCyJ,MAAoByJ,UADhCjK,QACYQ,8CC1CbzJ,8CAEEA,sCAAgC,+BAAhCA,CAAgC,0DAK9BA,0CACEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANqFA,kDAItGA,sDAAqC,2DAIzCA,0CAMEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,+CAIEA,mDAAkC,gGAItCA,0CAMEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,8CAIEA,kDAAiC,gGAIrCA,0CAMEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,8CAIEA,kDAAiC,gGAIrCA,0CAMEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,+CAIEA,mDAAkC,2DAItCA,0CAMEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,gDAIEA,oDAAmC,2DAIvCA,0CAGEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,mDAIEA,uDAAsC,2DAI1CA,0CAGEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,oDAIEA,wDAAuC,2DAI3CA,0CAGEA,+BACEA,4EAA0BA,oCAAgC,EAA1DA,CAA2D,gEACvCA,8BAA0B,EAD9CA,CAA2D,+DAExCA,6BAAyB,GAG9CA,SAAmB,0BAPnBA,qDAKEA,yDAAwC,2DAI5CA,0CACEA,+BACEA,4EAA0BA,oCAAgC,EAA1DA,CAA2D,gEACvCA,8BAA0B,EAD9CA,CAA2D,+DAExCA,6BAAyB,GAG9CA,SAAmB,0BAPqFA,kDAKtGA,sDAAqC,2DAIzCA,0CAGEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,oDAIEA,wDAAuC,2DAI3CA,0CAGEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAG9CA,SAAmB,0BANnBA,oDAIEA,wDAAuC,2DAI3CA,0CAGEA,8BACEA,sEAAoBA,8BAA0B,EAA9CA,CAA+C,+DAC5BA,6BAAyB,GAE1BA,SAAmB,0BALvCA,oDAIEA,wDAAuC,4CA5I7CA,2BACEA,4BAQAA,4BAaAA,4BAaAA,4BAaAA,4BAaAA,4BAaAA,4BAUAA,4BAUAA,4BAWAA,6BASAA,6BAUAA,6BAUAA,6BASFA,8BA9IYA,kHASPA,mPAaAA,mPAaAA,mPAaAA,+MAaAA,+MAaAA,kHAUAA,kHAUAA,kHAUOA,kHAUPA,mHAUAA,mHAUAA,6JAULA,kBAAmF,WAAnFA,CAAmF,mBAEgBA,mEAAmBA,oBAAW,wBAAEA,WAAa,yBAAhIA,0CAAiCA,iCAAyB,0BCzHrE,IAAMmT,KAA6BC,EAAnC,MA2BLlT,YACU2J,EACAD,EACAD,EACAD,EACAM,EACAC,EACAI,EACAD,IAPAjK,oBACAA,6BACAA,oBACAA,4BACAA,2BACAA,yBACAA,aACAA,iBAhCVA,kBAAe2B,IACf3B,oBAAiBmK,IACjBnK,iBAAcuD,IACdvD,wBAAqBsD,IAGrBtD,kBAAc,EACdA,oBAAgB,EAEhBA,qBAAiB,EACjBA,uCAAoC,IAAI+E,IAuBrC,CAEH5E,WACEH,KAAKkT,kCAAkCpN,IACrC9F,KAAKkK,MAAMG,KAAKrE,UAAUkB,IACxBlH,KAAKsK,eAAiBpD,EAAMoD,iBAAkB,KA0BhDtK,KAAKkT,kCAAkCpN,IAtBpC9F,KAAKsK,eAuBNtK,KAAKyJ,sBAAsBe,OAAOC,MAAmCzE,UAAU0E,IACzEA,EAAOK,eAAc/K,KAAKmB,eAAiBuJ,EAAOK,aAAa5J,gBAC/DuJ,EAAO5J,UAASd,KAAKc,QAAU4J,EAAO5J,SACtC4J,EAAOK,cAAcqF,gBAAepQ,KAAKoQ,cAAgB1F,EAAOK,aAAaqF,eAC7E1F,EAAOK,cAAc7J,oBAAmBlB,KAAKkB,kBAAoBwJ,EAAOK,aAAa7J,mBACzFlB,KAAKqL,cAAgBrL,KAAKsL,kCACtBZ,EAAOrG,aAAYrE,KAAK2K,oBAAsBD,EAAOrG,WAAWhC,IACpErC,KAAKmT,0BAA4B,IAAIjT,KAAK,GA5B5CF,KAAKwJ,aAAagB,OAAOuB,MAA2B/F,UAAU0E,IAC5D1K,KAAKI,eAAiBsK,EAClB1K,KAAKI,iBACPJ,KAAKmB,eAAiBnB,KAAKI,eAAee,eAC1CnB,KAAKgL,mBAAqBhL,KAAKI,eAAea,YAC9CjB,KAAKkB,kBAAoBlB,KAAKI,eAAec,kBAC7ClB,KAAKgM,iBAAmBhM,KAAKI,eAAe4L,kBAAoB,GAC5DhM,KAAKI,eAAegQ,gBAAepQ,KAAKoQ,cAAgBpQ,KAAKI,eAAegQ,eAChFpQ,KAAKc,QAAUd,KAAKI,eAAeC,QAAQS,QACvCd,KAAKI,eAAeC,QAAQiB,YAC9BtB,KAAKoT,iBAAmBpT,KAAKI,eAAeC,OAAOiB,UACnDtB,KAAKqT,YACHrT,KAAKsT,0CAA0CtT,KAAKmB,eAAgBnB,KAAKc,QAASd,KAAKoT,kBAAkB7L,SACzGvH,KAAKuT,oBAAoBvT,KAAKmB,eAAgBnB,KAAKc,UAEvDd,KAAKqL,cAAgBrL,KAAKwT,+BAA4B,GAiBhE,CAEAlI,kCACE,OAAOtL,KAAKkB,oBAAsBiJ,0BAAuCnK,KAAKc,QAAQM,MAAQmC,OAChG,CAEAiQ,+BACE,OACGxT,KAAKkB,oBAAsBiJ,aAA0BnK,KAAKkB,oBAAsBiJ,kBACpD,IAA5BnK,KAAKgL,oBAAyD,IAA5BhL,KAAKgL,oBAA4BhL,KAAKc,QAAQM,OAASmC,UAAgBvD,KAAKoR,cAEnH,CAEAqC,yBAAyBC,GACvB,MAAMC,EAAyB3T,KAAKmT,0BAA0B7B,UAAU7Q,GAAKA,EAAEmC,cAAgB8Q,EAAkB9Q,eAElF,IAA3B+Q,EACF3T,KAAKmT,0BAA0BQ,GAA0BD,EAEzD1T,KAAKmT,0BAA0BS,KAAKF,GAGtC,MAAMG,EAAyB7T,KAAKmT,0BAA0B3S,KAAKC,GAAKA,EAAEmC,cAAgBjB,gBACpFmS,EAAsB9T,KAAKmT,0BAA0B3S,KAAKC,GAAKA,EAAEmC,cAAgBjB,aACnFkS,GAA0BC,IAC5B9T,KAAKqT,YAAcQ,EAAuBjI,gBAAkBkI,EAAoBlI,eAEpF,CAEAmI,mBAAmBzS,GACjBtB,KAAKoT,iBAAmB,IAAIpT,KAAKoT,oBAAqB9R,GACtDtB,KAAKqT,YACHrT,KAAKsT,0CAA0CtT,KAAKmB,eAAgBnB,KAAKc,QAASd,KAAKoT,kBAAkB7L,SACzGvH,KAAKuT,oBAAoBvT,KAAKmB,eAAgBnB,KAAKc,SACrDd,KAAKuJ,qBAAqByK,wCAAwChU,KAAKI,eAAgBJ,KAAKoT,kBAC5FpT,KAAK6J,oBAAoB+G,QAAQ,eACnC,CAEAqD,kBAAkB5R,GAChBrC,KAAKoT,iBAAmB,IAAIpT,KAAKoT,iBAAiB7R,OAAOC,GAAOA,EAAIa,KAAOA,IAC3ErC,KAAKqT,aAAc,EACnBrT,KAAKuJ,qBAAqByK,wCAAwChU,KAAKI,eAAgBJ,KAAKoT,kBAC5FpT,KAAK6J,oBAAoB+G,QAAQ,cACnC,CAEA2C,oBAAoBpS,EAAwCL,GAC1D,GAAIK,EAAeN,OAASyC,cAA0B,CACpD,GAAIxC,EAAQM,OAASmC,SAAezC,EAAQM,OAASmC,OACnD,OAAO,EACF,GAAIzC,EAAQM,OAASmC,SAAezC,EAAQM,OAASmC,QAC1D,OAAO,EACF,GAAIzC,EAAQM,OAASmC,QAC1B,OAAO,UAEApC,EAAeN,OAASyC,eACjC,OAAOxC,EAAQM,OAASmC,QAAc,EAAI,EAG5C,OAAO,CACT,CAEA+P,0CACEnS,EACAL,EACAQ,GAEA,IAAI8M,EAAgBpO,KAAKkU,iBAAiB/S,EAAgBL,GAC1D,OAAOQ,EAAUC,OAAOC,GAAO4M,EAAcpH,SAASxF,EAAIE,kBAC5D,CAEAwS,iBAAiB/S,EAAwCL,GACvD,GAAIK,EAAeN,OAASyC,cAC1B,OAAQxC,EAAQM,MACd,KAAKmC,QACL,KAAKA,OACH,MAAO,CAAC5B,SAAmBA,QAAkBA,SAE/C,KAAK4B,QACH,MAAO,CAAC5B,SAAmBA,UAAoBA,aAAuBA,eAExE,KAAK4B,QACH,MAAO,CAAC5B,eAAyBA,aAEnC,KAAK4B,QACH,MAAO,CAAC5B,SAAmBA,QAAkBA,QAAkBA,kBAAsB,GAEhFR,EAAeN,OAASyC,eACjC,OAAQxC,EAAQM,MACd,KAAKmC,QACL,KAAKA,OACH,MAAO,CAAC5B,SAAmBA,QAAkBA,SAE/C,KAAK4B,QACH,MAAO,CAAC5B,SAAmBA,UAAoBA,cAAwBA,cAAwBA,eAGrG,MAAO,EACT,CAEAqP,YACE,GAAIhR,KAAKqT,YAAa,CAkBpB,IAhBKrT,KAAKsK,gBAAkBtK,KAAKc,QAAQM,MAAQmC,SAC/CvD,KAAK0J,aACFwH,gBAAgB,CACfC,OAAQnR,KAAKoQ,cACbhD,KAAM,CACJQ,WAAYzD,4BAGfnE,UAAU0E,IACT1K,KAAKoR,gBAAkB1G,EACvB1K,KAAKqL,cAAgBrL,KAAKwT,+BAC1BxT,KAAKuJ,qBAAqB8H,2CAA2CrR,KAAKI,eAAgBsK,EAAM,GAKlG1K,KAAKsK,gBAAkBtK,KAAKc,QAAQM,MAAQmC,QAAa,CAC3DvD,KAAKqT,aAAc,EACnB,IAAIc,EAAsB,IAAIjU,MAE9BF,KAAKmT,0BAA0BpG,QAAQqH,IACrCD,EAAoBP,KAAK,CACvBvR,GAAI+R,EAAezI,WACnBR,KAAMiJ,EAAejJ,KACrB8B,QAASmH,EAAenH,QACxBM,YAAa6G,EAAexR,cAC7B,GAUH5C,KAAK8J,kBAAkBuK,gCAAgC,CAAEjH,KAPK,CAC5DgD,cAAepQ,KAAKoQ,eAAiB,GACrC3O,aAAa,EACbgP,oBAAqBzQ,KAAK2K,oBAC1B2J,gBAAiBH,KAGuDnO,UAAU,KAClFhG,KAAK6J,oBACF+G,QAAQ,iBACRC,iBACA7K,UAAU,IAAMhG,KAAKiK,SAAS6G,OAAM,EACxC,CAIuB,MAAtB9Q,KAAKoQ,eAAyBpQ,KAAKc,QAAQM,OAASmC,SACtDvD,KAAK0J,aACF6K,yBAAyB,CACxBnH,KAAM,CACJgD,cAAepQ,KAAKoQ,iBAGvBpK,UAAU0E,IACLA,GAIFT,SAASuK,QAAM,EAElB,CAGT,wCAnPWxB,GAA6BH,yCAlBnCC,KAAoBD,wEAkBdG,EAA6BvQ,qxBDhC1C5C,gCAKAA,iBACEA,oCAiJAA,wBAMAA,4BACFA,eA7JGA,0HAK+DA,wCAiJ1DA,uCAMUA,kDAAiC,+lBC7HtCmT,MAA6BD,UADzCjK,QACYkK","names":["i0","InformationsPanelComponent","constructor","this","EventEmitter","Array","ngOnInit","currentStudent","thesis","professionalSupervisors","jury3","find","a","isReferent","semesterDate","studentSemester","name","project","status","getThesisStatus","currentStep","currentStepStatus","specialisation","code","ngOnChanges","documents","filter","doc","isValidated","documentTypeCode","DocumentType","reverse","displayConvention","reorderDocumentsToTopByType","sortListByDate","sort","goBackToCurrentStudentStep","returnToStudentFormRequested","emit","downloadFile","id","downloadUrl","window","open","selectors","StepTitleComponent","title","documentType","ValidationWarningComponent","ThesisStepRoute","VALID_PHONE_NUMBER_CHARACTERS","RegistrationFormComponent","_class","formBuilder","studentService","professorService","projectService","Specialisation","Project","Observable","group","fullName","Validators","companyName","email","phone","projectCode","withPartner","studentPartner","isEnglish","program","major","supervisor","professional","professionalForm","subject","subjectMaxLength","problematic","problematicMaxLength","bibliography","bibliographyMaxLength","isConfidential","Subscription","specialization","student","isSupervisor","studentFullName","lastName","firstName","readonly","form","disable","addControlTriggers","addFormChangesTrigger","patchForm","checkFormControl","subscriptions","add","getAllProjectsAsync","subscribe","projects","projectData","projectId","item","onProjectChanges","get","setValue","patchValue","enable","professionalSupervisorReferent","displayUser","user","onChangePhoneNumber","event","charCode","includes","onProjectSelectionChange","value","valueChanges","pipe","map","selectSupervisorsData$","length","getSupervisorsByLastNameAsync","supervisorControl","clearValidators","setErrors","invalid","partnersData$","searchStudentsLastNameBeginsWithAsync","studentPartnerControl","withPartnerControl","addValidators","checkStudentPartnerControl","disablePartner","markAsTouched","enableControl","controlName","values","onValuesChanges","isValid","valid","_angular_core__WEBPACK_IMPORTED_MODULE_3__","ctx","tslib__WEBPACK_IMPORTED_MODULE_19__","AutoUnsubscribe","OralOrganizationButtonComponent","getOralTypeName","examination","oralType","OralType","displayInformations","display","DepositFileComponent","globalStorageService","studentStore","thesisSupervisorStore","stepsService","documentsService","matDialog","notificationService","supervisorService","breadcrumbService","commentService","location","route","EnumStepStatus","depositFileSubscription","data","supervisorMode","supervisorForm","select","thesisReducer","result","currentSupervisorId","documentsByType","currentThesis","currentStudentProjectCode","studentOwner","currentStudentStep","depositDeadline","reason","mark","isArchived","displayFooter","checkDisplayingSupervisorFooter","checkNewDocuments","enableValidButton","readonlyStep","pciSupervisorInformations","documentId","controlIsValid","controls","addPCITrigger","studentReducer","depositLimitDate","studentDocuments","filterDocuments","checkValidationDocuments","checkDisplayingFooter","checkStepType","addBreadcrumb","navigationTitle","matDialogConfig","getDialogConfig","getComments","displaySmallUploader","checkDisplayingSmallUploader","Object","keys","forEach","key","comment","checkPCIStepValidation","commentsPost","body","thesisId","stepNumber","commentType","comments","newDocumentsExist","some","step","stepStatus","studentStep","stepType","StepType","supervisorPageTitle","getNavigationTitle","markIsRequired","modalTitle","documentTypes","toString","incrementNameVersion","document","documentsLength","index","lastIndexOf","extension","slice","uploadDocuments","uploadedDocuments","uploading","request","FileToUpload","File","type","ThesisId","DocumentTypeCode","SpecialisationName","ProjectCode","createDocumentAsync","tap","shouldEmitDocumentEvents","documentUploaded","deleteDocument","deleteDocumentAsync","documentDeleted","review","DialogComponent","afterClosed","limitDate","formJustSavedOrValidated","currentStepId","toDateString","userRole","Roles","documentCode","validationCreatorId","trim","documentStepValidationAsync","success","afterDismissed","back","required","validStep","getValidationStepConditions","updateStepAsync","stepId","stepSubmitted","updateStudentCurrentStepAndDispatchToStore","findIndex","deleteComment","commentId","deleteStepCommentAsync","goBack","onKeyDown","target","preventDefault","defaultDate","Date","setDate","getDate","dialogConfig","MatDialogConfig","width","disableClose","enterAnimationDuration","exitAnimationDuration","content","alignContent","cancelButton","className","validButton","core","GlobalStorageService","tslib_es6","IntermediateDocsFormComponent","intermediate_docs_form_component_class","intermediateDocsFormSubscriptions","pciValidationInformations","currentDocuments","stepIsValid","filterDocumentsBySpecialisationAndProject","checkDocumentLength","checkDisplayingStudentFooter","onCheckPCIStepValidation","pcivalidationInfo","pcivalidationInfoIndex","push","miniThesisInformations","projectInformations","onDocumentUploaded","updateThesisDocumentsAndDispatchToStore","onDocumentDeleted","getDocumentsType","documentsToValidate","pciInformation","documentsPciStepValidationAsync","updateDocuments","validateStepAndNextAsync","reload"],"sourceRoot":"webpack:///","sources":["./src/app/shared/components/informations-panel/informations-panel.component.html","./src/app/shared/components/informations-panel/informations-panel.component.ts","./src/app/shared/components/step-title/step-title.component.ts","./src/app/shared/components/step-title/step-title.component.html","./src/app/shared/components/validation-warning/validation-warning.component.html","./src/app/shared/components/validation-warning/validation-warning.component.ts","./src/app/shared/enums/thesis-step-route.enum.ts","./src/app/shared/modules/thesis-steps/components/registration-form/registration-form.component.html","./src/app/shared/modules/thesis-steps/components/registration-form/registration-form.component.ts","./src/app/views/student/components/edi/oral-organization-button/oral-organization-button.component.html","./src/app/views/student/components/edi/oral-organization-button/oral-organization-button.component.ts","./src/app/shared/components/deposit-file/deposit-file.component.html","./src/app/shared/components/deposit-file/deposit-file.component.ts","./src/app/views/student/components/intermediate-docs-form/intermediate-docs-form.component.html","./src/app/views/student/components/intermediate-docs-form/intermediate-docs-form.component.ts"],"sourcesContent":["
\n \n \n \n
{{ 'GEN_INFO' | translate }}
\n
\n \n {{ currentStudent.program?.name }}\n
\n
\n \n {{ currentStudent.thesis?.project?.name }}\n
\n
\n \n {{ status | translate }}\n
\n
\n \n {{ currentStudent.major.name }}\n
\n
\n \n {{ semesterDate }}\n
\n
\n \n {{ currentStudent.thesis.isConfidential.toString() | translate }}\n
\n
\n
\n \n
\n \n {{ currentStudent.thesis.supervisor.lastName }} {{ currentStudent.thesis.supervisor.firstName }}\n \n
\n
\n
\n \n
\n \n {{ currentStudent.thesis.coSupervisor.lastName }} {{ currentStudent.thesis.coSupervisor.firstName }}\n \n
\n
\n
\n \n
\n \n {{ jury3.fullName }}\n \n
\n
\n
\n \n
\n \n
\n \n \n \"download\n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { DocumentResponse } from '@sharedModels/document-response';\nimport { StudentResponse } from '@sharedModels/student-response';\nimport { StepTypeResponse } from '@sharedModels/step-type-response';\nimport { getThesisStatus, sortListByDate } from '../../services/tools.service';\nimport { Specialisation } from '@sharedEnums/specialisation.enum';\nimport { Project } from '@sharedEnums/project.enum';\nimport { DocumentType } from '@sharedEnums/documentType.enum';\nimport { ProfessionalResponse, SemesterResponse } from '../../api/models';\n\n@Component({\n selector: 'app-informations-panel',\n templateUrl: './informations-panel.component.html',\n styleUrls: ['./informations-panel.component.scss'],\n})\nexport class InformationsPanelComponent implements OnInit, OnChanges {\n @Input() currentStudent!: StudentResponse;\n @Input() studentSemester!: SemesterResponse;\n @Input() displayConvention!: boolean;\n @Input() currentStudentStepTab: StepTypeResponse | undefined;\n @Output() returnToStudentFormRequested = new EventEmitter();\n\n documents = new Array();\n semesterDate: string | undefined;\n\n public status?: string;\n public jury3: ProfessionalResponse | undefined;\n\n public constructor() {}\n\n ngOnInit(): void {\n if (this.currentStudent) {\n if (this.currentStudent.thesis?.professionalSupervisors) this.jury3 = this.currentStudent.thesis.professionalSupervisors.find(a => a.isReferent);\n this.semesterDate = this.studentSemester.name;\n if (this.currentStudent.thesis?.project) {\n this.status = getThesisStatus(\n this.currentStudent.currentStep,\n this.currentStudent.currentStepStatus,\n this.currentStudent.specialisation.name as Specialisation,\n this.currentStudent.thesis.project.code as Project\n );\n }\n }\n }\n\n ngOnChanges(): void {\n if (this.currentStudent) {\n this.documents =\n this.currentStudent.thesis?.documents\n ?.filter(\n doc =>\n doc.isValidated &&\n doc.documentTypeCode !== DocumentType.PV &&\n doc.documentTypeCode !== DocumentType.CONV &&\n doc.documentTypeCode !== DocumentType.SIGNEDPV\n )\n .reverse() ?? [];\n if (!this.displayConvention) {\n this.documents = this.documents.filter(doc => doc.documentTypeCode !== DocumentType.SIGNEDCONV);\n } else {\n this.documents = this.reorderDocumentsToTopByType(this.documents, DocumentType.SIGNEDCONV);\n }\n this.documents = sortListByDate(this.documents);\n }\n }\n\n reorderDocumentsToTopByType(documents: DocumentResponse[], documentTypeCode?: DocumentType): DocumentResponse[] {\n return documents.sort(doc => (doc.documentTypeCode === documentTypeCode ? -1 : 1));\n }\n\n goBackToCurrentStudentStep(): void {\n this.returnToStudentFormRequested.emit();\n }\n\n downloadFile(id: string) {\n const downloadUrl = this.documents.find(doc => doc.id == id)?.downloadUrl;\n window.open(downloadUrl, '_blank');\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DocumentType } from '@sharedEnums/documentType.enum';\n\n@Component({\n selector: 'app-step-title',\n templateUrl: './step-title.component.html',\n})\nexport class StepTitleComponent implements OnInit {\n @Input() documentType!: DocumentType;\n title = '';\n\n ngOnInit(): void {\n const documentTypeTitles: Partial> = {\n [DocumentType.PITCH]: 'PITCH_DEPOSIT',\n [DocumentType.ANA]: 'ANA_DEPOSIT',\n [DocumentType.BOOK]: 'BOOK_DEPOSIT',\n [DocumentType.MET]: 'MET_DEPOSIT',\n [DocumentType.PROBLEM]: 'PROBLEM_DEPOSIT',\n [DocumentType.FINALDRAFT1]: 'FINALDRAFT1_DEPOSIT',\n [DocumentType.FINALDRAFT2]: 'FINALDRAFT2_DEPOSIT',\n [DocumentType.SUBJECT]: 'STEP_SUBJET',\n [DocumentType.DRAFT]: 'DRAFT_DEPOSIT',\n [DocumentType.PLAN]: 'PLAN_DEPOSIT',\n [DocumentType.SPEC]: 'SPEC_DEPOSIT',\n [DocumentType.STUDY]: 'STUDY_DEPOSIT',\n [DocumentType.BUSINESS]: 'BUSINESS_DEPOSIT',\n [DocumentType.FINANCIAL]: 'FINANCIAL_DEPOSIT',\n [DocumentType.BUSINESS1]: 'BUSINESS1_DEPOSIT',\n [DocumentType.BUSINESS2]: 'BUSINESS2_DEPOSIT',\n [DocumentType.BUSINESS3]: 'BUSINESS3_DEPOSIT',\n };\n\n this.title = documentTypeTitles[this.documentType] || '';\n }\n}\n","

{{ title | translate }}

\n","
\n {{ 'WARNING' | translate }}\n {{ 'DOCUMENT_WARNING_MESSAGE' | translate }}\n
\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-validation-warning',\n templateUrl: './validation-warning.component.html',\n})\nexport class ValidationWarningComponent {\n @Input() displayMessage = false;\n}\n","export enum ThesisStepRoute {\n REGISTERSTEP = 'register',\n PITCHSTEP = 'pitch',\n INTERMEDIATESTEP = 'intermediate',\n FINALDOCDRAFT1 = 'final-doc-draft1',\n FINALDOCDRAFT2 = 'final-doc-draft2',\n FINALDOCSTEP = 'final-doc',\n SUBJECTSTEP = 'subject',\n LITERATURESTEP = 'literature',\n PLANDRAFTSTEP = 'plan-draft',\n PLANSTEP = 'plan',\n EVALUATIONSTEP = 'evaluation',\n ORGAEXAMINATIONSTEP = 'orga-examination',\n RESEXAMINATIONSTEP = 'res-examination',\n}\n","
\n \n
\n \n
{{ 'REG_INFO_SUP' | translate }}
\n
\n
\n \n {{ studentFullName }}\n
\n
\n
\n \n
{{ 'REG_INFO' | translate }}
\n
\n\n \n
\n
\n \n \n \n \n {{ project.name }}\n \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n
\n
\n\n \n \n
\n \n
\n \n {{ 'PROJECT_PAIRS' | translate }}\n \n
\n
\n
\n \n \n \n \n {{ partner.lastName }} {{ partner.firstName }} \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n {{ 'ERROR.INVALID_PARTNER' | translate }}\n \n \n
\n
\n\n \n
\n \n {{ 'ENG_PROJECT' | translate }}\n \n
\n\n \n
\n
\n \n \n \n \n
\n
\n\n \n
\n \n
\n \n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n {{ supervisor.lastName }} {{ supervisor.firstName }}\n \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n {{ 'ERROR.INVALID_PROF' | translate }}\n \n \n
\n
\n\n \n \n \n
{{ 'PRO_SUP_INFO' | translate }}
\n
\n \n
{{ 'PRO_TUTOR_INFO' | translate }}
\n
\n
\n \n
\n \n \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n
\n \n
\n \n \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n
\n
\n
\n \n
\n \n \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n {{ 'ERROR.EMAIL' | translate }}\n \n \n
\n \n
\n \n \n \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n {{ 'ERROR.PHONE' | translate }}\n \n \n
\n
\n \n\n \n
\n
{{ 'THESIS_INFO' | translate }}
\n \n
\n \n \n \n {{ subjectInput.value.length }} / {{ subjectMaxLength }}\n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n
\n\n \n
\n \n \n \n {{ problematicInput.value.length }} / {{ problematicMaxLength }} \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n
\n\n \n
\n \n \n \n {{ bibliographyInput.value.length }} / {{ bibliographyMaxLength }} \n \n {{ 'ERROR.REQUIRED' | translate }}\n \n \n
\n
\n\n \n
\n \n {{ 'CONFIDENTIAL_DOC' | translate }}\n \n
\n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { map, Observable, Subscription } from 'rxjs';\nimport { StudentSearchResponse } from '@sharedModels/student-search-response';\nimport { StudentsService } from '@sharedServices/students.service';\nimport { ProfessorsService } from '@sharedServices/professors.service';\nimport { ProjectsService } from '@sharedServices/projects.service';\nimport { ProjectResponse } from '@sharedModels/project-response';\nimport { ThesisResponse } from '@sharedModels/thesis-response';\nimport { AutoUnsubscribe } from 'src/app/shared/decorators/autoUnsubscribe';\nimport { Project } from '@sharedEnums/project.enum';\nimport { MatSelectChange } from '@angular/material/select';\nimport { Specialisation } from '@sharedEnums/specialisation.enum';\nimport { StudentResponse } from '@sharedModels/student-response';\nimport { SupervisorResponse } from '@sharedModels/supervisor-response';\nimport { StudentPartnerResponse } from '@sharedModels/student-partner-response';\nimport { ProfessionalResponse } from '@sharedModels/professional-response';\n\n// list of valid characters (32 = space) (43 = +) (45 = -) (46 = .)\nconst VALID_PHONE_NUMBER_CHARACTERS = [32, 43, 45, 46];\n\nexport type RegistrationFormValues = {\n projectId: string | null;\n withPartner: boolean | null;\n studentPartner: StudentPartnerResponse | null;\n isEnglish: boolean | null;\n program: string | null;\n major: string | null;\n supervisor: SupervisorResponse | null;\n professional: ProfessionalResponse | null;\n subject: string | null;\n problematic: string | null;\n bibliography: string | null;\n isConfidential: boolean | null;\n};\n\n@Component({\n selector: 'app-registration-form',\n templateUrl: './registration-form.component.html',\n styleUrls: ['./registration-form.component.scss'],\n})\n@AutoUnsubscribe()\nexport class RegistrationFormComponent implements OnInit {\n @Input() student: StudentResponse | undefined;\n @Input() isSupervisor = true;\n @Input() readonly = false;\n\n @Output() onProjectChanges = new EventEmitter();\n @Output() onValuesChanges = new EventEmitter<{ values: RegistrationFormValues; isValid: boolean }>();\n\n Specialization = Specialisation;\n Project = Project;\n\n subjectMaxLength = 2000;\n problematicMaxLength = 2000;\n bibliographyMaxLength = 2000;\n\n thesis: ThesisResponse | undefined;\n specialization: string | undefined;\n project: string | undefined;\n studentFullName = '';\n projectData: ProjectResponse[] = [];\n selectSupervisorsData$ = new Observable();\n partnersData$ = new Observable();\n withPartner!: boolean;\n\n professionalForm = this.formBuilder.group({\n fullName: ['', Validators.required],\n companyName: ['', Validators.required],\n email: ['', [Validators.required, Validators.email]],\n phone: [''],\n });\n\n form: FormGroup = this.formBuilder.group({\n projectCode: [null, Validators.required],\n withPartner: [null],\n studentPartner: [null],\n isEnglish: [false],\n program: [null],\n major: [null],\n supervisor: [null, Validators.required],\n professional: this.professionalForm,\n subject: [null, [Validators.required, Validators.maxLength(this.subjectMaxLength)]],\n problematic: [null, [Validators.required, Validators.maxLength(this.problematicMaxLength)]],\n bibliography: [null, [Validators.required, Validators.maxLength(this.bibliographyMaxLength)]],\n isConfidential: [true],\n });\n\n private readonly subscriptions = new Subscription();\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly studentService: StudentsService,\n private readonly professorService: ProfessorsService,\n private readonly projectService: ProjectsService\n ) {}\n\n ngOnInit(): void {\n this.specialization = this.student?.specialisation.name;\n this.thesis = this.student?.thesis;\n\n if (this.isSupervisor) this.studentFullName = `${this.student?.lastName} ${this.student?.firstName}`;\n\n if (!this.readonly) {\n this.addControlTriggers();\n this.addFormChangesTrigger();\n } else {\n this.form.disable();\n }\n\n this.patchForm();\n }\n\n patchForm() {\n this.project = this.student?.thesis?.project?.code;\n this.project && this.checkFormControl(this.project);\n\n // Set default project value\n if (!this.project) {\n this.project = Project.MEM;\n this.professionalForm.disable();\n }\n\n this.subscriptions.add(\n this.projectService.getAllProjectsAsync().subscribe(projects => {\n this.projectData = projects;\n\n // Alternance Spe. does not include PCI and IBL projects\n if (this.specialization === Specialisation.ALTERNANCE) {\n this.projectData = this.projectData.filter(project => project.code !== Project.PCI && project.code !== Project.IBL);\n }\n\n const projectId = this.projectData.find(item => item.code === this.project)!.id;\n\n this.onProjectChanges.emit(projectId);\n this.form.get('projectCode')?.setValue(this.project);\n })\n );\n\n if (this.thesis) {\n this.form.patchValue(this.thesis);\n this.form.patchValue({\n withPartner: !!this.thesis.studentPartner,\n supervisor: this.thesis.supervisor,\n });\n }\n\n this.form.patchValue({\n program: this.student?.program?.name,\n major: this.student?.major?.name,\n });\n\n if (!this.thesis?.studentPartner) {\n this.form.get('studentPartner')?.disable();\n } else {\n this.form.get('studentPartner')?.enable();\n }\n\n if (this.thesis?.professionalSupervisors) {\n const professionalSupervisorReferent = this.thesis?.professionalSupervisors.find(a => a.isReferent);\n if (professionalSupervisorReferent) this.professionalForm.patchValue(professionalSupervisorReferent);\n }\n }\n\n displayUser(user: StudentSearchResponse): string {\n return user && `${user.lastName} ${user.firstName}`;\n }\n\n // check if characters are valid\n // event.charCode >= 48 && event.charCode < 58 >> only number\n onChangePhoneNumber(event: any) {\n return (event.charCode >= 48 && event.charCode < 58) || VALID_PHONE_NUMBER_CHARACTERS.includes(event.charCode);\n }\n\n onProjectSelectionChange(event: MatSelectChange) {\n const projectId = this.projectData.find(item => item.code === event.value)!.id;\n this.onProjectChanges.emit(projectId);\n }\n\n addControlTriggers(): void {\n // Call api to get supervisors\n this.subscriptions.add(\n this.form\n .get('supervisor')\n ?.valueChanges.pipe(\n map(value => {\n if (value && value.length >= 2) {\n this.selectSupervisorsData$ = this.professorService.getSupervisorsByLastNameAsync({ lastName: value });\n } else {\n this.selectSupervisorsData$ = new Observable<[]>();\n }\n const supervisorControl = this.form.get('supervisor');\n if (value?.id) {\n supervisorControl?.clearValidators();\n } else {\n supervisorControl?.setErrors({\n invalid: true,\n });\n }\n })\n )\n .subscribe()\n );\n\n // Call api to get students\n this.subscriptions.add(\n this.form\n .get('studentPartner')\n ?.valueChanges.pipe(\n map(value => {\n if (this.withPartner) {\n if (value && value.length >= 2) {\n this.partnersData$ = this.studentService.searchStudentsLastNameBeginsWithAsync({ lastName: value });\n } else {\n this.partnersData$ = new Observable<[]>();\n }\n //check if studentPartner exist\n const studentPartnerControl = this.form.get('studentPartner');\n const withPartnerControl = this.form.get('withPartner');\n if (!value && !withPartnerControl?.value) studentPartnerControl?.disable();\n if (value?.id) {\n studentPartnerControl?.clearValidators();\n } else {\n studentPartnerControl?.addValidators(Validators.required);\n studentPartnerControl?.setErrors({\n invalid: true,\n });\n }\n }\n })\n )\n .subscribe()\n );\n\n // Enable or disable StudentPartner\n this.subscriptions.add(\n this.form\n .get('withPartner')\n ?.valueChanges.pipe(\n map(value => {\n this.withPartner = value;\n const studentPartnerControl = this.form.get('studentPartner');\n if (value == true) {\n studentPartnerControl?.enable();\n if (studentPartnerControl?.value == null)\n studentPartnerControl?.setErrors({\n invalid: true,\n });\n } else {\n studentPartnerControl?.disable();\n }\n })\n )\n .subscribe()\n );\n\n // Add or remove validators on selected project\n this.subscriptions.add(\n this.form.get('projectCode')?.valueChanges.subscribe(value => {\n this.project = value;\n this.project && this.checkFormControl(this.project);\n })\n );\n }\n\n checkFormControl(projectCode: string) {\n switch (projectCode) {\n case Project.MEM:\n case Project.PCE:\n this.professionalForm.disable();\n this.checkStudentPartnerControl();\n break;\n case Project.PC:\n this.professionalForm.enable();\n this.checkStudentPartnerControl();\n break;\n case Project.PCI:\n case Project.IBL:\n this.professionalForm.disable();\n this.disablePartner();\n break;\n }\n this.form.get('withPartner')?.markAsTouched();\n }\n\n checkStudentPartnerControl() {\n if (this.form.get('withPartner')?.value == true) {\n this.enableControl('studentPartner');\n } else {\n this.disablePartner();\n }\n }\n\n enableControl(controlName: string): void {\n const formControl = this.form.get(controlName);\n formControl?.enable();\n }\n\n disablePartner(): void {\n this.form.get('studentPartner')?.disable();\n this.form.get('studentPartner')?.setValue(null);\n this.form.get('withPartner')?.setValue(false);\n }\n\n addFormChangesTrigger(): void {\n this.subscriptions.add(\n this.form.valueChanges.subscribe(values => {\n // We transform projectCode to projectId to be able to get it directly in registers components\n values.projectId = this.projectData.find(item => item.code === values.projectCode)?.id ?? null;\n\n this.onValuesChanges.emit({ values, isValid: this.form.valid });\n })\n );\n }\n}\n","
\n \n
\n
\n {{ 'ORAL_ORGA_TITLE' | translate }}\n
\n
\n \n {{ examination?.oralDate | date : 'dd/MM/yyyy' }}\n
\n
\n \n {{ examination?.timeSlot }}\n
\n
\n \n {{ examination?.campus?.name }}\n
\n
\n \n {{ oralType | translate }}\n
\n
\n \n {{ examination?.placeDetails }}\n
\n
\n \n {{ examination?.supervisor?.lastName }} {{ examination?.supervisor?.firstName }}\n
\n
\n \n {{ examination?.coSupervisor?.lastName }} {{ examination?.coSupervisor?.firstName }}\n
\n
\n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ExaminationResponse } from '@sharedModels/examination-response';\nimport { OralType } from '@sharedEnums/oral-type.enum';\n\n@Component({\n selector: 'app-oral-organization-button',\n templateUrl: './oral-organization-button.component.html',\n styleUrls: ['./oral-organization-button.component.scss'],\n})\nexport class OralOrganizationButtonComponent implements OnInit {\n @Input() examination!: ExaminationResponse | undefined;\n display = false;\n oralType!: string;\n\n ngOnInit(): void {\n this.getOralTypeName();\n }\n\n getOralTypeName() {\n switch (this.examination?.oralType) {\n case OralType.INPERSON:\n this.oralType = 'INPERSON';\n break;\n case OralType.HYBRID:\n this.oralType = 'HYBRID';\n break;\n case OralType.REMOTELY:\n this.oralType = 'REMOTELY';\n }\n }\n\n displayInformations() {\n this.display = !this.display;\n }\n}\n","
\n
\n

{{ supervisorPageTitle | translate }}

\n
\n \n \n
\n \n
\n
\n
\n \n {{ 'ERROR.MARK_REQUIRED' | translate }}\n \n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Documents{{ 'MARK' | translate }}
{{ document.createdAt | date : 'dd/MM/yyyy' }}\n \"file\n {{ document.name }}\n \n \n \n \n \n \n \n {{ document.mark }}\n /20\n
\n \n \n \n
\n
\n \n
\n {{ 'COMMENTS' | translate }}\n \n {{ 'ERROR.COMMENT_REQUIRED' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n {{ comment.supervisor.lastName }} {{ comment.supervisor.firstName }}\n {{ comment.userRole | translate }}\n {{ comment.createdAt | date : 'dd/MM/yyyy' }}\n
\n \n
\n
{{ comment.reason }}
\n
\n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { Store } from '@ngrx/store';\nimport { DocumentType } from '@sharedEnums/documentType.enum';\nimport { Specialisation } from '@sharedEnums/specialisation.enum';\nimport { StepType } from '@sharedEnums/step-type.enum';\nimport { DocumentResponse } from '@sharedModels/document-response';\nimport { EnumStepStatus } from '@sharedModels/enum-step-status';\nimport { StudentResponse } from '@sharedModels/student-response';\nimport { DocumentsService } from '@sharedServices/documents.service';\nimport { StepsService } from '@sharedServices/steps.service';\nimport { map, Subscription, tap } from 'rxjs';\nimport { AutoUnsubscribe } from 'src/app/shared/decorators/autoUnsubscribe';\nimport { ThesisSupervisorState } from 'src/store/thesis/thesis.states';\nimport * as studentReducer from 'src/store/student/student.reducer';\nimport * as thesisReducer from 'src/store/thesis/thesis.reducer';\nimport { StudentState } from 'src/store/student/student.states';\nimport { Project } from '@sharedEnums/project.enum';\nimport GlobalStorageService from '@coreServices/globalStorageService';\nimport { ThesisResponse } from '@sharedModels/thesis-response';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { DialogComponent } from '@sharedComponents/dialog/dialog.component';\nimport { PciSupervisorValidation } from '@sharedModels/pci-validation.model';\nimport { ActivatedRoute } from '@angular/router';\nimport { CommentResponse } from '@sharedModels/comment-response';\nimport { SupervisorValidationStepRequest } from '@sharedModels/supervisor-validation-step-request';\nimport { ThesisSupervisorResponse } from '@sharedModels/thesis-supervisor-response';\nimport { SupervisorsService } from '@sharedServices/supervisors.service';\nimport { CommentsService } from '@sharedServices/comments.service';\nimport { NotificationService } from '@sharedServices/notification.service';\nimport { Roles } from '@sharedEnums/roles.enum';\nimport { CommentRequest } from '@sharedModels/comment-request';\nimport { BreadcrumbService } from '@sharedServices/breadcrumb.service';\nimport { sortListByDate } from '@sharedServices/tools.service';\n\n@Component({\n selector: 'app-deposit-file',\n templateUrl: './deposit-file.component.html',\n styleUrls: ['./deposit-file.component.scss'],\n})\n@AutoUnsubscribe()\nexport class DepositFileComponent implements OnInit {\n @Input() readonlyStep!: boolean;\n @Input() currentStep: number | undefined;\n @Input() documentType!: DocumentType;\n @Input() singleDocMode: boolean = false;\n\n @Output() readonly documentUploaded = new EventEmitter();\n @Output() readonly documentDeleted = new EventEmitter();\n @Output() readonly checkPCIStepValidation = new EventEmitter();\n\n supervisorPageTitle!: string;\n modalTitle!: string;\n validationTitle!: string;\n validationMessage!: string;\n EnumStepStatus = EnumStepStatus;\n stepType!: StepType;\n depositFileSubscription = new Subscription();\n currentStudent!: StudentResponse;\n currentStepStatus!: EnumStepStatus | undefined;\n currentStudentStep: number | undefined;\n currentStudentProjectCode!: string;\n studentDocuments!: DocumentResponse[];\n documentsByType!: DocumentResponse[];\n comments!: CommentResponse[];\n pciSupervisorInformations!: PciSupervisorValidation;\n\n supervisorMode!: boolean;\n formJustSavedOrValidated = false;\n enableValidButton = false;\n validationInProgress = false;\n uploading = false;\n stepSubmitted = false;\n displaySmallUploader = false;\n displayFooter = false;\n displayReviewButton = false;\n markIsRequired = false;\n newDocumentsExist = false;\n\n currentThesis!: ThesisSupervisorResponse;\n supervisorForm!: FormGroup;\n matDialogConfig!: MatDialogConfig;\n currentSupervisorId!: string;\n depositLimitDate!: string;\n navigationTitle!: string;\n\n constructor(\n private globalStorageService: GlobalStorageService,\n private studentStore: Store,\n private thesisSupervisorStore: Store,\n private stepsService: StepsService,\n private documentsService: DocumentsService,\n private formBuilder: FormBuilder,\n public matDialog: MatDialog,\n private notificationService: NotificationService,\n private supervisorService: SupervisorsService,\n private breadcrumbService: BreadcrumbService,\n private commentService: CommentsService,\n private location: Location,\n private route: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n this.depositFileSubscription.add(\n this.route.data.subscribe(value => {\n this.supervisorMode = value.supervisorMode ?? false;\n })\n );\n\n // Init supervisor Form\n this.supervisorForm = this.formBuilder.group({});\n\n // Student mode\n if (!this.supervisorMode) {\n this.depositFileSubscription.add(\n this.studentStore.select(studentReducer.getStudent).subscribe(result => {\n if (result) {\n this.currentStudent = result;\n this.currentStudentStep = this.currentStudent.currentStep;\n this.currentStepStatus = this.currentStudent.currentStepStatus;\n this.depositLimitDate = this.currentStudent.depositLimitDate ?? '';\n if (this.currentStudent.thesis?.documents) {\n this.studentDocuments = this.filterDocuments(this.currentStudent.thesis.documents);\n this.documentsByType = this.currentStudent.thesis.documents.filter(doc => doc.documentTypeCode == this.documentType);\n this.checkValidationDocuments();\n }\n }\n })\n );\n this.displayFooter = this.checkDisplayingFooter();\n } else {\n // Supervision mode\n this.depositFileSubscription.add(\n this.thesisSupervisorStore.select(thesisReducer.getThesisSupervisor).subscribe(result => {\n if (result) {\n this.currentSupervisorId = result.supervisor?.id ?? '';\n this.documentsByType = result.documents.filter(doc => doc.documentTypeCode == this.documentType);\n this.currentThesis = result;\n if (this.currentThesis.project) this.currentStudentProjectCode = this.currentThesis.project.code;\n if (result.studentOwner) {\n this.currentStudent = result.studentOwner;\n this.currentStudentStep = result.studentOwner.currentStep;\n this.currentStepStatus = this.currentStudent.currentStepStatus;\n }\n }\n })\n );\n\n this.supervisorForm = this.formBuilder.group({\n depositDeadline: [null],\n reason: [null],\n mark: [this.documentsByType.find(a => !a.isArchived)?.mark, [Validators.max(20)]],\n });\n\n if (this.documentsByType?.length > 0) this.documentsByType = sortListByDate(this.documentsByType);\n if (this.currentStudent.specialisation.name !== Specialisation.EDI) {\n this.displayFooter = this.checkDisplayingSupervisorFooter();\n } else {\n this.displayFooter = true;\n this.checkNewDocuments();\n }\n\n this.enableValidButton = !this.readonlyStep;\n if (this.currentThesis.project?.code == Project.PCI) {\n this.supervisorForm.get('mark')?.addValidators(Validators.required);\n this.pciSupervisorInformations = {\n documentId: this.documentsByType.find(a => !a.isArchived)?.id ?? '',\n documentType: this.documentType,\n mark: null,\n controlIsValid: this.supervisorForm.controls.mark.valid,\n };\n this.addPCITrigger();\n }\n }\n\n //StepType for document validation message\n this.checkStepType();\n\n this.depositFileSubscription.add(this.breadcrumbService.addBreadcrumb(this.navigationTitle));\n\n if (this.supervisorMode) this.matDialogConfig = this.getDialogConfig();\n\n this.getComments();\n this.displaySmallUploader = this.checkDisplayingSmallUploader();\n }\n\n addPCITrigger() {\n this.depositFileSubscription.add(\n Object.keys(this.supervisorForm.controls).forEach(key => {\n if (key == 'reason') {\n const reasonControl = this.supervisorForm.controls[key];\n reasonControl.valueChanges.subscribe(value => {\n this.pciSupervisorInformations = {\n ...this.pciSupervisorInformations,\n comment: value,\n controlIsValid: this.supervisorForm.controls.mark.valid,\n };\n this.checkPCIStepValidation.emit(this.pciSupervisorInformations);\n });\n }\n if (key == 'mark') {\n const markControl = this.supervisorForm.controls[key];\n markControl.valueChanges.subscribe(value => {\n this.pciSupervisorInformations = {\n ...this.pciSupervisorInformations,\n mark: value,\n controlIsValid: this.supervisorForm.controls.mark.valid,\n };\n this.checkPCIStepValidation.emit(this.pciSupervisorInformations);\n });\n }\n })\n );\n }\n\n getComments() {\n if (this.currentStudent.thesis && this.currentStep) {\n const commentRequest: CommentRequest = {\n thesisId: this.currentStudent.thesis.id,\n stepNumber: this.currentStep,\n commentType: this.documentType == DocumentType.MINITHESIS || this.documentType == DocumentType.PROJECT ? this.documentType : null,\n };\n\n this.commentService.commentsPost({ body: commentRequest }).subscribe(result => {\n this.comments = result;\n if (this.comments?.length > 0) this.comments = sortListByDate(this.comments);\n });\n }\n }\n\n // Supervisor\n checkDisplayingSupervisorFooter(): boolean {\n return this.checkNewDocuments() && this.documentType !== DocumentType.MINITHESIS && this.documentType !== DocumentType.PROJECT;\n }\n\n checkNewDocuments(): boolean {\n this.newDocumentsExist = this.documentsByType.some(doc => !doc.isArchived && !doc.isValidated);\n return this.newDocumentsExist;\n }\n\n // Student\n checkDisplayingFooter(): boolean {\n const step = this.currentStudentStep;\n const stepStatus = this.currentStepStatus;\n const specialisation = this.currentStudent.specialisation;\n const projectCode = this.currentStudent.thesis?.project?.code;\n if (specialisation.name === Specialisation.CLASSIQUE) {\n if ((step === 2 && projectCode !== Project.IBL) || ((step === 3 || step === 4) && projectCode === Project.IBL)) {\n return stepStatus === EnumStepStatus.Refused || stepStatus === EnumStepStatus.InProgress;\n }\n } else if (specialisation.name === Specialisation.EDI) {\n return stepStatus === EnumStepStatus.Refused || stepStatus === EnumStepStatus.InProgress;\n } else if (specialisation.name === Specialisation.ALTERNANCE) {\n if (step === 2) {\n return stepStatus === EnumStepStatus.Refused || stepStatus === EnumStepStatus.InProgress;\n }\n }\n return false;\n }\n\n // Display the small uploader when current student step is 'Refused'\n checkDisplayingSmallUploader(): boolean {\n const step = this.currentStep;\n const stepStatus = this.currentStepStatus;\n const studentStep = this.currentStudentStep;\n const specialisation = this.currentStudent.specialisation;\n\n const validStepBySpecialisation =\n (specialisation.name === Specialisation.CLASSIQUE && step === studentStep) ||\n (specialisation.name === Specialisation.ALTERNANCE && step === studentStep) ||\n (specialisation.name === Specialisation.EDI && step === studentStep);\n\n return validStepBySpecialisation && stepStatus === EnumStepStatus.Refused && !this.readonlyStep;\n }\n\n checkStepType(): void {\n switch (this.documentType) {\n case DocumentType.MINITHESIS:\n this.stepType = StepType.INTER_PCI;\n this.supervisorPageTitle = 'SUP_MINI_THESIS_TITLE';\n this.navigationTitle = this.getNavigationTitle();\n this.markIsRequired = true;\n break;\n case DocumentType.PROJECT:\n this.stepType = StepType.INTER_PCI;\n this.supervisorPageTitle = 'SUP_PROJECT_TITLE';\n this.markIsRequired = true;\n break;\n case DocumentType.PITCH:\n this.stepType = StepType.PITCH;\n this.supervisorPageTitle = 'SUP_PITCH_TITLE';\n this.navigationTitle = 'PITCH';\n this.modalTitle = 'PITCH_REFUSED_TITLE';\n this.markIsRequired = this.supervisorMode || this.currentStep == 2;\n break;\n case DocumentType.BOOK:\n this.stepType = StepType.BOOK;\n this.supervisorPageTitle = 'SUP_BOOK_TITLE';\n this.navigationTitle = this.getNavigationTitle();\n break;\n case DocumentType.DRAFT:\n this.stepType = StepType.DRAFT;\n this.supervisorPageTitle = 'SUP_DRAFT_TITLE';\n this.navigationTitle = this.supervisorPageTitle;\n this.modalTitle = 'DRAFT_REFUSED_TITLE';\n break;\n case DocumentType.PLAN:\n this.stepType = StepType.PLAN;\n this.supervisorPageTitle = 'SUP_PLAN_TITLE';\n this.navigationTitle = this.supervisorPageTitle;\n this.modalTitle = 'PLAN_REFUSED_TITLE';\n break;\n case DocumentType.FINALDRAFT1:\n this.supervisorPageTitle = 'SUP_FINALDRAFT1_TITLE';\n this.navigationTitle = this.supervisorPageTitle;\n this.modalTitle = 'FINALDRAFT1_REFUSED_TITLE';\n break;\n case DocumentType.FINALDRAFT2:\n this.stepType = StepType.FINAL_DRAFTS;\n this.supervisorPageTitle = 'SUP_FINALDRAFT2_TITLE';\n this.navigationTitle = this.supervisorPageTitle;\n this.modalTitle = 'FINALDRAFT2_REFUSED_TITLE';\n break;\n case DocumentType.SPEC:\n this.navigationTitle = this.getNavigationTitle();\n }\n\n // Update this.stepType value when specialisation is 'Alternance'\n if (this.currentStudent.specialisation.name === Specialisation.ALTERNANCE) {\n if (this.stepType === StepType.PITCH) {\n this.stepType = StepType.PITCH_ALTERNANCE;\n } else if (this.stepType === StepType.FINAL) {\n this.stepType = StepType.FINAL_ALTERNANCE;\n }\n }\n }\n\n getNavigationTitle(): string {\n if (this.currentStudent.specialisation.name === Specialisation.CLASSIQUE) {\n switch (this.currentStudentProjectCode) {\n case Project.MEM:\n case Project.PC:\n return 'NAV_MEM_PC';\n case Project.PCE:\n return 'NAV_CLASSIQUE_PCE';\n case Project.PCI:\n return 'NAV_PCI';\n case Project.IBL:\n return 'NAV_IBL';\n }\n }\n if (this.currentStudent.specialisation.name === Specialisation.ALTERNANCE) {\n switch (this.currentStudentProjectCode) {\n case Project.MEM:\n case Project.PC:\n return 'NAV_MEM_PC';\n case Project.PCE:\n return 'NAV_ALT_PCE';\n }\n }\n if (this.currentStudent.specialisation.name === Specialisation.EDI) {\n return this.supervisorPageTitle;\n }\n\n return '';\n }\n\n // Filter documents by step, specialisation and project\n filterDocuments(documents: DocumentResponse[]): DocumentResponse[] {\n const studentStep = this.currentStudentStep;\n const specialisation = this.currentStudent.specialisation;\n const projectCode = this.currentStudent.thesis?.project?.code;\n\n if (specialisation.name === Specialisation.CLASSIQUE) {\n if (studentStep === 2 && projectCode !== Project.IBL) {\n return documents.filter(doc => doc.documentTypeCode === DocumentType.PITCH);\n } else if (studentStep === 2 && projectCode === Project.IBL) {\n const documentTypes = [DocumentType.PROBLEM, DocumentType.BOOK, DocumentType.MET, DocumentType.ANA].toString();\n return documents.filter(doc => documentTypes.includes(doc.documentTypeCode));\n } else if (studentStep === 3 && projectCode !== Project.IBL) {\n const documentTypes = [DocumentType.BOOK, DocumentType.MET, DocumentType.ANA].toString();\n return documents.filter(doc => documentTypes.includes(doc.documentTypeCode));\n } else if (studentStep === 3 && projectCode === Project.IBL) {\n return documents.filter(doc => doc.documentTypeCode === DocumentType.FINALDRAFT1);\n } else if (studentStep === 4 && projectCode === Project.IBL) {\n return documents.filter(doc => doc.documentTypeCode === DocumentType.FINALDRAFT2);\n }\n }\n\n if (specialisation.name === Specialisation.ALTERNANCE) {\n if (studentStep === 2) {\n return documents.filter(doc => doc.documentTypeCode === DocumentType.PITCH);\n } else if (studentStep === 3 && projectCode !== Project.PCE) {\n const documentTypes = [DocumentType.BOOK, DocumentType.MET, DocumentType.ANA].toString();\n return documents.filter(doc => documentTypes.includes(doc.documentTypeCode));\n } else if (studentStep === 3 && projectCode === Project.PCE) {\n const documentTypes = [DocumentType.SPEC, DocumentType.STUDY, DocumentType.BUSINESS1, DocumentType.BUSINESS2, DocumentType.BUSINESS3].toString();\n return documents.filter(doc => documentTypes.includes(doc.documentTypeCode));\n }\n }\n\n return documents.filter(doc => doc.documentTypeCode === DocumentType.PITCH);\n }\n\n // Check validation when depositing a single document (and only one)\n checkValidationDocuments(): void {\n const student = this.currentStudent;\n const step = this.currentStudentStep;\n const documents = this.documentsByType;\n const projectCode = student.thesis?.project?.code;\n\n if (student.specialisation.name === Specialisation.CLASSIQUE) {\n // P. Classique\n if (step === 2 && projectCode !== Project.IBL) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.PITCH);\n } else if (step === 3 && projectCode === Project.IBL) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.FINALDRAFT1);\n } else if (step === 4 && projectCode === Project.IBL) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.FINALDRAFT2);\n }\n } else if (student.specialisation.name === Specialisation.EDI) {\n // EDI\n if (step === 2) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.BOOK);\n } else if (step === 3) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.DRAFT);\n } else if (step === 4) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.PLAN);\n }\n } else if (student.specialisation.name === Specialisation.ALTERNANCE) {\n // P. Alternance\n if (step === 2) {\n this.enableValidButton = documents.some(doc => !doc.isArchived && !doc.isValidated && doc.documentTypeCode === DocumentType.PITCH);\n }\n }\n }\n\n incrementNameVersion(document: File, documentsLength: number): string {\n const index = document.name?.lastIndexOf('.');\n const extension = document.name?.slice(index);\n return `${document.name?.slice(0, index)}-v${documentsLength + 1}${extension}`;\n }\n\n uploadDocuments(uploadedDocuments: File[]): void {\n this.uploading = true;\n const thesisId = this.currentStudent.thesis?.id;\n const projectCode = this.currentStudent.thesis?.project?.code;\n if (thesisId && projectCode) {\n uploadedDocuments.forEach(document => {\n const name = this.incrementNameVersion(document, this.documentsByType.length);\n const request = {\n FileToUpload: new File([document], name, { type: document.type }),\n ThesisId: thesisId,\n DocumentTypeCode: this.documentType,\n SpecialisationName: this.currentStudent.specialisation.name,\n ProjectCode: projectCode,\n };\n\n this.documentsService\n .createDocumentAsync({ body: request })\n .pipe(\n map((result: DocumentResponse) => {\n if (result.id) {\n this.documentsByType = [result, ...this.documentsByType];\n if (this.documentsByType?.length > 0) this.documentsByType = sortListByDate(this.documentsByType);\n this.uploading = false;\n this.checkValidationDocuments();\n }\n }),\n tap(() => {\n if (this.shouldEmitDocumentEvents()) {\n this.documentUploaded.emit(this.documentsByType);\n }\n })\n )\n .subscribe();\n });\n }\n }\n\n deleteDocument(id: string): void {\n this.uploading = true;\n this.documentsService\n .deleteDocumentAsync({ documentId: id })\n .pipe(\n map(result => {\n if (result) {\n this.documentsByType = [...this.documentsByType.filter(doc => doc.id != id)];\n this.uploading = false;\n this.enableValidButton = false;\n }\n }),\n tap(() => {\n if (this.shouldEmitDocumentEvents()) {\n this.documentDeleted.emit(id);\n }\n })\n )\n .subscribe();\n }\n\n shouldEmitDocumentEvents(): boolean {\n const step = this.currentStudentStep;\n const specialisation = this.currentStudent.specialisation;\n const projectCode = this.currentStudent.thesis?.project?.code;\n\n if (specialisation.name === Specialisation.EDI) return true;\n if (specialisation.name === Specialisation.CLASSIQUE) {\n if (step === 3 || (step === 2 && projectCode === Project.IBL) || (step === 4 && projectCode === Project.IBL)) {\n return true;\n }\n } else if (specialisation.name === Specialisation.ALTERNANCE) {\n if (step === 2 || step === 3) {\n return true;\n }\n }\n\n return false;\n }\n\n // Supervisor review\n review(): void {\n if (this.supervisorMode) {\n if (!this.supervisorForm.controls.reason.value) {\n this.supervisorForm.controls.reason.setErrors({\n required: true,\n });\n this.supervisorForm.controls.reason.markAsTouched();\n } else {\n const dialogRef = this.matDialog.open(DialogComponent, this.matDialogConfig);\n dialogRef.afterClosed().subscribe(limitDate => {\n if (limitDate != false) {\n this.formJustSavedOrValidated = true;\n const request: SupervisorValidationStepRequest = {\n currentStepId: this.currentThesis.studentOwner?.currentStepId ?? '',\n depositLimitDate: limitDate.toDateString(),\n isValidated: false,\n userRole: Roles.Supervisor,\n documentCode: this.documentType,\n specialisation: this.currentThesis.studentOwner?.specialisation.name ?? '',\n validationCreatorId: this.currentSupervisorId,\n comment: this.supervisorForm.controls.reason.value.trim(),\n documentId: this.documentsByType.find(doc => !doc.isArchived && !doc.isValidated)?.id ?? '',\n };\n\n this.supervisorService.documentStepValidationAsync({ body: request }).subscribe(result => {\n if (result) {\n this.notificationService\n .success('REVIEW_SUCCESS')\n .afterDismissed()\n .subscribe(() => {\n this.formJustSavedOrValidated = false;\n this.location.back();\n });\n }\n });\n }\n });\n }\n }\n }\n\n validStep(): void {\n // Student Mode\n if (!this.supervisorMode && this.getValidationStepConditions() && this.currentStudent.currentStepId) {\n this.stepsService\n .updateStepAsync({\n stepId: this.currentStudent.currentStepId,\n body: {\n stepStatus: EnumStepStatus.ValidationInProgress,\n },\n })\n .subscribe(result => {\n this.stepSubmitted = !!result;\n this.globalStorageService.updateStudentCurrentStepAndDispatchToStore(this.currentStudent, result);\n });\n }\n\n // Supervisor Mode\n if (this.supervisorMode) {\n this.supervisorForm.controls.reason.setErrors(null);\n if (this.markIsRequired && !this.supervisorForm.controls.mark.value) {\n this.supervisorForm.controls.mark.setErrors({\n required: true,\n });\n this.supervisorForm.controls.mark.markAsTouched();\n } else {\n this.formJustSavedOrValidated = true;\n const request: SupervisorValidationStepRequest = {\n currentStepId: this.currentStudent.currentStepId ?? '',\n isValidated: true,\n userRole: Roles.Supervisor,\n specialisation: this.currentStudent.specialisation.name,\n validationCreatorId: this.currentSupervisorId,\n comment: this.supervisorForm.controls.reason.value,\n documentId: this.documentsByType[0].id,\n documentCode: this.documentType,\n mark: this.supervisorForm.controls.mark.value,\n };\n this.supervisorService.documentStepValidationAsync({ body: request }).subscribe(result => {\n if (result) {\n this.notificationService\n .success('VALID_SUCCESS')\n .afterDismissed()\n .subscribe(() => {\n this.formJustSavedOrValidated = false;\n this.location.back();\n });\n }\n });\n }\n }\n }\n\n getValidationStepConditions(): boolean {\n const specialisation = this.currentStudent.specialisation;\n\n // P. Classique\n if (specialisation.name === Specialisation.CLASSIQUE) {\n if (this.documentType === DocumentType.PITCH) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.PITCH) !== -1;\n }\n if (this.documentType === DocumentType.FINALDRAFT1) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.FINALDRAFT1) !== -1;\n }\n if (this.documentType === DocumentType.FINALDRAFT2) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.FINALDRAFT2) !== -1;\n }\n }\n\n // EDI\n if (specialisation.name === Specialisation.EDI) {\n if (this.documentType === DocumentType.BOOK) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.BOOK) !== -1;\n }\n if (this.documentType === DocumentType.DRAFT) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.DRAFT) !== -1;\n }\n if (this.documentType === DocumentType.PLAN) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.PLAN) !== -1;\n }\n }\n\n // P. Alternant\n if (specialisation.name === Specialisation.ALTERNANCE) {\n if (this.documentType === DocumentType.PITCH) {\n return this.documentsByType.findIndex(doc => doc.documentTypeCode == DocumentType.PITCH) !== -1;\n }\n }\n\n return false;\n }\n\n downloadFile(document: DocumentResponse): void {\n window.open(document.downloadUrl, '_blank');\n }\n\n deleteComment(commentId: string) {\n this.supervisorService.deleteStepCommentAsync({ commentId }).subscribe(result => {\n if (result) this.comments = this.comments.filter(a => a.id != commentId);\n if (this.comments?.length > 0) this.comments = sortListByDate(this.comments);\n });\n }\n\n goBack() {\n this.location.back();\n }\n\n //KeyDown on Mark input\n onKeyDown(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement;\n if (input.value.length >= 5 && event.code !== 'Backspace' && event.code !== 'Delete') {\n event.preventDefault();\n }\n }\n\n // Configuration for dialog component\n getDialogConfig(): MatDialogConfig {\n let defaultDate = new Date();\n defaultDate.setDate(defaultDate.getDate() + 15);\n const dialogConfig = new MatDialogConfig();\n dialogConfig.width = '500px';\n dialogConfig.disableClose = true;\n dialogConfig.enterAnimationDuration = '300ms';\n dialogConfig.exitAnimationDuration = '200ms';\n dialogConfig.data = {\n title: this.modalTitle,\n content: 'DOC_REFUSED_MESSAGE',\n alignContent: 'center',\n defaultDate: defaultDate,\n cancelButton: { name: 'CANCEL', className: 'customButtons' },\n validButton: { name: 'CONFIRM_DATE', className: 'customButtons' },\n };\n return dialogConfig;\n }\n}\n","\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { DocumentType } from '@sharedEnums/documentType.enum';\nimport { Store } from '@ngrx/store';\nimport * as thesisReducer from 'src/store/thesis/thesis.reducer';\nimport * as studentReducer from 'src/store/student/student.reducer';\nimport { StudentState } from 'src/store/student/student.states';\nimport { Subscription } from 'rxjs';\nimport { StepsService } from '@sharedServices/steps.service';\nimport { DocumentResponse } from '@sharedModels/document-response';\nimport { AutoUnsubscribe } from 'src/app/shared/decorators/autoUnsubscribe';\nimport { EnumStepStatus } from '@sharedModels/enum-step-status';\nimport { ProjectResponse } from '@sharedModels/project-response';\nimport { Project } from '@sharedEnums/project.enum';\nimport GlobalStorageService from '@coreServices/globalStorageService';\nimport { SpecialisationResponse } from '@sharedModels/specialisation-response';\nimport { Specialisation } from '@sharedEnums/specialisation.enum';\nimport { NotificationService } from 'src/app/shared/services/notification.service';\nimport { StepType } from '@sharedEnums/step-type.enum';\nimport { ActivatedRoute } from '@angular/router';\nimport { PciSupervisorValidation } from '@sharedModels/pci-validation.model';\nimport { ThesisSupervisorState } from 'src/store/thesis/thesis.states';\nimport { SupervisorsService } from '@sharedServices/supervisors.service';\nimport { SupervisorIntermediateValidationPciStepRequest, UpdateDocumentRequest } from 'src/app/shared/api/models';\nimport { StudentResponse } from '@sharedModels/student-response';\n\n@Component({\n selector: 'app-intermediate-docs-form',\n templateUrl: './intermediate-docs-form.component.html',\n styleUrls: ['./intermediate-docs-form.component.scss'],\n})\n@AutoUnsubscribe()\nexport class IntermediateDocsFormComponent implements OnInit {\n @Input() currentStep!: number;\n\n DocumentType = DocumentType;\n EnumStepStatus = EnumStepStatus;\n ProjectEnum = Project;\n SpecialisationEnum = Specialisation;\n\n supervisorMode!: boolean;\n stepIsValid = false;\n stepSubmitted = false;\n displayFooter!: boolean;\n PCIstepIsValid = false;\n intermediateDocsFormSubscriptions = new Subscription();\n\n currentStudent!: StudentResponse;\n currentStudentStep: number | undefined;\n currentStepStatus!: EnumStepStatus | undefined;\n currentStepId!: string;\n project!: ProjectResponse;\n currentDocuments!: DocumentResponse[];\n specialisation!: SpecialisationResponse;\n depositLimitDate!: string;\n stepType!: StepType;\n pciValidationInformations!: PciSupervisorValidation[];\n currentSupervisorId!: string;\n\n constructor(\n private stepsService: StepsService,\n private thesisSupervisorStore: Store,\n private studentStore: Store,\n private globalStorageService: GlobalStorageService,\n private notificationService: NotificationService,\n private supervisorService: SupervisorsService,\n private route: ActivatedRoute,\n private location: Location\n ) {}\n\n ngOnInit(): void {\n this.intermediateDocsFormSubscriptions.add(\n this.route.data.subscribe(value => {\n this.supervisorMode = value.supervisorMode ?? false;\n })\n );\n\n if (!this.supervisorMode) {\n this.intermediateDocsFormSubscriptions.add(\n this.studentStore.select(studentReducer.getStudent).subscribe(result => {\n this.currentStudent = result;\n if (this.currentStudent) {\n this.specialisation = this.currentStudent.specialisation;\n this.currentStudentStep = this.currentStudent.currentStep;\n this.currentStepStatus = this.currentStudent.currentStepStatus;\n this.depositLimitDate = this.currentStudent.depositLimitDate ?? '';\n if (this.currentStudent.currentStepId) this.currentStepId = this.currentStudent.currentStepId;\n this.project = this.currentStudent.thesis?.project!;\n if (this.currentStudent.thesis?.documents) {\n this.currentDocuments = this.currentStudent.thesis.documents;\n this.stepIsValid =\n this.filterDocumentsBySpecialisationAndProject(this.specialisation, this.project, this.currentDocuments).length ===\n this.checkDocumentLength(this.specialisation, this.project);\n }\n this.displayFooter = this.checkDisplayingStudentFooter();\n }\n })\n );\n } else {\n this.intermediateDocsFormSubscriptions.add(\n this.thesisSupervisorStore.select(thesisReducer.getThesisSupervisor).subscribe(result => {\n if (result.studentOwner) this.specialisation = result.studentOwner.specialisation;\n if (result.project) this.project = result.project;\n if (result.studentOwner?.currentStepId) this.currentStepId = result.studentOwner.currentStepId;\n if (result.studentOwner?.currentStepStatus) this.currentStepStatus = result.studentOwner.currentStepStatus;\n this.displayFooter = this.checkDisplayingSupervisorFooter();\n if (result.supervisor) this.currentSupervisorId = result.supervisor.id;\n this.pciValidationInformations = new Array();\n })\n );\n }\n }\n\n checkDisplayingSupervisorFooter(): boolean {\n return this.currentStepStatus === EnumStepStatus.ValidationInProgress && this.project.code == Project.PCI;\n }\n\n checkDisplayingStudentFooter(): boolean {\n return (\n (this.currentStepStatus === EnumStepStatus.Refused || this.currentStepStatus === EnumStepStatus.InProgress) &&\n (this.currentStudentStep === 3 || (this.currentStudentStep === 2 && this.project.code === Project.IBL && !this.stepSubmitted))\n );\n }\n\n onCheckPCIStepValidation(pcivalidationInfo: PciSupervisorValidation) {\n const pcivalidationInfoIndex = this.pciValidationInformations.findIndex(a => a.documentType == pcivalidationInfo.documentType);\n\n if (pcivalidationInfoIndex !== -1) {\n this.pciValidationInformations[pcivalidationInfoIndex] = pcivalidationInfo;\n } else {\n this.pciValidationInformations.push(pcivalidationInfo);\n }\n\n const miniThesisInformations = this.pciValidationInformations.find(a => a.documentType == DocumentType.MINITHESIS);\n const projectInformations = this.pciValidationInformations.find(a => a.documentType == DocumentType.PROJECT);\n if (miniThesisInformations && projectInformations) {\n this.stepIsValid = miniThesisInformations.controlIsValid && projectInformations.controlIsValid;\n }\n }\n\n onDocumentUploaded(documents: DocumentResponse[]) {\n this.currentDocuments = [...this.currentDocuments, ...documents];\n this.stepIsValid =\n this.filterDocumentsBySpecialisationAndProject(this.specialisation, this.project, this.currentDocuments).length ===\n this.checkDocumentLength(this.specialisation, this.project);\n this.globalStorageService.updateThesisDocumentsAndDispatchToStore(this.currentStudent, this.currentDocuments);\n this.notificationService.success('DOC_UPLOADED');\n }\n\n onDocumentDeleted(id: string) {\n this.currentDocuments = [...this.currentDocuments.filter(doc => doc.id !== id)];\n this.stepIsValid = false;\n this.globalStorageService.updateThesisDocumentsAndDispatchToStore(this.currentStudent, this.currentDocuments);\n this.notificationService.success('DOC_DELETED');\n }\n\n checkDocumentLength(specialisation: SpecialisationResponse, project: ProjectResponse): number {\n if (specialisation.name === Specialisation.CLASSIQUE) {\n if (project.code === Project.MEM || project.code === Project.PC) {\n return 3;\n } else if (project.code === Project.IBL || project.code === Project.PCE) {\n return 4;\n } else if (project.code === Project.PCI) {\n return 2;\n }\n } else if (specialisation.name === Specialisation.ALTERNANCE) {\n return project.code === Project.PCE ? 5 : 3;\n }\n\n return 0;\n }\n\n filterDocumentsBySpecialisationAndProject(\n specialisation: SpecialisationResponse,\n project: ProjectResponse,\n documents: DocumentResponse[]\n ): DocumentResponse[] {\n let documentTypes = this.getDocumentsType(specialisation, project);\n return documents.filter(doc => documentTypes.includes(doc.documentTypeCode));\n }\n\n getDocumentsType(specialisation: SpecialisationResponse, project: ProjectResponse): string[] {\n if (specialisation.name === Specialisation.CLASSIQUE) {\n switch (project.code) {\n case Project.MEM:\n case Project.PC:\n return [DocumentType.BOOK, DocumentType.MET, DocumentType.ANA];\n\n case Project.PCE:\n return [DocumentType.SPEC, DocumentType.STUDY, DocumentType.BUSINESS, DocumentType.FINANCIAL];\n\n case Project.PCI:\n return [DocumentType.MINITHESIS, DocumentType.PROJECT];\n\n case Project.IBL:\n return [DocumentType.BOOK, DocumentType.MET, DocumentType.ANA, DocumentType.PROBLEM];\n }\n } else if (specialisation.name === Specialisation.ALTERNANCE) {\n switch (project.code) {\n case Project.MEM:\n case Project.PC:\n return [DocumentType.BOOK, DocumentType.MET, DocumentType.ANA];\n\n case Project.PCE:\n return [DocumentType.SPEC, DocumentType.STUDY, DocumentType.BUSINESS1, DocumentType.BUSINESS2, DocumentType.BUSINESS3];\n }\n }\n return [];\n }\n\n validStep(): void {\n if (this.stepIsValid) {\n // PCI Project\n if (!this.supervisorMode && this.project.code == Project.PCI) {\n this.stepsService\n .updateStepAsync({\n stepId: this.currentStepId,\n body: {\n stepStatus: EnumStepStatus.ValidationInProgress,\n },\n })\n .subscribe(result => {\n this.stepSubmitted = !!result;\n this.displayFooter = this.checkDisplayingStudentFooter();\n this.globalStorageService.updateStudentCurrentStepAndDispatchToStore(this.currentStudent, result);\n });\n }\n\n // PCI Project -- validation Mini Thesis & project\n if (this.supervisorMode && this.project.code == Project.PCI) {\n this.stepIsValid = false; // Disable valid button\n let documentsToValidate = new Array();\n\n this.pciValidationInformations.forEach(pciInformation => {\n documentsToValidate.push({\n id: pciInformation.documentId,\n mark: pciInformation.mark,\n comment: pciInformation.comment,\n commentType: pciInformation.documentType,\n });\n });\n\n var request: SupervisorIntermediateValidationPciStepRequest = {\n currentStepId: this.currentStepId ?? '',\n isValidated: true,\n validationCreatorId: this.currentSupervisorId,\n updateDocuments: documentsToValidate,\n };\n\n this.supervisorService.documentsPciStepValidationAsync({ body: request }).subscribe(() => {\n this.notificationService\n .success('VALID_SUCCESS')\n .afterDismissed()\n .subscribe(() => this.location.back());\n });\n }\n\n // Project !PCI\n if (this.currentStepId != null && this.project.code !== Project.PCI) {\n this.stepsService\n .validateStepAndNextAsync({\n body: {\n currentStepId: this.currentStepId,\n },\n })\n .subscribe(result => {\n if (result) {\n // TODO : Refactor this component and function to emit an event instead of reloading\n // Reload view after step validation to update documents status ('isValidated' attribute)\n // in order to display them in the information panel\n location.reload();\n }\n });\n }\n }\n }\n}\n"],"x_google_ignoreList":[]}