{"version":3,"sources":["../component/listing/tpl/element!tpl","../component/listing/css/element!css","../component/listing/element.js","../component/listing/tpl/report!tpl","../component/listing/css/report!css","../component/listing/report.js","../component/listing/tpl/list!tpl","../component/listing/tpl/elementWrapper!tpl","../component/listing/css/list!css","../component/listing/list.js","../component/manager/tpl/manager!tpl","../component/manager/css/manager!css","../component/manager/manager.js","../controller/main.js","../controller/routes.js","onLayerEnd0.js","module-create.js"],"names":[],"mappings":"oSACA,MAAA,CAAA,gDAAA,CAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CA8BA,MA3BA,CAAA,MAAA,EAAA,4BA2BA,EA1BA,MAAA,CAAA,OAAA,CAAA,MA0BA,EA1BA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CA0BA,EAzBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAyBA,CAzBA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAyBA,EAxBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,oGAuBA,EAtBA,MAAA,CAAA,OAAA,CAAA,IAsBA,EAtBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAsBA,EArBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAqBA,CArBA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAqBA,EApBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,qGAmBA,EAlBA,MAAA,CAAA,OAAA,CAAA,SAkBA,EAlBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAkBA,EAjBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAiBA,CAjBA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAiBA,EAhBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,sCAeA,EAdA,MAAA,CAAA,OAAA,CAAA,IAcA,EAdA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAcA,EAbA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAaA,CAbA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAaA,EAZA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,wIADA,CAEA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EAFA,CAGA,sIAHA,CAIA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,EAJA,CAKA,6EALA,CAMA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EANA,CAOA,6EAPA,CAQA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,EARA,CASA,2EATA,CAUA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,CAAA,EAVA,CAWA,0BACA,CAAA,MACA,CAlCA,CAmCA,CApCA,C,CCAA,MAAA,CAAA,gDAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCgBA,MAAA,CAAA,wCAAA,CAAA,CACA,QADA,CAEA,QAFA,CAGA,MAHA,CAIA,QAJA,CAKA,cALA,CAMA,UANA,CAOA,gDAPA,CAQA,gDARA,CAAA,CASA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CACA,aADA,GAGA,CAAA,SAAA,CAAA,EAHA,CAMA,cAAA,CAAA,CAAA,aAAA,CAAA,QAAA,CAAA,WAAA,CANA,CAQA,YAAA,CAAA,CACA,MAAA,CAAA,QADA,CAEA,MAAA,CAAA,QAFA,CAGA,aAAA,CAAA,UAHA,CAIA,QAAA,CAAA,SAJA,CAKA,MAAA,CAAA,WALA,CAMA,MAAA,CAAA,MANA,CAOA,MAAA,CAAA,KAPA,CARA,CAkBA,WAAA,CAAA,CACA,WAAA,CAAA,mBADA,CAEA,SAAA,CAAA,WAFA,CAGA,MAAA,CAAA,YAHA,CAlBA,CA6BA,cAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,SACA,CA/BA,CAuCA,gBAAA,CAAA,SAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CACA,CAzCA,CAgDA,aAAA,CAAA,SAAA,IAAA,CAAA,CACA,OAAA,IAAA,CAAA,MAAA,EACA,IAAA,SAAA,CACA,IAAA,aAAA,CACA,MAAA,CAAA,EAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,CAAA,CACA,IAAA,WAAA,CACA,MAAA,CAAA,EAAA,CAAA,cAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,CAAA,CACA,IAAA,QAAA,CACA,MAAA,CAAA,EAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,CAAA,CACA,QACA,MAAA,EAAA,CATA,CAWA,CA5DA,CAmEA,OAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,IAAA,CACA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,cAAA,CAAA,CASA,MANA,CAAA,IAMA,CAPA,IAAA,CAAA,QAAA,EAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAOA,CANA,YAAA,CAAA,IAAA,CAAA,QAAA,CAMA,CALA,IAAA,CAAA,MAAA,EAAA,WAAA,CAAA,IAAA,CAAA,MAAA,CAKA,CAJA,WAAA,CAAA,IAAA,CAAA,MAAA,CAIA,CAFA,WAAA,CAAA,WAEA,CAAA,QAAA,IACA,CAhFA,CAkFA,cAAA,CAAA,CAMA,KAAA,CAAA,UAAA,CACA,GAAA,KAAA,IAAA,EAAA,KAAA,IAAA,CAAA,EAAA,CACA,MAAA,MAAA,IAAA,CAAA,EAEA,CAVA,CAgBA,SAAA,CAAA,UAAA,CACA,GAAA,KAAA,IAAA,EAAA,KAAA,IAAA,CAAA,MAAA,CACA,MAAA,MAAA,IAAA,CAAA,MAEA,CApBA,CA0BA,OAAA,CAAA,UAAA,CACA,MAAA,MAAA,IACA,CA5BA,CAmCA,MAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,UAAA,EAAA,CAeA,MAbA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,IAAA,EAAA,EAAA,CAAA,IAAA,CAaA,CAXA,UAAA,CAAA,IAAA,CAAA,eAAA,EAAA,UAAA,CAAA,OAAA,EAAA,QAAA,CAAA,OAAA,CAAA,KAAA,IAAA,CAAA,CAWA,CAVA,UAAA,CAAA,IAAA,CAAA,QAAA,EAAA,IAAA,CAAA,cAAA,CAAA,KAAA,IAAA,CAAA,CAUA,CATA,UAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,aAAA,CAAA,KAAA,IAAA,CAAA,CASA,CAPA,KAAA,SAAA,CAAA,KAAA,IAAA,CAAA,MAAA,CAOA,CAJA,KAAA,CAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,yCAAA,CAAA,CAAA,KAAA,IAAA,CAAA,OAAA,CAIA,CAHA,KAAA,CAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,yCAAA,CAAA,CAAA,CAAA,CAAA,KAAA,IAAA,CAAA,WAAA,CAGA,CADA,KAAA,OAAA,CAAA,QAAA,CACA,CAAA,IACA,CApDA,CA0DA,SAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,UAAA,EAAA,CAKA,MAJA,CAAA,UAAA,CAAA,QAAA,CAAA,WAAA,CAIA,CAHA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,UAAA,CAAA,WAAA,CAAA,WAAA,CACA,CAFA,CAEA,GAFA,CAGA,CAAA,IACA,CAjEA,CAwEA,SAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,GAAA,CAAA,MAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,4BAAA,CAAA,CAOA,GAJA,CAAA,CAAA,IAAA,SAAA,EAAA,OAAA,CAAA,MAAA,CAIA,GAHA,MAAA,CAAA,aAGA,EAAA,CAAA,CAAA,GAAA,cAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,kBAAA,MAAA,CAAA,CAQA,MANA,MAAA,EAAA,CAAA,MAAA,CAMA,GALA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,OAAA,CAAA,cAAA,CAAA,MAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,IAAA,CAAA,QAAA,CAAA,EAAA,IACA,CAFA,CAKA,CAFA,KAAA,QAAA,CAAA,MAAA,IAEA,EAAA,IACA,CA5FA,CAlFA,CA6LA,MAAA,UAAA,MAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,EAAA,EAAA,CAAA,SAAA,CAAA,CAMA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CACA,WADA,CACA,UADA,EAEA,EAFA,CAEA,MAFA,CAEA,UAAA,CACA,KAAA,IAAA,CAAA,IAAA,EAAA,EACA,CAJA,EAKA,EALA,CAKA,QALA,CAKA,UAAA,IAEA,CAAA,IAAA,CAAA,IAFA,CAGA,UAAA,CAAA,KAAA,UAAA,EAHA,CAKA,KAAA,MAAA,CAAA,IAAA,CALA,CAOA,UAAA,CAAA,IAAA,CAAA,0BAAA,EAAA,KAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,UAAA,CACA,CAFA,CAPA,CAUA,UAAA,CAAA,IAAA,CAAA,wBAAA,EAAA,KAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,QAAA,CACA,CAFA,CAVA,CAaA,UAAA,CAAA,IAAA,CAAA,wBAAA,EAAA,KAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,QAAA,CACA,CAFA,CAbA,CAgBA,UAAA,CAAA,IAAA,CAAA,0BAAA,EAAA,KAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,UAAA,CACA,CAFA,CAIA,CAzBA,EA0BA,IA1BA,CA0BA,UA1BA,CA2BA,CAEA,CA1OA,C,CChBA,MAAA,CAAA,+CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAQA,MALA,CAAA,MAAA,EAAA,wRACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,cAAA,CAAA,OAAA,CAAA,EADA,CAEA,gIAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,EAHA,CAIA,6BACA,CAAA,MACA,CAZA,CAaA,CAdA,C,CCAA,MAAA,CAAA,+CAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCgBA,MAAA,CAAA,uCAAA,CAAA,CACA,QADA,CAEA,QAFA,CAGA,MAHA,CAIA,QAJA,CAKA,cALA,CAMA,UANA,CAOA,WAPA,CAQA,+CARA,CASA,+CATA,CAAA,CAUA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CACA,aADA,GAGA,CAAA,SAAA,CAAA,EAHA,CAMA,gBAAA,CAAA,CAOA,MAAA,CAAA,SAAA,IAAA,CAAA,CAEA,GAAA,CAAA,UAAA,CAAA,KAAA,UAAA,EAAA,CACA,UAAA,CAAA,IAAA,CAAA,QAAA,EAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAHA,CAMA,IAAA,CAAA,MAAA,EAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MANA,EAOA,KAAA,QAAA,CAAA,UAAA,IAPA,CAQA,aAAA,CAAA,CAAA,OAAA,GAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CARA,EAUA,KAAA,QAAA,CAAA,UAAA,IAEA,CAnBA,CANA,CAqCA,MAAA,UAAA,MAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,EAAA,EAAA,CAAA,SAAA,CAAA,CAMA,MAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,CACA,WADA,CACA,UADA,EAEA,EAFA,CAEA,QAFA,CAEA,UAAA,IAEA,CAAA,IAAA,CAAA,IAFA,CAGA,UAAA,CAAA,KAAA,UAAA,EAHA,CAKA,KAAA,MAAA,CAAA,IAAA,CALA,CAOA,UAAA,CAAA,IAAA,CAAA,uBAAA,EAAA,KAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAFA,CAIA,CAbA,EAcA,IAdA,CAcA,UAdA,CAeA,CAEA,CAvEA,C,CChBA,MAAA,CAAA,6CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAgBA,MAbA,CAAA,MAAA,EAAA,iIAaA,EAZA,MAAA,CAAA,OAAA,CAAA,KAYA,EAZA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAYA,EAXA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAWA,CAXA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAWA,EAVA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,mDASA,EARA,MAAA,CAAA,OAAA,CAAA,SAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAOA,CAPA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,gJADA,CAEA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,EAFA,CAGA,KAHA,CAIA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,EAJA,CAKA,qFACA,CAAA,MACA,CApBA,CAqBA,CAtBA,C,CCAA,MAAA,CAAA,uDAAA,CAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAQA,MALA,CAAA,MAAA,EAAA,gBAKA,EAJA,MAAA,CAAA,OAAA,CAAA,EAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAGA,CAHA,MAAA,CAAA,qBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,UACA,CAAA,MACA,CAZA,CAaA,CAdA,C,CCAA,MAAA,CAAA,6CAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCgBA,MAAA,CAAA,qCAAA,CAAA,CACA,QADA,CAEA,QAFA,CAGA,MAHA,CAIA,cAJA,CAKA,wCALA,CAMA,6CANA,CAOA,uDAPA,CAQA,6CARA,CAAA,CASA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,CACA,aADA,GAGA,CAAA,SAAA,CAAA,CACA,KAAA,CAAA,WADA,CAEA,SAAA,CAAA,EAAA,CAAA,8BAAA,CAFA,CAHA,CAQA,OAAA,CAAA,CAMA,aAAA,CAAA,SAAA,WAAA,CAAA,CAGA,MAFA,CAAA,WAAA,CAAA,OAAA,EAEA,CADA,KAAA,UAAA,GAAA,IAAA,CAAA,mBAAA,WAAA,CAAA,KAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EACA,CAAA,IACA,CAVA,CAiBA,aAAA,CAAA,SAAA,WAAA,CAAA,IACA,CAAA,EAAA,CAAA,WAAA,CAAA,KAAA,EADA,CAEA,GAAA,CAAA,CAAA,CAAA,iBAAA,CAAA,CACA,EAAA,CAAA,EADA,CAAA,CAAA,CAFA,CAOA,MAFA,MAAA,UAAA,GAAA,IAAA,CAAA,IAAA,EAAA,OAAA,CAAA,GAAA,CAEA,CADA,WAAA,CAAA,MAAA,CAAA,GAAA,CACA,CAAA,IACA,CAzBA,CAiCA,SAAA,CAAA,SAAA,aAAA,CAAA,IAAA,CAAA,CAKA,MAJA,CAAA,aAAA,CAAA,MAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,cAAA,CAAA,CAIA,CAHA,IAGA,EAFA,KAAA,QAAA,CAAA,aAAA,IAEA,CAAA,IACA,CAvCA,CA6CA,UAAA,CAAA,UAAA,CAEA,MADA,MAAA,QAAA,CAAA,aAAA,IACA,CAAA,IACA,CAhDA,CAsDA,WAAA,CAAA,UAAA,CAEA,MADA,MAAA,UAAA,GAAA,IAAA,CAAA,YAAA,EAAA,GAAA,CAAA,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,IACA,CAzDA,CAgEA,gBAAA,CAAA,SAAA,WAAA,CAAA,IACA,CAAA,YAAA,CAAA,WAAA,CAAA,UAAA,EADA,CAEA,UAAA,CAAA,YAAA,CAAA,MAAA,EAFA,CAWA,MARA,CAAA,UAAA,CAAA,QAAA,CAAA,WAAA,CAQA,CAPA,YAAA,CAAA,QAAA,CAAA,aAAA,CAOA,CANA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,UAAA,CAAA,WAAA,CAAA,WAAA,CADA,CAEA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,YAAA,CAAA,WAAA,CAAA,aAAA,CACA,CAFA,CAEA,GAFA,CAGA,CALA,CAKA,GALA,CAMA,CAAA,IACA,CA5EA,CARA,CA6FA,MAAA,UAAA,MAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,EAAA,EAAA,CAAA,SAAA,CAAA,CAMA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CACA,WADA,CACA,OADA,EAEA,EAFA,CAEA,QAFA,CAEA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,KAAA,UAAA,GAAA,IAAA,CAAA,YAAA,EAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,OAAA,CAAA,UAAA,CACA,CAHA,CAIA,CARA,EASA,IATA,CASA,UATA,CAUA,CAEA,CAzHA,C,CChBA,MAAA,CAAA,gDAAA,CAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAMA,MAHA,CAAA,MAAA,EAAA,iDACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,EADA,CAEA,aACA,CAAA,MACA,CAVA,CAWA,CAZA,C,CCAA,MAAA,CAAA,gDAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCgBA,MAAA,CAAA,wCAAA,CAAA,CACA,QADA,CAEA,QAFA,CAGA,MAHA,CAIA,oBAJA,CAKA,UALA,CAMA,cANA,CAOA,gBAPA,CAQA,wBARA,CASA,mCATA,CAUA,+BAVA,CAWA,wCAXA,CAYA,uCAZA,CAaA,qCAbA,CAcA,gDAdA,CAeA,gDAfA,CAAA,CAgBA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,UAAA,CAAA,KAAA,CAAA,SAAA,CAAA,YAAA,CAAA,aAAA,CAAA,cAAA,CAAA,YAAA,CAAA,kBAAA,CAAA,oBAAA,CAAA,eAAA,CAAA,UAAA,CAAA,CACA,aADA,GAQA,CAAA,sBAAA,CAAA,SAAA,aAAA,CAAA,IACA,CAAA,KAAA,CAAA,CADA,CAEA,IAAA,CAAA,CAAA,OAAA,GAAA,CAFA,CAGA,GAAA,aAAA,CAmBA,MAlBA,CAAA,aAAA,CAAA,uBAkBA,GAjBA,KAAA,EAAA,QAAA,CAAA,aAAA,CAAA,uBAAA,CAAA,EAAA,CAiBA,CAhBA,IAAA,CAAA,IAAA,CAAA,MAgBA,CAfA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,aAAA,CAAA,uBAeA,EAbA,aAAA,CAAA,sBAaA,GAZA,KAAA,EAAA,QAAA,CAAA,aAAA,CAAA,sBAAA,CAAA,EAAA,CAYA,CAXA,IAAA,CAAA,IAAA,CAAA,SAWA,EATA,aAAA,CAAA,mBASA,GARA,KAAA,EAAA,QAAA,CAAA,aAAA,CAAA,mBAAA,CAAA,EAAA,CAQA,CANA,IAAA,CAAA,IAMA,CAPA,SAAA,GAAA,IAAA,CAAA,IAOA,CANA,SAMA,CAJA,OAIA,EADA,IAAA,CAAA,KAAA,CAAA,KACA,CAAA,IAEA,CAhCA,CAuCA,wBAAA,CAAA,SAAA,QAAA,CAAA,IAEA,CAAA,SAAA,CAAA,CACA,WAAA,CAAA,yBADA,CAEA,OAAA,CAAA,yBAFA,CAGA,MAAA,CAAA,qBAHA,CAIA,SAAA,CAAA,wBAJA,CAFA,CASA,KAAA,CAAA,CACA,mBAAA,CAAA,CADA,CAEA,sBAAA,CAAA,CAFA,CAGA,uBAAA,CAAA,CAHA,CATA,CAuBA,MARA,CAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,OAAA,CAAA,SAAA,EAAA,CACA,SAAA,CAAA,MAAA,CAFA,EAIA,KAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,EAEA,CANA,CAQA,CAAA,sBAAA,CAAA,KAAA,CACA,CA/DA,CAuEA,iBAAA,CAAA,CACA,OAAA,CAAA,CACA,IAAA,CAAA,QADA,CAEA,OAAA,CAAA,QAFA,CAGA,IAAA,CAAA,QAHA,CAIA,OAAA,CAAA,KAJA,CAKA,OAAA,CAAA,CAAA,GALA,CADA,CAQA,UAAA,CAAA,CACA,IAAA,CAAA,QADA,CAEA,OAAA,CAAA,QAFA,CAGA,IAAA,CAAA,QAHA,CAIA,OAAA,CAAA,KAJA,CAKA,OAAA,KALA,CARA,CAvEA,CAwFA,SAAA,CAAA,CAMA,eAAA,CAAA,UAAA,CACA,MAAA,MAAA,YACA,CARA,CAeA,UAAA,CAAA,SAAA,QAAA,CAAA,IACA,CAAA,UAAA,CAAA,KAAA,UAAA,EADA,CAEA,IAAA,CAAA,KAAA,IAFA,CAGA,aAAA,CAAA,oBAAA,CAAA,CAAA,OAAA,GAAA,CAAA,CAAA,QAAA,CAAA,CACA,EADA,CACA,OADA,CACA,UAAA,CACA,IAAA,CAAA,UAAA,EADA,CAEA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,OAAA,CAFA,CAGA,KAAA,OAAA,EACA,CALA,CAHA,CAWA,MAFA,CAAA,IAAA,CAAA,SAAA,CAAA,aAAA,IAEA,CADA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,UAAA,CACA,CAAA,IACA,CA3BA,CAmCA,UAAA,CAAA,SAAA,QAAA,CAAA,OAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,MAAA,CAAA,QAAA,CAAA,EAFA,CAGA,WAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CACA,EADA,CACA,QADA,CACA,UAAA,CACA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,MAAA,CADA,CAEA,IAAA,CAAA,IAAA,CAAA,aAAA,CAAA,WAAA,CAFA,CAGA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,MAAA,CAHA,CAIA,IAAA,CAAA,OAAA,CAAA,YAAA,CACA,CANA,EAOA,EAPA,CAOA,QAPA,CAOA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,MAAA,CACA,CATA,EAUA,EAVA,CAUA,UAVA,CAUA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,UAAA,CAAA,MAAA,CACA,CAZA,EAaA,EAbA,CAaA,UAbA,CAaA,UAAA,CACA,UAAA,CAAA,KAAA,EADA,CAGA,IAAA,CAAA,QAAA,EAHA,CAKA,IAAA,CAAA,OAAA,CAAA,UAAA,CAAA,MAAA,CACA,CAnBA,CAHA,CAsCA,MAbA,CAAA,OAaA,GAZA,KAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAYA,EAXA,KAAA,IAAA,CAAA,IAAA,EAWA,CATA,KAAA,IAAA,CAAA,WAAA,EASA,EAPA,KAAA,IAAA,CAAA,aAAA,CAAA,WAAA,CAOA,CANA,KAAA,YAAA,CAAA,MAAA,EAAA,WAMA,CALA,KAAA,OAAA,CAAA,YAAA,CAKA,CAHA,OAGA,EAFA,KAAA,IAAA,CAAA,gBAAA,CAAA,WAAA,CAEA,CAAA,IACA,CA1EA,CAgFA,eAAA,CAAA,UAAA,CACA,GAAA,CAAA,SAAA,CAAA,wBAAA,CAAA,KAAA,eAAA,EAAA,CAAA,CAMA,MALA,MAAA,KAKA,CAFA,KAAA,KAAA,CAAA,MAAA,CAAA,SAAA,CAEA,CAJA,KAAA,KAAA,CAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,UAAA,EAAA,CAIA,CAAA,IACA,CAxFA,CA+FA,QAAA,CAAA,SAAA,SAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,KAAA,CAAA,EAFA,CA6BA,MA1BA,CAAA,SAAA,CAAA,MA0BA,GAzBA,SAAA,CAAA,SAAA,CAAA,OAAA,EAyBA,EAvBA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CACA,IAAA,CAAA,YAAA,CAAA,EAAA,CAFA,EAIA,IAAA,CAAA,YAAA,CAAA,EAAA,EAAA,MAAA,CAAA,KAAA,CAJA,CAKA,IAAA,CAAA,YAAA,CAAA,EAAA,EAAA,SAAA,KAAA,KAAA,CAAA,MALA,EAOA,IAAA,CAAA,YAAA,CAAA,EAAA,EAAA,SAAA,EAPA,EAWA,IAAA,CAAA,UAAA,CAAA,KAAA,CAXA,CAaA,KAAA,CAAA,IAAA,CAAA,EAAA,CACA,CAdA,CAuBA,CANA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,YAAA,CAAA,CAAA,KAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CACA,IAAA,CAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CADA,CAEA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,EAAA,CACA,CAHA,CAMA,CADA,KAAA,OAAA,CAAA,YAAA,CACA,CAAA,IACA,CA7HA,CAmIA,KAAA,CAAA,UAAA,CAIA,MAHA,MAAA,KAGA,EAFA,KAAA,KAAA,CAAA,KAAA,CAAA,CAAA,CAEA,CAAA,IACA,CAxIA,CA+IA,QAAA,CAAA,UAAA,CAKA,MAJA,MAAA,IAIA,GAHA,KAAA,IAAA,CAAA,IAAA,EAGA,CAFA,KAAA,OAAA,CAAA,UAAA,CAEA,EAAA,IACA,CArJA,CA4JA,QAAA,CAAA,UAAA,CAKA,MAJA,MAAA,IAIA,GAHA,KAAA,IAAA,CAAA,IAAA,EAGA,CAFA,KAAA,OAAA,CAAA,UAAA,CAEA,EAAA,IACA,CAlKA,CAwKA,iBAAA,CAAA,UAAA,CAEA,GAAA,CAAA,IAAA,CAAA,IAAA,CAWA,MATA,CAAA,CAAA,CAAA,KAAA,YAAA,CAAA,CAAA,MAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,WAAA,GAAA,OAAA,CAAA,SAAA,IAAA,QAAA,GAAA,OAAA,CAAA,SAAA,EACA,CAFA,EAEA,OAFA,CAEA,SAAA,OAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,CAAA,KAAA,EAAA,CADA,CAEA,IAAA,CAAA,IAAA,CAAA,aAAA,CAAA,OAAA,CAFA,CAGA,IAAA,CAAA,OAAA,CAAA,YAAA,CACA,CANA,CASA,CADA,KAAA,OAAA,CAAA,mBAAA,CACA,CAAA,IACA,CAtLA,CA4LA,qBAAA,CAAA,UAAA,IACA,CAAA,YAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,YAAA,CADA,CAEA,aAAA,CAAA,CAAA,CAAA,KAAA,YAAA,CAAA,CAAA,GAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,SAAA,EACA,CAFA,EAEA,MAFA,CAEA,SAAA,MAAA,CAAA,CACA,MAAA,WAAA,GAAA,MAAA,EAAA,QAAA,GAAA,MACA,CAJA,EAIA,IAJA,EAFA,CAaA,MANA,EAAA,CAAA,aAMA,CAJA,KAAA,CAAA,IAAA,CAAA,YAAA,CAIA,CAFA,KAAA,CAAA,IAAA,CAAA,YAAA,CAEA,CAAA,IACA,CA1MA,CAxFA,CAkTA,MAAA,UAAA,MAAA,CAAA,IAAA,CAAA,CAQA,MANA,CAAA,IAAA,CAAA,IAAA,EAAA,EAMA,CAAA,cAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CACA,WADA,CACA,UADA,EAEA,EAFA,CAEA,kBAFA,CAEA,UAAA,CACA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,0BAAA,CACA,CAJA,EAKA,EALA,CAKA,MALA,CAKA,UAAA,CAEA,KAAA,YAAA,CAAA,EAFA,CAKA,KAAA,IAAA,CAAA,aAAA,CAAA,eAAA,EAAA,CAAA,CACA,IADA,CACA,CACA,KAAA,CAAA,EAAA,CAAA,kBAAA,CADA,CAEA,SAAA,CAAA,EAAA,CAAA,uCAAA,CAFA,CADA,CAKA,CAfA,EAgBA,EAhBA,CAgBA,UAhBA,CAgBA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,UAAA,EAFA,CAIA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,0BAAA,EAAA,EAAA,CAAA,0BAAA,CAAA,SAAA,CAAA,CAAA,CACA,UAAA,CAAA,GAAA,CAAA,CAAA,IAAA,CAAA,CAAA,MAAA,EAAA,CAAA,CAAA,QAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CADA,EAEA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAFA,EAGA,IAAA,CAAA,QAAA,EAGA,CANA,CAOA,CA3BA,EA4BA,EA5BA,CA4BA,YA5BA,CA4BA,UAAA,CACA,KAAA,eAAA,EADA,CAEA,KAAA,qBAAA,EACA,CA/BA,EAgCA,EAhCA,CAgCA,QAhCA,CAgCA,UAAA,IAEA,CAAA,IAAA,CAAA,IAFA,CAGA,QAAA,CAAA,KAAA,UAAA,EAHA,CAMA,KAAA,IAAA,CAAA,MAAA,CAAA,QAAA,EACA,MADA,CACA,CADA,CACA,CADA,EAEA,SAFA,CAEA,QAFA,CAEA,iBAAA,CAAA,OAFA,EAGA,IAHA,EANA,CAYA,KAAA,QAAA,CAAA,IAAA,CAZA,CAeA,KAAA,IAAA,CAAA,UAAA,GACA,QADA,CACA,mBADA,EAEA,EAFA,CAEA,OAFA,CAEA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,eAAA,EACA,CAJA,CAfA,CAqBA,KAAA,IAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,IAAA,CAAA,iBAAA,EACA,CAFA,CArBA,CA0BA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CADA,CAEA,IAAA,CAAA,QAAA,EAFA,CAIA,IAAA,CAAA,QAAA,EAEA,CANA,CAQA,CAlEA,EAmEA,IAnEA,CAmEA,MAAA,EAAA,EAnEA,CAoEA,CAEA,CAhZA,C,CCIA,MAAA,CAAA,8BAAA,CAAA,CACA,QADA,CAEA,wCAFA,CAGA,wBAHA,CAAA,CAKA,SAAA,CAAA,CAAA,uBAAA,CAAA,SAAA,CAAA,CACA,aAMA,MAAA,CACA,KADA,iBACA,CAEA,GAAA,CAAA,WAAA,CAAA,uBAAA,CAAA,CACA,OAAA,GADA,CAAA,CAAA,CAGA,EAHA,CAGA,QAHA,CAGA,SAAA,MAAA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAHA,EAIA,EAJA,CAIA,QAJA,CAIA,SAAA,MAAA,CAAA,CAEA,SAAA,CAAA,GAAA,CAAA,MAAA,EAAA,IAAA,CAAA,SAAA,IAAA,QAAA,CAAA,WAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CACA,CAPA,EAQA,EARA,CAQA,UARA,CAQA,SAAA,MAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CARA,EASA,EATA,CASA,UATA,CASA,SAAA,MAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CATA,EAUA,EAVA,CAUA,mBAVA,CAUA,UAAA,CACA,SAAA,CACA,WADA,GAEA,OAFA,CAEA,KAFA,EAGA,IAHA,CAGA,iBAAA,CAAA,SAAA,CAAA,OAAA,EAAA,CAHA,CAIA,CAfA,EAgBA,MAhBA,CAgBA,CAAA,CAAA,YAAA,CAAA,CAAA,MAAA,EAhBA,EAiBA,IAjBA,EAAA,CAoBA,SAAA,CACA,EADA,CACA,aADA,CACA,SAAA,IAAA,CAAA,CACA,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CADA,CAEA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,IAAA,CAAA,UAAA,CACA,WAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CADA,CAEA,SAAA,CAAA,OAAA,EACA,CAHA,CAFA,EAOA,WAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,IAPA,CAQA,SAAA,CAAA,OAAA,EARA,CAUA,CAXA,EAYA,EAZA,CAYA,uBAZA,CAYA,iBAAA,CAAA,WAAA,CAAA,KAAA,EAAA,CAZA,EAaA,EAbA,CAaA,SAbA,CAaA,SAAA,KAAA,CAAA,CACA,WAAA,CAAA,EAAA,CAAA,QAAA,CADA,EAEA,WAAA,CAAA,IAAA,EAFA,CAIA,WAAA,CAAA,QAAA,CAAA,KAAA,CACA,CAlBA,EAmBA,OAnBA,IAoBA,CA3CA,CA6CA,CAzDA,C,CCHA,MAAA,CAAA,gCAAA,CAAA,EAAA,CAAA,UAAA,CACA,aAEA,MAAA,CACA,KAAA,CACA,QAAA,CACA,MAAA,8BADA,CADA,CADA,CAOA,CAVA,C,CCjBA,SAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,MAAA,EAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,oiQADA,C,CCAA,MAAA,CAAA,yCAAA,CAAA,UAAA,CAAA,CAAA,C","sourcesContent":["\ndefine('tpl!taoTaskQueue/component/listing/tpl/element', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n buffer += \"
\\n
\\n
\\n \\n
\\n
\\n
\\n
\";\n if (helper = helpers.taskLabel) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.taskLabel); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"
\\n
\";\n if (helper = helpers.time) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.time); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"
\\n
\\n
\\n \\n
\\n
\\n \\n \\n \\n \\n
\\n
\";\n return buffer;\n });\n});\n\n","\ndefine('css!taoTaskQueue/component/listing/css/element',[],function(){});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoTaskQueue/component/listing/element',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'moment',\n 'ui/component',\n 'ui/hider',\n 'tpl!taoTaskQueue/component/listing/tpl/element',\n 'css!taoTaskQueue/component/listing/css/element'\n], function ($, _, __, moment, component, hider, elementTpl) {\n 'use strict';\n\n var _defaults = {\n };\n\n var _allowedStatus = ['in_progress', 'failed', 'completed'];\n\n var _categoryMap = {\n import : 'import',\n export : 'export',\n delivery_comp : 'delivery',\n transfer : 'connect',\n create : 'magicwand',\n update : 'edit',\n delete : 'bin'\n };\n\n var _statusIcon = {\n in_progress : 'property-advanced',\n completed: 'result-ok',\n failed: 'result-nok',\n };\n\n /**\n * Get the task name to be displayed to the user\n * @param {Object} data - the standard task object\n * @returns {String}\n */\n var getLabelString = function getLabelString(data){\n return data.taskLabel;\n };\n\n /**\n * Get the formatted duration string\n * @param {Number} from - the start time in unix timestamp\n * @param {Number} elapsed - the duration in seconds\n * @returns {Number}\n */\n var getFormattedTime = function getFormattedTime(from, elapsed){\n return moment.unix(from).from(moment.unix(parseInt(from, 10)+parseInt(elapsed, 10)));\n };\n\n /**\n * Get the formatted time string according to the current task data\n * @param data - the standard task object\n * @returns {String}\n */\n var getTimeString = function getTimeString(data){\n switch(data.status){\n case 'created':\n case 'in_progress':\n return __('Started %s', getFormattedTime(data.createdAt, data.createdAtElapsed));\n case 'completed':\n return __('Completed %s', getFormattedTime(data.updatedAt, data.updatedAtElapsed));\n case 'failed':\n return __('Failed %s', getFormattedTime(data.updatedAt, data.updatedAtElapsed));\n default:\n return '';\n }\n };\n\n /**\n * Get the appropriate icon according to the task data\n * @param {Object} data - the standard task object\n * @returns {string}\n */\n var getIcon = function getIcon(data){\n var icon;\n if(!_.isPlainObject(data)){\n throw new Error('invalid data');\n }\n if(data.category && _categoryMap[data.category]){\n icon = _categoryMap[data.category];\n }else if(data.status && _statusIcon[data.status]){\n icon = _statusIcon[data.status];\n }else {\n icon = _statusIcon.in_progress;\n }\n return 'icon-'+icon;\n };\n\n var taskElementApi = {\n\n /**\n * Get the id of the task element\n * @returns {String}\n */\n getId : function getId(){\n if(this.data && this.data.id){\n return this.data.id;\n }\n },\n\n /**\n * Get the status of the task element\n * @returns {String}\n */\n getStatus : function getStatus(){\n if(this.data && this.data.status){\n return this.data.status;\n }\n },\n\n /**\n * Get the data of the task element\n * @returns {Object}\n */\n getData : function getData(){\n return this.data;\n },\n\n /**\n * Update the data and rendering of it\n * @param data\n * @returns {taskElement}\n */\n update : function update(data){\n var $container = this.getElement();\n\n _.assign(this.data || {}, data);\n\n $container.find('.shape > span').removeAttr('class').addClass(getIcon(this.data));\n $container.find('.label').html(getLabelString(this.data));\n $container.find('.time').html(getTimeString(this.data));\n\n this.setStatus(this.data.status);\n //bonus: check if there is any report and display the report button only when needed\n\n hider.toggle($container.find('.action-bottom [data-role=\"download\"]'), this.data.hasFile);\n hider.toggle($container.find('.action-bottom [data-role=\"redirect\"]'), !!this.data.redirectUrl);\n\n this.trigger('update');\n return this;\n },\n\n /**\n * Add transition to highlight the element (useful after an update for instance)\n * @returns {taskElement}\n */\n highlight : function highlight(){\n var $container = this.getElement();\n $container.addClass('highlight');\n _.delay(function(){\n $container.removeClass('highlight');\n }, 500);\n return this;\n },\n\n /**\n * Set the status of the task element\n * @param {String} status\n * @returns {taskElement}\n */\n setStatus : function setStatus(status){\n var self = this;\n if(!status){\n throw new Error('status should not be empty');\n }\n\n if(['created'].indexOf(status) !== -1){\n status = 'in_progress';\n }\n\n if(_allowedStatus.indexOf(status) === -1){\n throw new Error('unknown status '+status);\n }\n if(!this.is(status)){\n _.forEach(_.without(_allowedStatus, status), function(st){\n self.setState(st, false);\n });\n this.setState(status, true);\n }\n return this;\n }\n };\n\n /**\n * Builds a task listing element\n *\n * @param {Object} config - the component config\n * @param {Array} data - the initial task data to be loaded from the server REST api call\n * @returns {taskElement} the component\n *\n * @event remove - Emitted when the element requests to be removed\n * @event download - Emitted when the element requests downloading its associated file\n * @event report - Emitted when a list element requests its related report to be displayed\n * @event update - Emitted when the display update is done\n */\n return function taskElementFactory(config, data) {\n var initConfig = _.defaults(config || {}, _defaults);\n\n /**\n * The component\n * @typedef {ui/component} taskElement\n */\n return component(taskElementApi)\n .setTemplate(elementTpl)\n .on('init', function(){\n this.data = data || {};\n })\n .on('render', function() {\n\n var self = this;\n var $component = this.getElement();\n\n this.update(data);\n\n $component.find('[data-role=\"download\"]').click(function(){\n self.trigger('download');\n });\n $component.find('[data-role=\"remove\"]').click(function(){\n self.trigger('remove');\n });\n $component.find('[data-role=\"report\"]').click(function(){\n self.trigger('report');\n });\n $component.find('[data-role=\"redirect\"]').click(function(){\n self.trigger('redirect');\n });\n\n })\n .init(initConfig);\n };\n\n});\n","\ndefine('tpl!taoTaskQueue/component/listing/tpl/report', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"
\\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"No report available\", options) : helperMissing.call(depth0, \"__\", \"No report available\", options)))\n + \"\\n
\\n
\";\n return buffer;\n });\n});\n\n","\ndefine('css!taoTaskQueue/component/listing/css/report',[],function(){});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoTaskQueue/component/listing/report',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'moment',\n 'ui/component',\n 'ui/hider',\n 'ui/report',\n 'tpl!taoTaskQueue/component/listing/tpl/report',\n 'css!taoTaskQueue/component/listing/css/report'\n], function ($, _, __, moment, component, hider, reportFactory, elementTpl) {\n 'use strict';\n\n var _defaults = {\n };\n\n var reportElementApi = {\n /**\n * Update the task report with the data\n * @param {Object} data - the standard task log data\n * @param {String} data.taskLabel - the task name to be displayed to user\n * @param {Object} data.report - the standard report object\n */\n update : function update(data){\n\n var $component = this.getElement();\n $component.find('.label').html(data.taskLabel);\n\n //set report here\n if(data.report && _.isArray(data.report.children) && data.report.children.length){\n this.setState('noreport', false);\n reportFactory({replace:true}, data.report.children[0]).render($component.find('.detail-body'));\n }else{\n this.setState('noreport', true);\n }\n }\n };\n\n /**\n * Builds a task listing element\n *\n * @param {Object} config - the component config\n * @param {Array} data - the initial task data to be loaded from the server REST api call\n * @returns {taskReport} the component\n *\n * @event close - Emitted when the report needs to be closed\n */\n return function taskReportFactory(config, data) {\n var initConfig = _.defaults(config || {}, _defaults);\n\n /**\n * The component\n * @typedef {ui/component} taskReport\n */\n return component(reportElementApi)\n .setTemplate(elementTpl)\n .on('render', function() {\n\n var self = this;\n var $component = this.getElement();\n\n this.update(data);\n\n $component.find('[data-role=\"close\"]').click(function(){\n self.trigger('close');\n });\n\n })\n .init(initConfig);\n };\n\n});\n","\ndefine('tpl!taoTaskQueue/component/listing/tpl/list', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n buffer += \"
\\n
\\n
\\n
\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"
\\n
\";\n if (helper = helpers.emptyText) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.emptyText); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"
\\n \\n \\n
\\n
\\n
\";\n return buffer;\n });\n});\n\n","\ndefine('tpl!taoTaskQueue/component/listing/tpl/elementWrapper', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"
  • \";\n return buffer;\n });\n});\n\n","\ndefine('css!taoTaskQueue/component/listing/css/list',[],function(){});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoTaskQueue/component/listing/list',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'ui/component',\n 'taoTaskQueue/component/listing/element',\n 'tpl!taoTaskQueue/component/listing/tpl/list',\n 'tpl!taoTaskQueue/component/listing/tpl/elementWrapper',\n 'css!taoTaskQueue/component/listing/css/list'\n], function ($, _, __, component, listElementFactory, listTpl, elementWrapperTpl) {\n 'use strict';\n\n var _defaults = {\n title : 'Task List',\n emptyText : __('The list is currently empty.')\n };\n\n var listApi = {\n /**\n * Remove a list element\n * @param {taoTaskQueue/component/listing/element} listElement\n * @returns {taskList}\n */\n removeElement : function removeElement(listElement){\n listElement.destroy();\n this.getElement().find('ul li[data-id=\"'+listElement.getId()+'\"]').remove();\n return this;\n },\n\n /**\n * Insert a list element\n * @param {taoTaskQueue/component/listing/element} listElement\n * @returns {taskList}\n */\n insertElement : function insertElement(listElement){\n var id = listElement.getId();\n var $li = $(elementWrapperTpl({\n id : id\n }));\n this.getElement().find('ul').prepend($li);\n listElement.render($li);\n return this;\n },\n\n /**\n * Show the detail\n * @param {taoTaskQueue/component/listing/report} detailElement - the detail element to be shown\n * @param {Booleam} [show] - should the detail of an element be immediately shown or not\n * @returns {taskList}\n */\n setDetail : function setDetail(detailElement, show){\n detailElement.render(this.getElement().find('.view-detail'));\n if(show){\n this.setState('detail-view', true);\n }\n return this;\n },\n\n /**\n * Hide the detail panel and display the default list view again\n * @returns {taskList}\n */\n hideDetail : function hideDetail(){\n this.setState('detail-view', false);\n return this;\n },\n\n /**\n * Scroll to the top of the list\n * @returns {taskList}\n */\n scrollToTop : function scrollToTop(){\n this.getElement().find('.task-list').get(0).scrollTo(0, 0);\n return this;\n },\n\n /**\n * Animate the insertion tset emphasis on it\n * @param listElement\n * @returns {taskList}\n */\n animateInsertion : function animateInsertion(listElement){\n var $listElement = listElement.getElement();\n var $container = $listElement.parent();\n $container.addClass('inserting');\n $listElement.addClass('new-element');\n _.delay(function(){\n $container.removeClass('inserting');\n _.delay(function(){\n $listElement.removeClass('new-element');\n }, 400);\n },100);\n return this;\n }\n };\n\n /**\n * Builds a simple task list component\n *\n * @param {Object} config - the component config\n * @returns {taskList} the component\n */\n return function taskListFactory(config) {\n var initConfig = _.defaults(config || {}, _defaults);\n\n /**\n * The component\n * @typedef {ui/component} taskList\n */\n return component(listApi)\n .setTemplate(listTpl)\n .on('render', function(){\n var self = this;\n this.getElement().find('.clear-all').on('click', function(e){\n e.preventDefault();\n self.trigger('clearall');\n });\n })\n .init(initConfig);\n };\n\n});\n\n","\ndefine('tpl!taoTaskQueue/component/manager/tpl/manager', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"
    \\n
    \";\n return buffer;\n });\n});\n\n","\ndefine('css!taoTaskQueue/component/manager/css/manager',[],function(){});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoTaskQueue/component/manager/manager',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'layout/loading-bar',\n 'ui/hider',\n 'ui/component',\n 'ui/badge/badge',\n 'ui/component/alignable',\n 'ui/animable/absorbable/absorbable',\n 'ui/animable/pulsable/pulsable',\n 'taoTaskQueue/component/listing/element',\n 'taoTaskQueue/component/listing/report',\n 'taoTaskQueue/component/listing/list',\n 'tpl!taoTaskQueue/component/manager/tpl/manager',\n 'css!taoTaskQueue/component/manager/css/manager'\n], function ($, _, __, loadingBar, hider, component, badgeFactory, makeAlignable, makeAbsorbable, makePulsable, listElementFactory, reportElementFactory, taskListFactory, managerTpl) {\n 'use strict';\n\n /**\n * Transform the task log summary into a configuration set for the badge\n * @param {Object} tasksStatuses - the task log summary\n * @returns {Object} the new badge data to be displayed following the format {type, loading, value}\n */\n var getBadgeDataFromStatus = function getBadgeDataFromStatus(tasksStatuses){\n var total = 0;\n var data = {loading : false};\n if(tasksStatuses){\n if(tasksStatuses.numberOfTasksInProgress){\n total += parseInt(tasksStatuses.numberOfTasksInProgress, 10);\n data.type = 'info';\n data.loading = (tasksStatuses.numberOfTasksInProgress > 0);\n }\n if(tasksStatuses.numberOfTasksCompleted){\n total += parseInt(tasksStatuses.numberOfTasksCompleted, 10);\n data.type = 'success';\n }\n if(tasksStatuses.numberOfTasksFailed){\n total += parseInt(tasksStatuses.numberOfTasksFailed, 10);\n if(data.type === 'success'){\n data.type = 'warning';//if there are both success and failures, the status should be a warning\n }else{\n data.type = 'error';\n }\n }\n data.value = total;\n return data;\n }\n };\n\n /**\n * Transform the internal list of elements into a configuration set for the badge\n * @param {Object} elements - internal collection of task elements\n * @returns {Object} the new badge data to be displayed following the format {type, loading, value}\n */\n var getBadgeDataFromElements = function getBadgeDataFromElements(elements){\n\n var statusMap = {\n in_progress: 'numberOfTasksInProgress',\n created: 'numberOfTasksInProgress',\n failed: 'numberOfTasksFailed',\n completed: 'numberOfTasksCompleted',\n };\n\n var stats = {\n numberOfTasksFailed : 0,\n numberOfTasksCompleted : 0,\n numberOfTasksInProgress : 0\n };\n\n _.forEach(elements, function(element){\n var status = element.getStatus();\n if(statusMap[status]){\n //it is a know state, so add to the stats array\n stats[statusMap[status]]++;\n }\n });\n\n return getBadgeDataFromStatus(stats);\n };\n\n /**\n * The collection of config used for component alignments\n * the values have been adjusted to make it work well with the list's css\n * @type {Object}\n * @private\n */\n var _alignementConfig = {\n initial : {\n hPos: 'center',\n hOrigin: 'center',\n vPos: 'bottom',\n vOrigin: 'top',\n hOffset: -156\n },\n showDetail : {\n hPos: 'center',\n hOrigin: 'center',\n vPos: 'bottom',\n vOrigin: 'top',\n hOffset: -156-121\n }\n };\n\n var taskQueue = {\n\n /**\n * Get the list of task elements\n * @returns {taskQueueManager} - self for chaining\n */\n getTaskElements : function getTaskElements(){\n return this.taskElements;\n },\n\n /**\n * Show the details associated to a task\n * @param {Object} tasksData - a single task data to view the report form\n * @returns {taskQueueManager} - self for chaining\n */\n showDetail : function showDetail(taskData){\n var $component = this.getElement();\n var list = this.list;\n var reportElement = reportElementFactory({replace:true}, taskData)\n .on('close', function(){\n list.hideDetail();\n list.alignWith($component, _alignementConfig.initial);\n this.destroy();\n });\n list.setDetail(reportElement, true);\n list.alignWith($component, _alignementConfig.showDetail);\n return this;\n },\n\n /**\n * Add a new task\n * @param {Object} tasksData - a single task data to be added to the list\n * @param {Boolean} [animate=false] - tells if the new task addition should be made through a smooth transition effect\n * @returns {taskQueueManager} - self for chaining\n */\n addNewTask : function addNewTask(taskData, animate){\n var self = this;\n var taskId = taskData.id;\n var listElement = listElementFactory({}, taskData)\n .on('remove', function(){\n delete self.taskElements[taskId];\n self.list.removeElement(listElement);\n self.trigger('remove', taskId);\n self.trigger('listchange');\n })\n .on('report', function(){\n self.trigger('report', taskId);\n })\n .on('download', function(){\n self.trigger('download', taskId);\n })\n .on('redirect', function(){\n loadingBar.start();\n\n self.hideList();\n\n self.trigger('redirect', taskId);\n });\n\n\n if(animate){\n if(this.list.is('hidden')){\n this.list.show();\n }\n this.list.scrollToTop();\n }\n this.list.insertElement(listElement);\n this.taskElements[taskId] = listElement;\n this.trigger('listchange');\n\n if(animate){\n this.list.animateInsertion(listElement);\n }\n return this;\n },\n\n /**\n * Update the badge display according to the current status of the tasks in the list\n * @returns {taskQueueManager} - self for chaining\n */\n selfUpdateBadge : function selfUpdateBadge(){\n var badgeData = getBadgeDataFromElements(this.getTaskElements());\n if(!this.badge){\n this.badge = makePulsable(badgeFactory(badgeData)).render(this.getElement());\n }else{\n this.badge.update(badgeData);\n }\n return this;\n },\n\n /**\n * Load the the array of task element data requested form the server REST API\n * @param {Array} tasksData - the task data to be loaded from the server REST API call\n * @returns {taskQueueManager} - self for chaining\n */\n loadData : function loadData(tasksData){\n var self = this;\n var found = [];\n if (tasksData.length) {\n tasksData = tasksData.reverse();\n }\n _.forEach(tasksData, function(entry){\n var id = entry.id;\n if(self.taskElements[id]){\n //update\n self.taskElements[id].update(entry);\n if(self.taskElements[id].getStatus() !== entry.status){\n //highlight status change only\n self.taskElements[id].highlight();\n }\n }else{\n //create\n self.addNewTask(entry);\n }\n found.push(id);\n });\n\n //remove any element from the list that are not found in the new data collection (task has been archived server side)\n _.forEach(_.difference(_.keys(self.taskElements), found), function(id){\n self.list.removeElement(self.taskElements[id]);\n delete self.taskElements[id];\n });\n\n this.trigger('listchange');\n return this;\n },\n\n /**\n * Trigger the pulse animation on the status badge\n * @returns {taskQueueManager} - self for chaining\n */\n pulse : function pulse(){\n if(this.badge){\n this.badge.pulse(3);\n }\n return this;\n },\n\n /**\n * Show the list component\n * @event listshow - Emitted when the list is displayed\n * @returns {taskQueueManager} - self for chaining\n */\n showList : function showList() {\n if (this.list) {\n this.list.show();\n this.trigger('listshow');\n }\n return this;\n },\n\n /**\n * Hide the list component\n * @event listhide - Emitted when the list is hidden\n * @returns {taskQueueManager} - self for chaining\n */\n hideList : function hideList() {\n if (this.list) {\n this.list.hide();\n this.trigger('listhide');\n }\n return this;\n },\n\n /**\n * Remove all finished element (completed or failed) from the list\n * @returns {taskQueueManager}\n */\n removeAllFinished : function removeAllFinished(){\n\n var self = this;\n\n _(this.taskElements).filter(function(element){\n return (element.getStatus() === 'completed' || element.getStatus() === 'failed');\n }).forEach(function(element){\n delete self.taskElements[element.getId()];\n self.list.removeElement(element);\n self.trigger('listchange');\n });\n\n this.trigger('listclearfinished');\n return this;\n },\n\n /**\n * Toggle the visibility of the clear all button according to the element status\n * @returns {taskQueueManager}\n */\n selfUpdateClearButton : function selfUpdateClearButton(){\n var $clearAllBox = this.getElement().find('.clear-box');\n var finishedCount = _(this.taskElements).map(function(element){\n return element.getStatus();\n }).filter(function(status){\n return (status === 'completed' || status === 'failed');\n }).size();\n if(finishedCount > 0){\n //show button\n hider.show($clearAllBox);\n }else{\n hider.hide($clearAllBox);\n }\n return this;\n }\n };\n\n /**\n * Builds the task queue manager\n * @param {Object} config - the component config\n * @param {Array} data - the initial task data to be loaded from the server REST api call\n * @returns {taskQueueManager} the component\n *\n * @event remove - Emitted when a list element is removed\n * @event download - Emitted when a list element requests the file download associated to a completed task\n * @event report - Emitted when a list element requests a task report to be displayed\n * @event redirect - Emitted when a list element requests a redirection to the created resource\n * @event listchange - Emitted when the list element list has been updated\n * @event listclearfinished - Emitted when all the finished element from the list is removed\n */\n return function taskQueueManagerFactory(config, data) {\n\n data = data || {};\n\n /**\n * The component\n * @typedef {ui/component} taskQueueManager\n */\n return makeAbsorbable(component(taskQueue))\n .setTemplate(managerTpl)\n .on('destroy listhide', function(){\n $(document).off('click.task-queue-manager');\n })\n .on('init', function() {\n //initialize the task element collection\n this.taskElements = {};\n\n //create the list\n this.list = makeAlignable(taskListFactory())\n .init({\n title : __('Background tasks'),\n emptyText : __('There is currently no background task'),\n });\n })\n .on('listshow', function(){\n var self = this;\n var $component = this.getElement();\n //close the popup when clicking outside of the component\n $(document).off('click.task-queue-manager').on('click.task-queue-manager', function(e){\n if($component.get(0) !== e.target && !$.contains($component.get(0), e.target)){\n if(!self.list.is('hidden')){\n self.hideList();\n }\n }\n });\n })\n .on('listchange', function(){\n this.selfUpdateBadge();\n this.selfUpdateClearButton();\n })\n .on('render', function() {\n\n var self = this;\n var $trigger = this.getElement();\n\n //position the list\n this.list.render($trigger)\n .moveBy(0, 0)\n .alignWith($trigger, _alignementConfig.initial)\n .hide();//start hidden\n\n //load initial data\n this.loadData(data);\n\n //prevent closing the panel when clicking on it\n this.list.getElement()\n .addClass('overflown-element')\n .on('click', function(e){\n e.stopPropagation();\n });\n\n this.list.on('clearall', function(){\n self.removeAllFinished();\n });\n\n //toggle list visibility\n $trigger.on('click', function(){\n if(self.list.is('hidden')){\n self.showList();\n }else{\n self.hideList();\n }\n });\n\n })\n .init(config || {});\n };\n\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017-2019 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * @author Sam \n */\ndefine('taoTaskQueue/controller/main',[\n 'jquery',\n 'taoTaskQueue/component/manager/manager',\n 'ui/taskQueue/taskQueue'\n],\nfunction ($, taskQueueManagerFactory, taskQueue) {\n 'use strict';\n\n /**\n * This controller initialize all the task queue component globally for tao backoffice use\n * @exports taoTaskQueue/controller/main\n */\n return {\n start() {\n\n const taskManager = taskQueueManagerFactory({\n replace: true\n })\n .on('remove', taskId => taskQueue.archive(taskId) )\n .on('report', taskId => {\n //show report in popup\n taskQueue.get(taskId).then( task => taskManager.showDetail(task) );\n })\n .on('download', taskId => taskQueue.download(taskId) )\n .on('redirect', taskId => taskQueue.redirect(taskId) )\n .on('listclearfinished', () => {\n taskQueue\n .pollAllStop()\n .archive('all')\n .then( () => taskQueue.pollAll() );\n })\n .render($('#taskqueue').parent())\n .hide();//start hidden to prevent blinking effect\n\n //listen to events started by the task queue model\n taskQueue\n .on('taskcreated', data => {\n if (taskManager.list.is('hidden')) {\n taskManager.absorbBurst(data.sourceDom, [0, 300, 600]).then( () => {\n taskManager.addNewTask(data.task);\n taskQueue.pollAll();\n });\n } else {\n taskManager.addNewTask(data.task, true);\n taskQueue.pollAll();\n }\n })\n .on('multitaskstatuschange', () => taskManager.pulse() )\n .on('pollAll', tasks => {\n if (taskManager.is('hidden')) {\n taskManager.show();\n }\n taskManager.loadData(tasks);\n })\n .pollAll(true);//start polling immediately on load\n }\n };\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\ndefine('taoTaskQueue/controller/routes',[],function(){\n 'use strict';\n\n return {\n 'Main': {\n 'actions' : {\n 'index' : 'taoTaskQueue/controller/main'\n }\n }\n };\n});\n","\n(function(c){var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));})\n('div.task-element{position:relative;background:#f3f1ef;padding:10px 20px;width:100%;height:70px;-webkit-transition:background, 2s, ease-out, 0s;-moz-transition:background, 2s, ease-out, 0s;-ms-transition:background, 2s, ease-out, 0s;-o-transition:background, 2s, ease-out, 0s;transition:background, 2s, ease-out, 0s}div.task-element.highlight{background:white;-webkit-transition:background, 0s, ease-out, 0s;-moz-transition:background, 0s, ease-out, 0s;-ms-transition:background, 0s, ease-out, 0s;-o-transition:background, 0s, ease-out, 0s;transition:background, 0s, ease-out, 0s}div.task-element .container-icon{position:absolute}div.task-element .container-icon .shape{display:inline-block;border-radius:50%;width:40px;height:40px;top:2px;position:relative}div.task-element .container-icon .shape [class^=\\\"icon-\\\"],div.task-element .container-icon .shape [class*=\\\" icon-\\\"]{font-size:20px;font-size:2rem;position:relative;top:9px;left:12px;text-shadow:none}div.task-element .container-icon .shape .icon-export,div.task-element .container-icon .shape .icon-import,div.task-element .container-icon .shape .icon-connect{left:10px}div.task-element .container-icon .shape .icon-property-advanced,div.task-element .container-icon .shape .icon-result-ok,div.task-element .container-icon .shape .icon-result-nok{top:10px;left:10px}div.task-element.in_progress .container-icon .shape{background:#0e5d91}div.task-element.in_progress .container-icon .shape [class^=\\\"icon-\\\"],div.task-element.in_progress .container-icon .shape [class*=\\\" icon-\\\"]{color:#e7eff4}div.task-element.in_progress .action-group.action-bottom [data-role=\\\"notify\\\"]{display:none}div.task-element.in_progress .action-group.action-top [data-role=\\\"remove\\\"]{display:none}div.task-element.completed .container-icon .shape{background:#0e914b}div.task-element.completed .container-icon .shape [class^=\\\"icon-\\\"],div.task-element.completed .container-icon .shape [class*=\\\" icon-\\\"]{color:#e7f4ed}div.task-element.completed .action-group.action-bottom [data-role=\\\"download\\\"],div.task-element.completed .action-group.action-bottom [data-role=\\\"report\\\"],div.task-element.completed .action-group.action-bottom [data-role=\\\"redirect\\\"]{display:inline-block}div.task-element.failed .container-icon .shape{background:#ba122b}div.task-element.failed .container-icon .shape [class^=\\\"icon-\\\"],div.task-element.failed .container-icon .shape [class*=\\\" icon-\\\"]{color:#f8e7ea}div.task-element.failed .action-group.action-bottom [data-role=\\\"download\\\"],div.task-element.failed .action-group.action-bottom [data-role=\\\"report\\\"],div.task-element.failed .action-group.action-bottom [data-role=\\\"redirect\\\"]{display:inline-block}div.task-element .container-text{padding-top:0px;margin-left:60px;width:240px}div.task-element .container-text .label{min-height:22px;max-height:38px;overflow:hidden;color:#222}div.task-element .container-text .time{color:#92918f;font-size:12px;font-size:1.2rem}div.task-element .action-group{position:absolute}div.task-element .action-group [class^=\\\"icon-\\\"],div.task-element .action-group [class*=\\\" icon-\\\"]{font-size:16px;font-size:1.6rem;background-color:transparent;width:20px;height:20px;display:inline-block;padding-left:4px;margin-left:5px;cursor:pointer}div.task-element .action-group [class^=\\\"icon-\\\"]:hover,div.task-element .action-group [class*=\\\" icon-\\\"]:hover{opacity:0.6}div.task-element .action-group.action-top{top:6px;right:14px}div.task-element .action-group.action-bottom{bottom:6px;right:12px}div.task-element .action-group.action-bottom [class^=\\\"icon-\\\"],div.task-element .action-group.action-bottom [class*=\\\" icon-\\\"]{display:none}\\n\\n/*# sourceMappingURL=taoTaskQueue/component/listing/css/element.css.map */div.task-detail-element{position:relative;padding:10px 20px;width:600px;min-height:250px;background:#f3f1ef}div.task-detail-element .detail-description .label{margin-right:4px;color:#222;font-weight:bold}div.task-detail-element .detail-description .time{margin-left:4px;color:#92918f;font-size:12px;font-size:1.2rem}div.task-detail-element .detail-body{max-height:500px;overflow-y:auto;padding:10px 0}div.task-detail-element .action-top{position:absolute;top:9px;right:14px}div.task-detail-element .action-top [class^=\\\"icon-\\\"],div.task-detail-element .action-top [class*=\\\" icon-\\\"]{font-size:16px;font-size:1.6rem;color:#222;background-color:transparent;width:20px;height:20px;display:inline-block;padding-left:4px;margin-left:5px;cursor:pointer}div.task-detail-element .action-top [class^=\\\"icon-\\\"]:hover,div.task-detail-element .action-top [class*=\\\" icon-\\\"]:hover{opacity:0.6}div.task-detail-element .no-detail{display:none}div.task-detail-element.noreport .no-detail{display:block;color:#92918f}\\n\\n/*# sourceMappingURL=taoTaskQueue/component/listing/css/report.css.map */div.task-listing{position:relative;cursor:default;padding-top:0px}div.task-listing div.box{position:relative;min-height:76px;min-width:360px;background:#f3f1ef;-webkit-box-shadow:0 3px 6px 0px rgba(0,0,0,0.6);-moz-box-shadow:0 3px 6px 0px rgba(0,0,0,0.6);-ms-box-shadow:0 3px 6px 0px rgba(0,0,0,0.6);-o-box-shadow:0 3px 6px 0px rgba(0,0,0,0.6);box-shadow:0 3px 6px 0px rgba(0,0,0,0.6);border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px}div.task-listing div.box .description{padding:2px 20px;background:#dbd9d7;color:#222;font-weight:bold;border-bottom:solid 1px #ddd;min-height:8px}div.task-listing div.box .arrow{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);border:1px #ddd solid;border-right:none;border-bottom:none;width:16px;height:16px;background:#dbd9d7;color:#222;position:absolute;right:14px;top:-9px}div.task-listing div.box ul.task-list{position:relative;top:0;left:0;right:0;opacity:1;padding:0 !important;border:none;max-height:460px;overflow:auto;background:#c2c1bf;position:relative}div.task-listing div.box ul.task-list li{position:relative;width:100%;max-height:100px;color:#222;background:#c2c1bf}div.task-listing div.box ul.task-list li:not(:last-child){border-bottom:solid 1px #dbd9d7}div.task-listing div.box ul.task-list li.inserting{max-height:0;-webkit-transition:max-height, .5s, ease-out, 0s;-moz-transition:max-height, .5s, ease-out, 0s;-ms-transition:max-height, .5s, ease-out, 0s;-o-transition:max-height, .5s, ease-out, 0s;transition:max-height, .5s, ease-out, 0s}div.task-listing div.box ul.task-list li.inserting .task-element{height:0px}div.task-listing div.box ul.task-list li.inserted{min-height:70px}div.task-listing div.box ul.task-list li .task-element{transform:scaleY(1);-webkit-transition:scaleY, .6s, ease-out, 0s;-moz-transition:scaleY, .6s, ease-out, 0s;-ms-transition:scaleY, .6s, ease-out, 0s;-o-transition:scaleY, .6s, ease-out, 0s;transition:scaleY, .6s, ease-out, 0s}div.task-listing div.box ul.task-list li .task-element.new-element{transform-origin:20% 0;transform:scaleY(0)}div.task-listing div.box .clear-box{text-align:center;border-top:solid 1px #ddd;background:#eceae8;padding:2px 0}div.task-listing div.box .clear-box .clear-all{text-decoration:none;color:#3e7da7}div.task-listing div.box .clear-box .clear-all:hover{text-decoration:underline;color:#0e5d91}div.task-listing div.box .empty-placeholder{width:100%;position:absolute;top:25px;padding:12px 20px;font-style:italic;color:#222}div.task-listing div.box .view-detail{display:none}div.task-listing.detail-view .box .task-list,div.task-listing.detail-view .box .clear-box{display:none}div.task-listing.detail-view .box .view-detail{display:block;position:relative}\\n\\n/*# sourceMappingURL=taoTaskQueue/component/listing/css/list.css.map */.task-manager-container{cursor:pointer;position:relative;width:40px;height:64px;background-color:transparent;padding:22px 8px 0px}.task-manager-container:hover{-webkit-transition:background-color 0.2s ease;-moz-transition:background-color 0.2s ease;-ms-transition:background-color 0.2s ease;-o-transition:background-color 0.2s ease;transition:background-color 0.2s ease;background-color:rgba(14,93,145,0.5);text-decoration:none}.dark-bar nav .settings-menu:hover ~ .persistent-menu .task-listing .box{box-shadow:none;border-color:#eee}.dark-bar nav .settings-menu:hover ~ .persistent-menu .task-listing .box .arrow{display:none}\\n\\n/*# sourceMappingURL=taoTaskQueue/component/manager/css/manager.css.map */');\n","\ndefine(\"taoTaskQueue/loader/taoTaskQueue.bundle\", function(){});\n"]}