{"version":3,"file":"appealDetails-bundle.js","mappings":"6BAAIA,ECCAC,EADAC,ECAAC,EACAC,E,0FCMJC,IAAAA,gBAAAA,SAA8B,IAAIC,IAAJ,CAA0B,CACtDC,UAAW,YACXC,QAASC,OACTC,SAAUL,IAAAA,gBACVM,mBAAmB,ICKrB,UAhBA,WAEE,IAAIC,EAAOC,KAEXD,EAAKE,aAAe,KACpBF,EAAKG,cAAgB,KACrBH,EAAKI,eAAiB,KACtBJ,EAAKK,wBAA0B,KAE/BL,EAAKM,KAAO,SAAUC,GACpBP,EAAKQ,yBAA2BD,EAAQC,yBACxCR,EAAKS,iBAAmBF,EAAQE,iBAChCT,EAAKU,yBAA2BH,EAAQG,wBAC1C,CACF,E,mBCkFA,MA3FA,WAEE,IAAIV,EAAOC,KACXD,EAAKW,8BAA+B,EACpCX,EAAKY,aAAenB,IAAAA,WAAc,MAOlCO,EAAKM,KAAO,SAAUM,EAAcD,GAClCX,EAAKY,aAAaA,GAClBZ,EAAKW,6BAA+BA,GAAgCX,EAAKW,4BAC3E,EAEAX,EAAKa,4BAA8B,SAAUC,EAAqBC,EAAab,GAE7E,IAAKF,EAAKY,eACR,MAAM,IAAII,MAAM,kGAKlB,IAAIC,EAAmBxB,IAAAA,MAAAA,OAAgB,CAAC,EAAGqB,GAC3Cd,EAAKY,aAAanB,IAAAA,MAAAA,OAAgBwB,EAAkBjB,EAAKY,iBAEzDM,QAAQC,MACN,UAAWJ,EAAa,gCACxBK,OAAOC,KAAKP,GAAqBQ,OAAQ,6BAA8BpB,EAC3E,EAOAF,EAAKuB,UAAY,SAAUC,GAEzB,IAAKxB,EAAKY,eACR,MAAM,IAAII,MAAM,2CAGlB,IAAIS,EAAQzB,EAAKY,eAAeY,GAEhC,OAAIC,EAEEzB,EAAKW,6BACA,IAAMc,EAAQ,IAGhBA,EAGF,KAAOD,EAAc,IAC9B,EASAxB,EAAK0B,oBAAsB,SAAUC,EAAwBC,GAa3D,OAZIA,GAEFR,OAAOS,QAAQD,GAAmBE,SAAQ,IAA+B,IAA7BC,EAAYC,GAAY,EAEvC,mBAAhBA,IACTA,EAAcvC,IAAAA,MAAAA,iBAA0BuC,MAG1CL,EAAyBA,EAAuBM,QAAQ,IAAMF,EAAa,IAAKC,EAAY,IAIzFL,CACT,EAQA3B,EAAKkC,gBAAkB,WACrB,QAASlC,EAAKY,cAChB,CACF,ECpFA,EANqB,CACnB,Q,yXACA,G,6ZACA,Q,8YC0MF,MA1MA,WAEE,IAAIZ,EAAOC,KAGPkC,EAAyB,CAAC,QAAS,KAAM,SAIzCC,GAAwB,EAGxBC,GAAuB,EAmL3B,SAASC,EAAcd,EAAae,EAAiBC,EAAcC,GAEjE,MAAO,CACLjB,YAAaA,EACbe,gBAAiBA,EACjBC,aAAcA,EACdC,YAAaA,EAEjB,CAzLAC,IAAAA,QAAiB,CACfC,aAAa,EACbC,aAAa,EACbC,aAAa,EACbC,QAAS,KAGX9C,EAAKM,KAAO,SAAUJ,GAIfA,GACHF,EAAK+C,6BACH,0DACA,qGAGJ7C,EAAeA,EAAa8C,cAE5B9C,EADwBiC,EAAuBc,QAAQ/C,IAAiB,EACjCA,EA3Bf,QA4BxBgD,EAAerC,4BAA4BD,EAAaV,GAAe,aAAcA,EACvF,EAEAF,EAAKmD,WAAa,SAAU5C,GAC1B6B,EAAwB7B,EAAQ6B,sBAChCC,EAAuB9B,EAAQ8B,oBACjC,EAQArC,EAAKoD,MAAQ,SAAU5B,EAAagB,EAAcC,GAEhD,IAAIY,EAAUH,EAAe3B,UAAUC,GACnC8B,EAAehB,EAAcd,EAAa6B,EAASb,EAAcC,GAEjEL,GAAyBI,IAC3Ba,GAAW,IAAMb,GAGnBtB,QAAQkC,MAAME,GACdZ,IAAAA,MAAaW,EAAS,KAAM,CAAEP,QAAS,KACzC,EAQA9C,EAAKuD,oBAAsB,SAAU/B,EAAagB,EAAcC,GAE9D,IAAIY,EAAUH,EAAe3B,UAAUC,GACnC8B,EAAehB,EAAcd,EAAa6B,EAASb,EAAcC,GAEjEL,GAAyBI,IAC3Ba,GAAW,IAAMb,GAGnBtB,QAAQkC,MAAME,GACdZ,IAAAA,MAAaW,EAAS,KAAM,CAAEP,QAAS,MACzC,EAQA9C,EAAKwD,QAAU,SAAUhC,EAAagB,EAAcC,GAElD,IAAIY,EAAUH,EAAe3B,UAAUC,GACnCiC,EAAiBnB,EAAcd,EAAa6B,EAASb,EAAcC,GAEnEL,GAAyBI,IAC3Ba,GAAW,IAAMb,GAGnBtB,QAAQwC,KAAKD,GACbf,IAAAA,QAAeW,EAAS,KAAM,CAAEP,QAAS,KAC3C,EAOA9C,EAAKmB,MAAQ,SAAUqB,EAAcmB,GAE/BtB,IAEEsB,EACFzC,QAAQC,MAAMqB,EAAcmB,GAE5BzC,QAAQC,MAAMqB,GAGpB,EAEAxC,EAAK4D,QAAU,SAAUpC,GAEvB,IAAI6B,EAAUH,EAAe3B,UAAUC,GACvCkB,IAAAA,QAAeW,EACjB,EAEArD,EAAK6D,KAAO,SAAUrC,GAEpB,IAAI6B,EAAUH,EAAe3B,UAAUC,GACvCkB,IAAAA,KAAYW,EACd,EAUArD,EAAK+C,6BAA+B,SAAUR,EAAiBC,EAAcC,GAK3E,KAHAA,EAAcA,GAAe,CAAC,GAGdqB,mBAAhB,CAIA,IACIR,EAAehB,EADD,2BAC4BC,EAAiBC,EAAcC,GACzEY,EAAUd,EAUd,MARIH,GAAyBI,IAC3Ba,GAAW,IAAMb,GAGnBtB,QAAQkC,MAAME,GACdZ,IAAAA,MAAaW,EAAS,KAAM,CAAEP,QAAS,OAEvCL,EAAYqB,oBAAqB,EAC3BrB,CAdN,CAeF,EAEAzC,EAAK+D,sBAAwB,WAE3B,IAAIvC,EAAc,iCACd6B,EAAW,kNAGXH,EAAehB,oBACjBmB,EAAUH,EAAe3B,UAAUC,IAGrC,IAAIiC,EAAiBnB,EAAcd,EAAa6B,GAEhDnC,QAAQwC,KAAKD,GACbf,IAAAA,QAAeW,EAAS,KAAM,CAAEP,QAAS,IAAOkB,mBAAmB,GACrE,EAEAhE,EAAKiE,WAAa,WAEhB,IAAIzC,EAAc,0BACd6B,EAAU,gGAEVH,EAAehB,oBACjBmB,EAAUH,EAAe3B,UAAUC,IAGrC,IAAIiC,EAAiBnB,EAAcd,EAAa6B,GAEhDnC,QAAQwC,KAAKD,GACbf,IAAAA,QAAeW,EAAS,KAAM,CAAEP,QAAS,IAAOkB,mBAAmB,GACrE,CAWF,EC7MA,MAAME,EAA+BC,SAASC,eAAe,gCAExDF,GACHG,EAAOtB,6BAA6B,8CAKtC,OACEuB,sBAH4BJ,EAA6BK,aAAa,eCIxE,EAPsB,CAClBC,KAAM,OACNC,QAAS,UACTC,OAAQ,U,mBCgEZ,MAnEA,WAEazE,KAON0E,oBAAsB,SAAUC,IAUrC,SAAoCA,GAEb,MAAjBA,EAAMC,SACRR,EAAON,wBACPa,EAAMd,oBAAqB,EAE/B,CAfEgB,CAA2BF,GAqB7B,SAA4BA,GAED,YAArBA,EAAMG,aACRV,EAAOJ,aACPW,EAAMd,oBAAqB,EAE/B,CA1BEkB,CAAmBJ,GAkCrB,SAAkCA,GAChC,IAAInC,EAAcmC,EAAMK,aAExB,GAAKxC,EAAL,CAIA,GAA2B,iBAAhBA,EACT,IACEA,EAAcyC,KAAKC,MAAMP,EAAMK,aAIjC,CAHE,MAAOG,GAEP,YADAlE,QAAQ2C,KAAM,yEAEhB,CAGEpB,EAAY4C,eAAiB5C,EAAY6C,oBAC3CV,EAAMW,oBAAsB9C,EAAY4C,cAZ1C,CAcF,CApDEG,CAAyBZ,EAC3B,CAoDF,ECoBA,MAvFA,WAEE,IAAI5E,EAAOC,KAoEX,SAASwF,EAAkBC,EAAKC,EAAMC,GAEpC,IAAIC,EAAW,CACbH,IAAKA,EACLC,KAAMA,GAAQ,MACdG,SAAmB,WAATH,EAAoB,KAAO,QAQvC,OALIC,IACFC,EAASD,KAAOV,KAAKa,UAAUH,GAC/BC,EAASG,YAAc,oBAGlBH,CACT,CA3EA7F,EAAKiG,QAAU,SAAUP,GACvB,OAAO,IAAIQ,SAAQ,SAAUC,EAASC,GACpCC,IAAAA,KAAOZ,EAAkBC,IAAMY,KAAKH,GAAS,SAAUvB,GACrD2B,EAAqB5B,oBAAoBC,GACzCwB,EAAOxB,EACT,GACF,GACF,EAQA5E,EAAKwG,SAAW,SAAUd,EAAKE,GAE7B,OAAO,IAAIM,SAAQ,SAAUC,EAASC,GACpCC,IAAAA,KAAOZ,EAAkBC,EAAK,OAAQE,IAAOU,KAAKH,GAAS,SAAUvB,GACnE2B,EAAqB5B,oBAAoBC,GACzCwB,EAAOxB,EACT,GACF,GACF,EAOA5E,EAAKyG,WAAa,SAAUf,GAC1B,OAAO,IAAIQ,SAAQ,SAAUC,EAASC,GACpCC,IAAAA,KAAOZ,EAAkBC,EAAK,WAAWY,KAAKH,GAAS,SAAUvB,GAC/D2B,EAAqB5B,oBAAoBC,GACzCwB,EAAOxB,EACT,GACF,GACF,EAQA5E,EAAK0G,QAAU,SAAUhB,EAAKE,GAC5B,OAAO,IAAIM,SAAQ,SAAUC,EAASC,GACpCC,IAAAA,KAAOZ,EAAkBC,EAAK,MAAOE,IAAOU,KAAKH,GAAS,SAAUvB,GAClE2B,EAAqB5B,oBAAoBC,GACzCwB,EAAOxB,EACT,GACF,GACF,CAwBF,ECpDA,MAlCA,WACE,IAAI5E,EAAOC,KAEP0G,EAAkB,iBAEtB3G,EAAK4G,oCAAsC,SAAUC,EAAeC,GAElE,IAAIC,EAAoB,CACtBD,aAAcA,EACdD,cAAeA,GAGjB,OAAOG,EAA0BR,SAASG,EAAiBI,EAC7D,EAEA/G,EAAKiH,YAAc,SAAUC,GAC3B,IAAIC,EAAiBR,EAAkBO,EAEvC,OAAOF,EAA0Bf,QAAQkB,EAAgBD,EAC3D,EAEAlH,EAAKoH,iBAAmB,SAAUF,EAAyBG,GAEzD,IAAIN,EAAoB,CACtBG,wBAAyBA,EACzBG,gBAAiBA,GAGfC,EAAsBX,EAAkBO,EAE5C,OAAOF,EAA0BN,QAAQY,EAAqBP,EAChE,CACF,ECgDA,EA5EA,SAAgCQ,GAE9B,IAAIvH,EAAOC,KAoCX,SAASuH,IAaT,IAAwBlD,EAAuBwC,EAEzCD,GAFkBvC,EAXPtE,EAAKsE,sBAWyBwC,EAXF9G,EAAK8G,eAa5CD,EAAgB,CAClBY,sBAAuBnD,EACvBoD,WAAYC,EAAAA,QAGP,IAAIzB,SAAQ,SAAUC,EAASC,GACpCwB,EAAmBhB,oCAAoCC,EAAeC,GACnER,MAAK,SAAUuB,GACd1B,EAAQ0B,EACV,IACCC,OAAM,SAAUlD,GAEfP,EAAOtB,6BACL,2EACA,+CACA6B,GAEFwB,EAAOxB,EACT,GACJ,KA/BG0B,MAAK,SAAUuB,GACd7H,EAAKkH,wBAA0BW,EAASX,wBACxClH,EAAK+H,uBAAsB,EAC7B,IACCD,OAAM,SAAUlD,GAEf,OAAOsB,QAAQE,OAAOxB,EACxB,GACJ,CA7CA5E,EAAK+H,sBAAwBtI,IAAAA,YAAc,GAC3CO,EAAKgI,iBAAmBvI,IAAAA,WAAcO,EAAKiI,kBAC3CjI,EAAKiI,iBAAmBC,EAAY9H,eAAe+H,6BAEnDnI,EAAKoI,sBAAwB3I,IAAAA,YAAc,GAE3CO,EAAKqI,oBAAsB5I,IAAAA,UAAY,WACrC,OAAQO,EAAKgI,qBAAuBhI,EAAK+H,uBAC3C,IAEA/H,EAAKE,aAAegI,EAAYhI,aAChCF,EAAKsI,iBAAmBJ,EAAY9H,eAAekI,iBAEnDtI,EAAK8G,aAAerH,IAAAA,WAAcO,EAAKiI,iBAAmB,KAAO,oBACjEjI,EAAKuI,gBAAkB,WACjBvI,EAAKgI,kBAA4C,OAAxBhI,EAAK8G,gBAAmD,qBAAxB9G,EAAK8G,iBAChE9G,EAAKgI,kBAAiB,GACtBR,IAEJ,EAEAxH,EAAKsE,sBAAwBiD,EAAOjD,sBACpCtE,EAAKkH,wBAA0B,KAC/BlH,EAAKwI,aAAeb,EAAAA,OACpB3H,EAAKyI,iBAAmB,WACtBzI,EAAKoI,uBAAsB,GAEvBpI,EAAKiI,iBACPjI,EAAKgI,kBAAiB,GAEtBR,GAEJ,CAsCF,ECtEA/H,IAAAA,gBAAAA,aAAkC,CAChCiJ,OAAQ,SAAUC,EAASC,EAAeC,GAExC,IAAIpH,EAAQmH,IACRrB,EAASsB,EAAYC,IAAI,UAE7B,GAAIrH,EAAO,CACT,IAAIsH,EAAO7F,EAAe3B,UAAU9B,IAAAA,MAAAA,iBAA0BgC,IAE1D8F,IACFwB,EAAO7F,EAAexB,oBAAoBqH,EAAMxB,IAGlD9H,IAAAA,oBAAuBkJ,EAAS,CAAEK,KAAM,CAAE,aAAcD,IAC1D,CACF,GChBFtJ,IAAAA,gBAAAA,QAA6B,CAC3BiJ,OAAQ,SAAUC,EAASC,EAAeK,EAAqBC,EAAWC,GAExE,IAawBC,EAEtB3H,EAfEsH,EAiBU,QAJUK,EAbM3J,IAAAA,MAAAA,iBAA0BmJ,MAkBjD,OAIc,iBAAZQ,GAAwBA,aAAmBC,UACpDD,EAAU,CAAEE,IAAKF,IAGnB3H,EAAQyB,EAAe3B,UAAU6H,EAAQE,KACjCpG,EAAexB,oBAAoBD,EAAO2H,EAAQ7B,SAzBxD9H,IAAAA,gBAAAA,KAAAA,OACEkJ,GACA,WACE,OAAOI,CACT,GACAE,EACAC,EACAC,EACJ,GCfF1J,IAAAA,gBAAAA,eAAoC,CAElCa,KAAM,SAAUqI,EAASC,GACvB,IAAIG,EAAO7F,EAAe3B,UAAUqH,KACpCnJ,IAAAA,oBAAuBkJ,EAAS,CAAEK,KAAM,CAAEO,YAAaR,IACzD,GCKF,ICjBKS,EDiBL,MAbA,WAMavJ,KAGNK,KAAO,WACZ,CACF,EEDA,MAZA,WAEaL,KAENwJ,gBAAkB,SAAUvJ,GAE/B,IAAIwJ,EAAc,qBAAuBxJ,EAEzC,OAAO8G,EAA0Bf,QAAQyD,EAC3C,CACF,ECMA,MAhBA,WAEazJ,KAON0J,kBAAoB,WAGvB,OAAO3C,EAA0Bf,QADf2D,qCAEpB,CACF,ECHA,MAXA,WAEa3J,KAEN4J,mBAAqB,SAAUC,GAElC,IAAIJ,EAAc,wBAA0BI,EAC5C,OAAO9C,EAA0Bf,QAAQyD,EAC3C,CACF,E,QCPAjK,IAAAA,gBAAAA,mBAAwC,CAEtCa,KAAM,SAAUqI,GACdtC,IAAEsC,GAASoB,YACb,GJRe,SAAZP,GAAAA,EAAY,0BAAZA,EAAY,kBAAZA,EAAY,sBAAZA,EAAY,oBAAZA,EAAY,sBAAZA,EAAY,gBAAZA,EAAY,2CAAZA,IAAAA,EAAY,KAUjB,QKKA,GAAiBN,UAXV,SAAqB3B,GAE1B,IAAIvH,EAAOC,KAEXD,EAAKgK,QAAUzC,EAAOyC,QACtBhK,EAAKiK,aAAe1C,EAAO2C,qBAE3BlK,EAAKmK,aAAeX,CACtB,EAGyCY,SCd9B,utHCDI,MAAMC,EACnBC,4BAA4BC,GAE1B,OAAc,IAAVA,EACK,SAGLA,EAAQ,KACHA,EAAQ,SAGbA,EAAQ,QACHF,EAAkBG,iBAAkBD,EAAQ,MAAS,MAG1DA,EAAQ,WACHF,EAAkBG,iBAAkBD,EAAQ,SAAY,MAG1DF,EAAkBG,iBAAkBD,EAAQ,YAAe,KACpE,CAEA,wBAAgCE,GAI9B,OAHAA,GAAkB,GAClBA,EAASC,KAAKC,MAAMF,IACpBA,GAAkB,IACJG,QAAQ,EACxB,EC8JF,UAtLA,WAEE,IAAI5K,EAAOC,KAEXD,EAAK6K,YAAc,KACnB7K,EAAK8K,gBAAkB,KACvB9K,EAAK+K,qBAAuB,KAM5B/K,EAAKM,KAAO,SAAUC,GACpBP,EAAK6K,YAActK,EAAQsK,YAC3B7K,EAAK8K,gBAAkBvK,EAAQuK,gBAC/B9K,EAAK+K,qBAAuBxK,EAAQwK,oBACtC,EAUA/K,EAAKgL,yBAA2B,SAAUhB,GAAqC,IAA5BiB,EAAqB,UAAH,8CAEnE,GAAuB,IAAnBjB,EAAQ1I,OAEV,OAD2C,IAAvB2J,EAA+B,kBAAoB,KAIzE,IAAIC,EAAWlB,EAAQmB,KAAI,SAAUC,GACnC,OAAOA,EAAOC,YAChB,IAGIC,EAAsBJ,EAASjI,QAAQuG,EAAAA,cAA6B,EACpE+B,EAAkBL,EAASjI,QAAQuG,EAAAA,UAAyB,EAC5DgC,EAAoBN,EAASjI,QAAQuG,EAAAA,YAA2B,EAChEiC,EAAiBP,EAASjI,QAAQuG,EAAAA,SAAwB,EAC1DkC,EAA8BR,EAASjI,QAAQuG,EAAAA,sBAAqC,EAExF,OAAI8B,GAAuBC,GAAmBC,EACrC,yBAGLC,GAAkBC,EACb,qBAGF,IACT,EAsGA1L,EAAK2L,sCAAwC,SAAUC,EAAU5B,GAE/D,IAAI6B,EAzEN,SAAgCD,GAE9B,IAAIE,EACAC,EAAQ,GAEZ,IAAKD,EAAI,EAAGA,EAAIF,EAAStK,OAAQwK,IAC/BC,EAAMC,KAAKJ,EAASE,IAGtB,OAAOC,CACT,CA+DmBE,CAAuBL,GAExC,QAAQ,GACN,KAnGJ,SAAoCC,EAAY7B,GAS9C,IARA,IAAIkC,EAAiBL,EAAWV,KAAI,SAAUgB,GAC5C,OAAOA,EAAKC,IACd,IAEIC,EAAoBrC,EAAQmB,KAAI,SAAUC,GAC5C,OAAOA,EAAOkB,QAChB,IAESR,EAAI,EAAGA,EAAII,EAAe5K,OAAQwK,IAEzC,IAAsD,IAAlDO,EAAkBpJ,QAAQiJ,EAAeJ,IAC3C,OAAO,EAIX,OAAO,CACT,CAkFSS,CAA2BV,EAAY7B,GAC1C,MAAO,CAAEV,IAAK,uBAChB,KA5DJ,SAAoCuC,EAAYhB,GAC9C,OAAOgB,EAAWW,MAAK,SAAUL,GAC/B,OAAOA,EAAKM,MAAQ5B,CACtB,GACF,CAwDS6B,CAA2Bb,EAAY7L,EAAK6K,aAC/C,MAAO,CACLvB,IAAK,oBACL/B,OAAQ,CAAEsD,YAAaR,EAAkBsC,qBAAqB3M,EAAK6K,eAEvE,KApDJ,SAAmCgB,EAAY7B,EAASc,GACtD,OAAOe,EAAWvK,OAAS0I,EAAQ1I,OAASwJ,CAC9C,CAkDS8B,CAA0Bf,EAAY7B,EAAShK,EAAK8K,iBACvD,MAAO,CACLxB,IAAK,qBACL/B,OAAQ,CAAEuD,gBAAiB9K,EAAK8K,kBAEpC,KAhDJ,SAA2Ce,GACzC,OAAOA,EAAWW,MAAK,SAAUL,GAC/B,OAIJ,SAAoCA,GAClC,IAAIU,EAAQV,EAAKC,KAAKS,MAAM,WAAa,GAEzC,GAAqB,IAAjBA,EAAMvL,OACR,OAAO,EAGT,IAAIwL,EAAiBD,EAAM,GAE3B,OAAO7M,EAAK+K,qBAAqByB,MAAK,SAAUO,GAC9C,OAAOA,IAAQD,CACjB,GACF,CAhBWE,CAA2Bb,EACpC,GACF,CA4CSc,CAAkCpB,GACrC,MAAO,CAAEvC,IAAK,uBAChB,KAzBJ,SAAiCuC,GAC/B,OAAOA,EAAWW,MAAK,SAAUL,GAC/B,OAAqB,IAAdA,EAAKM,IACd,GACF,CAqBSS,CAAwBrB,GAC3B,MAAO,CAAEvC,IAAK,qBAChB,QACE,MAAO,GAEb,CACF,EClKA,EAnBA,SAAuB6D,GAErB,IAAInN,EAAOC,KAGXD,EAAKoN,SAAW3N,IAAAA,WAAc,IAC9BO,EAAKqN,QAAU5N,IAAAA,WAAc,IAC7BO,EAAKsN,UAAY7N,IAAAA,WAAc,IAC/BO,EAAKuN,SAAW9N,IAAAA,WAAc,IAC9BO,EAAKwN,MAAQ/N,IAAAA,WAAc,IAE3BO,EAAKmN,gBAAkBA,EACvBnN,EAAKyN,aAAehO,IAAAA,WAAAA,MAAoBO,EAAM,CAAE0N,MAAM,IAEtD1N,EAAK2N,SAAWH,IACdxN,EAAKwN,MAAMA,EAAM,CAErB,ECLA,MAdA,WAEE,IAAIxN,EAAOC,KACXD,EAAKQ,yBAA2B,KAChCR,EAAKS,iBAAmB,KACxBT,EAAKU,yBAA2B,KAEhCV,EAAKM,KAAO,SAAUC,GACpBP,EAAKQ,yBAA2BD,EAAQC,yBACxCR,EAAKS,iBAAmBF,EAAQE,iBAChCT,EAAKU,yBAA2BH,EAAQG,wBAC1C,CACF,EC6GA,MAtHA,WAEE,IAAIV,EAAOC,KA0FX,SAAS2N,EAAUzB,GAEjB,IAAIf,EAAS,KASb,OAPA3L,IAAAA,MAAAA,aAAsBO,EAAKgK,WAAW,SAAU6D,GAE1CA,EAAcC,oBAAsB3B,IACtCf,EAASyC,EAEb,IAEOzC,CACT,CAEA,SAASnB,EAAa8D,GAEpB/N,EAAKgK,QAAQgE,OAAOD,GACpB/N,EAAKiO,aAAajO,EAAKgK,UAAU1I,QAEL,IAAxBtB,EAAKiO,iBACPjO,EAAKkO,mBAAmB,GACxBlO,EAAKmO,oBAAmB,GAE5B,CA9GAnO,EAAKgK,QAAUvK,IAAAA,gBAAmB,IAClCO,EAAKiO,aAAexO,IAAAA,WAAc,GAClCO,EAAKkO,mBAAqBzO,IAAAA,WAAc,GACxCO,EAAKmO,mBAAqB1O,IAAAA,YAAc,GAExCO,EAAKoO,UAAY,SAAUhD,GACzBpL,EAAKgK,QAAQgC,KAAKZ,GAClBpL,EAAKiO,aAAajO,EAAKgK,UAAU1I,QACjCtB,EAAKmO,oBAAmB,EAC1B,EAEAnO,EAAK4N,UAAY,SAAUtB,EAAU+B,GAEnC,IAAIjD,EAAS,KAUb,OARA3L,IAAAA,MAAAA,aAAsBO,EAAKgK,WACzB,SAAU6D,GAEJA,EAAcvB,WAAaA,GAAYuB,EAAcQ,WAAaA,IACpEjD,EAASyC,EAEb,IAEKzC,CACT,EAEApL,EAAKsO,eAAiB,SAAUnC,GAE9B,OADayB,EAAUzB,GACToC,WAChB,EAEAvO,EAAKwO,iBAAmB,SAAUrC,GACnByB,EAAUzB,GAChBqC,kBACT,EAEAxO,EAAKyO,sBAAwB,SAAUP,GACrClO,EAAKkO,mBAAmBA,EAC1B,EAEAlO,EAAK0O,qBAAuB,SAAUvC,EAAMwC,EAAUC,GAEpD,IAAIxD,EAASwC,EAAUzB,GAIlBf,GAILA,EAAOsD,qBAAqBC,EAAUC,EACxC,EAEA5O,EAAK6O,kBAAoB,SAAU1C,GACjC,IAAIf,EAASwC,EAAUzB,GACvBf,EAAOyD,oBACP5E,EAAamB,EACf,EAEApL,EAAK8O,gBAAkB,SAAU3C,GAE/B,IAAIf,EAASwC,EAAUzB,GAMvB,GAA4B,cAAxBf,EAAOC,aAAX,CAIAD,EAAO0D,kBACP7E,EAAamB,GAEb,IAAI2D,EAAe,aAAe3D,EAAOkB,SACzCjI,EAAOd,oBAAoB,gBAAiBwL,EAN5C,CAOF,EAMA/O,EAAKgP,aAAe,SAAU5D,GAC5BA,EAAO4D,eACP/E,EAAamB,EACf,CA0BF,E,UCwBA,EA1IA,MA6BE6D,YAAYC,EAAmBpB,GAC7B,IAD6D,8HAvBrC,OAAI,wBACH,OAAI,0BACF,OAAI,8BACA,OAAI,+BACV,KAAE,gCAEI,OAAI,0BAClB,OAAI,6PAYoBrO,EAAAA,cAAgB,IAAMQ,KAAKsN,aAAetN,KAAKkP,qBAAiB,4BACpE1P,EAAAA,cAAgB,IAAMQ,KAAKoL,eAAiB7B,EAAAA,gBAAyB,6BACrF,IAAI4F,KAAK,KAAM,EAAG,IAGnCF,EACFjP,KAAKoP,gBAAkBpP,KAAKqP,wBAAwBJ,EAAaK,UACjEtP,KAAKqM,SAAW4C,EAAa5C,SAC7BrM,KAAKsP,SAAWL,EAAaK,SAE7BtP,KAAKuP,SAAWN,EAAaM,SAC7BvP,KAAKwP,UAAYP,EAAaO,UAC9BxP,KAAKsO,YAAcW,EAAaX,YAChCtO,KAAKyP,gBAAkBR,EAAaQ,gBACpCzP,KAAKkP,iBAAmBD,EAAa3B,SACrCtN,KAAK0P,eAAiB,IAAIP,KAAKF,EAAaS,oBACvC,CACL,GAA0B,OAAtB7B,EACF,MAAM,IAAI9M,MAAO,sDAGnBf,KAAKoP,gBAAkBpP,KAAKqP,wBAAwBxB,EAAkBrB,MACtExM,KAAKqM,SAAWwB,EAAkB1B,KAClCnM,KAAKsP,SAAWzB,EAAkBrB,KAElCxM,KAAK6N,kBAAoBA,CAC3B,CAGA7N,KAAKsN,SAAW9N,EAAAA,WAAcQ,KAAKkP,kBACnClP,KAAKoL,WAAa5L,EAAAA,WAAcyP,EAAeA,EAAaU,iBAAmBpG,EAAAA,aAC/EvJ,KAAK0O,SAAWlP,EAAAA,WAAcQ,KAAKoL,eAAiB7B,EAAAA,SAAwB,IAAM,GAClFvJ,KAAK2O,cAAgBnP,EAAAA,WAAc,GACnCQ,KAAK4P,yBAA2BpQ,EAAAA,YAAc,GAC9CQ,KAAK6P,eAAiBrQ,EAAAA,YAAc,EACtC,CAMAsQ,8BAA8BC,GAC5B/P,KAAKuP,SAAWQ,EAAYR,SAC5BvP,KAAKsO,YAAcyB,EAAYzB,YAC/BtO,KAAKyP,gBAAkBM,EAAYN,gBACnCzP,KAAKoL,WAAW2E,EAAYJ,iBAC9B,CAQAK,eAAeC,GACbjQ,KAAKiQ,YAAcA,CACrB,CAEA1B,mBACEvO,KAAKoL,WAAW7B,EAAAA,WAChBvJ,KAAK0O,SAAS,GACd1O,KAAK4P,0BAAyB,EAChC,CAEAnB,qBAAqBC,EAAkBC,GACrC3O,KAAK0O,SAASA,GACd1O,KAAK2O,cAAcA,EACrB,CAEAC,oBACE5O,KAAKoL,WAAW7B,EAAAA,UAChBvJ,KAAK0O,SAAS,KACd1O,KAAK2O,cAAc3O,KAAKsP,UACxBtP,KAAK4P,0BAAyB,EAChC,CAEAf,kBACE7O,KAAKoL,WAAW7B,EAAAA,QAChBvJ,KAAK4P,0BAAyB,EAChC,CAEAM,+BACElQ,KAAKoL,WAAW7B,EAAAA,oBAClB,CAMA4G,kBAAkBN,GAChB7P,KAAK6P,eAAeA,EACtB,CAEAd,eACE/O,KAAKoL,WAAW7B,EAAAA,WAChBvJ,KAAK4P,0BAAyB,GAE1B5P,KAAKiQ,aACPjQ,KAAKiQ,YAAYG,OAErB,CAQQf,wBAAwBgB,GAC9B,MAAO,MAAQ5F,KAAK6F,SAASC,SAAS,IAAIC,OAAO,EAAG,IAAM,IAAMH,CAClE,GC/HF7Q,IAAAA,gBAAAA,0BAA+C,CAE7Ca,KAAM,SAAUqI,EAASC,GAEvB,IAAI8H,EAAkBjR,IAAAA,MAAAA,iBAA0BmJ,KAC5C+H,EAAgBxM,SAASC,eAAesM,GAc5C,SAASE,EAAaC,GAEpB,IAAIC,EAAWD,EAAME,MAAQF,EAAME,MAAQF,EAAMC,QAEjC,KAAZA,GAA8B,KAAZA,IACpBD,EAAMG,iBACNL,EAAcM,QAElB,CApBKN,EAKAA,EAAcM,OAiBnBtI,EAAQuI,iBAAiB,WAAYN,GAErCnR,IAAAA,MAAAA,gBAAAA,mBAA4CkJ,GAAS,WACnDA,EAAQwI,oBAAoB,WAAYP,EAC1C,KApBEvM,EAAOjB,MACL,iBACA,2BAA6BsN,EAAkB,sCAPjDrM,EAAOjB,MAAM,iBAAkB,0BAA4BsN,EAAkB,kBA2BjF,GCvBF,OAAiBxH,UAnBV,SAA4B3B,GAEjC,IAAIvH,EAAOC,KACPM,EAAUgH,EAAO6J,0BAEjBC,EAAoB5R,IAAAA,OAAUc,EAAQ8Q,mBACtCC,EAAsB7R,IAAAA,OAAUc,EAAQ+Q,qBACxCC,EAAyBhR,EAAQgR,uBAGrCvR,EAAKqR,kBAAoBA,EACzBrR,EAAKsR,oBAAsBA,GAAuB,EAElDtR,EAAKwR,eAAiB,SAAU5F,GAC9B2F,EAAuB3F,EACzB,CACF,EAGgDxB,SCxBrC,w6BCoCX,GAAiBlB,UAhCV,SAAqB3B,GAErB9H,IAAAA,aAAgB8H,EAAOoH,WAC1BtK,EAAOjB,MAAM,iBAAkB,uEAG5BmE,EAAOkK,OACVpN,EAAOjB,MAAM,iBAAkB,0CAGjC,IAAIpD,EAAOC,KACXD,EAAKyR,MAAQlK,EAAOkK,MACpBzR,EAAK2O,SAAWpH,EAAOoH,SAEvB3O,EAAK0R,WAAajS,IAAAA,cAAgB,WAChC,OAAO8H,EAAO8D,eAAiB7B,EAAAA,QACjC,IAEAxJ,EAAK2R,YAAclS,IAAAA,cAAgB,WACjC,OAAO8H,EAAO8D,eAAiB7B,EAAAA,SACjC,IAEAxJ,EAAK4R,WAAanS,IAAAA,cAAgB,WAChC,IAAIkP,EAAWpH,EAAOoH,WACtB,OAAIpH,EAAO8D,eAAiB7B,EAAAA,SACnB,OAEFmF,EAAW,GACpB,GACF,EAGyCvE,SCpC9B,qVCOX3K,IAAAA,gBAAAA,aAAkC,CAChCa,KAAM,SAAUqI,EAASC,GAEvB,IAAIiJ,EAAkBxL,IAAEsC,GACpB4I,EAAyB3I,IACzBkJ,EAAU,EAEdD,EAAgBE,GAAG,YAAY,SAAU3M,GACvCA,EAAE4M,kBACF5M,EAAE4L,gBACJ,IAEAa,EAAgBE,GAAG,aAAa,SAAU3M,GACxCA,EAAE4M,kBACF5M,EAAE4L,iBAEFc,IAEAD,EAAgBI,IAAI,mBAAoB,UAC1C,IAEAJ,EAAgBE,GAAG,aAAa,SAAU3M,GACxCA,EAAE4M,kBACF5M,EAAE4L,iBAIc,KAFhBc,GAGED,EAAgBI,IAAI,mBAAoB,GAE5C,IAEAJ,EAAgBE,GAAG,QAAQ,SAAU3M,GACnCA,EAAE4M,kBACF5M,EAAE4L,iBAEFc,EAAU,EACVD,EAAgBI,IAAI,mBAAoB,IAExC,IAAIrG,EAAWxG,EAAE8M,cAAcC,aAAapG,MAC5CwF,EAAuB3F,EACzB,GACF,GC1CFnM,IAAAA,gBAAAA,UAA+B,CAC7Ba,KAAM,SAAUqI,EAASC,GAEvB,IAAI2I,EAAyB3I,IAExBvC,IAAEsC,GAASyJ,GAAG,UACjB/N,EAAOjB,MAAM,iBAAkB,8DAGK,mBAA3BmO,GACTlN,EAAOjB,MAAM,iBAAkB,oDAGjCiD,IAAEsC,GAASoJ,GAAG,UAAU,SAAUlB,GAEhC,MAAMlI,EAAUkI,EAAMwB,OAGtB,GAAsB,KAAlB1J,EAAQlH,MAAZ,CAIA,IAAImK,EAAWjD,EAAQoD,MACvBwF,EAAuB3F,GAGvBjD,EAAQlH,MAAQ,EANhB,CAOF,IAEAhC,IAAAA,MAAAA,gBAAAA,mBAA4CkJ,GAAS,WACnDtC,IAAEsC,GAAS2J,IAAI,SACjB,GACF,GChCF7S,IAAAA,gBAAAA,SAA8B,CAC5BiJ,OAAQ,SAAUC,EAASC,EAAeK,EAAqBC,EAAWC,GAExE,IAAIJ,EAAOsB,EAAkBsC,qBAAqBlN,IAAAA,MAAAA,iBAA0BmJ,MAE5EnJ,IAAAA,gBAAAA,KAAAA,OACEkJ,GACA,WACE,OAAOI,CACT,GACAE,EACAC,EACAC,EACJ,G,QCVF1J,IAAAA,gBAAAA,aAAkC,CAChCa,KAAM,SAAUqI,GAEd,IAAI4J,EAAYrK,EAAAA,yBAAuC,aAgEvD,SAASsK,EAAc5M,GAErB,GAA0B,IAAtBA,EAAKmG,MAAMzK,OACb,MAAM,IAAIN,MAAM,wDAGlB,OAAO4E,EAAKmG,MAAM,EACpB,CAlEA1F,IAAEsC,GAAS8J,WAAW,CACpB/M,IAAK6M,EACLG,aAAcxK,EAAAA,iBACdyK,uBAAwBzK,EAAAA,yBACxBpC,SAAU,OACV8M,SAAU,KAEVC,WAAY,SAAUC,EAAKlN,GACzB,IAAIuG,EAAOqG,EAAc5M,GACrB2I,EAAcwE,EAAczE,eAAenC,GAC/C2G,EAAIE,iBAAiB,gBAAiB,eAAiBzE,EACzD,EACA0E,KAAM,SAAU7N,EAAGQ,GACjB,IAAIuG,EAAOqG,EAAc5M,GACzBmN,EAAcvE,iBAAiBrC,EACjC,EACA+G,YAAa,SAAU9N,EAAGQ,GACxB,IAAI+I,EAAWwE,SAASvN,EAAKwN,OAASxN,EAAKyN,MAAQ,IAAK,IACxDN,EAActE,sBAAsBE,EACtC,EACAA,SAAU,SAAUvJ,EAAGQ,GACrB,IAAI+I,EAAWwE,SAASvN,EAAKwN,OAASxN,EAAKyN,MAAQ,IAAK,IACpDlH,EAAOqG,EAAc5M,GACzBmN,EAAcrE,qBAAqBvC,EAAMwC,EAAU/I,EAAKwN,OAC1D,EACAE,KAAM,SAAUlO,EAAGQ,GACjB,IAAIuG,EAAOqG,EAAc5M,GACzBmN,EAAclE,kBAAkB1C,EAClC,EACAoH,KAAM,SAAUnO,EAAGQ,GACjB,IAAIuG,EAAOqG,EAAc5M,GACzBmN,EAAcjE,gBAAgB3C,EAChC,IAGF4G,EAAc/I,QAAQwJ,WAAU,SAAUC,GAExCpN,IAAAA,KAAOoN,GAAS,SAAUC,EAAOC,GAE/B,IAAIvI,EAASuI,EAAOlS,MAEpB,GAAsB,UAAlBkS,EAAO9O,OAAoB,CAC7B,IAAIqL,EAAc7J,IAAEsC,GAAS8J,WAAW,OAAQ,CAAE1G,MAAO,CAACX,EAAO0C,qBACjE1C,EAAO6E,eAAeC,EACxB,CACF,GAEF,GAAG,KAAM,eAIT7J,IAAElC,UAAU4N,GAAG,YAAY,SAAU3M,GACnCA,EAAE4L,gBACJ,IAEA3K,IAAElC,UAAU4N,GAAG,QAAQ,SAAU3M,GAC/BA,EAAE4L,gBACJ,GAUF,GC7EF,MANqB,CACnB,Q,0qBACA,G,0vBACA,Q,imBCkDF,MA1CA,WAEE,IAAIhR,EAAOC,KAGPkC,EAAyB,CAAC,QAAS,KAAM,SAG7CnC,EAAKM,KAAO,SAAUC,GAIpB2H,EAAAA,KAAiB3H,GAQnB,SAAoCL,GAI7BA,GACHmE,EAAOjB,MACL,iBACC,wGAGLlD,EAAeA,EAAa8C,cAE5B9C,EADwBiC,EAAuBc,QAAQ/C,IAAiB,EACjCA,EA1Bf,QA2BxBgD,EAAerC,4BAA4BD,EAAaV,GAAe,kBAAmBA,EAC5F,CArBE0T,CAA2BrT,EAAQL,cAwBnCT,IAAAA,WAAAA,SAAuB,uBAAwBoU,GAC/CpU,IAAAA,WAAAA,SAAuB,eAAgBqU,EAvBzC,EAEA9T,EAAK+S,cAAgBA,EACrB/S,EAAK+T,YAAcA,CAsBrB,ECsLA,MAxOA,WAEE,IAAI/T,EAAOC,KACP+T,EAAkB,eAoNtB,SAASC,EAAuB/E,GAC9B,IAAI9D,EAAS2C,EAAAA,cAAAA,UAAmCmB,EAAa5C,SAAU4C,EAAab,UAEhF6F,EAAc,IAAInG,EAAAA,YAAuBmB,EADlC,CAAC,GAGZ,OAAO9D,GAAkB8I,CAC3B,CAEA,SAASC,EAAoC/I,GAC3CA,EAAOC,WAAWmI,WAAU,SAAU/R,GAChCA,IAAU+H,EAAAA,UACZxJ,EAAKoU,uBAAuBhJ,EAAOsE,gBAEvC,GACF,CAzNA1P,EAAKqU,oCAAsC,SAAUnN,GAEnD,IAAIwC,EAAcsK,wBAAgC9M,EAElD,OAAO,IAAIhB,SAAQ,SAAUC,EAASC,GAEpCY,EAA0Bf,QAAQyD,GAC/BpD,MAAK,SAAUgO,GACd,IAAItK,EAqLZ,SAA4BsK,GAK1B,IAHA,IACItK,EAAU,GAEL8B,EAAI,EAAGA,EAAIwI,EAAchT,OAAQwK,IAAK,CAE7C,IAAIV,EAAS6I,EADEK,EAAcxI,IAE7B9B,EAAQgC,KAAKZ,EACf,CAEA,OAAOpB,CACT,CAjMsBuK,CAAmBD,GACjCnO,EAAQ6D,EACV,IACClC,OAAM,SAAUlD,GACfwB,EAAOxB,EACT,GACJ,GACF,EAWA5E,EAAKwU,WAAa,SAAU5I,EAAU1E,EAAyBuN,GAE7D,IAAI3I,EACAK,EACAf,EACAW,EAAQ,GACR/B,EAAU,GAGd,IAAK8B,EAAI,EAAGA,EAAIF,EAAStK,OAAQwK,IAC/BK,EAAOP,EAASE,GAChBC,EAAMC,KAAKG,GAEXgI,EADA/I,EAAS,IAAI2C,EAAAA,YALI,KAKiC5B,IAElDnC,EAAQgC,KAAKZ,GAoBf,OAiCF,SAA0CW,EAAO7E,GAE/C,IAAIoN,EAAgB,GAChBI,EAAyBxO,QAAQC,QAAQ,MAUzCwO,EAAU5I,EAAM6I,QAAO,SAAUC,EAAiB1I,GAEpD,OAAO0I,EAAgBvO,MAAK,WAE1B,OAmCN,SAA+B6F,EAAMjF,GAEnC,IAAI4N,EAAa,CACf5N,wBAAyBA,EACzBoF,SAAUH,EAAKC,KACfmD,SAAUpD,EAAKM,KAIfsI,eAAgB5I,EAAK6I,aAAe,IAAI5F,KAAKjD,EAAK6I,cAAgB7I,EAAK8I,kBAAkBC,eAI3F,OAAOlO,EAA0BR,SAASwN,EAAiBc,EAC7D,CAjDaK,CAAsBhJ,EAAMjF,GAChCZ,MAAK,SAAU4I,GACdoF,EAActI,KAAKkD,EACrB,GACJ,GAEF,GAAGwF,GAMH,OAAO,IAAIxO,SAAQ,SAAUC,EAASC,GACpCuO,EAAQrO,MAAK,WACXH,EAAQmO,EACV,IACGxM,OAAM,SAAU1C,GACfgB,EAAOhB,EACT,GACJ,GACF,CAtFEgQ,CAAiCrJ,EAAO7E,GACrCZ,MAAK,SAAUgO,IA4FpB,SAAsBtK,EAASsK,GAC7BA,EAAcxS,SAAQoN,IACpB,MAAM9D,EAASpB,EAAQqL,MAAKC,GAAKA,EAAEhJ,WAAa4C,EAAa5C,WAC7DlB,EAAO2E,8BAA8Bb,GACrCnB,EAAAA,cAAAA,UAAmC3C,EAAO,GAE9C,CAjGMmK,CAAavL,EAASsK,EACxB,IACCxM,OAAM,SAAU1C,GAIf,IAAK0G,EAAI,EAAGA,EAAI9B,EAAQ1I,OAAQwK,IACrB9B,EAAQ8B,GACVqE,+BAGTsE,EAAyBrP,EAC3B,IAEK4E,CACT,EAOAhK,EAAKwV,cAAgB,SAAUxL,GAC7B,IAII8B,EAHA2J,EAAuB,GACvBX,EAAa,GAGjB,IAAKhJ,EAAI,EAAGA,EAAI9B,EAAQ1I,OAAQwK,IAC9B,GAAK9B,EAAQ8B,GAAG4J,oBAAhB,CAIA,IAAIC,EAAmB,CACrBC,sBAAuB5L,EAAQ8B,GAAG4D,gBAClCnC,SAAUvD,EAAQ8B,GAAGyB,YAEvBuH,EAAW9I,KAAK2J,EANhB,CAaF,OAJIb,EAAWxT,OAAS,GACtBmU,EAAqBzJ,KAAKhF,EAA0BR,SAlBpCwN,4BAkB0Dc,IAGrE5O,QAAQ2P,IAAIJ,EACrB,EA2EAzV,EAAK8V,aAAe,SAAU1K,GAE5B,IAAI1B,EAAcsK,EAAkB5I,EAAOsE,gBAS3C,OAPItE,EAAOC,eAAiB7B,EAAAA,SACxB4B,EAAOC,eAAiB7B,EAAAA,WAC1BuE,EAAAA,cAAAA,aAAsC3C,GAKpCA,EAAOC,eAAiB7B,EAAAA,oBACnBtD,QAAQC,QAAQ,MAGlBa,EAA0BP,WAAWiD,EAC9C,EAEA1J,EAAKoU,uBAAyB,SAAU1E,GACtC,IAAIhG,EAAcsK,EAAkBtE,EACpC,OAAO1I,EAA0BN,QAAQgD,EAC3C,CA+BF,E,QCnGA,MA5HA,SAAgCR,GAE9B,IAGI6M,EAAyB,CAAC,EAsE9B,SAASC,EAAoBC,EAAMC,EAAUhN,GAE3C,IAAIiN,EAIJ,GAAIF,EAAKG,MAAO,CAId,GAAI3W,IAAAA,aAAgBwW,EAAKG,MAAM7O,QAC7B,OAKF,KAFA4O,EAAkBjN,EAAU+M,EAAKG,MAAM7O,SAMrC,YAHAlD,EAAOb,QAAQ,+DACbyS,EAAKG,MAAM7O,OAAS,0CAMxB0O,EAAKG,MAAM7O,OAAS4O,CACtB,CAEAjN,EAAUgN,GAAUG,OAAOJ,EAC7B,CAaA,SAASK,EAA+BP,EAAwBE,EAAMC,GAEpE,IAAIK,EAAmBnV,OAAOC,KAAK4U,GAAM,GACzCF,EAAuBG,GAAYH,EAAuBG,IAAa,CAAC,EACxEH,EAAuBG,GAAUK,GAAoBN,EAAKM,GAAkBlT,OAC9E,CAvHWpD,KASNuW,gBAAkB,SAAUrJ,GAE/B,IAAI+I,EACAO,EAEA3K,EAMJ,IAAKoK,KAJA/I,GACH9I,EAAOb,QAAQ,iBAAkB,gDAGlB2J,EAEf,GAAK/L,OAAOsV,UAAUC,eAAeC,KAAKzJ,EAAiB+I,GAO3D,GAHAO,EAAQtJ,EAAgB+I,GACXhN,EAAUgN,GAYvB,IAAKpK,EAAI,EAAGA,EAAI2K,EAAMnV,OAAQwK,IAC5BkK,EAAoBS,EAAM3K,GAAIoK,EAAUhN,GACxCoN,EAA+BP,EAAwBU,EAAM3K,GAAIoK,QAVjE7R,EAAOb,QACL,iBACA,gFACA0S,EAAW,yCAUnB,EA5CWjW,KAoDN4W,qBAAuB,SAAUC,EAAcC,GAKlD,OAAKD,GAHgBf,EAAuBe,GAOnBC,IAHhB,IAMX,CAwDF,EClIAtX,IAAAA,gBAAAA,UAA+B,CAE7Ba,KAAM,SAAUqI,EAASC,EAAeC,GAEtC,IAAImO,EAAapO,IACbqO,EAAoBpO,EAAYC,IAAI,qBAExCzC,IAAEsC,GAASoJ,GAAG,kBAAkB,WAC9BiF,GAAW,GAEsB,mBAAtBC,GACTA,GAGJ,IAEA5Q,IAAEsC,GAASoJ,GAAG,mBAAmB,WAC/BiF,GAAW,EACb,IAEAvX,IAAAA,MAAAA,gBAAAA,mBAA4CkJ,GAAS,WACnDtC,IAAEsC,GAAS2J,IAAI,kBACfjM,IAAEsC,GAAS2J,IAAI,kBACjB,GACF,EACA5J,OAAQ,SAAUC,EAASC,EAAeC,GAExC,IAAIpH,EAAQhC,IAAAA,MAAAA,iBAA0BmJ,KAClCsO,EAAmBrO,EAAYC,IAAI,oBAEnCrH,EACF4E,IAAEsC,GAASwO,MAAM,SAMfD,GAAoB7Q,IAAEsC,GAASyO,SAAS,UAC1C/Q,IAAEsC,GAAS0O,YAAY,QACvBhR,IAAEsC,GAASwO,MAAM,QACjB9Q,IAAEsC,GAAS2O,SAAS,SAGtBjR,IAAEsC,GAASwO,MAAM,QACnB,GCtCF1X,IAAAA,gBAAAA,aAAkC,CAEhCa,KAAM,SAAUqI,EAASC,GACvB/I,OAAO0X,eAAiB,WACtB,IAAI9V,EAAQmH,IACRhD,EAAOnG,IAAAA,MAAAA,iBAA0BgC,GACjC+V,EAAmC,iBAAT5R,EAC1B6R,EAAaD,EAAmB5R,EAAOnG,IAAAA,MAAAA,iBAA0BmG,EAAK6R,YACtEC,IAAYF,GAA0B/X,IAAAA,MAAAA,iBAA0BmG,EAAK8R,WAEzE,GAAMD,GAAcC,EAClB,OAAOD,CAEX,CACF,GCyPF,OAAiBvO,UA5PV,SAAsB3B,GAE3B,IAAIvH,EAAOC,KAEXD,EAAKE,aAAegI,EAAYhI,aAEhCF,EAAK2X,cAAgBzU,EAAe3B,UAAU,iBAC9CvB,EAAK4X,qCAAuC1U,EAAe3B,UAAU,mCACrEvB,EAAK6X,aAAe3U,EAAe3B,UAAU,wBAE7CvB,EAAKwI,aAAejB,EAAOuQ,iBAAiBC,mBAC5C/X,EAAKgY,cAAgBrQ,EAErB3H,EAAKkH,wBAA0BK,EAAOL,wBAEtClH,EAAKK,wBAA0B6H,EAAY7H,wBAC3CL,EAAK6H,SAAW,IAAIoQ,EAAcjY,EAAKK,yBAQvCZ,IAAAA,WAAAA,KANyB,CACvByY,gBAAgB,EAChBC,iBAAiB,EACjBC,kBAAmB,cAGkB,GAGV,IAAIC,EAAuBrY,EAAK6H,UACtC2O,gBAAgBxW,EAAKK,yBAE5CL,EAAKgK,QAAUvK,IAAAA,gBAAmB,IAClCO,EAAKsY,gCAAkC7Y,IAAAA,WAAc,MACrDO,EAAKmO,mBAAqB4E,EAAc5E,mBAExCnO,EAAKuY,yBAA2B9Y,IAAAA,WAAc,IAC9CO,EAAKwY,kCAAoC/Y,IAAAA,WAAc,IACvDO,EAAKyY,0BAA4BhZ,IAAAA,UAAY,WAC3C,OAAOO,EAAKwY,oCAAoCvW,QAAQ,uBAAwBjC,EAAKgK,UAAU1I,OACjG,IAEAtB,EAAK0Y,sBAAwBjZ,IAAAA,YAAc,GAE3CO,EAAK2Y,iBAAmBlZ,IAAAA,YAAc,GACtCO,EAAK4Y,cAAgBnZ,IAAAA,YAAc,GAEnCO,EAAK6Y,uBAAyBpZ,IAAAA,YAAc,GAE5CO,EAAK8Y,gBAAkBrZ,IAAAA,UAAY,WACjC,OAAOO,EAAK6Y,wBACd,IAEA7Y,EAAK+Y,kBAAoBtZ,IAAAA,cAAgB,WACvC,MAAqE,2BAA9DuZ,EAAiBhO,yBAAyBhL,EAAKgK,UACxD,IAEAhK,EAAKiZ,iBAAmBxZ,IAAAA,cAAgB,WACtC,OAAOO,EAAKgK,UAAU1I,OAAS,IAAMtB,EAAK+Y,mBAC5C,IAEA/Y,EAAKwR,eAAiB,SAAU5F,GAC9B,IAAIsN,EAEAC,EAAiBH,EAAiBrN,sCAAsCC,EAAU5L,EAAKgK,WAG3F,GAFAhK,EAAKsY,gCAAgCa,GAEjCA,EAAJ,CACE,IAAIC,GA2GoBC,EA3GuBF,EA4G7C1X,EAAQyB,EAAe3B,UAAU8X,EAAc/P,KACnD7H,EAAQyB,EAAexB,oBAAoBD,EAAO4X,EAAc9R,SA5G9DlD,EAAOjB,MAAM,gBAAiBgW,EAEhC,KAJA,CA4GF,IAA4BC,EACtB5X,EAvGJyX,EAAaI,EAAiB9E,WAAW5I,EAAU5L,EAAKkH,wBAAyBlH,EAAKuZ,kBACtFvZ,EAAKgK,QAAQwP,WAAWN,EAHxB,CAIF,EAEAlZ,EAAKuZ,iBAAmB,SAAUnU,GAChC,GAAIA,EAAEC,cAEJ,YADArF,EAAKyZ,aAAarU,EAAEC,eAItB,MAAM7D,EAA2B,IAAb4D,EAAEP,OAAe,wBAA0B,iBAC/DR,EAAOjB,MAAM5B,EAAa,qEAAsE4D,EAClG,EAQApF,EAAKiK,aAAe,SAAUmB,GAC5BA,EAAOgF,mBAAkB,GAEzBkJ,EAAiBxD,aAAa1K,GAC3B9E,MAAK,KACJtG,EAAKgK,QAAQgE,OAAO5C,EAAO,IAE5BtD,OAAM,SAAUlD,GAGf,GAFAwG,EAAOgF,mBAAkB,IAEpBxL,EAAMd,mBAAoB,CAC7B,MAAMtC,EAA+B,IAAjBoD,EAAMC,OAAe,wBAA0B,iBACnER,EAAOjB,MAAM5B,EAAa,oCAAqCoD,EACjE,CACF,GACJ,EAEA5E,EAAK0Z,cAAgB,WAEnB,IAAIC,GAAuB,EAC3B,IAAIC,EAAkCZ,EAAiBhO,yBAAyBhL,EAAKgK,WAEjF4P,IACFD,GAAuB,EACvB3Z,EAAKsY,gCAAgCsB,IAGnC5Z,EAAK6H,SAAS4F,eAAenM,OAAS,IACxCqY,GAAuB,EACvB3Z,EAAK6H,SAAS4F,aAAaoM,iBAAgB,IAGzCF,IAIJ3Z,EAAKsY,gCAAgC,MACrCtY,EAAK2Y,kBAAiB,GACxB,EAEA3Y,EAAK8Z,WAAa,WAEhB9Z,EAAK2Y,kBAAiB,GACtB3Y,EAAK4Y,eAAc,GAEnB,IAAIvR,EAAkB5H,IAAAA,KAAQO,EAAK6H,UAEnC,OAAOyR,EAAiB9D,cAAcxV,EAAKgK,WACxC1D,MAAK,WACJ,OAAOsB,EAAmBR,iBAAiBpH,EAAKkH,wBAAyBG,EAC3E,IACCf,MAAK,WA2BV,IAAwCY,IA1BHlH,EAAKkH,wBA2BxCrH,OAAOka,SAASC,KAAO,IAAMha,EAAKE,aAAe,aAAegH,CA1B9D,IACCY,OAAM,SAAUlD,GACf5E,EAAK4Y,eAAc,GAEnBvU,EAAOtB,6BACL,sEACA,8BACA6B,EACJ,GACJ,EA2BA,SAA0B2C,GACxB,IAAIuQ,EAAmBvQ,EAAOuQ,iBAC1BzQ,EAAkBE,EAAOF,iBAa/B,SAAwCyQ,GACtC,IAAImC,EAEAnC,EAAiBC,qBAAuBpQ,EAAAA,QAE1CsS,GADAA,EAAsC/W,EAAe3B,UAAU,uCAE5DU,QAAQ,sBAAuB6V,EAAiBoC,mBAC1Cla,EAAKwI,eAAiBb,EAAAA,SAC/BsS,EAAsC/W,EAAe3B,UAAU,sCAGjEvB,EAAKwY,kCAAkCyB,GACvCja,EAAKuY,yBAAyBT,EAAiBS,yBACjD,EAxBE4B,CAA+BrC,GAG3BzQ,EAAgBmG,QAClBxN,EAAK6H,SAAS8F,SAAStG,EAAgBmG,OACvCxN,EAAK0Y,uBAAsB,IAGtBxS,QAAQC,QAAQoB,EACzB,CAqDA6S,CAAiB7S,GAnCjB,SAA+BA,GAC7B,IAAIuQ,EAAmBvQ,EAAOuQ,iBAE1BA,EAAiBC,qBAAuBpQ,EAAAA,SAC1C3H,EAAKqR,kBAAoBnJ,EAAY9H,eAAeia,yBACpDra,EAAKsR,oBAAsBpJ,EAAY9H,eAAeka,4BAE7CxC,EAAiBC,qBAAuBpQ,EAAAA,SACjD3H,EAAKqR,kBAAoBnJ,EAAY9H,eAAema,wBACpDva,EAAKsR,oBAAsBpJ,EAAY9H,eAAeoa,2BAGxDxa,EAAKoR,0BAA4B,CAC/BC,kBAAmBrR,EAAKqR,kBACxBE,uBAAwBvR,EAAKwR,eAC7BF,oBAAqBtR,EAAKsR,qBAG5B0H,EAAiB1Y,KAAK,CACpBuK,YAAa7K,EAAKqR,kBAClBvG,gBAAiB9K,EAAKsR,oBACtBvG,qBAAsB7C,EAAY9H,eAAe2K,uBAGnDgD,EAAAA,KAAgB,CACd7N,aAAcF,EAAKE,aACnBM,yBAA0B0H,EAAY9H,eAAeI,yBACrDC,iBAAkByH,EAAY9H,eAAeK,iBAC7CC,yBAA0BwH,EAAY9H,eAAeM,yBACrD4Q,oBAAqBtR,EAAKsR,sBAGrBpL,QAAQC,QAAQoB,EACzB,CAGAkT,CAAsBlT,GA5FtB,SAA4BA,GACnB+R,EAAiBjF,oCAAoC9M,EAAOL,yBAChEZ,MAAK,SAAUoU,GACdjb,IAAAA,MAAAA,aAAsBO,EAAKgK,QAAS0Q,GACpC1a,EAAK6Y,wBAAuB,EAC9B,IACC/Q,OAAM,SAAUlD,GACfP,EAAOtB,6BACL,6EACA,qCACA6B,EACJ,GACJ,CAiFA+V,CAAmBpT,EACrB,EAG0C6C,SC/Q/B,+gPCCX,MAAMwQ,EAAc,CAClBta,KAAM,SAAUqI,EAASC,EAAeC,EAAaK,EAAW2R,GAE9D,MAAMC,EAAalS,IACbmS,EAAWlS,EAAYC,IAAI,QAC3BkS,EAAanS,EAAYC,IAAI,cAC7BmS,EAAepS,EAAYC,IAAI,gBAC/BoS,EAAWrS,EAAYC,IAAI,YAC3BqS,EAAOtS,EAAYC,IAAI,QAEvBsS,EAAsBvS,EAAYC,IAAI,uBACtCuS,EAAmBxS,EAAYC,IAAI,oBAEzC,iCACGxC,MAAKgV,IACgBA,EAAkBC,QAGnCC,WAAW,CACVC,iBAAkB9S,EAClBmS,WAAYA,EAAarb,IAAAA,OAAUqb,GAAc,GACjDlV,KAAMmV,EAAWtb,IAAAA,OAAUsb,GAAY,CAAC,EACxCC,aAAYA,GAAavb,IAAAA,OAAUub,GACnCC,eAAcA,GAAexb,IAAAA,OAAUwb,GACvCC,SAAUA,EACVC,KAAMA,EACNC,oBAAqBA,GAA4C,WAElE9U,MAAK,SAAUsU,GACd1R,EAAU0R,YAAcA,EAEpBS,GACFA,GAEJ,GAAE,GAEV,GAGF5b,IAAAA,gBAAAA,YAAiCmb,EC8RjC,ICtUIc,EACAC,EACAC,EDoUJ,GAAiB1S,UAtTV,SAA4B3B,GAEjC,IAAIvH,EAAOC,KAEXD,EAAKE,aAAegI,EAAYhI,aAEhCF,EAAK2X,cAAgBzU,EAAe3B,UAAU,iBAC9CvB,EAAK4X,qCAAuC1U,EAAe3B,UAAU,mCACrEvB,EAAK6X,aAAe3U,EAAe3B,UAAU,wBAC7CvB,EAAK6b,gBAAiB,EAEtB7b,EAAKwI,aAAejB,EAAOuQ,iBAAiBC,mBAC5C/X,EAAKgY,cAAgBrQ,EAErB3H,EAAKkH,wBAA0BK,EAAOL,wBAEtClH,EAAK6H,SAAWpI,IAAAA,WAAc,CAAC,GAC/BO,EAAK8b,uBAAyB,KAC9B9b,EAAKob,oBAAsBW,IACzB/b,EAAK6H,SAASkU,EAAKnW,KAAK,EAG1B5F,EAAKgc,qBAAuBvc,IAAAA,YAAc,GAC1CO,EAAKgK,QAAUvK,IAAAA,gBAAmB,IAClCO,EAAKsY,gCAAkC7Y,IAAAA,WAAc,MACrDO,EAAKmO,mBAAqB4E,EAAc5E,mBAExCnO,EAAKuY,yBAA2B9Y,IAAAA,WAAc,IAC9CO,EAAKwY,kCAAoC/Y,IAAAA,WAAc,IACvDO,EAAKyY,0BAA4BhZ,IAAAA,UAAY,WAC3C,OAAOO,EAAKwY,oCAAoCvW,QAAQ,uBAAwBjC,EAAKgK,UAAU1I,OACjG,IAEAtB,EAAKic,0BAA4Bxc,IAAAA,WAAc,IAE/CO,EAAK2Y,iBAAmBlZ,IAAAA,YAAc,GACtCO,EAAKkc,wBAA0Bzc,IAAAA,YAAc,GAC7CO,EAAKmc,gDACHjU,EAAY9H,eAAe+b,gDAC7Bnc,EAAKoc,gDACHlU,EAAY9H,eAAegc,gDAC7Bpc,EAAK4Y,cAAgBnZ,IAAAA,YAAc,GAEnCO,EAAK6Y,uBAAyBpZ,IAAAA,YAAc,GAE5CO,EAAK8Y,gBAAkBrZ,IAAAA,UAAY,WACjC,OAAQO,EAAKgc,wBAA0Bhc,EAAK6Y,wBAC9C,IAEA7Y,EAAK+Y,kBAAoBtZ,IAAAA,cAAgB,WACvC,MAA2E,2BAApEuZ,EAAiBhO,yBAAyBhL,EAAKgK,WAAW,EACnE,IAEAhK,EAAKiZ,iBAAmBxZ,IAAAA,cAAgB,WACtC,OAAOO,EAAKgK,UAAU1I,OAAS,IAAMtB,EAAK+Y,mBAC5C,IAEA/Y,EAAKwR,eAAiB,SAAU5F,GAC9B,IAAIsN,EAEAC,EAAiBH,EAAiBrN,sCAAsCC,EAAU5L,EAAKgK,WAG3F,GAFAhK,EAAKsY,gCAAgCa,GAEjCA,EAAJ,CACE,IAAIC,GAyHoBC,EAzHuBF,EA0H7C1X,EAAQyB,EAAe3B,UAAU8X,EAAc/P,KACnD7H,EAAQyB,EAAexB,oBAAoBD,EAAO4X,EAAc9R,SA1H9DlD,EAAOjB,MAAM,gBAAiBgW,EAEhC,KAJA,CA0HF,IAA4BC,EACtB5X,EArHJyX,EAAaI,EAAiB9E,WAAW5I,EAAU5L,EAAKkH,wBAAyBlH,EAAKuZ,kBACtFvZ,EAAKgK,QAAQwP,WAAWN,EAHxB,CAIF,EAEAlZ,EAAKuZ,iBAAmB,SAAUnU,GAChC,GAAIA,EAAEC,cAEJ,YADArF,EAAKyZ,aAAarU,EAAEC,eAItB,MAAM7D,EAA2B,IAAb4D,EAAEP,OAAe,wBAA0B,iBAC/DR,EAAOjB,MAAM5B,EAAa,qEAAsE4D,EAClG,EAQApF,EAAKiK,aAAe,SAAUmB,GAC5BA,EAAOgF,mBAAkB,GAEzBkJ,EAAiBxD,aAAa1K,GAC3B9E,MAAK,KACJtG,EAAKgK,QAAQgE,OAAO5C,EAAO,IAE5BtD,OAAM,SAAUlD,GAGf,GAFAwG,EAAOgF,mBAAkB,IAEpBxL,EAAMd,mBAAoB,CAC7B,MAAMtC,EAA+B,IAAjBoD,EAAMC,OAAe,wBAA0B,iBACnER,EAAOjB,MAAM5B,EAAa,oCAAqCoD,EACjE,CACF,GACJ,EAEA5E,EAAK0Z,cAAgB,WACnB,IAAIC,GAAuB,EAE3B,GAAI3Z,EAAKgc,uBAAwB,CAC/B,IAAIpC,EAAkCZ,EAAiBhO,yBAAyBhL,EAAKgK,WAAW,GAC5F4P,IACFD,GAAuB,EACvB3Z,EAAKsY,gCAAgCsB,GAEzC,CAEA5Z,EAAK4a,YAAYyB,WAAW/V,MAAK,SAAUgW,GACzC3C,IAAyB2C,EAErB3C,IAIJ3Z,EAAKsY,gCAAgC,MACrCtY,EAAK2Y,kBAAiB,GACxB,GACF,EAEA3Y,EAAK8Z,WAAa,WAEhB9Z,EAAK2Y,kBAAiB,GACtB3Y,EAAK4Y,eAAc,GAEnB,IAAIvR,EAAkB,CACpBkV,gBAAiBrX,KAAKa,UAAU/F,EAAK6H,aAGvC,OAAOyR,EAAiB9D,cAAcxV,EAAKgK,WACxC1D,MAAK,WACJ,OAAOsB,EAAmBR,iBAAiBpH,EAAKkH,wBAAyBG,EAC3E,IACCf,MAAK,WAuCV,IAAwCY,IAtCHlH,EAAKkH,wBAuCxCrH,OAAOka,SAASC,KAAO,IAAMha,EAAKE,aAAe,aAAegH,CAtC9D,IACCY,OAAM,SAAUlD,GACf5E,EAAK4Y,eAAc,GAEnBvU,EAAOtB,6BACL,sEACA,8BACA6B,EACJ,GACJ,EAuCA,SAA0B2C,GACxB,IAAIuQ,EAAmBvQ,EAAOuQ,kBAWhC,SAAwCA,GACtC,IAAImC,EAEAnC,EAAiBC,qBAAuBpQ,EAAAA,QAI1CsS,GAHAA,EAAsCnC,EAAiBkE,qBACrD9Y,EAAe3B,UAAU,sCACzB2B,EAAe3B,UAAU,qDAExBU,QAAQ,sBAAuB6V,EAAiBoC,mBAC1Cla,EAAKwI,eAAiBb,EAAAA,SAC/BsS,EAAsCnC,EAAiBkE,qBACrD9Y,EAAe3B,UAAU,qCACzB2B,EAAe3B,UAAU,oDAG7BvB,EAAKwY,kCAAkCyB,GACvCja,EAAKuY,yBAAyBT,EAAiBS,0BAE/C,MAAM0D,EAA4BnE,EAAiBmE,0BACjDnE,EAAiBmE,0BACjB/Y,EAAe3B,UAAU,6BAE3BvB,EAAKic,0BAA0BA,EACjC,EAhCE9B,CAA+BrC,GAE/B9X,EAAKgc,qBAAqBlE,EAAiBkE,sBAC3Chc,EAAK8b,uBAAyB5W,KAAKC,MAAM2S,EAAiBgE,wBAC1D9b,EAAK6b,gBAA2F,IAA1E/D,EAAiBgE,uBAAuB7Y,QAAQ,qBAE/DiD,QAAQC,QAAQoB,EACzB,CAqGA6S,CAAiB7S,GAzEjB,SAA+BA,GAC7B,IAAIuQ,EAAmBvQ,EAAOuQ,iBAE1BA,EAAiBC,qBAAuBpQ,EAAAA,SAC1C3H,EAAKqR,kBAAoBnJ,EAAY9H,eAAeia,yBACpDra,EAAKsR,oBAAsBpJ,EAAY9H,eAAeka,4BAE7CxC,EAAiBC,qBAAuBpQ,EAAAA,SACjD3H,EAAKqR,kBAAoBnJ,EAAY9H,eAAema,wBACpDva,EAAKsR,oBAAsBpJ,EAAY9H,eAAeoa,2BAGxDxa,EAAKoR,0BAA4B,CAC/BC,kBAAmBrR,EAAKqR,kBACxBE,uBAAwBvR,EAAKwR,eAC7BF,oBAAqBtR,EAAKsR,qBAG5B0H,EAAiB1Y,KAAK,CACpBuK,YAAa7K,EAAKqR,kBAClBvG,gBAAiB9K,EAAKsR,oBACtBvG,qBAAsB7C,EAAY9H,eAAe2K,uBAGnDgD,EAAAA,KAAgB,CACd7N,aAAcF,EAAKE,aACnBM,yBAA0B0H,EAAY9H,eAAeI,yBACrDC,iBAAkByH,EAAY9H,eAAeK,iBAC7CC,yBAA0BwH,EAAY9H,eAAeM,yBACrD4Q,oBAAqBtR,EAAKsR,sBAGrBpL,QAAQC,QAAQoB,EACzB,CAyCAkT,CAAsBlT,GArJtB,SAA4BA,GAE1B,OAD2BA,EAAOuQ,iBAAiBkE,qBAK5C1C,EAAiBjF,oCAAoC9M,EAAOL,yBAChEZ,MAAK,SAAUoU,GAMd,OAJAjb,IAAAA,MAAAA,aAAsBO,EAAKgK,QAAS0Q,GAEpC1a,EAAK6Y,wBAAuB,GAErB3S,QAAQC,SACjB,IACC2B,OAAM,SAAUlD,GAOf,OALAP,EAAOtB,6BACL,6EACA,qCACA6B,GAEKsB,QAAQE,OAAOxB,EACxB,IApBOsB,QAAQC,SAqBnB,CA8HAwU,CAAmBpT,GAChBjB,MAhCH,WACE,MAAM0D,EAAUhK,EAAKgK,UACfwS,EAAUpN,KAAKqN,MACrB,IAAIC,EAAwB,EACxBC,GAAmB,EAGvB,GAA6D,IAAzD3c,EAAKmc,iDACkD,IAAzDnc,EAAKoc,gDADP,CAKA,IAAK,IAAItQ,EAAI,EAAGA,EAAI9B,EAAQ1I,OAAQwK,IAElC,GAAI9B,EAAQ8B,GAAGT,eAAiB7B,EAAAA,OAAqB,CACnDmT,GAAmB,EACnB,MACMC,GAzBWC,EAyBcL,EAzBRM,EAwBL,IAAI1N,KAAKpF,EAAQ8B,GAAG6D,gBAAgBoN,UAvBnDrS,KAAKC,OAAOkS,EAAOC,GAAQ,MAyB9BJ,EAAwBE,EAAWF,EAAwBE,EAAWF,CACxE,CA3BJ,IAAuBG,EAAMC,GA8BF,IAArBH,GACFD,EAAwB1c,EAAKmc,iDAC7BO,GAAyB1c,EAAKoc,iDAC9Bpc,EAAKkc,yBAAwB,EAf/B,CAiBF,GAMF,EAGgD9R,SEtUrC,ynLC0CX,GAAiBlB,UArCV,SAA4B3B,GACjC,MAAMvH,EAAOC,KAOb,IAAsCyP,EALtC1P,EAAKuH,OAASA,EAEdvH,EAAKgd,sBAAwB,KAC7Bhd,EAAKid,yBAA2Bxd,IAAAA,YAAc,GAERiQ,EA0BTnI,EAAOL,wBAzB3BU,EAAmBX,YAAYyI,GACnCpJ,MAAK,SAAUuB,GACd7H,EAAK6H,SAAWA,EAChB7H,EAAKgd,sBAAqDhd,EAAK6H,SAASiQ,iBAa3BgE,uBAM1C,uBAHE,gBAdL9b,EAAKid,0BAAyB,EAChC,IACCnV,OAAM,SAAUlD,GACfP,EAAOtB,6BACL,mEACA,2BACA6B,EACJ,GAcN,EAEgDwF,SC1CrC,waCOI,MAAM8S,EAEnB5S,+BACE7K,IAAAA,WAAAA,SAAuB,eAAgB0d,GACvC1d,IAAAA,WAAAA,SAAuB,gBAAiB2d,GACxC3d,IAAAA,WAAAA,SAAuB,uBAAwB4d,GAC/C5d,IAAAA,WAAAA,SAAuB,uBAAwB6d,EACjD,ECPF7d,IAAAA,gBAAAA,OAA4B,CAE1BiJ,OAAQ,SAAUC,EAASC,GAEbnJ,IAAAA,MAAAA,iBAA0BmJ,MAGpCvC,IAAEsC,GAAS4U,QAEf,GLZF,IAAIC,EAAkB,IAAItX,SAAQ,SAAUC,EAASC,GACnDsV,EAAyBvV,EACzBwV,EAAwBvV,CAC1B,IAUAvG,OAAO4d,kCAAoC,WACzCC,aAAa9B,GACbF,EAAuBiC,WACzB,EAMA/B,EAAkBgC,YAAW,WAC3BjC,EAAsB,IAAI3a,MAAM,0EAClC,GAAG,MAeH,UAbA,WAEaf,KAMN4d,aAAe,WAClB,OAAOL,CACT,CACF,EM1CmCG,WCKnCle,IAAAA,gBAAAA,UAA+B,CAE7Ba,KAAM,SAAUqI,EAASC,EAAeC,GAEtC,IAAIiV,EAAuBlV,IAEvB1I,EAAe2I,EAAYC,IAAI,gBAC/BiV,EAAYlV,EAAYC,IAAI,aAC5BkV,EAAWnV,EAAYC,IAAI,YAE3BvI,EAAU,CACZ,QAAWwd,EACX,GAAM7d,EACN,SAAY,SAAU4G,GACpBgX,EAAqBhX,GACjBkX,GACFA,GAEJ,EACA,mBAAoB,WAClBF,EAAqB,MACjBE,GACFA,GAEJ,GAMEC,EAAoB9Z,SAAS+Z,cAAc,OAC/CvV,EAAQwV,YAAYF,GAEpBG,EAAgBP,eACbvX,MAAK,SAAU+X,GACdA,EAAgBC,OAAOL,EAAmB1d,EAC5C,IACCuH,OAAM,SAAUyW,GACfla,EAAOjB,MAAM,qBAAsBmb,EACrC,GACJ,GCzBF,IAAIre,EAAeiE,SAASqa,qBAAqB,QAAQ,GAAGja,aAAa,QACzE2D,EAAYhI,aAAeA,EAoBlBue,EAAyB9U,oBAC7BrD,MAAK,SAAUlG,GACd8H,EAAY/H,cAAgBC,EAAeD,cAC3C+H,EAAY9H,eAAiBA,CAC/B,IACC0H,OAAM,SAAUlD,GAOf,OALAP,EAAOtB,6BACL,8DACA,2CACA6B,GAEKsB,QAAQE,OAAOxB,EACxB,IA9BD0B,MAiCH,WAEE,OAAOoY,EAA0B7U,mBAAmB,YACjDvD,MAAK,SAAU6G,GACdjF,EAAY7H,wBAA0B8M,CACxC,IACCrF,OAAM,SAAUlD,GAOf,OALAP,EAAOtB,6BACL,8DACA,8CACA6B,GAEKsB,QAAQE,OAAOxB,EACxB,GACJ,IA/CG0B,MAiDH,WACE,OAAOqY,EAAuBlV,gBAAgBvB,EAAYhI,cACvDoG,MAAK,SAAU1F,GAGdsC,EAAe5C,KAAKM,EACtB,IACCkH,OAAM,SAAUlD,GAQf,OALAP,EAAOtB,6BACL,8DACA,oDACA6B,GAEKsB,QAAQE,OAAOxB,EACxB,GACJ,IAjEG0B,MAAK,WAmER,IAEMiB,EAnEFqX,EAAete,KAAKJ,GACpBmE,EAAO/D,KAAK4H,EAAYhI,cACxBgd,EAAsB2B,wBAiEpBtX,EAAS,CACXjD,sBAAuBwa,EAAoBxa,uBAI7C7E,IAAAA,cACE,IAAIsf,EAAuBxX,GAC3BpD,SAASC,eAAe,yBAG5B,SAAwBhE,EAAgBF,GAEtCgB,QAAQ8d,IAAI,wBACZ9d,QAAQ8d,IAAI,WAAY5e,EAAe6e,eAEvC/d,QAAQ8d,IAAI,mBAAoB5e,EAAeD,eAC/Ce,QAAQ8d,IAAI,iBAAkB9e,EAChC,CAhFIgf,CAAehX,EAAY9H,eAAgBF,EAC7C,IACC4H,OAAM,SAAUyW,GACfla,EAAOtB,6BACL,yEACA,gFAAiFwb,EACrF,G,sDC9BF1e,OAAOwG,EAAIxG,OAAOsf,OAASC,G,GCPvBC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAU3I,KAAK+I,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CAGAJ,EAAoBO,EAAID,ECzBxBN,EAAoBQ,KAAO,WAC1B,MAAM,IAAI9e,MAAM,iCACjB,E7DFI5B,EAAW,GACfkgB,EAAoBS,EAAI,SAASC,EAAQC,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAASvU,EAAI,EAAGA,EAAI1M,EAASkC,OAAQwK,IAAK,CACrCmU,EAAW7gB,EAAS0M,GAAG,GACvBoU,EAAK9gB,EAAS0M,GAAG,GACjBqU,EAAW/gB,EAAS0M,GAAG,GAE3B,IAJA,IAGIwU,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAAS3e,OAAQif,MACpB,EAAXJ,GAAsBC,GAAgBD,IAAa/e,OAAOC,KAAKie,EAAoBS,GAAGS,OAAM,SAASlX,GAAO,OAAOgW,EAAoBS,EAAEzW,GAAK2W,EAASM,GAAK,IAChKN,EAASQ,OAAOF,IAAK,IAErBD,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACblhB,EAASqhB,OAAO3U,IAAK,GACrB,IAAI4U,EAAIR,SACET,IAANiB,IAAiBV,EAASU,EAC/B,CACD,CACA,OAAOV,CArBP,CAJCG,EAAWA,GAAY,EACvB,IAAI,IAAIrU,EAAI1M,EAASkC,OAAQwK,EAAI,GAAK1M,EAAS0M,EAAI,GAAG,GAAKqU,EAAUrU,IAAK1M,EAAS0M,GAAK1M,EAAS0M,EAAI,GACrG1M,EAAS0M,GAAK,CAACmU,EAAUC,EAAIC,EAwB/B,E8D5BAb,EAAoBqB,EAAI,SAAShB,GAChC,IAAIiB,EAASjB,GAAUA,EAAOkB,WAC7B,WAAa,OAAOlB,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAL,EAAoBwB,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,E7DPIthB,EAAW8B,OAAO4f,eAAiB,SAASC,GAAO,OAAO7f,OAAO4f,eAAeC,EAAM,EAAI,SAASA,GAAO,OAAOA,EAAIC,SAAW,EAQpI5B,EAAoB6B,EAAI,SAAS1f,EAAO2f,GAEvC,GADU,EAAPA,IAAU3f,EAAQxB,KAAKwB,IAChB,EAAP2f,EAAU,OAAO3f,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAP2f,GAAa3f,EAAMof,WAAY,OAAOpf,EAC1C,GAAW,GAAP2f,GAAoC,mBAAf3f,EAAM6E,KAAqB,OAAO7E,CAC5D,CACA,IAAI4f,EAAKjgB,OAAOkgB,OAAO,MACvBhC,EAAoBoB,EAAEW,GACtB,IAAIE,EAAM,CAAC,EACXliB,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAIkiB,EAAiB,EAAPJ,GAAY3f,EAAyB,iBAAX+f,KAAyBniB,EAAe4D,QAAQue,GAAUA,EAAUliB,EAASkiB,GACxHpgB,OAAOqgB,oBAAoBD,GAAS1f,SAAQ,SAASwH,GAAOiY,EAAIjY,GAAO,WAAa,OAAO7H,EAAM6H,EAAM,CAAG,IAI3G,OAFAiY,EAAa,QAAI,WAAa,OAAO9f,CAAO,EAC5C6d,EAAoBwB,EAAEO,EAAIE,GACnBF,CACR,E8DxBA/B,EAAoBwB,EAAI,SAASpB,EAASgC,GACzC,IAAI,IAAIpY,KAAOoY,EACXpC,EAAoBqC,EAAED,EAAYpY,KAASgW,EAAoBqC,EAAEjC,EAASpW,IAC5ElI,OAAOwgB,eAAelC,EAASpW,EAAK,CAAEuY,YAAY,EAAM/Y,IAAK4Y,EAAWpY,IAG3E,ECPAgW,EAAoBwC,EAAI,CAAC,EAGzBxC,EAAoBla,EAAI,SAAS2c,GAChC,OAAO7b,QAAQ2P,IAAIzU,OAAOC,KAAKie,EAAoBwC,GAAGlN,QAAO,SAASoN,EAAU1Y,GAE/E,OADAgW,EAAoBwC,EAAExY,GAAKyY,EAASC,GAC7BA,CACR,GAAG,IACJ,ECPA1C,EAAoB2C,EAAI,SAASF,GAEhC,MAAO,yBACR,ECHAzC,EAAoB4C,SAAW,SAASH,GAGxC,ECJAzC,EAAoB6C,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOniB,MAAQ,IAAIoiB,SAAS,cAAb,EAGhB,CAFE,MAAOjd,GACR,GAAsB,iBAAXvF,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxByf,EAAoBqC,EAAI,SAASV,EAAKqB,GAAQ,OAAOlhB,OAAOsV,UAAUC,eAAeC,KAAKqK,EAAKqB,EAAO,ElEAlG/iB,EAAa,CAAC,EACdC,EAAoB,yBAExB8f,EAAoBiD,EAAI,SAAS7c,EAAK4N,EAAMhK,EAAKyY,GAChD,GAAGxiB,EAAWmG,GAAQnG,EAAWmG,GAAKsG,KAAKsH,OAA3C,CACA,IAAIkP,EAAQC,EACZ,QAAWhD,IAARnW,EAEF,IADA,IAAIoZ,EAAUve,SAASqa,qBAAqB,UACpC1S,EAAI,EAAGA,EAAI4W,EAAQphB,OAAQwK,IAAK,CACvC,IAAI6W,EAAID,EAAQ5W,GAChB,GAAG6W,EAAEpe,aAAa,QAAUmB,GAAOid,EAAEpe,aAAa,iBAAmB/E,EAAoB8J,EAAK,CAAEkZ,EAASG,EAAG,KAAO,CACpH,CAEGH,IACHC,GAAa,GACbD,EAASre,SAAS+Z,cAAc,WAEzB0E,QAAU,QACjBJ,EAAOK,QAAU,IACbvD,EAAoBwD,IACvBN,EAAOO,aAAa,QAASzD,EAAoBwD,IAElDN,EAAOO,aAAa,eAAgBvjB,EAAoB8J,GACxDkZ,EAAOQ,IAAMtd,GAEdnG,EAAWmG,GAAO,CAAC4N,GACnB,IAAI2P,EAAmB,SAASC,EAAMrS,GAErC2R,EAAOW,QAAUX,EAAOY,OAAS,KACjC1F,aAAamF,GACb,IAAIQ,EAAU9jB,EAAWmG,GAIzB,UAHOnG,EAAWmG,GAClB8c,EAAOc,YAAcd,EAAOc,WAAWC,YAAYf,GACnDa,GAAWA,EAAQvhB,SAAQ,SAASoe,GAAM,OAAOA,EAAGrP,EAAQ,IACzDqS,EAAM,OAAOA,EAAKrS,EACtB,EACIgS,EAAUjF,WAAWqF,EAAiBO,KAAK,UAAM/D,EAAW,CAAE9Z,KAAM,UAAW0M,OAAQmQ,IAAW,MACtGA,EAAOW,QAAUF,EAAiBO,KAAK,KAAMhB,EAAOW,SACpDX,EAAOY,OAASH,EAAiBO,KAAK,KAAMhB,EAAOY,QACnDX,GAActe,SAASsf,KAAKtF,YAAYqE,EAnCkB,CAoC3D,EmEvCAlD,EAAoBoB,EAAI,SAAShB,GACX,oBAAXgE,QAA0BA,OAAOC,aAC1CviB,OAAOwgB,eAAelC,EAASgE,OAAOC,YAAa,CAAEliB,MAAO,WAE7DL,OAAOwgB,eAAelC,EAAS,aAAc,CAAEje,OAAO,GACvD,E,WCNA,IAAImiB,EACAtE,EAAoB6C,EAAE0B,gBAAeD,EAAYtE,EAAoB6C,EAAEpI,SAAW,IACtF,IAAI5V,EAAWmb,EAAoB6C,EAAEhe,SACrC,IAAKyf,GAAazf,IACbA,EAAS2f,gBACZF,EAAYzf,EAAS2f,cAAcd,MAC/BY,GAAW,CACf,IAAIlB,EAAUve,EAASqa,qBAAqB,UACzCkE,EAAQphB,SAAQsiB,EAAYlB,EAAQA,EAAQphB,OAAS,GAAG0hB,IAC5D,CAID,IAAKY,EAAW,MAAM,IAAI5iB,MAAM,yDAChC4iB,EAAYA,EAAU3hB,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFqd,EAAoByE,EAAIH,C,eCVxB,IAAII,EAAkB,CACrB,IAAK,EACL,IAAK,GAGN1E,EAAoBwC,EAAEvB,EAAI,SAASwB,EAASC,GAE1C,IAAIiC,EAAqB3E,EAAoBqC,EAAEqC,EAAiBjC,GAAWiC,EAAgBjC,QAAWtC,EACtG,GAA0B,IAAvBwE,EAGF,GAAGA,EACFjC,EAAShW,KAAKiY,EAAmB,QAC3B,CAGL,IAAItP,EAAU,IAAIzO,SAAQ,SAASC,EAASC,GAAU6d,EAAqBD,EAAgBjC,GAAW,CAAC5b,EAASC,EAAS,IACzH4b,EAAShW,KAAKiY,EAAmB,GAAKtP,GAGtC,IAAIjP,EAAM4Z,EAAoByE,EAAIzE,EAAoB2C,EAAEF,GAEpD3e,EAAQ,IAAIpC,MAgBhBse,EAAoBiD,EAAE7c,GAfH,SAASmL,GAC3B,GAAGyO,EAAoBqC,EAAEqC,EAAiBjC,KAEf,KAD1BkC,EAAqBD,EAAgBjC,MACRiC,EAAgBjC,QAAWtC,GACrDwE,GAAoB,CACtB,IAAIC,EAAYrT,IAAyB,SAAfA,EAAMlL,KAAkB,UAAYkL,EAAMlL,MAChEwe,EAAUtT,GAASA,EAAMwB,QAAUxB,EAAMwB,OAAO2Q,IACpD5f,EAAMC,QAAU,iBAAmB0e,EAAU,cAAgBmC,EAAY,KAAOC,EAAU,IAC1F/gB,EAAMgJ,KAAO,iBACbhJ,EAAMuC,KAAOue,EACb9gB,EAAMqB,QAAU0f,EAChBF,EAAmB,GAAG7gB,EACvB,CAEF,GACyC,SAAW2e,EAASA,EAE/D,CAEH,EAUAzC,EAAoBS,EAAEQ,EAAI,SAASwB,GAAW,OAAoC,IAA7BiC,EAAgBjC,EAAgB,EAGrF,IAAIqC,EAAuB,SAASC,EAA4Bze,GAC/D,IAKI2Z,EAAUwC,EALV9B,EAAWra,EAAK,GAChB0e,EAAc1e,EAAK,GACnB2e,EAAU3e,EAAK,GAGIkG,EAAI,EAC3B,GAAGmU,EAASzT,MAAK,SAASgY,GAAM,OAA+B,IAAxBR,EAAgBQ,EAAW,IAAI,CACrE,IAAIjF,KAAY+E,EACZhF,EAAoBqC,EAAE2C,EAAa/E,KACrCD,EAAoBO,EAAEN,GAAY+E,EAAY/E,IAGhD,GAAGgF,EAAS,IAAIvE,EAASuE,EAAQjF,EAClC,CAEA,IADG+E,GAA4BA,EAA2Bze,GACrDkG,EAAImU,EAAS3e,OAAQwK,IACzBiW,EAAU9B,EAASnU,GAChBwT,EAAoBqC,EAAEqC,EAAiBjC,IAAYiC,EAAgBjC,IACrEiC,EAAgBjC,GAAS,KAE1BiC,EAAgBjC,GAAW,EAE5B,OAAOzC,EAAoBS,EAAEC,EAC9B,EAEIyE,EAAqBzkB,KAAwC,kCAAIA,KAAwC,mCAAK,GAClHykB,EAAmB3iB,QAAQsiB,EAAqBZ,KAAK,KAAM,IAC3DiB,EAAmBzY,KAAOoY,EAAqBZ,KAAK,KAAMiB,EAAmBzY,KAAKwX,KAAKiB,G,ICrFvF,IAAIC,EAAsBpF,EAAoBS,OAAEN,EAAW,CAAC,IAAI,MAAM,WAAa,OAAOH,EAAoB,KAAO,IACrHoF,EAAsBpF,EAAoBS,EAAE2E,E","sources":["webpack://public-portal-website/webpack/runtime/chunk loaded","webpack://public-portal-website/webpack/runtime/create fake namespace object","webpack://public-portal-website/webpack/runtime/load script","webpack://public-portal-website/./Scripts/knockoutBindingProvider.js","webpack://public-portal-website/./Scripts/App/contextData.js","webpack://public-portal-website/./Scripts/Vendor/inv-resource-helper/resourceHelper.js","webpack://public-portal-website/./Scripts/Vendor/inv-logger/resourceData.js","webpack://public-portal-website/./Scripts/Vendor/inv-logger/logger.js","webpack://public-portal-website/./Scripts/App/Views/appealDetailsConfig.js","webpack://public-portal-website/./Scripts/App/constants.js","webpack://public-portal-website/./Scripts/App/Repositories/errorResponseHandler.js","webpack://public-portal-website/./Scripts/App/Repositories/anonymousRepositoryHelper.js","webpack://public-portal-website/./Scripts/App/Repositories/responseRepository.js","webpack://public-portal-website/./Scripts/App/Views/appealDetailsViewModel.js","webpack://public-portal-website/./Scripts/Vendor/inv-common-bindings/bindings/resAreaLabelBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-common-bindings/bindings/restextBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-common-bindings/bindings/resplaceHolderBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-common-bindings/commonBindings.js","webpack://public-portal-website/./Scripts/App/Types/enums/UploadStatus.ts","webpack://public-portal-website/./Scripts/App/Repositories/resourceDataRepository.js","webpack://public-portal-website/./Scripts/App/Repositories/systemSettingsRepository.js","webpack://public-portal-website/./Scripts/App/Repositories/validationRulesRepository.js","webpack://public-portal-website/./Scripts/App/Bindings/textareaAutoResizeBinding.js","webpack://public-portal-website/./Scripts/App/Components/uploadsList/uploadsList.js","webpack://public-portal-website/./Scripts/App/Components/uploadsList/uploadsList.html","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/utils/fileSizeFormatter.ts","webpack://public-portal-website/./Scripts/App/uploadValidation.js","webpack://public-portal-website/./Scripts/App/Models/responseModel.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/contextData.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/utils/uploadManager.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/models/uploadModel.ts","webpack://public-portal-website/./Scripts/App/Bindings/enterTriggersElementClickBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/components/fileUploadSelecter/fileUploadSelecter.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/components/fileUploadSelecter/fileUploadSelecter.html","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/components/progressBar/progressBar.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/components/progressBar/progressBar.html","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/bindings/fileDropZoneBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/bindings/fileInputBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/bindings/fileSizeBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/bindings/uploadEngineBinding.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/resourceData.js","webpack://public-portal-website/./Scripts/Vendor/inv-file-upload/fileUpload.js","webpack://public-portal-website/./Scripts/App/Repositories/uploadRepository.js","webpack://public-portal-website/./Scripts/Vendor/inv-validation/validationRulesService.js","webpack://public-portal-website/./Scripts/App/Bindings/showModalBindings.js","webpack://public-portal-website/./Scripts/App/Bindings/beforeUnloadBinding.js","webpack://public-portal-website/./Scripts/App/Components/responseForm/responseForm.js","webpack://public-portal-website/./Scripts/App/Components/responseForm/responseForm.html","webpack://public-portal-website/./Scripts/App/Bindings/dynamicFormBinding.js","webpack://public-portal-website/./Scripts/App/Components/customResponseForm/customResponseForm.js","webpack://public-portal-website/./Scripts/App/Utils/recaptchaHelper.js","webpack://public-portal-website/./Scripts/App/Components/customResponseForm/customResponseForm.html","webpack://public-portal-website/./Scripts/App/Components/responseFormLoader/responseFormLoader.js","webpack://public-portal-website/./Scripts/App/Components/responseFormLoader/responseFormLoader.html","webpack://public-portal-website/./Scripts/App/componentRegistration.js","webpack://public-portal-website/./Scripts/App/Bindings/fadeInBinding.js","webpack://public-portal-website/external var \"grecaptcha\"","webpack://public-portal-website/./Scripts/App/Bindings/recaptchaBinding.js","webpack://public-portal-website/./Scripts/App/Views/appealDetailsLoader.js","webpack://public-portal-website/./Scripts/exposeVendorCore.js","webpack://public-portal-website/webpack/bootstrap","webpack://public-portal-website/webpack/runtime/amd define","webpack://public-portal-website/webpack/runtime/compat get default export","webpack://public-portal-website/webpack/runtime/define property getters","webpack://public-portal-website/webpack/runtime/ensure chunk","webpack://public-portal-website/webpack/runtime/get javascript chunk filename","webpack://public-portal-website/webpack/runtime/get mini-css chunk filename","webpack://public-portal-website/webpack/runtime/global","webpack://public-portal-website/webpack/runtime/hasOwnProperty shorthand","webpack://public-portal-website/webpack/runtime/make namespace object","webpack://public-portal-website/webpack/runtime/publicPath","webpack://public-portal-website/webpack/runtime/jsonp chunk loading","webpack://public-portal-website/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"public-portal-website:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import ko from 'knockout';\r\nimport KnockoutSecureBinding from 'knockout-secure-binding';\r\n\r\n// Configure KO to use a \"safe\" binding so we can use a Content Security Policy (CSP).\r\n// Knockout uses \"new Function\" which violates the CSP rule \"unsafe-eval\" which\r\n// should not be excluded in the CSP.\r\n// For more information please take a look at https://github.com/brianmhunt/knockout-secure-binding.\r\nko.bindingProvider.instance = new KnockoutSecureBinding({\r\n attribute: 'data-bind', // default \"data-sbind\"\r\n globals: window, // default {}\r\n bindings: ko.bindingHandlers, // default ko.bindingHandlers\r\n noVirtualElements: false // default true\r\n});\r\n","function ContextData() {\r\n\r\n var self = this;\r\n\r\n self.languageCode = null;\r\n self.inReleaseMode = null;\r\n self.portalSettings = null;\r\n self.responseValidationRules = null;\r\n\r\n self.init = function (options) {\r\n self.fileUploadServiceRootUrl = options.fileUploadServiceRootUrl;\r\n self.maximumChunkSize = options.maximumChunkSize;\r\n self.maximumConcurrentUploads = options.maximumConcurrentUploads;\r\n };\r\n}\r\n\r\nexport default new ContextData();\r\n","import ko from 'knockout';\r\n\r\n/**\r\n * Module to retrieve translated text\r\n */\r\nfunction ResourceHelper() {\r\n\r\n var self = this;\r\n self.wrapTranslatedTextInBrackets = false;\r\n self.resourceData = ko.observable(null);\r\n\r\n /**\r\n *\r\n * @param {*} resourceData\r\n * @param {boolean} [wrapTranslatedTextInBrackets]\r\n */\r\n self.init = function (resourceData, wrapTranslatedTextInBrackets) {\r\n self.resourceData(resourceData);\r\n self.wrapTranslatedTextInBrackets = wrapTranslatedTextInBrackets || self.wrapTranslatedTextInBrackets;\r\n };\r\n\r\n self.registerPackageResourceData = function (packageResourceData, packageName, languageCode) {\r\n\r\n if (!self.resourceData()) {\r\n throw new Error('The resource helper must be initialised before any any package resource data can be registered');\r\n }\r\n\r\n // Combine the package resource data with the existing resource ensuring any existing keys are not\r\n // overridden. The resource data registered during initialisation should always take precedence.\r\n var tempResourceData = ko.utils.extend({}, packageResourceData);\r\n self.resourceData(ko.utils.extend(tempResourceData, self.resourceData()));\r\n\r\n console.debug(\r\n 'Package', packageName, 'registered resource data with',\r\n Object.keys(packageResourceData).length, 'keys for the language code', languageCode);\r\n };\r\n\r\n /**\r\n * Gets a localised string for the given resource key\r\n * @param {string} resourceKey\r\n * @return {string}\r\n */\r\n self.getString = function (resourceKey) {\r\n\r\n if (!self.resourceData()) {\r\n throw new Error('The resourceData has not been populated');\r\n }\r\n\r\n var value = self.resourceData()[resourceKey];\r\n\r\n if (value) {\r\n\r\n if (self.wrapTranslatedTextInBrackets) {\r\n return '|' + value + '|';\r\n }\r\n\r\n return value;\r\n }\r\n\r\n return '[!' + resourceKey + '!]';\r\n };\r\n\r\n /**\r\n * Takes a string with placeholders and replaces values from a object with replacements\r\n * @example \"Hello {name}\", { name: 'Bob' } = \"Hello Bob\"\r\n * @param {string} stringWithPlaceholders\r\n * @param {*} replacementValues Object with property names that match the placeholder names\r\n * @return {string}\r\n */\r\n self.replacePlaceholders = function (stringWithPlaceholders, replacementValues) {\r\n if (replacementValues) {\r\n\r\n Object.entries(replacementValues).forEach(([replaceKey, replacement]) => {\r\n\r\n if (typeof replacement === 'function') {\r\n replacement = ko.utils.unwrapObservable(replacement());\r\n }\r\n\r\n stringWithPlaceholders = stringWithPlaceholders.replace('{' + replaceKey + '}', replacement);\r\n });\r\n }\r\n\r\n return stringWithPlaceholders;\r\n };\r\n\r\n /**\r\n * If there is code that might use the resource helper before the SPA has loaded / the resource data\r\n * is retreived then this method should be used to determine if the resource data exists before\r\n * attempting to retrieve a translated string.\r\n * @return {bool}\r\n */\r\n self.hasResourceData = function () {\r\n return !!self.resourceData(); // Convert truthy value to true\r\n };\r\n}\r\n\r\nexport default new ResourceHelper();\r\n\r\n","import englishStrings from './resourceStrings.json';\r\nimport welshStrings from './resourceStrings.cy.json';\r\nimport testLanguageStrings from './resourceStrings.vi-VN.json';\r\n\r\nconst resourceData = {\r\n 'en-us': englishStrings,\r\n 'cy': welshStrings,\r\n 'vi-vn': testLanguageStrings\r\n};\r\n\r\nexport default resourceData;\r\n","import toastr from '@publicsafety/toastr';\r\nimport resourceHelper from '../inv-resource-helper/resourceHelper';\r\nimport resourceData from './resourceData';\r\n\r\n/**\r\n * Module to handle logging of errors and warnings. The toastr library is used to display messages to user.\r\n */\r\nfunction Logger() {\r\n\r\n var self = this;\r\n\r\n // Please ensure the supported language codes and default language code are all in lowercase\r\n var supportedLanguageCodes = ['en-us', 'cy', 'vi-vn'];\r\n var defaultLanguageCode = 'en-us';\r\n\r\n /** Flags if the debugMessage parameter on the error, warning and debug methods should be displayed to the user */\r\n var showErrorDebugMessage = true;\r\n\r\n /** Flags if calls to the logDebug should be handled or ignored */\r\n var processLogDebugCalls = false;\r\n\r\n toastr.options = {\r\n closeButton: true,\r\n progressBar: true,\r\n newestOnTop: true,\r\n timeOut: 4000\r\n };\r\n\r\n self.init = function (languageCode) {\r\n\r\n var languageCodeSupported;\r\n\r\n if (!languageCode) {\r\n self.logAndThrowUntranslatedError(\r\n 'An issue occurred while initializing the logging module',\r\n 'The required parameter \\'languageCode\\' was not provided when initializing the module \\'inv-logging\\'');\r\n }\r\n\r\n languageCode = languageCode.toLowerCase();\r\n languageCodeSupported = supportedLanguageCodes.indexOf(languageCode) > -1;\r\n languageCode = languageCodeSupported ? languageCode : defaultLanguageCode;\r\n resourceHelper.registerPackageResourceData(resourceData[languageCode], 'inv-logger', languageCode);\r\n };\r\n\r\n self.setOptions = function (options) {\r\n showErrorDebugMessage = options.showErrorDebugMessage;\r\n processLogDebugCalls = options.processLogDebugCalls;\r\n };\r\n\r\n /**\r\n * Displays an error to the user and logs to the console\r\n * @param {string} resourceKey\r\n * @param {string} [debugMessage] Message to be logged for debugging / internal purposes\r\n * @param {*} [errorObject]\r\n */\r\n self.error = function (resourceKey, debugMessage, errorObject) {\r\n\r\n var message = resourceHelper.getString(resourceKey);\r\n var errorDetails = createDetails(resourceKey, message, debugMessage, errorObject);\r\n\r\n if (showErrorDebugMessage && debugMessage) {\r\n message += ' ' + debugMessage;\r\n }\r\n\r\n console.error(errorDetails);\r\n toastr.error(message, null, { timeOut: 10000 });\r\n };\r\n\r\n /**\r\n * Displays an error to the user without a timeout (user has to dismiss it) and logs to the console\r\n * @param {string} resourceKey\r\n * @param {string} [debugMessage] Message to be logged for debugging / internal purposes\r\n * @param {*} [errorObject]\r\n */\r\n self.errorWithoutTimeout = function (resourceKey, debugMessage, errorObject) {\r\n\r\n var message = resourceHelper.getString(resourceKey);\r\n var errorDetails = createDetails(resourceKey, message, debugMessage, errorObject);\r\n\r\n if (showErrorDebugMessage && debugMessage) {\r\n message += ' ' + debugMessage;\r\n }\r\n\r\n console.error(errorDetails);\r\n toastr.error(message, null, { timeOut: null });\r\n };\r\n\r\n /**\r\n * Logs a warning\r\n * @param {string} resourceKey\r\n * @param {string} [debugMessage] Message to be logged for debugging / internal purposes\r\n * @param {Object} [errorObject]\r\n */\r\n self.warning = function (resourceKey, debugMessage, errorObject) {\r\n\r\n var message = resourceHelper.getString(resourceKey);\r\n var warningDetails = createDetails(resourceKey, message, debugMessage, errorObject);\r\n\r\n if (showErrorDebugMessage && debugMessage) {\r\n message += ' ' + debugMessage;\r\n }\r\n\r\n console.warn(warningDetails);\r\n toastr.warning(message, null, { timeOut: 10000 });\r\n };\r\n\r\n /**\r\n * Logs a debug message to the console for a technical / developer audience\r\n * @param {string} debugMessage\r\n * @param {*} [optionalParams]\r\n */\r\n self.debug = function (debugMessage, optionalParams) {\r\n\r\n if (processLogDebugCalls) {\r\n\r\n if (optionalParams) {\r\n console.debug(debugMessage, optionalParams);\r\n } else {\r\n console.debug(debugMessage);\r\n }\r\n }\r\n };\r\n\r\n self.success = function (resourceKey) {\r\n\r\n var message = resourceHelper.getString(resourceKey);\r\n toastr.success(message);\r\n };\r\n\r\n self.info = function (resourceKey) {\r\n\r\n var message = resourceHelper.getString(resourceKey);\r\n toastr.info(message);\r\n };\r\n\r\n /**\r\n * Logs an error to the console and displays an untranslated friendly message to the user. This method\r\n * must only be used for errors that occur during SPA startup when it's not possible to determine the\r\n * language for the user and therefore a translated friendly message can't be displayed.\r\n * @param {string} friendlyMessage\r\n * @param {string} [debugMessage]\r\n * @param {error} [errorObject]\r\n */\r\n self.logAndThrowUntranslatedError = function (friendlyMessage, debugMessage, errorObject) {\r\n\r\n errorObject = errorObject || {};\r\n\r\n // If the error has already been handled then nothing to do here\r\n if (errorObject.errorHasBeenLogged) {\r\n return;\r\n }\r\n\r\n var resourceKey = 'None: Untranslated error';\r\n var errorDetails = createDetails(resourceKey, friendlyMessage, debugMessage, errorObject);\r\n var message = friendlyMessage;\r\n\r\n if (showErrorDebugMessage && debugMessage) {\r\n message += ' ' + debugMessage;\r\n }\r\n\r\n console.error(errorDetails);\r\n toastr.error(message, null, { timeOut: null }); // Don't automatically hide the toastr, user must close.\r\n\r\n errorObject.errorHasBeenLogged = true;\r\n throw errorObject;\r\n };\r\n\r\n self.logUnauthorizedAccess = function () {\r\n\r\n var resourceKey = 'UnauthorizedAccessErrorMessage';\r\n var message = `You have attempted to access content or perform an action you aren’t currently authorized access to.\r\n This may be due to your session timing out. Please reload this page to re-authenticate and try again.`;\r\n\r\n if (resourceHelper.hasResourceData()) {\r\n message = resourceHelper.getString(resourceKey);\r\n }\r\n\r\n var warningDetails = createDetails(resourceKey, message);\r\n\r\n console.warn(warningDetails);\r\n toastr.warning(message, null, { timeOut: 10000, preventDuplicates: true });\r\n };\r\n\r\n self.logTimeout = function () {\r\n\r\n var resourceKey = 'AjaxTimeOutErrorMessage';\r\n var message = 'The server took too long to respond with data and a timeout occurred. Please try again later.';\r\n\r\n if (resourceHelper.hasResourceData()) {\r\n message = resourceHelper.getString(resourceKey);\r\n }\r\n\r\n var warningDetails = createDetails(resourceKey, message);\r\n\r\n console.warn(warningDetails);\r\n toastr.warning(message, null, { timeOut: 10000, preventDuplicates: true });\r\n };\r\n\r\n function createDetails(resourceKey, friendlyMessage, debugMessage, errorObject) {\r\n\r\n return {\r\n resourceKey: resourceKey,\r\n friendlyMessage: friendlyMessage,\r\n debugMessage: debugMessage,\r\n errorObject: errorObject\r\n };\r\n }\r\n}\r\n\r\nexport default new Logger();\r\n","import logger from '../../Vendor/inv-logger/logger';\r\n\r\nconst appealPublicReferenceElement = document.getElementById('data-appeal-public-reference');\r\n\r\nif (!appealPublicReferenceElement) {\r\n logger.logAndThrowUntranslatedError('Unable to read the appeal public reference');\r\n}\r\n\r\nconst appealPublicReference = appealPublicReferenceElement.getAttribute('data-value');\r\n\r\nexport default {\r\n appealPublicReference: appealPublicReference\r\n};\r\n","/**\r\n * Object to holds constants for the site to prevent the use of magic strings.\r\n */\r\nvar constants = {\r\n\r\n responseParentType: {\r\n none: 'None',\r\n request: 'Request',\r\n appeal: 'Appeal'\r\n }\r\n};\r\n\r\nexport default constants;\r\n","import logger from '../../Vendor/inv-logger/logger';\r\n\r\n/**\r\n * This module is used to inspect error responses from Ajax calls and handle known scenarios\r\n */\r\nfunction ErrorResponseHandler() {\r\n\r\n var self = this;\r\n\r\n /**\r\n * Inspect the error response for an unauthorised response or error response with translated error\r\n * messages and handle as appropriately.\r\n * @param {*} jqXhr\r\n */\r\n self.handleErrorResponse = function (jqXhr) {\r\n handleUnauthorisedResponse(jqXhr);\r\n handleTimeoutError(jqXhr);\r\n parseAndAddErrorMessages(jqXhr);\r\n };\r\n\r\n /**\r\n * Log a warning if 401 returned as the user's token has expired / there is an authentication issue\r\n * @param {*} jqXhr\r\n */\r\n function handleUnauthorisedResponse(jqXhr) {\r\n\r\n if (jqXhr.status === 401) {\r\n logger.logUnauthorizedAccess();\r\n jqXhr.errorHasBeenLogged = true;\r\n }\r\n }\r\n\r\n /**\r\n * Log specific warning if an AJAX request timed out\r\n * @param {*} jqXhr\r\n */\r\n function handleTimeoutError(jqXhr) {\r\n\r\n if (jqXhr.statusText === 'timeout') {\r\n logger.logTimeout();\r\n jqXhr.errorHasBeenLogged = true;\r\n }\r\n }\r\n\r\n /**\r\n * If the error contains translated error messages and the error was due to a bad request that the user\r\n * can recover from then add the translated error messages directly to the jqXhr object for user by\r\n * consumers of the repositories.\r\n * @param {*} jqXhr\r\n */\r\n function parseAndAddErrorMessages(jqXhr) {\r\n let errorObject = jqXhr.responseJSON;\r\n\r\n if (!errorObject) {\r\n return;\r\n }\r\n\r\n if (typeof errorObject === 'string') {\r\n try {\r\n errorObject = JSON.parse(jqXhr.responseJSON);\r\n } catch (e) {\r\n console.info(`Server error response doesn't contain JSON for the standard ErrorModel`);\r\n return;\r\n }\r\n }\r\n\r\n if (errorObject.errorMessages && errorObject.isUserRecoverable) {\r\n jqXhr.serverErrorMessages = errorObject.errorMessages;\r\n }\r\n }\r\n}\r\n\r\nexport default new ErrorResponseHandler();\r\n","import $ from 'jquery';\r\nimport errorResponseHandler from './errorResponseHandler';\r\n\r\nfunction AnonymousRepositoryHelper() {\r\n\r\n var self = this;\r\n\r\n /**\r\n * Returns a promise for an anonymous GET AJAX request\r\n * @param {string} url\r\n * @return {Promise}\r\n */\r\n self.ajaxGet = function (url) {\r\n return new Promise(function (resolve, reject) {\r\n $.ajax(createAjaxSetting(url)).then(resolve, function (jqXhr) {\r\n errorResponseHandler.handleErrorResponse(jqXhr);\r\n reject(jqXhr);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Returns a promise for an anonymous POST AJAX request. Post should be used to create a new resource\r\n * @param {string} url\r\n * @param {*} data JavaScript object\r\n * @return {Promise}\r\n */\r\n self.ajaxPost = function (url, data) {\r\n\r\n return new Promise(function (resolve, reject) {\r\n $.ajax(createAjaxSetting(url, 'POST', data)).then(resolve, function (jqXhr) {\r\n errorResponseHandler.handleErrorResponse(jqXhr);\r\n reject(jqXhr);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Returns a promise for a Delete AJAX request.\r\n * @param {string} url\r\n * @return {Promise}\r\n */\r\n self.ajaxDelete = function (url) {\r\n return new Promise(function (resolve, reject) {\r\n $.ajax(createAjaxSetting(url, 'DELETE')).then(resolve, function (jqXhr) {\r\n errorResponseHandler.handleErrorResponse(jqXhr);\r\n reject(jqXhr);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Returns a promise for a PUT AJAX request. Put should be used to update a resource that already exists\r\n * @param {string} url\r\n * @param {*} data JavaScript object\r\n * @return {Promise}\r\n */\r\n self.ajaxPut = function (url, data) {\r\n return new Promise(function (resolve, reject) {\r\n $.ajax(createAjaxSetting(url, 'PUT', data)).then(resolve, function (jqXhr) {\r\n errorResponseHandler.handleErrorResponse(jqXhr);\r\n reject(jqXhr);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Creates an jQuery AJAX setting object for the given parameters to execute an anonymous request\r\n * @param {string} url\r\n * @param {string} [type]\r\n * @param {*} [data]\r\n * @return {*}\r\n */\r\n function createAjaxSetting(url, type, data) {\r\n\r\n var settings = {\r\n url: url,\r\n type: type || 'GET',\r\n dataType: type === 'DELETE' ? null : 'json' // Alway expect a JSON response unless deleting\r\n };\r\n\r\n if (data) {\r\n settings.data = JSON.stringify(data);\r\n settings.contentType = 'application/json';\r\n }\r\n\r\n return settings;\r\n }\r\n}\r\n\r\nexport default new AnonymousRepositoryHelper();\r\n","import anonymousRepositoryHelper from './anonymousRepositoryHelper';\r\n\r\nfunction ResponseRepository() {\r\n var self = this;\r\n\r\n var baseResponseUrl = '/api/response/';\r\n\r\n self.createResponseWithCaptchaValidation = function (parentDetails, captchaValue) {\r\n\r\n var responseDataModel = {\r\n captchaValue: captchaValue,\r\n parentDetails: parentDetails\r\n };\r\n\r\n return anonymousRepositoryHelper.ajaxPost(baseResponseUrl, responseDataModel);\r\n };\r\n\r\n self.getResponse = function (responsePublicReference) {\r\n var getResponseUrl = baseResponseUrl + responsePublicReference;\r\n\r\n return anonymousRepositoryHelper.ajaxGet(getResponseUrl, responsePublicReference);\r\n };\r\n\r\n self.completeResponse = function (responsePublicReference, responseDetails) {\r\n\r\n var responseDataModel = {\r\n responsePublicReference: responsePublicReference,\r\n responseDetails: responseDetails\r\n };\r\n\r\n var completeResponseUrl = baseResponseUrl + responsePublicReference;\r\n\r\n return anonymousRepositoryHelper.ajaxPut(completeResponseUrl, responseDataModel);\r\n };\r\n}\r\n\r\nexport default new ResponseRepository();\r\n","import ko from 'knockout';\r\nimport logger from '../../Vendor/inv-logger/logger';\r\nimport constants from '../constants';\r\nimport responseRepository from '../Repositories/responseRepository';\r\nimport contextData from '../contextData';\r\n\r\nfunction AppealDetailsViewModel(params) {\r\n\r\n var self = this; // jshint ignore: line\r\n\r\n self.isResponseFormVisible = ko.observable(false);\r\n self.isCaptchaVisible = ko.observable(self.isCaptchaEnabled);\r\n self.isCaptchaEnabled = contextData.portalSettings.appealResponseCaptchaEnabled;\r\n\r\n self.isResponseAreaVisible = ko.observable(false);\r\n\r\n self.responseAreaLoading = ko.computed(function () {\r\n return !self.isCaptchaVisible() && !self.isResponseFormVisible();\r\n });\r\n\r\n self.languageCode = contextData.languageCode;\r\n self.captchaPublicKey = contextData.portalSettings.captchaPublicKey;\r\n // If captcha disabled then set value to default to pass the required validation\r\n self.captchaValue = ko.observable(self.isCaptchaEnabled ? null : 'Captcha disabled');\r\n self.captchaCallback = function () {\r\n if (self.isCaptchaVisible && self.captchaValue() !== null && self.captchaValue() !== 'Captcha disabled') {\r\n self.isCaptchaVisible(false);\r\n showResponseForm();\r\n }\r\n };\r\n\r\n self.appealPublicReference = params.appealPublicReference;\r\n self.responsePublicReference = null;\r\n self.responseType = constants.responseParentType.appeal;\r\n self.showResponseArea = function () {\r\n self.isResponseAreaVisible(true);\r\n\r\n if (self.isCaptchaEnabled) {\r\n self.isCaptchaVisible(true);\r\n } else {\r\n showResponseForm();\r\n }\r\n };\r\n\r\n function showResponseForm() {\r\n\r\n createResponse(self.appealPublicReference, self.captchaValue())\r\n .then(function (response) {\r\n self.responsePublicReference = response.responsePublicReference;\r\n self.isResponseFormVisible(true);\r\n })\r\n .catch(function (jqXhr) {\r\n\r\n return Promise.reject(jqXhr);\r\n });\r\n }\r\n\r\n function createResponse(appealPublicReference, captchaValue) {\r\n\r\n var parentDetails = {\r\n ParentPublicReference: appealPublicReference,\r\n ParentType: constants.responseParentType.appeal\r\n };\r\n\r\n return new Promise(function (resolve, reject) {\r\n responseRepository.createResponseWithCaptchaValidation(parentDetails, captchaValue)\r\n .then(function (response) {\r\n resolve(response);\r\n })\r\n .catch(function (jqXhr) {\r\n\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred creating a response on appeal. Please try again later.',\r\n 'Unable to get the response public identifier',\r\n jqXhr);\r\n\r\n reject(jqXhr);\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default AppealDetailsViewModel;\r\n","import ko from 'knockout';\r\nimport resourceHelper from '../../inv-resource-helper/resourceHelper';\r\n\r\n/**\r\n * Resource aria-label binding to display translated aria-label text based on\r\n * content in the resource files.\r\n * @example\r\n * \r\n * \r\n */\r\nko.bindingHandlers.resAriaLabel = {\r\n update: function (element, valueAccessor, allBindings) {\r\n\r\n var value = valueAccessor();\r\n var params = allBindings.get('params');\r\n\r\n if (value) {\r\n var text = resourceHelper.getString(ko.utils.unwrapObservable(value));\r\n\r\n if (params) {\r\n text = resourceHelper.replacePlaceholders(text, params);\r\n }\r\n\r\n ko.applyBindingsToNode(element, { attr: { 'aria-label': text } });\r\n }\r\n }\r\n};\r\n","import ko from 'knockout';\r\nimport resourceHelper from '../../inv-resource-helper/resourceHelper';\r\n\r\n/**\r\n * Binding to display localised text based on the data in the server-side resource files\r\n * @example\r\n *

\r\n *

\r\n */\r\nko.bindingHandlers.restext = {\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {\r\n\r\n var text = getLocalizedString(ko.utils.unwrapObservable(valueAccessor()));\r\n\r\n ko.bindingHandlers.text.update(\r\n element,\r\n function () {\r\n return text;\r\n },\r\n allBindingsAccessor,\r\n viewModel,\r\n context);\r\n }\r\n};\r\n\r\nfunction getLocalizedString(binding) {\r\n\r\n var value;\r\n\r\n if (binding === null) {\r\n return null;\r\n }\r\n\r\n // Allow both restext: 'Home' as string and restext: { key: 'Home' } as an object\r\n if (typeof binding === 'string' || binding instanceof String) {\r\n binding = { key: binding };\r\n }\r\n\r\n value = resourceHelper.getString(binding.key);\r\n value = resourceHelper.replacePlaceholders(value, binding.params);\r\n\r\n return value;\r\n}\r\n","import ko from 'knockout';\r\nimport resourceHelper from '../../inv-resource-helper/resourceHelper';\r\n\r\n/**\r\n * Resource placeholder binding to display translated placeholder text on an input field based on\r\n * content in the resource files.\r\n */\r\nko.bindingHandlers.resplaceholder = {\r\n\r\n init: function (element, valueAccessor) {\r\n var text = resourceHelper.getString(valueAccessor());\r\n ko.applyBindingsToNode(element, { attr: { placeholder: text } });\r\n }\r\n};\r\n\r\n","import './bindings/resAreaLabelBinding';\r\nimport './bindings/restextBinding';\r\nimport './bindings/resplaceHolderBinding';\r\n\r\nfunction CommonBindings() {\r\n\r\n // ----------------------------------------------------------------------------------------------------\r\n // This module exists to load up all the binding modules therefore registering them with Knockout.\r\n // ----------------------------------------------------------------------------------------------------\r\n\r\n var self = this;\r\n\r\n // Initialise function added for future support\r\n self.init = function () {\r\n };\r\n}\r\n\r\nexport default new CommonBindings();\r\n","enum UploadStatus {\r\n authorising = 'Authorising',\r\n pending = 'Pending',\r\n uploading = 'Uploading',\r\n uploaded = 'Uploaded',\r\n cancelled = 'Cancelled',\r\n failed = 'Failed',\r\n failedAuthorisation = 'FailedAuthorisation'\r\n}\r\n\r\nexport default UploadStatus;\r\n","import anonymousRepositoryHelper from './anonymousRepositoryHelper';\r\n\r\nfunction ResourceDataRepository() {\r\n\r\n var self = this;\r\n\r\n self.getResourceData = function (languageCode) {\r\n\r\n var resourceUrl = '/api/resourceData/' + languageCode;\r\n\r\n return anonymousRepositoryHelper.ajaxGet(resourceUrl);\r\n };\r\n}\r\n\r\nexport default new ResourceDataRepository();\r\n","import anonymousRepositoryHelper from './anonymousRepositoryHelper';\r\n\r\nfunction SystemSettingsRepository() {\r\n\r\n var self = this;\r\n var resourceBaseUrl = '/api/systemSettings';\r\n\r\n /**\r\n * Get portal settings including upload url and in release mode flag\r\n * @return {Promise}\r\n */\r\n self.getPortalSettings = function () {\r\n\r\n var resourceUrl = resourceBaseUrl + '/portalSettings';\r\n return anonymousRepositoryHelper.ajaxGet(resourceUrl);\r\n };\r\n}\r\n\r\nexport default new SystemSettingsRepository();\r\n","import anonymousRepositoryHelper from './anonymousRepositoryHelper';\r\n\r\nfunction ValidationRulesRepository() {\r\n\r\n var self = this;\r\n\r\n self.getValidationRules = function (resourceName) {\r\n\r\n var resourceUrl = '/api/validationRules/' + resourceName;\r\n return anonymousRepositoryHelper.ajaxGet(resourceUrl);\r\n };\r\n}\r\n\r\nexport default new ValidationRulesRepository();\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport 'autoresize-textarea';\r\n\r\nko.bindingHandlers.textareaAutoResize = {\r\n\r\n init: function (element) {\r\n $(element).autoResize();\r\n }\r\n};\r\n","import '../../Bindings/textareaAutoResizeBinding';\r\nimport template from './uploadsList.html';\r\nimport UploadStatus from '../../Types/enums/UploadStatus';\r\n\r\nexport function UploadsList(params) {\r\n\r\n var self = this;\r\n\r\n self.uploads = params.uploads;\r\n self.removeUpload = params.removeUploadCallback;\r\n\r\n self.uploadStatus = UploadStatus; // Make the enum available to the template\r\n}\r\n\r\n// The default export returns the component details object to register with KO\r\nexport default { viewModel: UploadsList, template: template };\r\n","// Module\nvar code = \"
/


\";\n// Exports\nexport default code;","export default class FileSizeFormatter {\r\n static getFormattedFileSize(bytes: number): string {\r\n\r\n if (bytes === 1) {\r\n return '1 Byte';\r\n }\r\n\r\n if (bytes < 1024) {\r\n return bytes + ' Bytes';\r\n }\r\n\r\n if (bytes < 1048576) {\r\n return FileSizeFormatter.roundDownToOneDp((bytes / 1024)) + ' KB';\r\n }\r\n\r\n if (bytes < 1073741824) {\r\n return FileSizeFormatter.roundDownToOneDp((bytes / 1048576)) + ' MB';\r\n }\r\n\r\n return FileSizeFormatter.roundDownToOneDp((bytes / 1073741824)) + ' GB';\r\n }\r\n\r\n private static roundDownToOneDp(number: number): string {\r\n number = number * 10;\r\n number = Math.floor(number);\r\n number = number / 10;\r\n return number.toFixed(1);\r\n }\r\n}\r\n","import UploadStatus from '@/App/Types/enums/UploadStatus';\r\nimport FileSizeFormatter from '@/Vendor/inv-file-upload/utils/fileSizeFormatter';\r\n\r\nfunction UploadValidation() {\r\n\r\n var self = this;\r\n\r\n self.maxFileSize = null;\r\n self.fileNumberLimit = null;\r\n self.blacklistedFileTypes = null;\r\n\r\n /**\r\n * Initializes upload validation settings.\r\n * @param {object} options validation options { maxFileSize, fileNumberLimit, blacklistedFileTypes }\r\n */\r\n self.init = function (options) {\r\n self.maxFileSize = options.maxFileSize;\r\n self.fileNumberLimit = options.fileNumberLimit;\r\n self.blacklistedFileTypes = options.blacklistedFileTypes;\r\n };\r\n\r\n /**\r\n * Checks if the uploads for a request are in the correct state to allow the request to be submitted.\r\n * If the validation fails, a resource key for the failure message to display to the user is returned\r\n * else if everything is OK, null is returned.\r\n * @param {UploadModel[]} uploads Array of UploadModel for each file that already exists\r\n * @param {bool} areUploadsOptional Flag indicates whether at least one uploaded file is required\r\n * @return {string}\r\n */\r\n self.getValidationResourceKey = function (uploads, areUploadsOptional = false) {\r\n\r\n if (uploads.length === 0) {\r\n const resourceKey = areUploadsOptional === false ? 'NoFilesUploaded' : null;\r\n return resourceKey;\r\n }\r\n\r\n var statuses = uploads.map(function (upload) {\r\n return upload.statusName();\r\n });\r\n\r\n\r\n var containsAuthorising = statuses.indexOf(UploadStatus.authorising) > -1;\r\n var containsPending = statuses.indexOf(UploadStatus.pending) > -1;\r\n var containsUploading = statuses.indexOf(UploadStatus.uploading) > -1;\r\n var containsFailed = statuses.indexOf(UploadStatus.failed) > -1;\r\n var containsFailedAuthorization = statuses.indexOf(UploadStatus.failedAuthorisation) > -1;\r\n\r\n if (containsAuthorising || containsPending || containsUploading) {\r\n return 'UploadsStillInProgress';\r\n }\r\n\r\n if (containsFailed || containsFailedAuthorization) {\r\n return 'FailedUploadsExist';\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Check if any of the files attempting to be added have the same filenames as those that already exist.\r\n * @param {FileList} filesToAdd Native browser FileList object\r\n * @param {UploadModel[]} uploads Array of UploadModel for each file that already exists\r\n * @return {boolean}\r\n */\r\n function doAnyFileNamesAlreadyExist(filesToAdd, uploads) {\r\n var fileNamesToAdd = filesToAdd.map(function (file) {\r\n return file.name;\r\n });\r\n\r\n var existingFileNames = uploads.map(function (upload) {\r\n return upload.fileName;\r\n });\r\n\r\n for (var i = 0; i < fileNamesToAdd.length; i++) {\r\n\r\n if (existingFileNames.indexOf(fileNamesToAdd[i]) !== -1) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * @param {FileList} fileList Native browser FileList object\r\n * @return {Array}\r\n */\r\n function convertFileListToArray(fileList) {\r\n\r\n var i;\r\n var files = [];\r\n\r\n for (i = 0; i < fileList.length; i++) {\r\n files.push(fileList[i]);\r\n }\r\n\r\n return files;\r\n }\r\n\r\n /**\r\n * Check if any of the files attempting to be added excess alloved size.\r\n * @param {FileList} filesToAdd Native browser FileList object\r\n * @param {number} maxFileSize\r\n * @return {boolean}\r\n */\r\n function doAnyFileExceedAllovedSize(filesToAdd, maxFileSize) {\r\n return filesToAdd.some(function (file) {\r\n return file.size >= maxFileSize;\r\n });\r\n }\r\n\r\n /**\r\n * Check if number of files attempting to be added is more than {uploadMaxFilesCount} items.\r\n * @param {FileList} filesToAdd Native browser FileList object\r\n * @param {UploadModel[]} uploads Array of UploadModel for each file that already exists\r\n * @param {number} fileNumberLimit\r\n * @return {boolean}\r\n */\r\n function doFilesMetFileNumberLimit(filesToAdd, uploads, fileNumberLimit) {\r\n return filesToAdd.length + uploads.length > fileNumberLimit;\r\n }\r\n\r\n /**\r\n * Check if any of the files attempting to be added has blacklisted file type.\r\n * @param {FileList} filesToAdd Native browser FileList object\r\n * @return {boolean}\r\n */\r\n function doAnyFilesHaveBlacklistedFileType(filesToAdd) {\r\n return filesToAdd.some(function (file) {\r\n return fileHasBlacklistedFileType(file);\r\n });\r\n }\r\n\r\n function fileHasBlacklistedFileType(file) {\r\n var match = file.name.match(/\\.\\w+$/) || [];\r\n\r\n if (match.length === 0) {\r\n return true;\r\n }\r\n\r\n var currentFileExt = match[0];\r\n\r\n return self.blacklistedFileTypes.some(function (ext) {\r\n return ext === currentFileExt;\r\n });\r\n }\r\n\r\n /**\r\n * Check if any of the files attempting to be added has no content.\r\n * @param {FileList} filesToAdd Native browser FileList object\r\n * @return {boolean}\r\n */\r\n function doAnyFilesHaveNoContent(filesToAdd) {\r\n return filesToAdd.some(function (file) {\r\n return file.size === 0;\r\n });\r\n }\r\n\r\n self.getValidationResourceKeyForNewUploads = function (fileList, uploads) {\r\n\r\n var filesToAdd = convertFileListToArray(fileList);\r\n\r\n switch (true) {\r\n case doAnyFileNamesAlreadyExist(filesToAdd, uploads):\r\n return { key: 'UploadAlreadyExists' };\r\n case doAnyFileExceedAllovedSize(filesToAdd, self.maxFileSize):\r\n return {\r\n key: 'MaxFileSizeExcess',\r\n params: { maxFileSize: FileSizeFormatter.getFormattedFileSize(self.maxFileSize) }\r\n };\r\n case doFilesMetFileNumberLimit(filesToAdd, uploads, self.fileNumberLimit):\r\n return {\r\n key: 'MetFileNumberLimit',\r\n params: { fileNumberLimit: self.fileNumberLimit }\r\n };\r\n case doAnyFilesHaveBlacklistedFileType(filesToAdd):\r\n return { key: 'BlacklistedFileType' };\r\n case doAnyFilesHaveNoContent(filesToAdd):\r\n return { key: 'FilesHasNoContent' };\r\n default:\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default new UploadValidation();\r\n","import ko from 'knockout';\r\n\r\nfunction ResponseModel(validationRules) {\r\n\r\n var self = this;\r\n\r\n // Observables\r\n self.fullName = ko.observable('');\r\n self.address = ko.observable('');\r\n self.telephone = ko.observable('');\r\n self.comments = ko.observable('');\r\n self.email = ko.observable('');\r\n\r\n self.validationRules = validationRules;\r\n self.clientErrors = ko.validation.group(self, { deep: true });\r\n\r\n self.setEmail = email => {\r\n self.email(email);\r\n };\r\n}\r\n\r\nexport default ResponseModel;\r\n","function ContextData() {\r\n\r\n var self = this;\r\n self.fileUploadServiceRootUrl = null;\r\n self.maximumChunkSize = null;\r\n self.maximumConcurrentUploads = null;\r\n\r\n self.init = function (options) {\r\n self.fileUploadServiceRootUrl = options.fileUploadServiceRootUrl;\r\n self.maximumChunkSize = options.maximumChunkSize;\r\n self.maximumConcurrentUploads = options.maximumConcurrentUploads;\r\n };\r\n}\r\n\r\nexport default new ContextData();\r\n","import ko from 'knockout';\r\nimport logger from '../../inv-logger/logger';\r\n\r\nfunction UploadManager() {\r\n\r\n var self = this;\r\n\r\n // Observables to hold all the file uploads and the overall upload progress across all files\r\n self.uploads = ko.observableArray([]);\r\n self.uploadsCount = ko.observable(0);\r\n self.allUploadsProgress = ko.observable(0);\r\n self.allUploadsComplete = ko.observable(false);\r\n\r\n self.addUpload = function (upload) {\r\n self.uploads.push(upload);\r\n self.uploadsCount(self.uploads().length);\r\n self.allUploadsComplete(false);\r\n };\r\n\r\n self.getUpload = function (fileName, parentId) {\r\n\r\n var upload = null;\r\n\r\n ko.utils.arrayForEach(self.uploads(),\r\n function (currentUpload) {\r\n\r\n if (currentUpload.fileName === fileName && currentUpload.parentId === parentId) {\r\n upload = currentUpload;\r\n }\r\n });\r\n\r\n return upload;\r\n };\r\n\r\n self.getUploadToken = function (file) {\r\n var upload = getUpload(file);\r\n return upload.uploadToken;\r\n };\r\n\r\n self.setUploadStarted = function (file) {\r\n var upload = getUpload(file);\r\n upload.setUploadStarted();\r\n };\r\n\r\n self.setAllUploadsProgress = function (allUploadsProgress) {\r\n self.allUploadsProgress(allUploadsProgress);\r\n };\r\n\r\n self.updateUploadProgress = function (file, progress, bytesUploaded) {\r\n\r\n var upload = getUpload(file);\r\n\r\n // If a file was removed but a chunk finished uploading after the Ajax request was cancelled then\r\n // don't do anything.\r\n if (!upload) {\r\n return;\r\n }\r\n\r\n upload.updateUploadProgress(progress, bytesUploaded);\r\n };\r\n\r\n self.setUploadComplete = function (file) {\r\n var upload = getUpload(file);\r\n upload.setUploadComplete();\r\n removeUpload(upload);\r\n };\r\n\r\n self.setUploadFailed = function (file) {\r\n\r\n var upload = getUpload(file);\r\n\r\n // If the upload was cancelled, then we know about this ajax failure and can ignore it. Only if the\r\n // upload wasn't cancelled display the upload failure message.\r\n\r\n // TODO: Review if this constant string value can be held somewhere central\r\n if (upload.statusName() === 'Cancelled') {\r\n return;\r\n }\r\n\r\n upload.setUploadFailed();\r\n removeUpload(upload);\r\n\r\n var errorMessage = 'Filename: ' + upload.fileName;\r\n logger.errorWithoutTimeout('UploadFailure', errorMessage);\r\n };\r\n\r\n /**\r\n * Cancels a file that is currently being uploaded or is pending upload\r\n * @param {*} upload FileUpload object\r\n */\r\n self.cancelUpload = function (upload) {\r\n upload.cancelUpload();\r\n removeUpload(upload);\r\n };\r\n\r\n function getUpload(file) {\r\n\r\n var upload = null;\r\n\r\n ko.utils.arrayForEach(self.uploads(), function (currentUpload) {\r\n\r\n if (currentUpload.nativeBrowserFile === file) {\r\n upload = currentUpload;\r\n }\r\n });\r\n\r\n return upload;\r\n }\r\n\r\n function removeUpload(fileUpload) {\r\n\r\n self.uploads.remove(fileUpload);\r\n self.uploadsCount(self.uploads().length);\r\n\r\n if (self.uploadsCount() === 0) {\r\n self.allUploadsProgress(0);\r\n self.allUploadsComplete(true);\r\n }\r\n }\r\n}\r\n\r\nexport default new UploadManager();\r\n\r\n","import * as ko from 'knockout';\r\nimport { Observable, PureComputed } from 'knockout';\r\n\r\nimport UploadStatus from '@/App/Types/enums/UploadStatus';\r\n\r\nclass UploadModel {\r\n /** An element Id prefix to be used as the basis of a unique DOM element ID */\r\n elementIdPrefix: string;\r\n fileName: string;\r\n fileSize: number;\r\n\r\n uploadId: string | null = null;\r\n requestId: string | null = null;\r\n uploadToken: string | null = null;\r\n publicReference: string | null = null;\r\n originalComments: string = '';\r\n\r\n nativeBrowserFile: File | null = null;\r\n ajaxRequest: any = null;\r\n\r\n // Observables\r\n comments: Observable;\r\n statusName: Observable;\r\n progress: Observable;\r\n bytesUploaded: Observable;\r\n userIsCurrentlyUploading: Observable;\r\n /** Flags if an API request is being made to remove the upload. This API request could fail. */\r\n isBeingRemoved: Observable;\r\n\r\n // Computed observables\r\n commentHasChanged: PureComputed = ko.pureComputed(() => this.comments() !== this.originalComments);\r\n isAuthorising: PureComputed = ko.pureComputed(() => this.statusName() === UploadStatus.authorising);\r\n addedTimestamp: Date = new Date(1900, 1, 1);\r\n\r\n constructor(serverUpload: any, nativeBrowserFile: File | null) {\r\n if (serverUpload) {\r\n this.elementIdPrefix = this.generateElementIdPrefix(serverUpload.fileSize);\r\n this.fileName = serverUpload.fileName;\r\n this.fileSize = serverUpload.fileSize;\r\n\r\n this.uploadId = serverUpload.uploadId;\r\n this.requestId = serverUpload.requestId;\r\n this.uploadToken = serverUpload.uploadToken;\r\n this.publicReference = serverUpload.publicReference;\r\n this.originalComments = serverUpload.comments;\r\n this.addedTimestamp = new Date(serverUpload.addedTimestamp);\r\n } else {\r\n if (nativeBrowserFile === null) {\r\n throw new Error(`Neither constructor parameters have been provided.`);\r\n }\r\n\r\n this.elementIdPrefix = this.generateElementIdPrefix(nativeBrowserFile.size);\r\n this.fileName = nativeBrowserFile.name;\r\n this.fileSize = nativeBrowserFile.size;\r\n\r\n this.nativeBrowserFile = nativeBrowserFile;\r\n }\r\n\r\n // Set observables\r\n this.comments = ko.observable(this.originalComments);\r\n this.statusName = ko.observable(serverUpload ? serverUpload.uploadStatusName : UploadStatus.authorising );\r\n this.progress = ko.observable(this.statusName() === UploadStatus.uploaded ? 100 : 0);\r\n this.bytesUploaded = ko.observable(0);\r\n this.userIsCurrentlyUploading = ko.observable(false);\r\n this.isBeingRemoved = ko.observable(false);\r\n }\r\n\r\n /**\r\n * Populate upload Id, upload token and others once new server upload created, saved and returned\r\n * @param {*} serverModel\r\n */\r\n updateAfterServerModelCreated(serverModel: any): void {\r\n this.uploadId = serverModel.uploadId;\r\n this.uploadToken = serverModel.uploadToken;\r\n this.publicReference = serverModel.publicReference;\r\n this.statusName(serverModel.uploadStatusName);\r\n }\r\n\r\n /**\r\n * Once the ajax request for a file has been created after the server model is created (in order for\r\n * the upload token to have been generated) then set the ajax request which will be needed if a user\r\n * cancels a file upload.\r\n * @param {*} ajaxRequest Ajax request which can be used to cancel an upload\r\n */\r\n setAjaxRequest(ajaxRequest: any): void {\r\n this.ajaxRequest = ajaxRequest;\r\n }\r\n\r\n setUploadStarted(): void {\r\n this.statusName(UploadStatus.uploading);\r\n this.progress(0);\r\n this.userIsCurrentlyUploading(true);\r\n }\r\n\r\n updateUploadProgress(progress: number, bytesUploaded: number): void {\r\n this.progress(progress);\r\n this.bytesUploaded(bytesUploaded);\r\n }\r\n\r\n setUploadComplete(): void {\r\n this.statusName(UploadStatus.uploaded);\r\n this.progress(100);\r\n this.bytesUploaded(this.fileSize);\r\n this.userIsCurrentlyUploading(false);\r\n }\r\n\r\n setUploadFailed(): void {\r\n this.statusName(UploadStatus.failed);\r\n this.userIsCurrentlyUploading(false);\r\n }\r\n\r\n setUploadFailedAuthorisation(): void {\r\n this.statusName(UploadStatus.failedAuthorisation);\r\n }\r\n\r\n /**\r\n * Marks an upload as being removed. An API call is being made to remove the upload but this could fail.\r\n * @param {boolean} isBeingRemoved\r\n */\r\n setIsBeingRemoved(isBeingRemoved: boolean): void {\r\n this.isBeingRemoved(isBeingRemoved);\r\n }\r\n\r\n cancelUpload(): void {\r\n this.statusName(UploadStatus.cancelled);\r\n this.userIsCurrentlyUploading(false);\r\n\r\n if (this.ajaxRequest) {\r\n this.ajaxRequest.abort();\r\n }\r\n }\r\n\r\n /**\r\n * Generates an element Id prefix string.\r\n * The string is sufficiently unique enough to be used as the basis of a DOM element Id.\r\n * @param {number} theFileSize\r\n * @return {string}\r\n */\r\n private generateElementIdPrefix(theFileSize: number): string {\r\n return 'id-' + Math.random().toString(36).substr(2, 16) + '-' + theFileSize;\r\n }\r\n}\r\n\r\nexport default UploadModel;\r\n","import ko from 'knockout';\r\nimport logger from '../../Vendor/inv-logger/logger';\r\n\r\n/**\r\n * Binding that causes the click event to be triggered on another element when the bound element has\r\n * the \"enter\" or \"space\" key pressed while it has focus.\r\n *\r\n * An example use is a fake button for file uploads that when the \"enter\" or \"space\" key is pressed\r\n * then triggers the file selection / an input click.\r\n *\r\n * Upload\r\n * \r\n */\r\nko.bindingHandlers.enterTriggersElementClick = {\r\n\r\n init: function (element, valueAccessor) {\r\n\r\n var targetElementId = ko.utils.unwrapObservable(valueAccessor());\r\n var targetElement = document.getElementById(targetElementId);\r\n\r\n if (!targetElement) {\r\n logger.error('UnhandledError', 'An element with the Id ' + targetElementId + ' was not found.');\r\n return;\r\n }\r\n\r\n if (!targetElement.click) {\r\n logger.error(\r\n 'UnhandledError',\r\n 'The element with the Id ' + targetElementId + 'does not contain a click property.');\r\n return;\r\n }\r\n\r\n function clickHandler(event) {\r\n\r\n var keyCode = (event.which ? event.which : event.keyCode);\r\n\r\n if (keyCode === 13 || keyCode === 32) { // Enter (13) and the space (32) keys\r\n event.preventDefault(); // Pressing the \"space\" key, if propagated will cause some browsers to scroll down\r\n targetElement.click();\r\n }\r\n }\r\n\r\n element.addEventListener('keypress', clickHandler);\r\n\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n element.removeEventListener('keypress', clickHandler);\r\n });\r\n\r\n }\r\n};\r\n","import ko from 'knockout';\r\n\r\n// TODO: This is a binding outside the vendors area so review\r\nimport '../../../../App/Bindings/enterTriggersElementClickBinding';\r\nimport template from './fileUploadSelecter.html';\r\n\r\nexport function FileUploadSelecter(params) {\r\n\r\n var self = this;\r\n var options = params.fileUploadSelectorOptions;\r\n\r\n var maximumUploadSize = ko.unwrap(options.maximumUploadSize);\r\n var maximumFilesUploads = ko.unwrap(options.maximumFilesUploads);\r\n var addFileUploadsCallback = options.addFileUploadsCallback;\r\n\r\n\r\n self.maximumUploadSize = maximumUploadSize;\r\n self.maximumFilesUploads = maximumFilesUploads || 5;\r\n\r\n self.addFileUploads = function (fileList) {\r\n addFileUploadsCallback(fileList);\r\n };\r\n}\r\n\r\n// The default export returns the component details object to register with KO\r\nexport default { viewModel: FileUploadSelecter, template: template };\r\n","// Module\nvar code = \"

:
:
\";\n// Exports\nexport default code;","import ko from 'knockout';\r\nimport logger from '../../../inv-logger/logger';\r\nimport UploadStatus from '../../../../App/Types/enums/UploadStatus';\r\nimport template from './progressBar.html';\r\n\r\nexport function ProgressBar(params) {\r\n\r\n if (!ko.isObservable(params.progress)) {\r\n logger.error('UnhandledError', 'The the parameter \"progress\" is required and must be an observable.');\r\n }\r\n\r\n if (!params.label) {\r\n logger.error('UnhandledError', 'The the parameter \"label\" is required.');\r\n }\r\n\r\n var self = this;\r\n self.label = params.label;\r\n self.progress = params.progress;\r\n\r\n self.isUploaded = ko.pureComputed(function () {\r\n return params.statusName() === UploadStatus.uploaded;\r\n });\r\n\r\n self.isUploading = ko.pureComputed(function () {\r\n return params.statusName() === UploadStatus.uploading;\r\n });\r\n\r\n self.widthStyle = ko.pureComputed(function () {\r\n var progress = params.progress();\r\n if (params.statusName() === UploadStatus.uploaded) {\r\n return '100%';\r\n }\r\n return progress + '%';\r\n });\r\n}\r\n\r\n// The default export returns the component details object to register with KO\r\nexport default { viewModel: ProgressBar, template: template };\r\n","// Module\nvar code = \"
\";\n// Exports\nexport default code;","import $ from 'jquery';\r\nimport ko from 'knockout';\r\n\r\n/**\r\n * Binding to make an element act as a drop zone for file uploads. Child elements within the element will\r\n * trigger the \"dragleave\" so a counter is used to determine when enter and leave events occurs just on\r\n * the element and not child elements.\r\n */\r\nko.bindingHandlers.fileDropZone = {\r\n init: function (element, valueAccessor) {\r\n\r\n var dropZoneElement = $(element);\r\n var addFileUploadsCallback = valueAccessor();\r\n var counter = 0;\r\n\r\n dropZoneElement.on('dragover', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n dropZoneElement.on('dragenter', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n counter++;\r\n\r\n dropZoneElement.css('background-color', '#FDFFB7');\r\n });\r\n\r\n dropZoneElement.on('dragleave', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n counter--;\r\n\r\n if (counter === 0) {\r\n dropZoneElement.css('background-color', '');\r\n }\r\n });\r\n\r\n dropZoneElement.on('drop', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n counter = 0;\r\n dropZoneElement.css('background-color', '');\r\n\r\n var fileList = e.originalEvent.dataTransfer.files;\r\n addFileUploadsCallback(fileList);\r\n });\r\n }\r\n};\r\n\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport logger from '../../inv-logger/logger';\r\n\r\n/**\r\n * Binding to apply to a input of type upload which listens to the input change event and calls the\r\n * provided function when one or more files have been selected.\r\n */\r\nko.bindingHandlers.fileInput = {\r\n init: function (element, valueAccessor) {\r\n\r\n var addFileUploadsCallback = valueAccessor();\r\n\r\n if (!$(element).is('input')) {\r\n logger.error('UnhandledError', 'The file input binding can only be applied to a input tag.');\r\n }\r\n\r\n if (typeof addFileUploadsCallback !== 'function') {\r\n logger.error('UnhandledError', 'The value provided is not a function / callback.');\r\n }\r\n\r\n $(element).on('change', function (event) {\r\n\r\n const element = event.target;\r\n\r\n // Allow for browsers that handle the value reset / empty string as a change\r\n if (element.value === '') {\r\n return;\r\n }\r\n\r\n var fileList = element.files;\r\n addFileUploadsCallback(fileList);\r\n\r\n // Set to empty string to reset and allow same file to be selected again\r\n element.value = '';\r\n });\r\n\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n $(element).off('change');\r\n });\r\n }\r\n};\r\n","import ko from 'knockout';\r\nimport FileSizeFormatter from '../utils/fileSizeFormatter';\r\n\r\n/**\r\n * Binding to format file size in bytes to KB, MB and GB for display\r\n * @example\r\n * \r\n */\r\nko.bindingHandlers.fileSize = {\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {\r\n\r\n var text = FileSizeFormatter.getFormattedFileSize(ko.utils.unwrapObservable(valueAccessor()));\r\n\r\n ko.bindingHandlers.text.update(\r\n element,\r\n function () {\r\n return text;\r\n },\r\n allBindingsAccessor,\r\n viewModel,\r\n context);\r\n }\r\n};\r\n\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport uploadManager from '../utils/uploadManager';\r\nimport contextData from '../contextData';\r\nimport 'blueimp-file-upload';\r\n\r\n/**\r\n * Binding to create an instance of the jQuery File Upload functionality against a DOM element to\r\n * support uploading of files in chunks. This binding uses the \"fileupload\" module to observe the file\r\n * uploads array for changes as well as to update the status and progess of uploads.\r\n */\r\nko.bindingHandlers.uploadEngine = {\r\n init: function (element) {\r\n\r\n var uploadUrl = contextData.fileUploadServiceRootUrl + 'api/upload';\r\n\r\n // View all available jQuery File Upload library options here:\r\n // https://github.com/blueimp/jQuery-File-Upload/wiki/Options\r\n\r\n $(element).fileupload({\r\n url: uploadUrl,\r\n maxChunkSize: contextData.maximumChunkSize,\r\n limitConcurrentUploads: contextData.maximumConcurrentUploads,\r\n dataType: 'json',\r\n dropZone: null, // Use our own element as the drop zone\r\n\r\n beforeSend: function (xhr, data) {\r\n var file = getSingleFile(data);\r\n var uploadToken = uploadManager.getUploadToken(file);\r\n xhr.setRequestHeader('Authorization', 'UploadToken ' + uploadToken);\r\n },\r\n send: function (e, data) {\r\n var file = getSingleFile(data);\r\n uploadManager.setUploadStarted(file);\r\n },\r\n progressall: function (e, data) {\r\n var progress = parseInt(data.loaded / data.total * 100, 10);\r\n uploadManager.setAllUploadsProgress(progress);\r\n },\r\n progress: function (e, data) {\r\n var progress = parseInt(data.loaded / data.total * 100, 10);\r\n var file = getSingleFile(data);\r\n uploadManager.updateUploadProgress(file, progress, data.loaded);\r\n },\r\n done: function (e, data) {\r\n var file = getSingleFile(data);\r\n uploadManager.setUploadComplete(file);\r\n },\r\n fail: function (e, data) {\r\n var file = getSingleFile(data);\r\n uploadManager.setUploadFailed(file);\r\n }\r\n });\r\n\r\n uploadManager.uploads.subscribe(function (changes) {\r\n\r\n $.each(changes, function (index, change) {\r\n\r\n var upload = change.value;\r\n\r\n if (change.status === 'added') {\r\n var ajaxRequest = $(element).fileupload('send', { files: [upload.nativeBrowserFile] });\r\n upload.setAjaxRequest(ajaxRequest);\r\n }\r\n });\r\n\r\n }, null, 'arrayChange');\r\n\r\n // Prevent the browser default drag and drop behaviour so if a file is dragged onto the web page but\r\n // outside of a drop zone then the file browser doesn't load the local file.\r\n $(document).on('dragover', function (e) {\r\n e.preventDefault();\r\n });\r\n\r\n $(document).on('drop', function (e) {\r\n e.preventDefault();\r\n });\r\n\r\n function getSingleFile(data) {\r\n\r\n if (data.files.length !== 1) {\r\n throw new Error('The data object is expected to hold exactly one file');\r\n }\r\n\r\n return data.files[0];\r\n }\r\n }\r\n};\r\n","import englishStrings from './resourceStrings.json';\r\nimport welshStrings from './resourceStrings.cy.json';\r\nimport testLanguageStrings from './resourceStrings.vi-VN.json';\r\nconst resourceData = {\r\n 'en-us': englishStrings,\r\n 'cy': welshStrings,\r\n 'vi-vn': testLanguageStrings\r\n};\r\n\r\nexport default resourceData;\r\n","import ko from 'knockout';\r\nimport logger from '../../Vendor/inv-logger/logger';\r\nimport resourceHelper from '../../Vendor/inv-resource-helper/resourceHelper';\r\nimport contextData from './contextData';\r\nimport uploadManager from './utils/uploadManager';\r\nimport UploadModel from './models/uploadModel.ts';\r\nimport fileUploadSelecterComponent from './components/fileUploadSelecter/fileUploadSelecter';\r\nimport progressBarComponent from './components/progressBar/progressBar';\r\nimport './bindings/fileDropZoneBinding';\r\nimport './bindings/fileInputBinding';\r\nimport './bindings/fileSizeBinding';\r\nimport './bindings/uploadEngineBinding';\r\nimport resourceData from './resourceData';\r\n\r\nfunction FileUpload() {\r\n\r\n var self = this;\r\n\r\n // Please ensure the supported language codes and default language code are all in lowercase\r\n var supportedLanguageCodes = ['en-us', 'cy', 'vi-vn'];\r\n var defaultLanguageCode = 'en-us';\r\n\r\n self.init = function (options) {\r\n\r\n // TODO: Add checks here for options to ensure all required exist\r\n\r\n contextData.init(options);\r\n retrieveAndSetResourceData(options.languageCode);\r\n registerComponents();\r\n };\r\n\r\n self.uploadManager = uploadManager;\r\n self.UploadModel = UploadModel;\r\n\r\n function retrieveAndSetResourceData(languageCode) {\r\n\r\n var languageCodeSupported;\r\n\r\n if (!languageCode) {\r\n logger.error(\r\n 'UnhandledError',\r\n `The required parameter 'languageCode' was not provided when initializing the module 'inv-file-upload`);\r\n }\r\n\r\n languageCode = languageCode.toLowerCase();\r\n languageCodeSupported = supportedLanguageCodes.indexOf(languageCode) > -1;\r\n languageCode = languageCodeSupported ? languageCode : defaultLanguageCode;\r\n resourceHelper.registerPackageResourceData(resourceData[languageCode], 'inv-file-upload', languageCode);\r\n }\r\n\r\n function registerComponents() {\r\n ko.components.register('file-upload-selecter', fileUploadSelecterComponent);\r\n ko.components.register('progress-bar', progressBarComponent);\r\n }\r\n}\r\n\r\nexport default new FileUpload();\r\n","import fileUpload from '../../Vendor/inv-file-upload/fileUpload';\r\nimport anonymousRepositoryHelper from './anonymousRepositoryHelper';\r\nimport UploadStatus from '../Types/enums/UploadStatus';\r\n\r\nfunction UploadRepository() {\r\n\r\n var self = this;\r\n var baseResourceUrl = '/api/upload/';\r\n\r\n /**\r\n * Gets a list of uploads for given response public reference parameters. The uploads are retrieved from the server and either\r\n * returned directly or used to lookup active / pending uploads from the upload manager which are\r\n * returned instead.\r\n * @param {string} responsePublicReference\r\n * @return {Promise}\r\n */\r\n self.getUploadsByResponsePublicReference = function (responsePublicReference) {\r\n\r\n var resourceUrl = baseResourceUrl + 'response/' + responsePublicReference;\r\n\r\n return new Promise(function (resolve, reject) {\r\n\r\n anonymousRepositoryHelper.ajaxGet(resourceUrl)\r\n .then(function (serverUploads) {\r\n var uploads = createUploadModels(serverUploads);\r\n resolve(uploads);\r\n })\r\n .catch(function (jqXhr) {\r\n reject(jqXhr);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Adds one or more files for upload. The newly created uploads are returned immediately. Asynchronously,\r\n * server calls are made to create the new uploads / generate upload tokens and then the upload engine\r\n * used to start the uploads.\r\n * @param {object} fileList An array of native browser File objects to be uploaded\r\n * @param {string} responsePublicReference\r\n * @param {Function} addUploadsFailedCallback Callback to be called with an error on failure\r\n * @return {Array}\r\n */\r\n self.addUploads = function (fileList, responsePublicReference, addUploadsFailedCallback) {\r\n\r\n var i;\r\n var file;\r\n var upload;\r\n var files = [];\r\n var uploads = [];\r\n var serverUpload = null;\r\n\r\n for (i = 0; i < fileList.length; i++) {\r\n file = fileList[i];\r\n files.push(file);\r\n upload = new fileUpload.UploadModel(serverUpload, file);\r\n subscribeToCompleteUploadStatusName(upload);\r\n uploads.push(upload);\r\n }\r\n\r\n // Asynchronously create each upload on the server / generate upload token then start the uploads\r\n createPromiseToAddUploadsInOrder(files, responsePublicReference)\r\n .then(function (serverUploads) {\r\n startUploads(uploads, serverUploads);\r\n })\r\n .catch(function (e) {\r\n\r\n var upload;\r\n\r\n for (i = 0; i < uploads.length; i++) {\r\n upload = uploads[i];\r\n upload.setUploadFailedAuthorisation();\r\n }\r\n\r\n addUploadsFailedCallback(e);\r\n });\r\n\r\n return uploads;\r\n };\r\n\r\n /**\r\n * Takes an array of uploads and updates each via the server if the upload has been changed\r\n * @param {UploadModel[]} uploads\r\n * @return {Promise}\r\n */\r\n self.updateUploads = function (uploads) {\r\n var resourceUrl = baseResourceUrl + 'UpdateUploads';\r\n var updateUploadPromises = [];\r\n var uploadData = [];\r\n\r\n var i;\r\n for (i = 0; i < uploads.length; i++) {\r\n if (!uploads[i].commentHasChanged()) {\r\n continue;\r\n }\r\n\r\n var singleUploadData = {\r\n uploadPublicReference: uploads[i].publicReference,\r\n comments: uploads[i].comments()\r\n };\r\n uploadData.push(singleUploadData);\r\n }\r\n\r\n if (uploadData.length > 0) {\r\n updateUploadPromises.push(anonymousRepositoryHelper.ajaxPost(resourceUrl, uploadData));\r\n }\r\n\r\n return Promise.all(updateUploadPromises);\r\n };\r\n\r\n function createPromiseToAddUploadsInOrder(files, responsePublicReference) {\r\n\r\n var serverUploads = [];\r\n var initialResolvedPromise = Promise.resolve(null);\r\n\r\n // ----------------------------------------------------------------------------------------------------\r\n // For each upload to be posted to the server, chain each Ajax request off the previous Ajax promise so\r\n // that each request is made in series one after the other. The initial promise is automatically\r\n // resolved to allow the first Ajax request call to be made immediately. Once each Ajax request\r\n // promise is resolved, add each serverUpload to the serverUploads array. This is done so that the\r\n // order of the uploads initially rendered in the table is that same as the order they are created in\r\n // the database so the table will always display as expected sorted by created date.\r\n // ----------------------------------------------------------------------------------------------------\r\n var promise = files.reduce(function (previousPromise, file) {\r\n\r\n return previousPromise.then(function () {\r\n\r\n return postNewUploadToServer(file, responsePublicReference)\r\n .then(function (serverUpload) {\r\n serverUploads.push(serverUpload);\r\n });\r\n });\r\n\r\n }, initialResolvedPromise); // Initial resolved promise is the starting previousPromise\r\n\r\n // ----------------------------------------------------------------------------------------------------\r\n // Once all the Ajax requests have been made in series, return the serverUploads if all Ajax requests\r\n // were successful or the error details if not.\r\n // ----------------------------------------------------------------------------------------------------\r\n return new Promise(function (resolve, reject) {\r\n promise.then(function () {\r\n resolve(serverUploads);\r\n })\r\n .catch(function (e) {\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Start each upload after all entities created / upload tokens generated on the server\r\n * @param {UploadModel[]} uploads\r\n * @param {*} serverUploads Array of server models including upload token property\r\n */\r\n function startUploads(uploads, serverUploads) {\r\n serverUploads.forEach(serverUpload => {\r\n const upload = uploads.find(x => x.fileName === serverUpload.fileName);\r\n upload.updateAfterServerModelCreated(serverUpload);\r\n fileUpload.uploadManager.addUpload(upload);\r\n });\r\n }\r\n\r\n function postNewUploadToServer(file, responsePublicReference) {\r\n\r\n var uploadData = {\r\n responsePublicReference: responsePublicReference,\r\n fileName: file.name,\r\n fileSize: file.size,\r\n // lastModifiedDate is actually depreciated and looks like it’s not supported on some browsers (including FireFox)\r\n // The method lastModified returns the date as number of milliseconds since the Unix epoch (January 1, 1970 at midnight).\r\n // The method lastModifiedDate returns a Date object.\r\n lastWriteDate: (file.lastModified ? new Date(file.lastModified) : file.lastModifiedDate).toISOString()\r\n // Posting only standard file data\r\n };\r\n\r\n return anonymousRepositoryHelper.ajaxPost(baseResourceUrl, uploadData);\r\n }\r\n\r\n /**\r\n * Deletes an upload by making a call to the service and cancels an active or pending upload\r\n * @param {UploadModel} upload\r\n * @return {Promise}\r\n */\r\n self.deleteUpload = function (upload) {\r\n\r\n var resourceUrl = baseResourceUrl + upload.publicReference;\r\n\r\n if (upload.statusName() === UploadStatus.pending ||\r\n upload.statusName() === UploadStatus.uploading) {\r\n fileUpload.uploadManager.cancelUpload(upload);\r\n }\r\n\r\n // If the upload failed authorization then there is no upload to delete so return with a resolved\r\n // promise. For uploads that are authorizing the user can't remove the upload.\r\n if (upload.statusName() === UploadStatus.failedAuthorisation) {\r\n return Promise.resolve(null);\r\n }\r\n\r\n return anonymousRepositoryHelper.ajaxDelete(resourceUrl);\r\n };\r\n\r\n self.uploadCompleteCallback = function (publicReference) {\r\n var resourceUrl = baseResourceUrl + publicReference;\r\n return anonymousRepositoryHelper.ajaxPut(resourceUrl);\r\n };\r\n\r\n function createUploadModels(serverUploads) {\r\n\r\n var serverUpload;\r\n var uploads = [];\r\n\r\n for (var i = 0; i < serverUploads.length; i++) {\r\n serverUpload = serverUploads[i];\r\n var upload = getOrCreateUploadModel(serverUpload);\r\n uploads.push(upload);\r\n }\r\n\r\n return uploads;\r\n }\r\n\r\n function getOrCreateUploadModel(serverUpload) {\r\n var upload = fileUpload.uploadManager.getUpload(serverUpload.fileName, serverUpload.parentId);\r\n var file = {};\r\n var uploadModel = new fileUpload.UploadModel(serverUpload, file);\r\n\r\n return upload ? upload : uploadModel;\r\n }\r\n\r\n function subscribeToCompleteUploadStatusName(upload) {\r\n upload.statusName.subscribe(function (value) {\r\n if (value === UploadStatus.uploaded) {\r\n self.uploadCompleteCallback(upload.publicReference);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default new UploadRepository();\r\n","/**/import ko from 'knockout';\r\nimport logger from '../../Vendor/inv-logger/logger';\r\nimport 'knockout.validation';\r\n\r\n/**\r\n * Applies validation rules to a view model based on rules and localised error messages JSON previously\r\n * returned from the server. Uses the Knockout-Validation KnockoutJS Plugin.\r\n * https://github.com/Knockout-Contrib/Knockout-Validation\r\n * @param {Object} viewModel\r\n * @constructor\r\n */\r\nfunction ValidationRulesService(viewModel) {\r\n\r\n var self = this;\r\n\r\n // Contains all the validation rule messages to then expose them via the getValidationMessage function\r\n var validationRuleMessages = {};\r\n\r\n /**\r\n * Apply the validation rules for the view model to the observables\r\n * @param {Object} validationRules\r\n */\r\n self.applyValidation = function (validationRules) {\r\n\r\n var property;\r\n var rules;\r\n var observable;\r\n var i;\r\n\r\n if (!validationRules) {\r\n logger.warning('UnhandledError', 'The validation rules object is not populated');\r\n }\r\n\r\n for (property in validationRules) {\r\n\r\n if (!Object.prototype.hasOwnProperty.call(validationRules, property)) {\r\n continue;\r\n }\r\n\r\n rules = validationRules[property];\r\n observable = viewModel[property];\r\n\r\n if (!observable) {\r\n\r\n logger.warning(\r\n 'UnhandledError',\r\n 'The validation rules object contains validation for the observable property \\'' +\r\n property + '\\' which wasn\\'t found on the view model');\r\n\r\n continue;\r\n }\r\n\r\n for (i = 0; i < rules.length; i++) {\r\n applyValidationRule(rules[i], property, viewModel);\r\n populateValidationRuleMessages(validationRuleMessages, rules[i], property);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Gets the validation message for the given property and validation type\r\n * @param {string} propertyName\r\n * @param {string} validationRuleType\r\n * @return {string}\r\n */\r\n self.getValidationMessage = function (propertyName, validationRuleType) {\r\n\r\n var propertyObject = validationRuleMessages[propertyName];\r\n var message;\r\n\r\n if (!propertyName) {\r\n return null;\r\n }\r\n\r\n message = propertyObject[validationRuleType];\r\n\r\n return message || null;\r\n };\r\n\r\n /**\r\n * Calls extend on the observable and passes in the knockout validation object settings\r\n * @private\r\n * @param {Object} rule\r\n * @param {String} property\r\n * @param {Object} viewModel\r\n */\r\n function applyValidationRule(rule, property, viewModel) {\r\n\r\n var otherObservable;\r\n\r\n // This is a little crude but is the only scenario currently where we need to swap a string params name\r\n // with the real view model observable. If this is needed in other cases then do something more generic.\r\n if (rule.equal) {\r\n\r\n // If the param property already references an observable then this routine has already been run\r\n // against this validation rules object so nothing to do here.\r\n if (ko.isObservable(rule.equal.params)) {\r\n return;\r\n }\r\n\r\n otherObservable = viewModel[rule.equal.params];\r\n\r\n if (!otherObservable) {\r\n logger.warning('The validation rule \\'equal\\' refers the observable property \\'' +\r\n rule.equal.params + '\\' which wasn\\'t found on the view model');\r\n\r\n return;\r\n }\r\n\r\n // Swap the string observable property name with a reference to the real observable\r\n rule.equal.params = otherObservable;\r\n }\r\n\r\n viewModel[property].extend(rule); // Call extend on the observable\r\n }\r\n\r\n /**\r\n * Populate the validationRuleMessages with a new validation message. The validationRuleMessages object\r\n * and this function only exist to expose translated validation messages outside of this module.\r\n * The format of the object is:\r\n * validationRuleMessages.{property}.{ruleTypeProperty} = '{message}'\r\n * validationRuleMessages.givenName.required = 'Please enter your first name'\r\n * @private\r\n * @param {Object} validationRuleMessages\r\n * @param {Object} rule\r\n * @param {String} property\r\n */\r\n function populateValidationRuleMessages(validationRuleMessages, rule, property) {\r\n\r\n var ruleTypeProperty = Object.keys(rule)[0]; // Single property per rule (e.g. required, maxLength)\r\n validationRuleMessages[property] = validationRuleMessages[property] || {};\r\n validationRuleMessages[property][ruleTypeProperty] = rule[ruleTypeProperty].message;\r\n }\r\n}\r\n\r\nexport default ValidationRulesService;\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\n\r\nko.bindingHandlers.showModal = {\r\n\r\n init: function (element, valueAccessor, allBindings) {\r\n\r\n var observable = valueAccessor();\r\n var afterShowCallback = allBindings.get('afterShowCallback');\r\n\r\n $(element).on('shown.bs.modal', function () {\r\n observable(true);\r\n\r\n if (typeof afterShowCallback === 'function') {\r\n afterShowCallback();\r\n }\r\n\r\n });\r\n\r\n $(element).on('hidden.bs.modal', function () {\r\n observable(false);\r\n });\r\n\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n $(element).off('shown.bs.modal');\r\n $(element).off('hidden.bs.modal');\r\n });\r\n },\r\n update: function (element, valueAccessor, allBindings) {\r\n\r\n var value = ko.utils.unwrapObservable(valueAccessor());\r\n var closeImmediately = allBindings.get('closeImmediately');\r\n\r\n if (value) {\r\n $(element).modal('show');\r\n return;\r\n }\r\n\r\n // If the close immediately option is true and the fade effect is enabled then disable the fade effect\r\n // while the modal is being closed.\r\n if (closeImmediately && $(element).hasClass('fade')) {\r\n $(element).removeClass('fade');\r\n $(element).modal('hide');\r\n $(element).addClass('fade');\r\n }\r\n\r\n $(element).modal('hide');\r\n }\r\n};\r\n","import ko from 'knockout';\r\n\r\n// https://gist.github.com/codethug/4657291\r\n/**\r\n * Binding to display message to user before page leave\r\n * @example\r\n *

\r\n *

\r\n */\r\nko.bindingHandlers.beforeUnload = {\r\n\r\n init: function (element, valueAccessor) {\r\n window.onbeforeunload = function () {\r\n var value = valueAccessor();\r\n var data = ko.utils.unwrapObservable(value);\r\n var dataIsPromptText = typeof data === 'string';\r\n var promptText = dataIsPromptText ? data : ko.utils.unwrapObservable(data.promptText);\r\n var condition = dataIsPromptText ? true : ko.utils.unwrapObservable(data.condition);\r\n\r\n if (!!promptText && condition) {\r\n return promptText;\r\n }\r\n };\r\n }\r\n};\r\n","import ko from 'knockout';\r\nimport uploadValidation from '@/App/uploadValidation';\r\nimport logger from '@/Vendor/inv-logger/logger';\r\nimport ResponseModel from '@/App/Models/responseModel';\r\nimport uploadRepository from '@/App/Repositories/uploadRepository';\r\nimport responseRepository from '@/App/Repositories/responseRepository';\r\nimport ValidationRulesService from '@/Vendor/inv-validation/validationRulesService';\r\nimport resourceHelper from '@/Vendor/inv-resource-helper/resourceHelper';\r\nimport fileUpload from '@/Vendor/inv-file-upload/fileUpload';\r\nimport contextData from '@/App/contextData';\r\nimport constants from '@/App/constants';\r\nimport uploadManager from '@/Vendor/inv-file-upload/utils/uploadManager';\r\n\r\nimport 'knockout.validation';\r\nimport '@/App/Bindings/showModalBindings';\r\nimport '@/App/Bindings/beforeUnloadBinding';\r\nimport '@/App/Bindings/ariaInvalid';\r\n\r\nimport template from './responseForm.html';\r\n\r\nexport function ResponseForm(params) {\r\n\r\n var self = this;\r\n\r\n self.languageCode = contextData.languageCode;\r\n\r\n self.helpLinkTitle = resourceHelper.getString('HelpLinkTitle');\r\n self.confirmResponseModalCloseButtonLabel = resourceHelper.getString('ConfirmResponseModalCloseButton');\r\n self.leaveWarning = resourceHelper.getString('ChangesMayNotBeSaved');\r\n\r\n self.responseType = params.responseMetadata.responseParentType;\r\n self.responseTypes = constants.responseParentType;\r\n\r\n self.responsePublicReference = params.responsePublicReference;\r\n\r\n self.responseValidationRules = contextData.responseValidationRules;\r\n self.response = new ResponseModel(self.responseValidationRules);\r\n\r\n var validationSettings = {\r\n insertMessages: false,\r\n decorateElement: true,\r\n errorElementClass: 'has-error'\r\n };\r\n\r\n ko.validation.init(validationSettings, true);\r\n\r\n // Uploads use custom validation but the response uses standard knockout validation\r\n var validationRulesService = new ValidationRulesService(self.response);\r\n validationRulesService.applyValidation(self.responseValidationRules);\r\n\r\n self.uploads = ko.observableArray([]);\r\n self.uploadClientErrorResourceObject = ko.observable(null);\r\n self.allUploadsComplete = uploadManager.allUploadsComplete;\r\n\r\n self.responseConfirmationText = ko.observable('');\r\n self.responseConfirmationTitleTemplate = ko.observable('');\r\n self.responseConfirmationTitle = ko.computed(function () {\r\n return self.responseConfirmationTitleTemplate().replace('{uploadedFilesCount}', self.uploads().length);\r\n });\r\n\r\n self.emailAddressIsVisible = ko.observable(true); // Flags if the email address is a visible input or a hidden input\r\n\r\n self.showSubmitPrompt = ko.observable(false); // Flags if the response summary and T&Cs modal is displayed\r\n self.formSubmitted = ko.observable(false); // Flags if submit Ajax request in progress\r\n\r\n self.areUploadedFilesLoaded = ko.observable(false); // Flags if retrieve upload files details Ajax request completed\r\n\r\n self.isAllDataLoaded = ko.computed(function () { // Flags if all data for response is loaded\r\n return self.areUploadedFilesLoaded();\r\n });\r\n\r\n self.hasPendingUploads = ko.pureComputed(function () {\r\n return uploadValidation.getValidationResourceKey(self.uploads()) === 'UploadsStillInProgress';\r\n });\r\n\r\n self.allFilesUploaded = ko.pureComputed(function () { // Flags if there are uploads and they are all complete\r\n return self.uploads().length > 0 && !self.hasPendingUploads();\r\n });\r\n\r\n self.addFileUploads = function (fileList) {\r\n var newUploads;\r\n\r\n var resourceObject = uploadValidation.getValidationResourceKeyForNewUploads(fileList, self.uploads());\r\n self.uploadClientErrorResourceObject(resourceObject);\r\n\r\n if (resourceObject) {\r\n var validationFailureText = getLocalizedString(resourceObject);\r\n logger.error('UploadFailure', validationFailureText);\r\n return;\r\n }\r\n\r\n newUploads = uploadRepository.addUploads(fileList, self.responsePublicReference, self.addUploadsFailed);\r\n self.uploads.unshift(...newUploads); // Add newest items to the top of the list\r\n };\r\n\r\n self.addUploadsFailed = function (e) {\r\n if (e.errorMessages) {\r\n self.serverErrors(e.errorMessages);\r\n return;\r\n }\r\n\r\n const resourceKey = e.status === 0 ? 'UnhandledErrorOffline' : 'UnhandledError';\r\n logger.error(resourceKey, 'An unexpected error occurred while attempting to add file uploads.', e);\r\n };\r\n\r\n /**\r\n * Calls the API to remove an upload. The API call could fail (if offline for example) and in this\r\n * scenario the upload must not be removed from the UI as this will invalidate the client-side\r\n * validation as the upload still exists.\r\n * @param {UploadModel} upload\r\n */\r\n self.removeUpload = function (upload) {\r\n upload.setIsBeingRemoved(true);\r\n\r\n uploadRepository.deleteUpload(upload)\r\n .then(() => {\r\n self.uploads.remove(upload);\r\n })\r\n .catch(function (jqXhr) {\r\n upload.setIsBeingRemoved(false); // Re-instate the upload exactly as it was before removal attempt\r\n\r\n if (!jqXhr.errorHasBeenLogged) {\r\n const resourceKey = jqXhr.status === 0 ? 'UnhandledErrorOffline' : 'UnhandledError';\r\n logger.error(resourceKey, 'Failed to delete the file upload.', jqXhr);\r\n }\r\n });\r\n };\r\n\r\n self.confirmSubmit = function () {\r\n\r\n let someValidationErrors = false;\r\n var validationFailureResourceObject = uploadValidation.getValidationResourceKey(self.uploads());\r\n\r\n if (validationFailureResourceObject) {\r\n someValidationErrors = true;\r\n self.uploadClientErrorResourceObject(validationFailureResourceObject);\r\n }\r\n\r\n if (self.response.clientErrors().length > 0) {\r\n someValidationErrors = true;\r\n self.response.clientErrors.showAllMessages(true);\r\n }\r\n\r\n if (someValidationErrors) {\r\n return;\r\n }\r\n\r\n self.uploadClientErrorResourceObject(null);\r\n self.showSubmitPrompt(true);\r\n };\r\n\r\n self.submitForm = function () {\r\n\r\n self.showSubmitPrompt(false);\r\n self.formSubmitted(true);\r\n\r\n var responseDetails = ko.toJS(self.response);\r\n\r\n return uploadRepository.updateUploads(self.uploads())\r\n .then(function () {\r\n return responseRepository.completeResponse(self.responsePublicReference, responseDetails);\r\n })\r\n .then(function () {\r\n navigateToResponseCompletePage(self.responsePublicReference);\r\n })\r\n .catch(function (jqXhr) {\r\n self.formSubmitted(false);\r\n\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred on submitting a response. Please try again later.',\r\n 'Unable to submit a response',\r\n jqXhr);\r\n });\r\n };\r\n\r\n function getResponseUploads(params) {\r\n return uploadRepository.getUploadsByResponsePublicReference(params.responsePublicReference)\r\n .then(function (uploadList) {\r\n ko.utils.arrayPushAll(self.uploads, uploadList);\r\n self.areUploadedFilesLoaded(true);\r\n })\r\n .catch(function (jqXhr) {\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred on loading the response uploads. Please try again later.',\r\n 'Unable to get the response uploads',\r\n jqXhr);\r\n });\r\n }\r\n\r\n function navigateToResponseCompletePage(responsePublicReference) {\r\n window.location.href = '/' + self.languageCode + '/response/' + responsePublicReference;\r\n }\r\n\r\n function getLocalizedString(resTextObject) {\r\n var value = resourceHelper.getString(resTextObject.key);\r\n value = resourceHelper.replacePlaceholders(value, resTextObject.params);\r\n\r\n return value;\r\n }\r\n\r\n function initResponseForm(params) {\r\n var responseMetadata = params.responseMetadata;\r\n var responseDetails = params.responseDetails;\r\n\r\n setResponseConfirmationMessage(responseMetadata);\r\n\r\n // If we have the email address because this was a request to an email then use a hidden field for this value\r\n if (responseDetails.email) {\r\n self.response.setEmail(responseDetails.email);\r\n self.emailAddressIsVisible(false);\r\n }\r\n\r\n return Promise.resolve(params);\r\n }\r\n\r\n function setResponseConfirmationMessage(responseMetadata) {\r\n var responseConfirmationMessageTemplate;\r\n\r\n if (responseMetadata.responseParentType === constants.responseParentType.request) {\r\n responseConfirmationMessageTemplate = resourceHelper.getString('ConfirmRequestResponseModalMessage');\r\n responseConfirmationMessageTemplate = responseConfirmationMessageTemplate\r\n .replace('{requestorFullName}', responseMetadata.requestorFullName);\r\n } else if (self.responseType === constants.responseParentType.appeal) {\r\n responseConfirmationMessageTemplate = resourceHelper.getString('ConfirmAppealResponseModalMessage');\r\n }\r\n\r\n self.responseConfirmationTitleTemplate(responseConfirmationMessageTemplate);\r\n self.responseConfirmationText(responseMetadata.responseConfirmationText);\r\n }\r\n\r\n\r\n function initFileUploadControl(params) {\r\n var responseMetadata = params.responseMetadata;\r\n\r\n if (responseMetadata.responseParentType === constants.responseParentType.request) {\r\n self.maximumUploadSize = contextData.portalSettings.maximumRequestUploadSize;\r\n self.maximumFilesUploads = contextData.portalSettings.maximumRequestFilesUploads;\r\n\r\n } else if (responseMetadata.responseParentType === constants.responseParentType.appeal) {\r\n self.maximumUploadSize = contextData.portalSettings.maximumAppealUploadSize;\r\n self.maximumFilesUploads = contextData.portalSettings.maximumAppealFilesUploads;\r\n }\r\n\r\n self.fileUploadSelectorOptions = {\r\n maximumUploadSize: self.maximumUploadSize,\r\n addFileUploadsCallback: self.addFileUploads,\r\n maximumFilesUploads: self.maximumFilesUploads\r\n };\r\n\r\n uploadValidation.init({\r\n maxFileSize: self.maximumUploadSize,\r\n fileNumberLimit: self.maximumFilesUploads,\r\n blacklistedFileTypes: contextData.portalSettings.blacklistedFileTypes\r\n });\r\n\r\n fileUpload.init({\r\n languageCode: self.languageCode,\r\n fileUploadServiceRootUrl: contextData.portalSettings.fileUploadServiceRootUrl,\r\n maximumChunkSize: contextData.portalSettings.maximumChunkSize,\r\n maximumConcurrentUploads: contextData.portalSettings.maximumConcurrentUploads,\r\n maximumFilesUploads: self.maximumFilesUploads\r\n });\r\n\r\n return Promise.resolve(params);\r\n }\r\n\r\n initResponseForm(params);\r\n initFileUploadControl(params);\r\n getResponseUploads(params);\r\n}\r\n\r\n// The default export returns the component details object to register with KO\r\nexport default { viewModel: ResponseForm, template: template };\r\n","// Module\nvar code = \"






\";\n// Exports\nexport default code;","import ko from 'knockout';\r\n\r\nconst dynamicForm = {\r\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n\r\n const components = valueAccessor();\r\n const formData = allBindings.get('data');\r\n const isReadOnly = allBindings.get('isReadOnly');\r\n const isViewAsHtml = allBindings.get('isViewAsHtml');\r\n const language = allBindings.get('language');\r\n const i18n = allBindings.get('i18n');\r\n\r\n const dataChangedCallback = allBindings.get('dataChangedCallback');\r\n const renderedCallback = allBindings.get('renderedCallback');\r\n\r\n import(/* webpackChunkName: \"dynamic-forms\" */ '@publicsafety/dynamic-forms') // Dynamically import large Dynamic Form dependencies\r\n .then(dynamicFormModule => {\r\n const dynamicForm = dynamicFormModule.default;\r\n\r\n dynamicForm\r\n .renderForm({\r\n containerElement: element,\r\n components: components ? ko.unwrap(components) : [],\r\n data: formData ? ko.unwrap(formData) : {},\r\n isReadOnly: isReadOnly ? ko.unwrap(isReadOnly) : false,\r\n isViewAsHtml: isViewAsHtml ? ko.unwrap(isViewAsHtml) : false,\r\n language: language,\r\n i18n: i18n,\r\n dataChangedCallback: dataChangedCallback ? dataChangedCallback : () => {}\r\n })\r\n .then(function (dynamicForm) {\r\n viewModel.dynamicForm = dynamicForm;\r\n\r\n if (renderedCallback) {\r\n renderedCallback();\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\nko.bindingHandlers.dynamicForm = dynamicForm;\r\n","import ko from 'knockout';\r\nimport uploadValidation from '@/App/uploadValidation';\r\nimport logger from '@/Vendor/inv-logger/logger';\r\nimport uploadRepository from '@/App/Repositories/uploadRepository';\r\nimport responseRepository from '@/App/Repositories/responseRepository';\r\nimport resourceHelper from '@/Vendor/inv-resource-helper/resourceHelper';\r\nimport fileUpload from '@/Vendor/inv-file-upload/fileUpload';\r\nimport contextData from '@/App/contextData';\r\nimport constants from '@/App/constants';\r\nimport 'knockout.validation';\r\nimport '@/App/Bindings/showModalBindings';\r\nimport '@/App/Bindings/beforeUnloadBinding';\r\nimport '@/App/Bindings/dynamicFormBinding';\r\nimport template from './customResponseForm.html';\r\nimport UploadStatus from '@/App/Types/enums/UploadStatus';\r\nimport uploadManager from '@/Vendor/inv-file-upload/utils/uploadManager';\r\n\r\nexport function CustomResponseForm(params) {\r\n\r\n var self = this;\r\n\r\n self.languageCode = contextData.languageCode;\r\n\r\n self.helpLinkTitle = resourceHelper.getString('HelpLinkTitle');\r\n self.confirmResponseModalCloseButtonLabel = resourceHelper.getString('ConfirmResponseModalCloseButton');\r\n self.leaveWarning = resourceHelper.getString('ChangesMayNotBeSaved');\r\n self.hasOpeningText = false;\r\n\r\n self.responseType = params.responseMetadata.responseParentType;\r\n self.responseTypes = constants.responseParentType;\r\n\r\n self.responsePublicReference = params.responsePublicReference;\r\n\r\n self.response = ko.observable({});\r\n self.responseFormDefinition = null;\r\n self.dataChangedCallback = args => {\r\n self.response(args.data);\r\n };\r\n\r\n self.responseAllowUploads = ko.observable(true);\r\n self.uploads = ko.observableArray([]);\r\n self.uploadClientErrorResourceObject = ko.observable(null);\r\n self.allUploadsComplete = uploadManager.allUploadsComplete;\r\n\r\n self.responseConfirmationText = ko.observable('');\r\n self.responseConfirmationTitleTemplate = ko.observable('');\r\n self.responseConfirmationTitle = ko.computed(function () {\r\n return self.responseConfirmationTitleTemplate().replace('{uploadedFilesCount}', self.uploads().length);\r\n });\r\n\r\n self.uploadAlreadyRunningTitle = ko.observable('');\r\n\r\n self.showSubmitPrompt = ko.observable(false); // Flags if the response summary and T&Cs modal is displayed\r\n self.showRunningUploadsModal = ko.observable(false); // Flags show modal infor if uploads already heppening in other window is displayed\r\n self.showRunningUploadsModalTimeElapsedTriggerMinSec =\r\n contextData.portalSettings.showRunningUploadsModalTimeElapsedTriggerMinSec; // time in seconds\r\n self.showRunningUploadsModalTimeElapsedTriggerMaxSec =\r\n contextData.portalSettings.showRunningUploadsModalTimeElapsedTriggerMaxSec; // time in seconds\r\n self.formSubmitted = ko.observable(false); // Flags if submit Ajax request in progress\r\n\r\n self.areUploadedFilesLoaded = ko.observable(false); // Flags if retrieve upload files details Ajax request completed\r\n\r\n self.isAllDataLoaded = ko.computed(function () { // Flags if all data for response is loaded\r\n return !self.responseAllowUploads() || self.areUploadedFilesLoaded();\r\n });\r\n\r\n self.hasPendingUploads = ko.pureComputed(function () {\r\n return uploadValidation.getValidationResourceKey(self.uploads(), true) === 'UploadsStillInProgress';\r\n });\r\n\r\n self.allFilesUploaded = ko.pureComputed(function () { // Flags if there are uploads and they are all complete\r\n return self.uploads().length > 0 && !self.hasPendingUploads();\r\n });\r\n\r\n self.addFileUploads = function (fileList) {\r\n var newUploads;\r\n\r\n var resourceObject = uploadValidation.getValidationResourceKeyForNewUploads(fileList, self.uploads());\r\n self.uploadClientErrorResourceObject(resourceObject);\r\n\r\n if (resourceObject) {\r\n var validationFailureText = getLocalizedString(resourceObject);\r\n logger.error('UploadFailure', validationFailureText);\r\n return;\r\n }\r\n\r\n newUploads = uploadRepository.addUploads(fileList, self.responsePublicReference, self.addUploadsFailed);\r\n self.uploads.unshift(...newUploads); // Add newest items to the top of the list\r\n };\r\n\r\n self.addUploadsFailed = function (e) {\r\n if (e.errorMessages) {\r\n self.serverErrors(e.errorMessages);\r\n return;\r\n }\r\n\r\n const resourceKey = e.status === 0 ? 'UnhandledErrorOffline' : 'UnhandledError';\r\n logger.error(resourceKey, 'An unexpected error occurred while attempting to add file uploads.', e);\r\n };\r\n\r\n /**\r\n * Calls the API to remove an upload. The API call could fail (if offline for example) and in this\r\n * scenario the upload must not be removed from the UI as this will invalidate the client-side\r\n * validation as the upload still exists.\r\n * @param {UploadModel} upload\r\n */\r\n self.removeUpload = function (upload) {\r\n upload.setIsBeingRemoved(true);\r\n\r\n uploadRepository.deleteUpload(upload)\r\n .then(() => {\r\n self.uploads.remove(upload);\r\n })\r\n .catch(function (jqXhr) {\r\n upload.setIsBeingRemoved(false); // Re-instate the upload exactly as it was before removal attempt\r\n\r\n if (!jqXhr.errorHasBeenLogged) {\r\n const resourceKey = jqXhr.status === 0 ? 'UnhandledErrorOffline' : 'UnhandledError';\r\n logger.error(resourceKey, 'Failed to delete the file upload.', jqXhr);\r\n }\r\n });\r\n };\r\n\r\n self.confirmSubmit = function () {\r\n let someValidationErrors = false;\r\n\r\n if (self.responseAllowUploads()) {\r\n var validationFailureResourceObject = uploadValidation.getValidationResourceKey(self.uploads(), true);\r\n if (validationFailureResourceObject) {\r\n someValidationErrors = true;\r\n self.uploadClientErrorResourceObject(validationFailureResourceObject);\r\n }\r\n }\r\n\r\n self.dynamicForm.validate().then(function (isValid) {\r\n someValidationErrors |= !isValid;\r\n\r\n if (someValidationErrors) {\r\n return;\r\n }\r\n\r\n self.uploadClientErrorResourceObject(null);\r\n self.showSubmitPrompt(true);\r\n });\r\n };\r\n\r\n self.submitForm = function () {\r\n\r\n self.showSubmitPrompt(false);\r\n self.formSubmitted(true);\r\n\r\n var responseDetails = {\r\n dynamicFormData: JSON.stringify(self.response())\r\n };\r\n\r\n return uploadRepository.updateUploads(self.uploads())\r\n .then(function () {\r\n return responseRepository.completeResponse(self.responsePublicReference, responseDetails);\r\n })\r\n .then(function () {\r\n navigateToResponseCompletePage(self.responsePublicReference);\r\n })\r\n .catch(function (jqXhr) {\r\n self.formSubmitted(false);\r\n\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred on submitting a response. Please try again later.',\r\n 'Unable to submit a response',\r\n jqXhr);\r\n });\r\n };\r\n\r\n function getResponseUploads(params) {\r\n var responseAllowUploads = params.responseMetadata.responseAllowUploads;\r\n if (!responseAllowUploads) {\r\n return Promise.resolve();\r\n }\r\n\r\n return uploadRepository.getUploadsByResponsePublicReference(params.responsePublicReference)\r\n .then(function (uploadList) {\r\n\r\n ko.utils.arrayPushAll(self.uploads, uploadList);\r\n\r\n self.areUploadedFilesLoaded(true);\r\n\r\n return Promise.resolve();\r\n })\r\n .catch(function (jqXhr) {\r\n\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred on loading the response uploads. Please try again later.',\r\n 'Unable to get the response uploads',\r\n jqXhr);\r\n\r\n return Promise.reject(jqXhr);\r\n });\r\n }\r\n\r\n function navigateToResponseCompletePage(responsePublicReference) {\r\n window.location.href = '/' + self.languageCode + '/response/' + responsePublicReference;\r\n }\r\n\r\n function getLocalizedString(resTextObject) {\r\n var value = resourceHelper.getString(resTextObject.key);\r\n value = resourceHelper.replacePlaceholders(value, resTextObject.params);\r\n\r\n return value;\r\n }\r\n\r\n function initResponseForm(params) {\r\n var responseMetadata = params.responseMetadata;\r\n\r\n setResponseConfirmationMessage(responseMetadata);\r\n\r\n self.responseAllowUploads(responseMetadata.responseAllowUploads);\r\n self.responseFormDefinition = JSON.parse(responseMetadata.responseFormDefinition);\r\n self.hasOpeningText = responseMetadata.responseFormDefinition.indexOf('form-opening-text') !== -1;\r\n\r\n return Promise.resolve(params);\r\n }\r\n\r\n function setResponseConfirmationMessage(responseMetadata) {\r\n var responseConfirmationMessageTemplate;\r\n\r\n if (responseMetadata.responseParentType === constants.responseParentType.request) {\r\n responseConfirmationMessageTemplate = responseMetadata.responseAllowUploads ?\r\n resourceHelper.getString('ConfirmRequestResponseModalMessage') :\r\n resourceHelper.getString('ConfirmRequestResponseWithoutUploadsModalMessage');\r\n responseConfirmationMessageTemplate = responseConfirmationMessageTemplate\r\n .replace('{requestorFullName}', responseMetadata.requestorFullName);\r\n } else if (self.responseType === constants.responseParentType.appeal) {\r\n responseConfirmationMessageTemplate = responseMetadata.responseAllowUploads ?\r\n resourceHelper.getString('ConfirmAppealResponseModalMessage') :\r\n resourceHelper.getString('ConfirmAppealResponseWithoutUploadsModalMessage');\r\n }\r\n\r\n self.responseConfirmationTitleTemplate(responseConfirmationMessageTemplate);\r\n self.responseConfirmationText(responseMetadata.responseConfirmationText);\r\n\r\n const uploadAlreadyRunningTitle = responseMetadata.uploadAlreadyRunningTitle ?\r\n responseMetadata.uploadAlreadyRunningTitle :\r\n resourceHelper.getString('UploadAlreadyRunningTitle');\r\n\r\n self.uploadAlreadyRunningTitle(uploadAlreadyRunningTitle);\r\n }\r\n\r\n\r\n function initFileUploadControl(params) {\r\n var responseMetadata = params.responseMetadata;\r\n\r\n if (responseMetadata.responseParentType === constants.responseParentType.request) {\r\n self.maximumUploadSize = contextData.portalSettings.maximumRequestUploadSize;\r\n self.maximumFilesUploads = contextData.portalSettings.maximumRequestFilesUploads;\r\n\r\n } else if (responseMetadata.responseParentType === constants.responseParentType.appeal) {\r\n self.maximumUploadSize = contextData.portalSettings.maximumAppealUploadSize;\r\n self.maximumFilesUploads = contextData.portalSettings.maximumAppealFilesUploads;\r\n }\r\n\r\n self.fileUploadSelectorOptions = {\r\n maximumUploadSize: self.maximumUploadSize,\r\n addFileUploadsCallback: self.addFileUploads,\r\n maximumFilesUploads: self.maximumFilesUploads\r\n };\r\n\r\n uploadValidation.init({\r\n maxFileSize: self.maximumUploadSize,\r\n fileNumberLimit: self.maximumFilesUploads,\r\n blacklistedFileTypes: contextData.portalSettings.blacklistedFileTypes\r\n });\r\n\r\n fileUpload.init({\r\n languageCode: self.languageCode,\r\n fileUploadServiceRootUrl: contextData.portalSettings.fileUploadServiceRootUrl,\r\n maximumChunkSize: contextData.portalSettings.maximumChunkSize,\r\n maximumConcurrentUploads: contextData.portalSettings.maximumConcurrentUploads,\r\n maximumFilesUploads: self.maximumFilesUploads\r\n });\r\n\r\n return Promise.resolve(params);\r\n }\r\n\r\n\r\n function diffInSeconds(t1ms, t2ms) {\r\n return Math.floor((t1ms - t2ms) / 1000);\r\n }\r\n\r\n\r\n /**\r\n * Check if in the new window/tab, and if there are any uploads in progress and a small amount of time has elapsed show modal dialog\r\n * */\r\n function showConcurrentUploadRunning() {\r\n const uploads = self.uploads();\r\n const timeNow = Date.now();\r\n let maxDurationDifference = 0;\r\n let anyFailedUploads = false;\r\n\r\n // if variables not set - return\r\n if (self.showRunningUploadsModalTimeElapsedTriggerMinSec === 0 ||\r\n self.showRunningUploadsModalTimeElapsedTriggerMaxSec === 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < uploads.length; i++) {\r\n // any pending or uploading files are marked as failed on serverside\r\n if (uploads[i].statusName() === UploadStatus.failed) {\r\n anyFailedUploads = true;\r\n const timeAdded = new Date(uploads[i].addedTimestamp).getTime();\r\n const duration = diffInSeconds(timeNow, timeAdded);\r\n maxDurationDifference = duration > maxDurationDifference ? duration : maxDurationDifference;\r\n }\r\n }\r\n\r\n if (anyFailedUploads === true &&\r\n maxDurationDifference > self.showRunningUploadsModalTimeElapsedTriggerMinSec &&\r\n maxDurationDifference <= self.showRunningUploadsModalTimeElapsedTriggerMaxSec) {\r\n self.showRunningUploadsModal(true);\r\n }\r\n }\r\n\r\n initResponseForm(params);\r\n initFileUploadControl(params);\r\n getResponseUploads(params)\r\n .then(showConcurrentUploadRunning);\r\n}\r\n\r\n// The default export returns the component details object to register with KO\r\nexport default { viewModel: CustomResponseForm, template: template };\r\n","/* globals grecaptcha */\r\nvar promiseResolveFunction;\r\nvar promiseRejectFunction;\r\nvar timeoutFunction;\r\n\r\nvar recaptchPromise = new Promise(function (resolve, reject) {\r\n promiseResolveFunction = resolve;\r\n promiseRejectFunction = reject;\r\n});\r\n\r\n/**\r\n * Create a global function on the window object that can be used as a callback for Google reCAPTCHA\r\n * after it has loaded.\r\n * www.google.com/recaptcha/api.js?onload=publicPortalHandleRecaptchaLoaded&render=explicit\r\n *\r\n * The long function name is to ensure this global variable is unique. This is an exceptional case\r\n * and we never normally want to create global / window objects.\r\n */\r\nwindow.publicPortalHandleRecaptchaLoaded = function () {\r\n clearTimeout(timeoutFunction);\r\n promiseResolveFunction(grecaptcha);\r\n};\r\n\r\n/**\r\n * Allow the Google reCAPTCHA scripts a period of time to load, after which we will assume something\r\n * has gone wrong and therefore reject the promise.\r\n */\r\ntimeoutFunction = setTimeout(function rejectPromiseAfterTimeout() {\r\n promiseRejectFunction(new Error('The Google reCAPTCHA script did\\'t finish loading in the time allocated'));\r\n}, 15 * 1000);\r\n\r\nfunction RecaptchaHelper() {\r\n\r\n var self = this;\r\n\r\n /**\r\n * Returns a promise for the Google reCAPTCHA object\r\n * @return {Promise}\r\n */\r\n self.getRecaptcha = function () {\r\n return recaptchPromise;\r\n };\r\n}\r\n\r\nexport default new RecaptchaHelper();\r\n","// Module\nvar code = \"






\";\n// Exports\nexport default code;","import ko from 'knockout';\r\nimport logger from '../../../Vendor/inv-logger/logger';\r\nimport responseRepository from '../../Repositories/responseRepository';\r\n\r\nimport template from './responseFormLoader.html';\r\n\r\nexport function ResponseFormLoader(params) {\r\n const self = this;\r\n\r\n self.params = params;\r\n\r\n self.responseComponentName = null;\r\n self.areResponseDetailsLoaded = ko.observable(false); // Flags if retrieve response details Ajax request completed\r\n\r\n function getResponseByPublicReference(publicReference) {\r\n return responseRepository.getResponse(publicReference)\r\n .then(function (response) {\r\n self.response = response;\r\n self.responseComponentName = getResponseFormComponentName(self.response.responseMetadata);\r\n\r\n self.areResponseDetailsLoaded(true);\r\n })\r\n .catch(function (jqXhr) {\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred on loading a response. Please try again later.',\r\n 'Unable to get a response',\r\n jqXhr);\r\n });\r\n }\r\n\r\n function getResponseFormComponentName(responseMetaData) {\r\n const isStandardResponseForm = !responseMetaData.responseFormDefinition;\r\n\r\n if (isStandardResponseForm) {\r\n return 'response-form';\r\n }\r\n\r\n return 'custom-response-form';\r\n }\r\n\r\n getResponseByPublicReference(params.responsePublicReference);\r\n}\r\n\r\nexport default { viewModel: ResponseFormLoader, template: template };\r\n","// Module\nvar code = \"

\";\n// Exports\nexport default code;","import ko from 'knockout';\r\n\r\nimport UploadsList from './Components/uploadsList/uploadsList';\r\nimport ResponseForm from './Components/responseForm/responseForm';\r\nimport CustomResponseForm from './Components/customResponseForm/customResponseForm';\r\nimport ResponseFormLoader from './Components/responseFormLoader/responseFormLoader';\r\n\r\n\r\nexport default class ComponentRegistration {\r\n\r\n static registerAllComponents() {\r\n ko.components.register('uploads-list', UploadsList);\r\n ko.components.register('response-form', ResponseForm);\r\n ko.components.register('custom-response-form', CustomResponseForm);\r\n ko.components.register('response-form-loader', ResponseFormLoader);\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\n\r\n/**\r\n * Binding to display an element by fading it in\r\n * @example\r\n *

\r\n */\r\nko.bindingHandlers.fadeIn = {\r\n\r\n update: function (element, valueAccessor) {\r\n\r\n var value = ko.utils.unwrapObservable(valueAccessor());\r\n\r\n if (value) {\r\n $(element).fadeIn();\r\n }\r\n }\r\n};\r\n","var __WEBPACK_NAMESPACE_OBJECT__ = grecaptcha;","import ko from 'knockout';\r\nimport logger from '../../Vendor/inv-logger/logger';\r\nimport recaptchaHelper from '../Utils/recaptchaHelper';\r\nimport 'grecaptcha';\r\n\r\nko.bindingHandlers.recaptcha = {\r\n\r\n init: function (element, valueAccessor, allBindings) {\r\n\r\n var captchaValueAccessor = valueAccessor();\r\n\r\n var languageCode = allBindings.get('languageCode');\r\n var publicKey = allBindings.get('publicKey');\r\n var callback = allBindings.get('callback');\r\n\r\n var options = {\r\n 'sitekey': publicKey,\r\n 'hl': languageCode,\r\n 'callback': function (captchaValue) {\r\n captchaValueAccessor(captchaValue);\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n 'expired-callback': function () {\r\n captchaValueAccessor(null);\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n };\r\n\r\n // The Google reCAPTCHA externally hosted script conflicts using the same element as the Knockout\r\n // recaptcha binding is bound against and throws an error. To overcome this, create a child div for\r\n // the Google reCAPTCHA script to target.\r\n var recaptchaInnerDiv = document.createElement('div');\r\n element.appendChild(recaptchaInnerDiv);\r\n\r\n recaptchaHelper.getRecaptcha() // Returns a promise for the Google reCAPTCHA object\r\n .then(function (recaptchaObject) {\r\n recaptchaObject.render(recaptchaInnerDiv, options);\r\n })\r\n .catch(function (ex) {\r\n logger.error('CaptchaUnavailable', ex);\r\n });\r\n }\r\n};\r\n","import 'core-js/stable'; // polyfills for ECMAScript up to 2020\r\nimport 'regenerator-runtime/runtime'; // Standalone runtime for Regenerator-compiled generator and async functions\r\nimport '../../exposeVendorCore'; // Expose jQuery and Bootstrap JS globally for use outside of the KO bound element\r\n\r\nimport ko from 'knockout';\r\nimport '../../knockoutBindingProvider';\r\nimport contextData from '../contextData';\r\nimport appealDetailsConfig from './appealDetailsConfig';\r\nimport AppealDetailsViewModel from './appealDetailsViewModel';\r\nimport logger from '../../Vendor/inv-logger/logger';\r\nimport resourceHelper from '../../Vendor/inv-resource-helper/resourceHelper';\r\nimport commonBindings from '../../Vendor/inv-common-bindings/commonBindings';\r\nimport resourceDataRepository from '../Repositories/resourceDataRepository';\r\nimport systemSettingsRepository from '../Repositories/systemSettingsRepository';\r\nimport validationRulesRepository from '../Repositories/validationRulesRepository';\r\nimport ComponentRegistration from '../componentRegistration';\r\nimport '../Bindings/fadeInBinding';\r\nimport '../Bindings/recaptchaBinding';\r\n\r\n// Use the language code defined by the lang attribute on the html tag\r\nvar languageCode = document.getElementsByTagName('html')[0].getAttribute('lang');\r\ncontextData.languageCode = languageCode;\r\n\r\nretrieveAndPersistPortalSettings()\r\n .then(retrieveResponseValidationRules)\r\n .then(retrieveAndPersistResourceData)\r\n .then(function () {\r\n\r\n commonBindings.init(languageCode);\r\n logger.init(contextData.languageCode);\r\n ComponentRegistration.registerAllComponents();\r\n applyBindings();\r\n consoleLogInfo(contextData.portalSettings, languageCode);\r\n })\r\n .catch(function (ex) {\r\n logger.logAndThrowUntranslatedError(\r\n 'An unexpected error occurred loading the site. Please try again later.',\r\n 'Please review the error and determine if this needs to specifically be caught', ex);\r\n });\r\n\r\nfunction retrieveAndPersistPortalSettings() {\r\n return systemSettingsRepository.getPortalSettings()\r\n .then(function (portalSettings) {\r\n contextData.inReleaseMode = portalSettings.inReleaseMode;\r\n contextData.portalSettings = portalSettings;\r\n })\r\n .catch(function (jqXhr) {\r\n\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred loading the site. Please try again later.',\r\n 'Unable to get the system portal settings',\r\n jqXhr);\r\n\r\n return Promise.reject(jqXhr);\r\n });\r\n}\r\n\r\nfunction retrieveResponseValidationRules() {\r\n\r\n return validationRulesRepository.getValidationRules('response')\r\n .then(function (validationRules) {\r\n contextData.responseValidationRules = validationRules;\r\n })\r\n .catch(function (jqXhr) {\r\n\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred loading the site. Please try again later.',\r\n 'Unable to get the response validation rules',\r\n jqXhr);\r\n\r\n return Promise.reject(jqXhr);\r\n });\r\n}\r\n\r\nfunction retrieveAndPersistResourceData() {\r\n return resourceDataRepository.getResourceData(contextData.languageCode)\r\n .then(function (resourceData) {\r\n\r\n // Initialize the resource helper with the main portal translations\r\n resourceHelper.init(resourceData);\r\n })\r\n .catch(function (jqXhr) {\r\n\r\n // As an error occurred retrieving the translated text, all we can do here is display error in English\r\n logger.logAndThrowUntranslatedError(\r\n 'An error occurred loading the site. Please try again later.',\r\n 'Unable to get the resource data / translated text',\r\n jqXhr);\r\n\r\n return Promise.reject(jqXhr);\r\n });\r\n}\r\n\r\nfunction applyBindings() {\r\n\r\n var params = {\r\n appealPublicReference: appealDetailsConfig.appealPublicReference\r\n };\r\n\r\n // The appeal page is server rendered so just bind Knockout to the dynamic content element\r\n ko.applyBindings(\r\n new AppealDetailsViewModel(params),\r\n document.getElementById('knockoutBoundElement'));\r\n}\r\n\r\nfunction consoleLogInfo(portalSettings, languageCode) {\r\n\r\n console.log('Thanks for visiting!');\r\n console.log('Version:', portalSettings.versionNumber);\r\n\r\n console.log('In release mode:', portalSettings.inReleaseMode);\r\n console.log('Language code:', languageCode);\r\n}\r\n","\r\n// ----------------------------------------------------------------------------------------------------\r\n// Explicitly require the dependencies that will be bundled into \"vendorCore-bundle\" by webpack and\r\n// expose these globally. Bootstrap and jQuery are used on all pages, even server-side rendered pages.\r\n// ----------------------------------------------------------------------------------------------------\r\nimport jquery from 'jquery';\r\nimport 'bootstrap';\r\n\r\nwindow.$ = window.jQuery = jquery;\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"dynamic-forms\" + \"-bundle.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t627: 0,\n\t845: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpublic_portal_website\"] = self[\"webpackChunkpublic_portal_website\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [417,566], function() { return __webpack_require__(9409); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","ko","KnockoutSecureBinding","attribute","globals","window","bindings","noVirtualElements","self","this","languageCode","inReleaseMode","portalSettings","responseValidationRules","init","options","fileUploadServiceRootUrl","maximumChunkSize","maximumConcurrentUploads","wrapTranslatedTextInBrackets","resourceData","registerPackageResourceData","packageResourceData","packageName","Error","tempResourceData","console","debug","Object","keys","length","getString","resourceKey","value","replacePlaceholders","stringWithPlaceholders","replacementValues","entries","forEach","replaceKey","replacement","replace","hasResourceData","supportedLanguageCodes","showErrorDebugMessage","processLogDebugCalls","createDetails","friendlyMessage","debugMessage","errorObject","toastr","closeButton","progressBar","newestOnTop","timeOut","logAndThrowUntranslatedError","toLowerCase","indexOf","resourceHelper","setOptions","error","message","errorDetails","errorWithoutTimeout","warning","warningDetails","warn","optionalParams","success","info","errorHasBeenLogged","logUnauthorizedAccess","preventDuplicates","logTimeout","appealPublicReferenceElement","document","getElementById","logger","appealPublicReference","getAttribute","none","request","appeal","handleErrorResponse","jqXhr","status","handleUnauthorisedResponse","statusText","handleTimeoutError","responseJSON","JSON","parse","e","errorMessages","isUserRecoverable","serverErrorMessages","parseAndAddErrorMessages","createAjaxSetting","url","type","data","settings","dataType","stringify","contentType","ajaxGet","Promise","resolve","reject","$","then","errorResponseHandler","ajaxPost","ajaxDelete","ajaxPut","baseResponseUrl","createResponseWithCaptchaValidation","parentDetails","captchaValue","responseDataModel","anonymousRepositoryHelper","getResponse","responsePublicReference","getResponseUrl","completeResponse","responseDetails","completeResponseUrl","params","showResponseForm","ParentPublicReference","ParentType","constants","responseRepository","response","catch","isResponseFormVisible","isCaptchaVisible","isCaptchaEnabled","contextData","appealResponseCaptchaEnabled","isResponseAreaVisible","responseAreaLoading","captchaPublicKey","captchaCallback","responseType","showResponseArea","update","element","valueAccessor","allBindings","get","text","attr","allBindingsAccessor","viewModel","context","binding","String","key","placeholder","UploadStatus","getResourceData","resourceUrl","getPortalSettings","resourceBaseUrl","getValidationRules","resourceName","autoResize","uploads","removeUpload","removeUploadCallback","uploadStatus","template","FileSizeFormatter","static","bytes","roundDownToOneDp","number","Math","floor","toFixed","maxFileSize","fileNumberLimit","blacklistedFileTypes","getValidationResourceKey","areUploadsOptional","statuses","map","upload","statusName","containsAuthorising","containsPending","containsUploading","containsFailed","containsFailedAuthorization","getValidationResourceKeyForNewUploads","fileList","filesToAdd","i","files","push","convertFileListToArray","fileNamesToAdd","file","name","existingFileNames","fileName","doAnyFileNamesAlreadyExist","some","size","doAnyFileExceedAllovedSize","getFormattedFileSize","doFilesMetFileNumberLimit","match","currentFileExt","ext","fileHasBlacklistedFileType","doAnyFilesHaveBlacklistedFileType","doAnyFilesHaveNoContent","validationRules","fullName","address","telephone","comments","email","clientErrors","deep","setEmail","getUpload","currentUpload","nativeBrowserFile","fileUpload","remove","uploadsCount","allUploadsProgress","allUploadsComplete","addUpload","parentId","getUploadToken","uploadToken","setUploadStarted","setAllUploadsProgress","updateUploadProgress","progress","bytesUploaded","setUploadComplete","setUploadFailed","errorMessage","cancelUpload","constructor","serverUpload","originalComments","Date","elementIdPrefix","generateElementIdPrefix","fileSize","uploadId","requestId","publicReference","addedTimestamp","uploadStatusName","userIsCurrentlyUploading","isBeingRemoved","updateAfterServerModelCreated","serverModel","setAjaxRequest","ajaxRequest","setUploadFailedAuthorisation","setIsBeingRemoved","abort","theFileSize","random","toString","substr","targetElementId","targetElement","clickHandler","event","keyCode","which","preventDefault","click","addEventListener","removeEventListener","fileUploadSelectorOptions","maximumUploadSize","maximumFilesUploads","addFileUploadsCallback","addFileUploads","label","isUploaded","isUploading","widthStyle","dropZoneElement","counter","on","stopPropagation","css","originalEvent","dataTransfer","is","target","off","uploadUrl","getSingleFile","fileupload","maxChunkSize","limitConcurrentUploads","dropZone","beforeSend","xhr","uploadManager","setRequestHeader","send","progressall","parseInt","loaded","total","done","fail","subscribe","changes","index","change","retrieveAndSetResourceData","fileUploadSelecterComponent","progressBarComponent","UploadModel","baseResourceUrl","getOrCreateUploadModel","uploadModel","subscribeToCompleteUploadStatusName","uploadCompleteCallback","getUploadsByResponsePublicReference","serverUploads","createUploadModels","addUploads","addUploadsFailedCallback","initialResolvedPromise","promise","reduce","previousPromise","uploadData","lastWriteDate","lastModified","lastModifiedDate","toISOString","postNewUploadToServer","createPromiseToAddUploadsInOrder","find","x","startUploads","updateUploads","updateUploadPromises","commentHasChanged","singleUploadData","uploadPublicReference","all","deleteUpload","validationRuleMessages","applyValidationRule","rule","property","otherObservable","equal","extend","populateValidationRuleMessages","ruleTypeProperty","applyValidation","rules","prototype","hasOwnProperty","call","getValidationMessage","propertyName","validationRuleType","observable","afterShowCallback","closeImmediately","modal","hasClass","removeClass","addClass","onbeforeunload","dataIsPromptText","promptText","condition","helpLinkTitle","confirmResponseModalCloseButtonLabel","leaveWarning","responseMetadata","responseParentType","responseTypes","ResponseModel","insertMessages","decorateElement","errorElementClass","ValidationRulesService","uploadClientErrorResourceObject","responseConfirmationText","responseConfirmationTitleTemplate","responseConfirmationTitle","emailAddressIsVisible","showSubmitPrompt","formSubmitted","areUploadedFilesLoaded","isAllDataLoaded","hasPendingUploads","uploadValidation","allFilesUploaded","newUploads","resourceObject","validationFailureText","resTextObject","uploadRepository","addUploadsFailed","unshift","serverErrors","confirmSubmit","someValidationErrors","validationFailureResourceObject","showAllMessages","submitForm","location","href","responseConfirmationMessageTemplate","requestorFullName","setResponseConfirmationMessage","initResponseForm","maximumRequestUploadSize","maximumRequestFilesUploads","maximumAppealUploadSize","maximumAppealFilesUploads","initFileUploadControl","uploadList","getResponseUploads","dynamicForm","bindingContext","components","formData","isReadOnly","isViewAsHtml","language","i18n","dataChangedCallback","renderedCallback","dynamicFormModule","default","renderForm","containerElement","promiseResolveFunction","promiseRejectFunction","timeoutFunction","hasOpeningText","responseFormDefinition","args","responseAllowUploads","uploadAlreadyRunningTitle","showRunningUploadsModal","showRunningUploadsModalTimeElapsedTriggerMinSec","showRunningUploadsModalTimeElapsedTriggerMaxSec","validate","isValid","dynamicFormData","timeNow","now","maxDurationDifference","anyFailedUploads","duration","t1ms","t2ms","getTime","responseComponentName","areResponseDetailsLoaded","ComponentRegistration","UploadsList","ResponseForm","CustomResponseForm","ResponseFormLoader","fadeIn","recaptchPromise","publicPortalHandleRecaptchaLoaded","clearTimeout","grecaptcha","setTimeout","getRecaptcha","captchaValueAccessor","publicKey","callback","recaptchaInnerDiv","createElement","appendChild","recaptchaHelper","recaptchaObject","render","ex","getElementsByTagName","systemSettingsRepository","validationRulesRepository","resourceDataRepository","commonBindings","registerAllComponents","appealDetailsConfig","AppealDetailsViewModel","log","versionNumber","consoleLogInfo","jQuery","jquery","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","amdD","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","getPrototypeOf","obj","__proto__","t","mode","ns","create","def","current","getOwnPropertyNames","definition","o","defineProperty","enumerable","f","chunkId","promises","u","miniCssF","g","globalThis","Function","prop","l","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","Symbol","toStringTag","scriptUrl","importScripts","currentScript","p","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","id","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}