{"version":3,"file":"client.a2de7cc9c8c970683c56.build-Z2f0fzA.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;;;;;;ACZA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACjOA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAEA;;;;;;;;;;;;;;;AClBA;AAAA;AAIA;AAAA;AAAA;AAKA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AA1BA;AACA;AA6BA;;;;;;;;;;ACnCA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAkCA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AA1HA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAiGA;;;;;;ACtIA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;ACzCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAKA;;AAEA;AACA;AACA;AACA;AAIA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAXA;AAaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAnBA;AAAA;AAAA;AAqBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAhBA;AAAA;AAAA;AAkBA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AAIA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AAEA;AACA;;AAoBA;AACA;;AC/gBA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AC9CA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;;;;ACnPA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;ACzbA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAAA;;ACrFA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;ACjEA;AA4BA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAKA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AC5zBA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACXA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;ACdA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;;;;;AChLA;AAiBA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;;;;ACxHA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;;;;;;AC5VA;AA0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;ACzNA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACnIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;;AC3MA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;AC/CA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;;;;AClDA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;AChBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAWA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACvoBA;AA0CA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;;ACtRA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;;ACxEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACXA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;AChBA;AACA;AAAA;AADA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;AClJA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;;ACpKA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;AC/EA;AASA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;ACzDA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACvBA;AAMA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;ACrBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;;;;;AC3EA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;;;;;ACtGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACjNA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;ACrIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACjNA;AAaA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;AClHA;AAEA;AAYA;AAaA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;;ACvPA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACnBA;AAMA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AC3BA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;;;;ACrGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;;;;AC9MA;AASA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AC7FA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;;;;;ACzHA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;;AChIA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzBA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;;;;;AC7BA;AAYA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;ACzGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACnHA;AAaA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;;;;;;;;ACzEA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;ACzBA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;;;;;ACvIA;AAOA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;ACtGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACtNA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;;;;ACtEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpNA;AAqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AC7KA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACjCA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;ACfA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;AC/HA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;;;ACzDA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;;;;;AC5NA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;;;;;ACrGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACpEA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;;ACxDA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACXA;AACA;AAIA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;;;;;AC7BA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACrKA;AAkBA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AAGA;AACA;AACA;AACA;;ACxnBA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACpDA;AAOA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AC9BA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;;;;;;AChEA;AASA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AC7CA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACvDA;AAOA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;;AC1CA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;;;;;AC5BA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAOA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;;;;;;AC7CA;AAMA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;AC9JA;AAAA;AAGA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAEA;AAEA;AACA;AA1CA;AACA;AACA;AA2CA;;;;;ACjDA;AAUA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;;ACtEA;AACA;AACA;AACA;AACA;;;;ACJA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;AC3VA;AAQA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AC/BA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;;;;;AC1DA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;;ACtCA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;ACjHA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;;AC1EA;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;;;;;;AChNA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAIA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;;AAGA;AACA;AACA;AAEA;AAGA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAIA;AAIA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AAAA;AAGA;AACA;AAEA;AAAA;AAGA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AAEA;AAKA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAEA;AACA;AAGA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;;ACtYA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;;;;;AC1BA;AAKA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;ACrBA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;ACXA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;;;;;AChBA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;;AC1EA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;ACnGA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;;;AC5BA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;;ACRA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;;ACRA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAGA;;ACbA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAGA;;ACnBA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AAGA;;AC3BA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAGA;;ACVA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAGA;AAEA;AAGA;;ACdA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;ACNA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;;ACbA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;;ACjBA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AAGA;;ACbA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;ACjCA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAgBA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;ACjCA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;ACxBA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;ACvBA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;ACzBA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;AClCA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;ACzBA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AAAA;AAAA;AACA;AAAA;AAuFA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAlGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAkBA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;AC3JA;AACA;AAEA;AACA;AAAA;AAAA;AACA;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;ACnGA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAGA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AAIA;AAEA;AACA;AAKA;AAEA;AACA;AAMA;AAEA;AACA;AAOA;AAEA;AACA;AAQA;AAEA;AACA;AASA;AAEA;AACA;AAUA;AAEA;AACA;AAWA;AAEA;AACA;AAYA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAIA;;;;;ACpJA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAOA;AAAA;AAMA;AAAA;AAOA;AAEA;;;;;;;;;;;;AC/MA;AACA;AACA;AAEA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AA9EA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgFA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAOA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAjBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAcA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAmDA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAuFA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/NA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAEA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4BA;AACA;AAEA;AAIA;AAIA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAmEA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;AC3RA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAcA;AAAA;AAAA;AACA;AACA;AAAA;AAgEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAxFA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAeA;;;;;;ACpGA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAMA;AAEA;;;;;;;;;;;;;;;ACpFA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAnBA;AAAA;AAAA;AAAA;AAAA;AAsBA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AApJA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4IA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;AC/MA;AACA;AACA;AACA;;;;ACHA;AACA;AAEA;AAOA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAYA;AAAA;AAOA;AAEA;;;;;;;;ACrEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAEA;AACA;AAAA;AAUA;AAAA;AAAA;AACA;AAAA;AAoBA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AA9FA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAUA;AAAA;AAAA;AAnJA;AAEA;AACA;AACA;AACA;AACA;AAgJA;;;;;;;;;;;;;;AC3JA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAjDA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmDA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAlFA;AAEA;AACA;AAkFA;;;;;;;;;;AC1FA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAMA;AAAA;AAAA;AAAA;AAIA;AAAA;AAMA;AAAA;AAMA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAQA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AAAA;AAAA;AAMA;AAEA;;;;;;;;;;;;ACzHA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAIA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;AAGA;AACA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;ACpEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAeA;AAAA;AAAA;AAGA;;;;;;;;;;;;AC7BA;AAEA;AAEA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA6BA;AAEA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAMA;AACA;AAGA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AAGA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAUA;AAlIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6GA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAKA;AAAA;AAwBA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;;;;;;;;;;;;AC/LA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;AC1BA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AAAA;AA8BA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AA/EA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AA6CA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AAKA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;ACrHA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAIA;AAAA;AAAA;AAhHA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmEA;;;;;ACvHA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AAAA;AACA;AAUA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AApEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AAAA;AAOA;AAAA;AASA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAUA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAQA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AAEA;;;;;;;;;;;;ACnKA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AA0BA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAqDA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAMA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;ACxHA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAMA;AAAA;AAAA;AAxEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgEA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACZA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAMA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAIA;AAGA;AAEA;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AAKA;AAEA;AACA;AAAA;AAGA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AAIA;AAEA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAKA;AAEA;AACA;AAKA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;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A;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAKA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAQA;AAAA;AAaA;AAEA;;;;;;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAeA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAlPA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AA2OA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AASA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AA9DA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4DA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AAIA;AAAA;AAAA;AAOA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAGA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACtGA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAQA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AAAA;AAKA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAzQA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwQA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;ACxUA;AACA;AACA;AAEA;AAWA;AATA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAOA;AAAA;AAWA;AAAA;AAUA;AAEA;;;;;;;;;;;;;;;ACxNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAmCA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAaA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAKA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;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;;;;;;;;AC5MA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAeA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAtBA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AAAA;AAAA;;;AClCA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AChEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAIA;;;;;;;;;;ACxCA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAUA;AACA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AAEA;AAAA;AAGA;AAvCA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAbA;AAEA;AACA;AAgDA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AASA;AAEA;AACA;AAAA;AAIA;AAEA;;ACxFA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrDA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAGA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAIA;AAGA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAYA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;AC1IA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AASA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAIA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAMA;AACA;AAAA;AAEA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAWA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAWA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;;ACrJA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AAGA;AAEA;AACA;AAEA;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AArBA;AAAA;AAAA;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAcA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/KA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;;;;;;;;;;;;ACxEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AA/FA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA8FA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAJA;AAKA;AAAA;AAAA;AACA;AAAA;AAEA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;;AC9JA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AASA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAIA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAGA;AAKA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAGA;AAKA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAtPA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAqPA;AACA;AAAA;AAWA;AAAA;AAQA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvTA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrBA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACzGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAjBA;AAoBA;;;ACrBA;AAEA;AACA;AAEA;AAWA;AACA;AAGA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;;;;;;;;;ACvOA;AACA;AACA;AAEA;AAEA;AAUA;AAGA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AA9IA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AA+IA;;;;;;;;;;;;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAiEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAxMA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AA8IA;AACA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AASA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAUA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;AChYA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAkBA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AA1OA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA+NA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAaA;AAEA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAKA;AAAA;AAOA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;ACheA;AAEA;AAAA;AACA;AAAA;AAEA;AAGA;;;;;;;;;ACRA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAyBA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAsCA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AA1JA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAsEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAOA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAMA;AAAA;AAMA;AAAA;AAMA;AAAA;AAKA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAOA;AAGA;AAAA;AAQA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAyCA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAxHA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAsFA;AACA;AACA;AAEA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAGA;AAAA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;AClTA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAEA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;ACpFA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAOA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AA5MA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4MA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAkCA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AAAA;AAOA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AAOA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAIA;AAAA;AAKA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAKA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACvVA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAIA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAIA;AAEA;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAcA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAIA;AAzGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkGA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAUA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChRA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAcA;AAAA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAWA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAcA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAGA;AArYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgVA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACxhBA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAUA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAzGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAsGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AAMA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAOA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAOA;AAAA;AAMA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC1OA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AAAA;AACA;AAaA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4NA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAIA;AACA;AAIA;AACA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAWA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5ZA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AAGA;AAEA;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AAPA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAQA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3JA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;;;ACxBA;AACA;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAwCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AA9QA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6OA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAKA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;;AC1XA;AAAA;AAAA;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AA7CA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyCA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AASA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAIA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAOA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAkBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA7HA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AA+GA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAKA;AACA;AAAA;AAGA;AACA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAKA;AACA;AAAA;AAGA;AACA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAvTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA0RA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;AAIA;AAAA;AAIA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAKA;AACA;AAAA;AAGA;AACA;AAGA;AAAA;AAGA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AAEA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;AC9bA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAnBA;AAAA;AAAA;;AAqBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAwCA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AASA;AALA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AApTA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmRA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAKA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAIA;AAMA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAQA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACppBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AASA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAhDA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgDA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEA;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AASA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAzCA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwCA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAAA;AAMA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACjHA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAtPA;AAEA;AACA;AACA;AAEA;AACA;AACA;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CA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAGA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAMA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAIA;AA3ZA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkYA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AA6BA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AApLA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AA8JA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAOA;AAAA;AAIA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxXA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AASA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAsBA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAMA;AACA;AAIA;AACA;AACA;AACA;AAMA;AACA;AAIA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AAGA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AA1BA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AA5QA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6PA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAMA;AAOA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAKA;AAAA;AAAA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AAGA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;AC5gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAUA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAKA;AAAA;AAMA;AAAA;AAAA;AAOA;AAtFA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkFA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AAWA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAUA;AAAA;AACA;AAAA;AAeA;AAAA;AAMA;AAAA;AAOA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAQA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AA1BA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyBA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;;;ACHA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAOA;AAEA;;AC9EA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;AC7CA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAOA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AApIA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoIA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAIA;AAAA;AAAA;AAIA;;;;;;;;;;;;;;ACvKA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAeA;AAAA;AAAA;AACA;AAAA;AAeA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAJA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAKA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAIA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA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A;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAgEA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AA7ZA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkWA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAKA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AAIA;AAOA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAOA;AAAA;AAIA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAEA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/yBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAwBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AAGA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAxIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwHA;AAEA;AAEA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AASA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACvQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAWA;AAAA;AAAA;AACA;AAuDA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AAvXA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAsUA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;;AAE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;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAMA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AA3WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoWA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAQA;AAAA;AAAA;AAKA;AAAA;AAGA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAnfA;AAGA;AACA;AAkfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9jBA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAnFA;AAAA;AAAA;AAAA;AAAA;AAsFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;ACjIA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAGA;AACA;;;;;;;;;;;;;;;ACzGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAUA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAPA;AAAA;AASA;AAAA;AAAA;AACA;AAAA;AACA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AA1IA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAuIA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAKA;AAAA;AAGA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvQA;AACA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;;;;;;;;;;;;;AClBA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AAKA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AAQA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AChJA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AA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A;AACA;AACA;AAtLA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAGA;AAIA;AAAA;AAAA;AAEA;AAAA;AAIA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AAGA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAKA;AAAA;AAAA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAKA;AAAA;AAAA;AAEA;AACA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AClZA;AACA;AAEA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AA7CA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6CA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;ACvGA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAEA;;;;;;;;;;;;;ACpEA;AACA;AACA;AAEA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AA9EA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6EA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AACA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACxJA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAmBA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAEA;AApSA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwRA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAEA;AACA;AAEA;AAGA;AAAA;AACA;AAAA;AAGA;AACA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AA5bA;AAGA;AACA;AA4bA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACldA;AACA;AACA;AACA;AAEA;AAUA;AAEA;AACA;AACA;AACA;AAAA;AAUA;AAAA;AAAA;AACA;AAyBA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AA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ACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAOA;AAAA;AAOA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AAIA;AAEA;AACA;AAEA;AAIA;AACA;AAAA;AACA;AAAA;AAOA;AAAA;AACA;AAMA;AAAA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAEA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAGA;AAGA;AAAA;AACA;AAAA;AAAA;AAQA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAMA;AAEA;;;;;;;;;AC9aA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAnBA;AAAA;AAAA;AAqBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAdA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAeA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAQA;AAEA;AACA;AACA;AAEA;;;;;;;ACxNA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAEA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAKA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AASA;AAAA;AAIA;AAAA;AAOA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAMA;AAEA;AACA;AACA;AACA;AAEA;;;;;;ACrNA;AAEA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA/CA;AAAA;AAAA;AAiDA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA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AACA;AAMA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAMA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAGA;AAEA;AAAA;AACA;AAAA;AAAA;AAMA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AAEA;;;;;;;;ACvZA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAKA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AAEA;;ACpFA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AAIA;AAAA;AAKA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAMA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAMA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;ACtGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAoBA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AACA;AACA;AAAA;AACA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAIA;AA5UA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAiUA;;;;;;;;;;AC/VA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AA7GA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AA6GA;;;;;;;;;;ACvHA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxDA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAwDA;;;;;;;;;;AClEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxDA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAwDA;;;;AClEA;AACA;AACA;AACA;AACA;;;ACJA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAMA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;;;AC7EA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAMA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AACA;AAgBA;AACA;AACA;AACA;AAEA;AAEA;AAMA;AAJA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AALA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AALA;AAAA;AAAA;AAMA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AALA;AAAA;AAAA;AAMA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AALA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAxBA;AAAA;AAAA;AA0BA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAOA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAEA;AAAA;AAGA;AAEA;AACA;AAGA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAGA;AAQA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAOA;AAEA;;;;;AC9WA;AACA;AAMA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AAEA;;;;;AC7EA;AACA;AAcA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;;;;;;;;;;;;;;;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAEA;AACA;AACA;AACA;A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AACA;AAEA;AACA;AAOA;AAOA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAgEA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAiCA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAEA;AAAA;AACA;AAGA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAQA;AAJA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAj2BA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAuFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAyEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA2kBA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;A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A;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvqDA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AA4EA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAEA;AAAA;AACA;AAGA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAIA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAjsBA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4nBA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AASA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAKA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAGA;AAKA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAKA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAMA;AAIA;AAAA;AAIA;AACA;AACA;AAAA;AAEA;AAAA;AAKA;AACA;AAAA;AAAA;AAIA;AAKA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAKA;AACA;AAAA;AAIA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAKA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAaA;AACA;AACA;AAQA;AACA;AACA;AASA;AACA;AACA;AAMA;AAAA;AAUA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AAKA;AACA;AACA;AAQA;AAAA;AAYA;AACA;AAAA;AAIA;AAAA;AAOA;AACA;AAAA;AAAA;AAEA;AAKA;AAAA;AAIA;AAEA;AAIA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAIA;AAGA;AAAA;AAOA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAQA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAMA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAIA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAh2CA;AAAA;AAEA;AACA;AACA;AA+1CA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC/8CA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA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AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAMA;AAIA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AA7IA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAMA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAuFA;;;;;;ACjKA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAMA;AAEA;AAAA;AAAA;AACA;AAEA;;ACrIA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAiFA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAIA;AAxOA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAYA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAgKA;;;;;;;;;;;ACxPA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;AClEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAMA;AAEA;;;;;;;;ACnEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AArDA;AAAA;;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAKA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAGA;AAIA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACvPA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAcA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAOA;AAJA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA+MA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChiBA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAWA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AA3LA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAuLA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAKA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpYA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAkBA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAGA;AACA;AAAA;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AA5dA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4XA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAmEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAMA;AAAA;AAGA;AAGA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAOA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC12BA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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CA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AA8DA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAUA;AACA;AACA;AACA;AACA;AAAA;AAhBA;AAAA;AAkBA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAxSA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiPA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAWA;AAAA;AAEA;AAAA;AAYA;AAAA;AAEA;AAAA;AACA;AAAA;AAOA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACzfA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAiBA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AASA;AACA;AAIA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAQA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AA7RA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAuGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAsKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AAAA;AApEA;AACA;;AAEA;AAAA;AAAA;AAkEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAGA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AASA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAIA;AAMA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;ACvsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAqDA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAGA;AAMA;AACA;AAGA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AArYA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAuVA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/hBA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAKA;AAAA;AAEA;AAAA;AAIA;AAAA;AAAA;AAAA;AAQA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAoBA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAIA;AAAA;AAEA;AACA;AAAA;AAMA;AAAA;AAGA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AASA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAUA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAqCA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AAAA;AAIA;AAAA;AAMA;AACA;AAAA;AAGA;AAGA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAUA;AAAA;AAiGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAKA;AApmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAicA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AAAA;AA0CA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAKA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAKA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAOA;AAIA;AAGA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACz4BA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAsGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAGA;AACA;AAEA;AAIA;AAAA;AACA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AA1aA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA0UA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAYA;AAAA;AAIA;AACA;AACA;AACA;AAIA;AAMA;AAAA;AAIA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAOA;AAEA;AAAA;AAAA;AACA;AACA;AAMA;AAIA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AASA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAMA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;ACxwBA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AA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;AAAA;AAAA;AACA;AAAA;AAKA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAKA;AAAA;AACA;AAAA;AAKA;AAEA;;;;;;;AChWA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AAMA;;AAEA;AACA;AAAA;AACA;AAOA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAYA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAKA;AAKA;AACA;AACA;AAKA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AAEA;AAAA;AAQA;AAEA;;ACv6CA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAKA;AAEA;;ACxBA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAIA;AAEA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAeA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAKA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAKA;AAAA;AAKA;AAAA;AAMA;AAEA;AAAA;AAGA;AAGA;AAEA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAEA;AAAA;AAGA;AAQA;AAGA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAKA;AACA;AAAA;AACA;AAAA;AAEA;AAMA;AAIA;AAAA;AAIA;AAAA;AAOA;AAEA;AAAA;AAGA;AAGA;AACA;AAAA;AACA;AAAA;AAEA;AAMA;AAMA;AAAA;AAOA;AAEA;AAAA;AAGA;AAQA;AAGA;AAAA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAEA;;;;;;;;;AC/XA;AACA;AACA;AACA;AACA;AACA;AACA;AAgBA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AAKA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AAKA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAEA;;;;;;AC/fA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAQA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AASA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAEA;AAQA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAEA;AAEA;AAGA;AAAA;AAEA;AAGA;AAAA;AAMA;AAEA;AAAA;AAEA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAOA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAYA;AAEA;;AC1jBA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AAAA;AAAA;AACA;AAAA;AASA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAOA;AAEA;;;;;;;;;;;;ACzIA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAqBA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAlMA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAuIA;AACA;AAAA;AAAA;AAAA;AA8CA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAEA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAKA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAQA;AACA;AAMA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACneA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAwCA;AAEA;AAWA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAGA;AAAA;AAGA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAGA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAQA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AArtBA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAqrBA;AAEA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACv2BA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAEA;;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAMA;AAEA;;;;;;;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AApBA;AAAA;AAAA;;AAsBA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAMA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;;AAEA;AACA;AACA;AAKA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAOA;AAEA;AAAA;AACA;AAEA;AAGA;;AC7uBA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AApBA;AAAA;AAAA;AAsBA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAMA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAIA;AAEA;AACA;;AAEA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAMA;AAEA;AAAA;AACA;AAEA;AAGA;;;;;;;;;;;;;;;;;;AChnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAPA;AAAA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAOA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAJA;AAAA;AAMA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;AC9YA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAMA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;;;;;;AC7VA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAAA;AAKA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAKA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAKA;AACA;AAKA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAsBA;AAAA;AAOA;AAAA;AAIA;AAEA;;;;;;;;;;AC/aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AApBA;AAAA;AAAA;;AAsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AApCA;AAAA;AAAA;AAsCA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAMA;AAEA;;;;;ACniBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAYA;AAEA;;;;;;;;;AC7OA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;ACtFA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAcA;AAOA;AAAA;AAAA;AAAA;AAKA;AAKA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;ACtGA;AACA;AACA;AAEA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA4FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AA3IA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAKA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAqDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAOA;AAAA;AAEA;AAAA;AACA;AAAA;AAKA;AACA;AAIA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAKA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACrRA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA0BA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAGA;AAAA;AAIA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AA/GA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA2FA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAOA;AAAA;AAEA;AAAA;AACA;AAAA;AAOA;AACA;AAIA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAKA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;AC5PA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAGA;AAKA;AAEA;AACA;AACA;AAGA;AAAA;AAGA;AAYA;AAEA;AACA;AACA;AAGA;AAAA;AAGA;AAgBA;AACA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;ACxHA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAsBA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AA/GA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAIA;AACA;AAAA;AAMA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AASA;AAAA;AAIA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAwBA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAQA;AAAA;AAGA;AACA;AACA;AACA;AA1RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AAAA;AAAA;AAAA;AAgPA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAcA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA2FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjLA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAE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A;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiDA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7HA;AAMA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAyCA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAiBA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAC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A;AACA;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAEA;AAIA;AAEA;;AC1GA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAGA;AAKA;AAEA;;;;AC1EA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAOA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACjJA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAKA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AAnFA;AAEA;AACA;AACA;AAkFA;;ACxFA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;ACjDA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAeA;AAAA;AAAA;AAIA;;;;;;;;;;AC7BA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAjDA;AAAA;AAEA;AACA;AACA;AACA;AAgDA;;;;ACzDA;AACA;AACA;AACA;AAEA;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAKA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAKA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAKA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AA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A;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AA0BA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAIA;AAAA;AAAA;AAMA;AAAA;AAUA;AAAA;AAUA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAMA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAQA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAIA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAKA;AAtWA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkVA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAYA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAwCA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAjLA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiJA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AASA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACtSA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAnBA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmBA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAcA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAxBA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkBA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACnEA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAaA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAtBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgBA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAIA;;;;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAwBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AApGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmFA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxNA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAIA;;;;;;;;;ACzCA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAIA;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AA5EA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA2EA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC7KA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AAKA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAKA;AAAA;AAAA;AA5DA;AAGA;AACA;AACA;AA2DA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;AC/EA;AACA;AACA;AAEA;AACA;AACA;AAaA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAeA;AAAA;AAEA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAKA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA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;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAvKA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoKA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAGA;AACA;AAAA;AAAA;AAMA;AAGA;AAAA;AASA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAMA;AAAA;AAAA;AAAA;AAOA;AAAA;AAEA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AA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AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AA1NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoNA;AAAA;AACA;AACA;AAEA;AACA;AAUA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAWA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAWA;AACA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5lBA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAqCA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA7GA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA+EA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAKA;AACA;AACA;AAAA;AAMA;AAAA;AAMA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAIA;AAAA;AAMA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;ACvOA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC9EA;AACA;AACA;AAEA;AAEA;AAMA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAUA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAGA;AAGA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAzLA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAsLA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAIA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACjWA;AACA;AACA;AACA;AAEA;AAOA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAIA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAGA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC3OA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAlGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA0FA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AASA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAOA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAA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CA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AA0BA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AA0CA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAKA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AAMA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AA+IA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;AAIA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAruBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAudA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AA4DA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AACA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAQA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAAA;AAKA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AAAA;AAIA;AAAA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAIA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvwCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AAtGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmGA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAIA;AACA;AACA;AAAA;AAKA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAWA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;A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GA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAnDA;AAAA;AAAA;AAAA;AAAA;AAsDA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAKA;AACA;AAKA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC/GA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AA6CA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;A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CA;AACA;AACA;AACA;;;;;;;;;AC1xBA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAOA;AAOA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAmCA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAEA;AAKA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAMA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAhlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAojBA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAGA;AAAA;AACA;AAAA;AAIA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACzzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AAGA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAMA;AACA;AACA;AAAA;AAKA;AA1FA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAwFA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5HA;AACA;AACA;AACA;AAEA;AAMA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAUA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AA/EA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6EA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AClKA;AACA;AACA;AAEA;AAEA;AAEA;AAUA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AA4CA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAMA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AA6FA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAA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;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAGA;AAKA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAGA;AAKA;AAAA;AAIA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACjWA;AACA;AACA;AAEA;AACA;AAEA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAiBA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AACA;AAAA;AAKA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AA3QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgQA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpaA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAQA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAkBA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAMA;AAAA;AAOA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AArbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyaA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AASA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAaA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC/kBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAWA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAmBA;AACA;;AAEA;;AAUA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAQA;AACA;AAAA;AAmBA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;A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;AACA;AACA;AACA;AAEA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAMA;AAEA;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAkBA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAOA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC9/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAmBA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAYA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkBA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAqHA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AAAA;AAOA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;AC7QA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAaA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmFA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC3MA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAeA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAUA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAQA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAEA;AACA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AAKA;AACA;AACA;AACA;AAAA;AAAA;AAxHA;AAGA;AACA;AAuHA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAaA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAsBA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAjaA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAmZA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAIA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAIA;AAEA;AAGA;AACA;AAAA;AAMA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAaA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;ACvpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA+DA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AA5NA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAqKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAWA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAcA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAKA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAMA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAzTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAkTA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAMA;AAAA;AASA;AAAA;AAAA;AAOA;AAAA;AAEA;AAAA;AAEA;AAAA;AAQA;AAAA;AAOA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AA9aA;AAEA;AACA;AA8aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACleA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AA3DA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA2DA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AAAA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A;AAEA;AAEA;AAWA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAuBA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAIA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAvSA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAwRA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1aA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAGA;AAEA;AAGA;AA1GA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAKA;AACA;AAAA;AAAA;AAIA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAQA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvOA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AASA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AA7CA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4CA;AACA;AAEA;AAAA;AAGA;AAEA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAUA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC/GA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;;;;;;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;;;AC7BA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAIA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAIA;AAKA;AAIA;AAAA;AAMA;AA7RA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyRA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AAEA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAWA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAOA;AAEA;AACA;AAMA;AAAA;AACA;AAAA;AAYA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAOA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtjBA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAIA;AAIA;AAGA;AAAA;AAMA;AA5MA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyMA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAMA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAOA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAOA;AAEA;AACA;AAMA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AAOA;AAAA;AAWA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACxeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAkBA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAzJA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAA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A;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAqBA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAKA;AA9CA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoCA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AAAA;AAAA;AAhGA;AAmBA;AACA;AA+EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAaA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAzGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvLA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAeA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAlMA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA0LA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAIA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAKA;AArEA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AEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAWA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAAA;AAMA;AA1LA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAuLA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;AC9NA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAGA;AAAA;AAEA;AAAA;AAIA;AAEA;;;;;;;;;;ACxDA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AALA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACnFA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAIA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AArSA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA6HA;AACA;AACA;AACA;AAMA;AACA;AAAA;AAEA;AAEA;AAEA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAaA;AAAA;AAAA;AAAA;AAoFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAEA;AAAA;AAOA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AASA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;ACxaA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AAAA;AAAA;AACA;AAAA;AAUA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AA5BA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAIA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAOA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAIA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACreA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAKA;AAKA;;;;;;;;;;;;;;;;;;;;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAFA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAWA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA+BA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAHA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAMA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AASA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAGA;AACA;AAGA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAKA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAFA;AAIA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAOA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAQA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAQA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAMA;AAAA;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AAIA;AAGA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAIA;AAvvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAguCA;AAOA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACj5CA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAkEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAUA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAOA;AAAA;AACA;AAAA;AAYA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAIA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAMA;AACA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAKA;AAAA;AAUA;AAGA;AACA;AA3fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAgcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAkBA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAkBA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAKA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAMA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAOA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvvBA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAqBA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAIA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAQA;AACA;AAIA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAQA;AACA;AAjKA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAmJA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAKA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAaA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxSA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AASA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAMA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAOA;AAOA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAaA;AAAA;AAGA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAMA;AArcA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6ZA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAvdA;AAGA;AACA;AAsdA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACxfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAkCA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAUA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAAA;AAGA;;;;;;;;;;;;;;;AC5QA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAcA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAsBA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAIA;AAAA;AAWA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAMA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AASA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAQA;AAAA;AACA;AAAA;AAKA;AACA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAYA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAqBA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AAMA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAGA;AACA;AAMA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAKA;AA97BA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA+6BA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAUA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAEA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAaA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAYA;AACA;AAAA;AAIA;AACA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAOA;AAeA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAIA;AACA;AAAA;AAUA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AAAA;AAMA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;AC75CA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAIA;AAAA;AAIA;AAEA;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAOA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAqBA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAkBA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAiDA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAWA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAKA;AACA;AAKA;AACA;AAKA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AA/fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA8GA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AA4KA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAiKA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAYA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AACA;AAAA;AAcA;AAAA;AAKA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACnuBA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAxCA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwCA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAGA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AAEA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAqBA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAaA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAMA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAtcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAkKA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AA+QA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAGA;AAAA;AAIA;AAAA;AAIA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAUA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAhJA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4IA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AASA;AAAA;A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A;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAKA;AACA;AAEA;AAKA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAGA;AAEA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAKA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAQA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAOA;AAAA;AAEA;AACA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAOA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AAtmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA+lBA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvuBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AASA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AASA;AAAA;AAGA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AA7LA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4LA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAUA;AAAA;AAAA;AAKA;AAAA;AAGA;AAAA;AAMA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpSA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAYA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAKA;AACA;AAEA;AAKA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAGA;AACA;AAAA;AAIA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AA9dA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA0dA;AACA;AAEA;AAAA;AAGA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvkBA;AACA;AAEA;AACA;AAEA;AAOA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AATA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA+BA;AACA;AAAA;AA6EA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;A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;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAgBA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAOA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAkBA;AAAA;AAAA;AAKA;AAeA;AAAA;AAAA;AAKA;AAeA;AAAA;AAAA;AAOA;AAMA;AAIA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlhBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA8gBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAYA;AAAA;AAAA;AAEA;AAAA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACvoBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAwIA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AANA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAGA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAMA;AAAA;AAGA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AASA;AAzeA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA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A;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiHA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAIA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClTA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1CA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwCA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AASA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAWA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AAAA;AA2BA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AASA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAQA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAKA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAKA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAYA;AAEA;;;;;;;;;;;;AC9cA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAYA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAsBA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAxIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAKA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAEA;AAIA;AAAA;AACA;AAAA;AAIA;AAAA;AAkBA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC9bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAWA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAoCA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAEA;AAAA;AAUA;AAzHA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAgDA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAuCA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrLA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAeA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvFA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiFA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;AC/LA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAuBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AAKA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAWA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAeA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAQA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAvRA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkHA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAiJA;AACA;AAEA;AAAA;AAIA;AAAA;AAKA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5VA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAEA;AACA;AAIA;AACA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAEA;AAAA;AAIA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAKA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAKA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAIA;AAAA;AAKA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9XA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAOA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAIA;AAGA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAUA;AAAA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAYA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAOA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AA5GA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAKA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAEA;AAAA;AAKA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrPA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAaA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AA5MA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA2IA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AA0DA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAoCA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAzLA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA4JA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAKA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AAAA;AAGA;AAEA;AACA;AAAA;AAEA;AAAA;AAMA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;AC3DA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAeA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAIA;AAAA;AAGA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAKA;AApIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA6HA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAGA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/NA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAGA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAoRA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAsFA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AA4DA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAUA;AA3eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA4CA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkBA;AACA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAGA;AAQA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAGA;AAAA;AAAA;AAyBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1iBA;AACA;AAEA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AA1DA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA0DA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;;;;;;;;;;;;;ACrFA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAqOA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AA8BA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AArVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkDA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AAAA;AAEA;AAAA;AAGA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AAEA;AAKA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AACA;AAAA;AAOA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAOA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACriBA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA0BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AA7GA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA2FA;AAEA;AAAA;AAGA;AAAA;AAAA;AAzHA;AAUA;AACA;;;;;;;;;;;ACtBA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAxBA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwBA;AAEA;AAAA;AAGA;AAAA;AAAA;;;;;;;;;;;AC/CA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AArDA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAqDA;AAEA;AAAA;AAGA;AAAA;AAAA;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAuFA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAvJA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAuEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAGA;AAAA;AACA;AAAA;AASA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/OA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAeA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AArBA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAcA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAoGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAJA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAIA;AACA;AACA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AArJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAwDA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAIA;AAAA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAOA;AAAA;AAAA;AAtVA;AAEA;AACA;AAuVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC5XA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAUA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAhBA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAiBA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAvBA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAwCA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AA9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAcA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AApGA;AAEA;AACA;AAqGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA6EA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAyCA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AASA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAiBA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;;;;;;;;;AC7RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AA6BA;AAAA;AAAA;AACA;AAAA;AAkDA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAtFA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAcA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAkPA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AA/PA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;AAEA;AACA;AASA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAmBA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAjTA;AAEA;AACA;AAiTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChWA;AACA;AACA;AAEA;AACA;AAEA;AASA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAsBA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAqFA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiBA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AA2DA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAfA;AAAA;AAiBA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AASA;AAEA;AACA;AAAA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAEA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;AClcA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAEA;;;;;;;;;;AClLA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AA1CA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkCA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAWA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArFA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAiBA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA8DA;AACA;AAGA;AAAA;AAGA;AAAA;AAIA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;ACzJA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAGA;AAAA;AAAA;AAIA;;;;;;;;;;ACxCA;AACA;AAOA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAOA;AAAA;AAAA;AACA;AAWA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AA8EA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAoDA;AACA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AA5MA;AAGA;AACA;AA2MA;;;;;;;;;;ACrOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAYA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AA5HA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAwHA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AChLA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAMA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAMA;AAEA;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AASA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://haldor.teams.dashboard/./app-config/shorthash.js","webpack://haldor.teams.dashboard/./src/constants/roles.js","webpack://haldor.teams.dashboard/./src/helpers/polyfills.js","webpack://haldor.teams.dashboard/./src/helpers/roleHandling.js","webpack://haldor.teams.dashboard/./src/helpers/localstorage.js","webpack://haldor.teams.dashboard/./src/middleware/parseJson.js","webpack://haldor.teams.dashboard/./src/lib/env.js","webpack://haldor.teams.dashboard/./src/_class/index.js","webpack://haldor.teams.dashboard/./src/_class/DateTime.js","webpack://haldor.teams.dashboard/./src/lib/appInsights.js","webpack://haldor.teams.dashboard/./src/lib/msal.js","webpack://haldor.teams.dashboard/./src/lib/api.js","webpack://haldor.teams.dashboard/./src/actions/schedule.js","webpack://haldor.teams.dashboard/./src/actions/assignments.js","webpack://haldor.teams.dashboard/./src/actions/knowledge.js","webpack://haldor.teams.dashboard/./src/helpers/array.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_assignments.js","webpack://haldor.teams.dashboard/./src/actions/status.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_status.js","webpack://haldor.teams.dashboard/./src/actions/plans.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_plans.js","webpack://haldor.teams.dashboard/./src/actions/sections.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_sections.js","webpack://haldor.teams.dashboard/./src/actions/absence.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_schedule.js","webpack://haldor.teams.dashboard/./src/actions/notifications.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_notifications.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_knowledge.js","webpack://haldor.teams.dashboard/./src/actions/user.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_user.js","webpack://haldor.teams.dashboard/./src/actions/index.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_errors.js","webpack://haldor.teams.dashboard/./src/actions/detailstable.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_detailstable.js","webpack://haldor.teams.dashboard/./src/lib/patch.js","webpack://haldor.teams.dashboard/./src/actions/assessments.js","webpack://haldor.teams.dashboard/./src/actions/studentassessments.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_assessments.js","webpack://haldor.teams.dashboard/./src/actions/progress.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_progress.js","webpack://haldor.teams.dashboard/./src/actions/preschoolform.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_preschoolgoal.js","webpack://haldor.teams.dashboard/./src/actions/posts.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_posts.js","webpack://haldor.teams.dashboard/./src/actions/documents.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_documents.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_combined_events.js","webpack://haldor.teams.dashboard/./src/actions/matrix.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_matrix.js","webpack://haldor.teams.dashboard/./src/actions/courses.js","webpack://haldor.teams.dashboard/./src/actions/search.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_courses.js","webpack://haldor.teams.dashboard/./src/actions/onedrive.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_onedrive.js","webpack://haldor.teams.dashboard/./src/actions/logs.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_logs.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_absence.js","webpack://haldor.teams.dashboard/./src/actions/schools.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_schools.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_search.js","webpack://haldor.teams.dashboard/./src/actions/header.js","webpack://haldor.teams.dashboard/./src/helpers/url.js","webpack://haldor.teams.dashboard/./src/helpers/teams.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_header.js","webpack://haldor.teams.dashboard/./src/actions/verdicts.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_verdicts.js","webpack://haldor.teams.dashboard/./src/actions/conversation.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_conversation.js","webpack://haldor.teams.dashboard/./src/actions/conversation_admin.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_conversations_admin.js","webpack://haldor.teams.dashboard/./src/actions/templates.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_templates.js","webpack://haldor.teams.dashboard/./src/actions/meetings.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_meetings.js","webpack://haldor.teams.dashboard/./src/actions/notes.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_notes.js","webpack://haldor.teams.dashboard/./src/actions/menu.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_menu.js","webpack://haldor.teams.dashboard/./src/actions/additional_adjustments.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_adjustments.js","webpack://haldor.teams.dashboard/./src/actions/timeblocks.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_timeblocks.js","webpack://haldor.teams.dashboard/./src/actions/basegroups.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_basegroups.js","webpack://haldor.teams.dashboard/./src/actions/bookmarks.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_bookmarks.js","webpack://haldor.teams.dashboard/./src/actions/plagiarism.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_plagiarism.js","webpack://haldor.teams.dashboard/./src/actions/languages.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_languages.js","webpack://haldor.teams.dashboard/./src/actions/services.js","webpack://haldor.teams.dashboard/./src/_class/ServiceManager.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_services.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/AssessmentTypes.js","webpack://haldor.teams.dashboard/./src/actions/blocks.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_blocks.js","webpack://haldor.teams.dashboard/./src/actions/subjects.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_subjects.js","webpack://haldor.teams.dashboard/./src/actions/sms.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_sms.js","webpack://haldor.teams.dashboard/./src/actions/ScheduleFilter.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_scheduleFilter.js","webpack://haldor.teams.dashboard/./src/actions/information_texts.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_information_texts.js","webpack://haldor.teams.dashboard/./src/actions/tenants.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_tenants.js","webpack://haldor.teams.dashboard/./src/reducers/reducer_assignments_events_pagination.js","webpack://haldor.teams.dashboard/./src/reducers/index.js","webpack://haldor.teams.dashboard/./src/components/Inputs/FormPrompt.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/plus.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/minus.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/trash.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/pen.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/document.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/ms-onedrive.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/close.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/arrow_down.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/image.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/chevron.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/immersive_reader.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_started.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_not_started.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_submitted.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_not_complete.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_can_develop.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_completed.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/folder_icon.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/one_drive_icon.js","webpack://haldor.teams.dashboard/./src/UI/Icons.js","webpack://haldor.teams.dashboard/./src/components/Inputs/SimpleSelect.js","webpack://haldor.teams.dashboard/./src/lib/translate.js","webpack://haldor.teams.dashboard/./src/helpers/content.js","webpack://haldor.teams.dashboard/./src/_class/ColorScale.js","webpack://haldor.teams.dashboard/./src/components/Inputs/AssessmentDetailField.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/time_picker.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/editor.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/QuillEditor.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/FlexibleTextArea.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Spinner.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/Search/index.js","webpack://haldor.teams.dashboard/./src/constants/fields.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/Field.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/Phone.js","webpack://haldor.teams.dashboard/./src/UI/Inputs/index.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Expandable.js","webpack://haldor.teams.dashboard/./src/components/FileItem.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Block.js","webpack://haldor.teams.dashboard/./src/UI/FileList/index.js","webpack://haldor.teams.dashboard/./src/UI/Elements/List/index.js","webpack://haldor.teams.dashboard/./src/UI/Elements/DataList.js","webpack://haldor.teams.dashboard/./src/UI/Elements/ColorLabel/ColorLabel.js","webpack://haldor.teams.dashboard/./src/UI/Elements/ColorLabel/ColorLabelContainer.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Swipe.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Skeleton.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Dropdown.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Collapsible.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Person.js","webpack://haldor.teams.dashboard/./src/UI/index.js","webpack://haldor.teams.dashboard/./src/components/Inputs/AssessmentFeedbackField.js","webpack://haldor.teams.dashboard/./src/containers/Forms/AssessmentForm.js","webpack://haldor.teams.dashboard/./src/containers/WopiFrame/WopiFrame.js","webpack://haldor.teams.dashboard/./src/helpers/insights.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Display/Partials/Message.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Display/ConversationMessages.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Form/MessageForm.js","webpack://haldor.teams.dashboard/./src/containers/Modals/Modal.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Partials/Message.js","webpack://haldor.teams.dashboard/./src/components/Presentation/DisplayName.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Documents/AttachedUserDocuments.js","webpack://haldor.teams.dashboard/./src/components/List/UserDocuments.js","webpack://haldor.teams.dashboard/./src/components/Logout/Logout.js","webpack://haldor.teams.dashboard/./src/helpers/schoolHandling.js","webpack://haldor.teams.dashboard/./src/components/Providers/NotificationProvider.js","webpack://haldor.teams.dashboard/./src/components/Footer/Footer.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Error/Error.js","webpack://haldor.teams.dashboard/./src/components/Menu/LanguageManager.js","webpack://haldor.teams.dashboard/./src/components/Menu/index.js","webpack://haldor.teams.dashboard/./src/components/HeaderV2/index.js","webpack://haldor.teams.dashboard/./src/components/HeaderV2/Device.js","webpack://haldor.teams.dashboard/./src/components/HeaderV2/Desktop.js","webpack://haldor.teams.dashboard/./src/containers/Errors/InteractionRequired.js","webpack://haldor.teams.dashboard/./src/containers/Errors/RequiredDataError.js","webpack://haldor.teams.dashboard/./src/lib/zendeskWidget.js","webpack://haldor.teams.dashboard/./src/components/Support/ReportModal.js","webpack://haldor.teams.dashboard/./src/components/Support/SupportLauncher.js","webpack://haldor.teams.dashboard/./src/components/Cards/Card.js","webpack://haldor.teams.dashboard/./src/components/Cards/LoadingCard.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/MentorGroups.js","webpack://haldor.teams.dashboard/./src/constants/teamsTabs.js","webpack://haldor.teams.dashboard/./src/components/SchoolSwitch/SchoolSwitch.js","webpack://haldor.teams.dashboard/./src/_class/PermissionManager.js","webpack://haldor.teams.dashboard/./src/helpers/user.js","webpack://haldor.teams.dashboard/./src/_class/User.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/DatePickerFromTo.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Absence/ReportAbsence.js","webpack://haldor.teams.dashboard/./src/components/Presentation/SectionTitle.js","webpack://haldor.teams.dashboard/./src/components/Redirect/Redirect.js","webpack://haldor.teams.dashboard/./src/containers/Absence/AbsenceOverview.js","webpack://haldor.teams.dashboard/./src/containers/Attendance/AttendanceOverview.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Display/ConversationHeader.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Helpers/index.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Display/ConversationPage.js","webpack://haldor.teams.dashboard/./src/containers/Forms/GuardianDetailsForm.js","webpack://haldor.teams.dashboard/./src/UI/Elements/List/RowItem.js","webpack://haldor.teams.dashboard/./src/containers/Guardian/Guardian.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Form/SelectRecipient.js","webpack://haldor.teams.dashboard/./src/containers/Forms/NotificationOptionForm.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/Display/ConversationsPage.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Date/Date.js","webpack://haldor.teams.dashboard/./src/containers/Conversation/FlaggedConversations/index.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Cards/Course.js","webpack://haldor.teams.dashboard/./src/constants/matrixTypes.js","webpack://haldor.teams.dashboard/./src/containers/CoreContent/Custom.js","webpack://haldor.teams.dashboard/./src/helpers/guid.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/Form/MatrixGradeStep.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/Form/MatrixBlock.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/Form/MatrixParagraph.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/Form/MatrixForm.js","webpack://haldor.teams.dashboard/./src/containers/Forms/CourseForm.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/Courses.js","webpack://haldor.teams.dashboard/./src/containers/Courses/Courses.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/StandardCourses.js","webpack://haldor.teams.dashboard/./src/containers/Courses/StandardCourses.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Form/CreateFormTemplate.js","webpack://haldor.teams.dashboard/./src/containers/Forms/FormTemplate.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Page/AllForms.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Display/PreviewFormTemplate.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/MultipleSectionSelector.js","webpack://haldor.teams.dashboard/./src/containers/Forms/SendDynamicForm.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Display/DisplayFormResults.js","webpack://haldor.teams.dashboard/./src/components/Inputs/PersistentFormListener.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Display/FormInstance.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Page/SingleForm.js","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Page/SingleFormTemplatePage.js","webpack://haldor.teams.dashboard/./src/constants/schoolTypes.js","webpack://haldor.teams.dashboard/./src/containers/WelcomeMessage/index.js","webpack://haldor.teams.dashboard/./src/actions/files.js","webpack://haldor.teams.dashboard/./src/components/List/GroupUserSelect.js","webpack://haldor.teams.dashboard/./src/containers/Forms/UserPhone.js","webpack://haldor.teams.dashboard/./src/components/List/UserSelect.js","webpack://haldor.teams.dashboard/./src/containers/Forms/SearchPreschoolGoals.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Documentation.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/DatePickerEvent.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Post.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Date/FromNow.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/MyPosts.js","webpack://haldor.teams.dashboard/./src/components/Inputs/select.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Helpers/index.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Form/EditAdditionalAdjustmentSubjects.js","webpack://haldor.teams.dashboard/./src/components/Presentation/PostContent.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Form/EditStudentAdjustmentForm.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/Partials/Comments.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/AdditionalAdjustmentModal.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/TeacherAdjustments.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Status.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/AssignmentBlock/DisplayAssignment.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/GroupSelector.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/AssignmentSelect.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/AssignmentBlock/SelectAssignment.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/InvalidGroupNotice.js","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Form/GenerateBaseGroupsRandomly.js","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Form/BaseGroupForm.js","webpack://haldor.teams.dashboard/./src/components/List/AssignmentTaskSelect.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Documents/AttachedDocuments.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Plugins/AddAssessmentBlockButton.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Plugins/AddTeacherAssessmentBlockButton.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Plugins/PushAssessmentBlock.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/DisplayResource.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/GoalMatrixRowForm.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/GoalMatrixForm.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/SelectCoursesForm.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/SelectMatricesForm.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/OnlyFeedbackForm.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/DisplayOnlyFeedback.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/index.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/TeacherAssessmentBlock/TeacherAssessmentBlock.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/SelfAssessmentBlock/SelfAssessmentBlock.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/PeerReviewBlock/PeerReviewBlock.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/AssessmentBlockTypes.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/index.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/CustomSelector.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/FileBrowser.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/OneDriveFilePicker.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/TeamFilePicker.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/LocalFilePicker.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/FileUploadMenu.js","webpack://haldor.teams.dashboard/./src/containers/Forms/AssignmentForm/AssignmentForm.js","webpack://haldor.teams.dashboard/./src/containers/Forms/AssignmentForm/MultipleAssignmentForm.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/AssignmentBlock/CreateAssignment.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/AssignmentBlock/index.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/index.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/LinksBlock/AddLinkForm.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/LinksBlock/Prompt.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/LinksBlock/index.js","webpack://haldor.teams.dashboard/./src/containers/LTI/index.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/NdlaBlock/NDLAFrame.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/NdlaBlock/index.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/index.js","webpack://haldor.teams.dashboard/./src/components/Inputs/BlockPurposeField.js","webpack://haldor.teams.dashboard/./src/components/Inputs/BlockCoreContentField.js","webpack://haldor.teams.dashboard/./src/containers/Forms/PlanningForm/MultiplePlanForm.js","webpack://haldor.teams.dashboard/./src/containers/Forms/PlanningForm/MultiplePreschoolPlanForm.js","webpack://haldor.teams.dashboard/./src/containers/Forms/PlanningForm/SinglePlanForm.js","webpack://haldor.teams.dashboard/./src/containers/Onboarding/Onboarding.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Courses/SearchCourses.js","webpack://haldor.teams.dashboard/./src/components/List/CourseSelect.js","webpack://haldor.teams.dashboard/./src/containers/Forms/SectionForm.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Date/DateSpan.js","webpack://haldor.teams.dashboard/./src/containers/Gantt/ReactGantt.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/MyPlans.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Cards/AssignmentCard.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/MyAssignments.js","webpack://haldor.teams.dashboard/./src/containers/Forms/CalendarEvent.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/SelectUserForm.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/SelectLinkedPosition.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/SelectionDisplay.js","webpack://haldor.teams.dashboard/./src/helpers/attendance.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/TimeLineButton.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/ItemContent.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/ScheduleView.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/DropDownList.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/SearchGroups.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/ListSelectorDropDown.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/ListSelector.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/CalendarHeader.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/AgendaModal.js","webpack://haldor.teams.dashboard/./src/containers/Forms/ConflictingEventForm.js","webpack://haldor.teams.dashboard/./src/containers/Schedule/Schedule.js","webpack://haldor.teams.dashboard/./src/containers/Overview/TableFilterComponents/SelectMultiple.js","webpack://haldor.teams.dashboard/./src/containers/Assignments/NoItemsFoundLayout.js","webpack://haldor.teams.dashboard/./src/components/DataGrid/CustomColumnSelector.js","webpack://haldor.teams.dashboard/./src/containers/Assignments/MyAssignmentsTableAsStaff.js","webpack://haldor.teams.dashboard/./src/constants/assignmentTaskStatusIcons.js","webpack://haldor.teams.dashboard/./src/containers/Assignments/MyAssignmentsTableAsStudent.js","webpack://haldor.teams.dashboard/./src/containers/Assignments/MyAssignmentsLogs.js","webpack://haldor.teams.dashboard/./src/UI/IconsSrc/assignment_task_status_not_assigned.js","webpack://haldor.teams.dashboard/./src/components/List/AssignmentsStudentsProgress.js","webpack://haldor.teams.dashboard/./src/containers/Assignments/MyAssignmentsWrapper.js","webpack://haldor.teams.dashboard/./src/containers/Plans/MyPlansList.js","webpack://haldor.teams.dashboard/./src/containers/Plans/MyPlansWrapper.js","webpack://haldor.teams.dashboard/./src/containers/Overview/index.js","webpack://haldor.teams.dashboard/./src/containers/IndexWrapper/index.js","webpack://haldor.teams.dashboard/./src/containers/Logs/UserLogs.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/MatrixAssessment/MatrixAssessmentBlock.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/MatrixDisplay/MatrixDisplayBlock.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/ListPage.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/TestPage.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/ConnectForm.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/StudentGuardianSelector.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/AddMeetingInstances.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/BookMeeting.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/UpdateMeeting.js","webpack://haldor.teams.dashboard/./src/containers/TimeBlocks/CreateTimeBlocks.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Display/MeetingOccassions.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Display/Meeting.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Note.js","webpack://haldor.teams.dashboard/./src/components/Presentation/DisplayCell.js","webpack://haldor.teams.dashboard/./src/components/Presentation/DisplayMatrix.js","webpack://haldor.teams.dashboard/./src/components/Presentation/DisplayGoal.js","webpack://haldor.teams.dashboard/./src/components/Presentation/DisplayFeedbacks.js","webpack://haldor.teams.dashboard/./src/UI/Graphs/Bar.js","webpack://haldor.teams.dashboard/./src/UI/Graphs/Progress.js","webpack://haldor.teams.dashboard/./src/UI/Graphs/Content.js","webpack://haldor.teams.dashboard/./src/UI/Graphs/StandingBar.js","webpack://haldor.teams.dashboard/./src/UI/Graphs/index.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/UserAssessments.js","webpack://haldor.teams.dashboard/./src/containers/Forms/EditAttendance.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/AttendanceList.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/DatePickers.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/GroupFilter.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Form/Partials/VerdictFeedbackForm.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Form/Partials/VerdictLevelForm.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Form/VerdictForm.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/Partials/VerdictDisplayFeedback.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/Partials/VerdictDisplayLevel.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/VerdictDisplay.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/VerdictWidget.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/MentorVerdicts.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/MentorNotes.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Form/StudentAdjustmentForm.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/StudentAdjustment.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/AdditionalAdjustments.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/UserMeetings.js","webpack://haldor.teams.dashboard/./src/containers/Forms/StudentDetailsForm.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/UserDetails.js","webpack://haldor.teams.dashboard/./src/actions/tags.js","webpack://haldor.teams.dashboard/./src/containers/Forms/FileUpload.js","webpack://haldor.teams.dashboard/./src/containers/Forms/File.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/UserFileArchive.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/MentorGoalOverview.js","webpack://haldor.teams.dashboard/./src/containers/Progress/User.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/UpdateMeetingInstance.js","webpack://haldor.teams.dashboard/./src/components/List/MeetingUsers.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Display/MeetingInstance.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/CreateMeeting.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Display/MyMeetings.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Notifications/Alert.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/Notifications.js","webpack://haldor.teams.dashboard/./src/containers/Notifications/index.js","webpack://haldor.teams.dashboard/./src/containers/ConditionReceiver.js","webpack://haldor.teams.dashboard/./src/containers/Forms/SectionOptionForm.js","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/Groups.js","webpack://haldor.teams.dashboard/./src/containers/Groups/GroupsPage.js","webpack://haldor.teams.dashboard/./src/containers/Posts/AllPosts.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Administration/AssignAdditionalAdjustments.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Administration/CreateAdditionalAdjustment.js","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Administration/AdministrateAdjustments.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Form/MultipleVerdictForm.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/VerdictAssessmentsDisplay.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/VerdictForm.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Course.js","webpack://haldor.teams.dashboard/./src/containers/Search/index.js","webpack://haldor.teams.dashboard/./src/components/Presentation/InfoButton.js","webpack://haldor.teams.dashboard/./src/components/List/UserMentorSection.js","webpack://haldor.teams.dashboard/./src/containers/Forms/MentorSectionForm.js","webpack://haldor.teams.dashboard/./src/containers/Progress/Section.js","webpack://haldor.teams.dashboard/./src/components/List/UserSection.js","webpack://haldor.teams.dashboard/./src/components/List/UserSectionPreschool.js","webpack://haldor.teams.dashboard/./src/containers/Progress/TeacherSection.js","webpack://haldor.teams.dashboard/./src/containers/Section/Functionality/SectionInformation.js","webpack://haldor.teams.dashboard/./src/containers/Forms/PlanningForm/PreschoolPlanningForm.js","webpack://haldor.teams.dashboard/./src/containers/Section/Functionality/SectionPlans.js","webpack://haldor.teams.dashboard/./src/containers/Section/Functionality/SectionPosts.js","webpack://haldor.teams.dashboard/./src/containers/Section/Functionality/SectionTools.js","webpack://haldor.teams.dashboard/./src/containers/Section/SectionTypes/CompulsorySchoolSection.js","webpack://haldor.teams.dashboard/./src/containers/Section/SectionTypes/PreSchoolSection.js","webpack://haldor.teams.dashboard/./src/containers/Section/SectionTypes/UpperSecondarySchoolSection.js","webpack://haldor.teams.dashboard/./src/containers/Section/SectionWrapper.js","webpack://haldor.teams.dashboard/./src/containers/Section/Functionality/SectionBaseGroups.js","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Display/SectionBaseGroupPage.js","webpack://haldor.teams.dashboard/./src/_class/Post.js","webpack://haldor.teams.dashboard/./src/UI/Elements/ProgressBar.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/SinglePost.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/SinglePreschoolDocument.js","webpack://haldor.teams.dashboard/./src/containers/User/Partials/UserRoles.js","webpack://haldor.teams.dashboard/./src/containers/Forms/TeacherRole.js","webpack://haldor.teams.dashboard/./src/containers/User/Partials/Subjects.js","webpack://haldor.teams.dashboard/./src/components/List/SectionList.js","webpack://haldor.teams.dashboard/./src/containers/User/Staff.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/SubjectPage.js","webpack://haldor.teams.dashboard/./src/containers/Wizard/WizardStep.js","webpack://haldor.teams.dashboard/./src/containers/Wizard/WizardTimeLine.js","webpack://haldor.teams.dashboard/./src/containers/Wizard/Wizard.js","webpack://haldor.teams.dashboard/./src/containers/Wizard/WizardQuestion.js","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/CreateMeetingWizard.js","webpack://haldor.teams.dashboard/./src/containers/Bookmarks/User.js","webpack://haldor.teams.dashboard/./src/containers/Admin/Partial/School.js","webpack://haldor.teams.dashboard/./src/containers/Forms/SubjectTeachersForm.js","webpack://haldor.teams.dashboard/./src/containers/Admin/Partial/Subjects.js","webpack://haldor.teams.dashboard/./src/containers/Admin/Partial/ExportAssessmentForSchool.js","webpack://haldor.teams.dashboard/./src/containers/Admin/Partial/UsersWithoutMentorGroups.js","webpack://haldor.teams.dashboard/./src/containers/Admin/Partial/SMS.js","webpack://haldor.teams.dashboard/./src/containers/Admin/Index.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Partials/Bookmark.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Partials/CloneButton.js","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Consumer.js","webpack://haldor.teams.dashboard/./src/containers/Matrix/MatrixAssessment/MatrixAssessmentParagraph.js","webpack://haldor.teams.dashboard/./src/containers/Forms/StudentAssessmentFormV1.js","webpack://haldor.teams.dashboard/./src/components/Inputs/StudentAssessorSelect.js","webpack://haldor.teams.dashboard/./src/containers/Forms/Assessment/ClearBlockAssessments.js","webpack://haldor.teams.dashboard/./src/components/Inputs/DropdownButtons.js","webpack://haldor.teams.dashboard/./src/components/List/UserAssignment.js","webpack://haldor.teams.dashboard/./src/components/List/UserGroupAssignment.js","webpack://haldor.teams.dashboard/./src/containers/OneDrivePicker/index.js","webpack://haldor.teams.dashboard/./src/components/Presentation/Documents/UploadDocument.js","webpack://haldor.teams.dashboard/./src/components/Presentation/FileList/FileList.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Assignment/Haldor.js","webpack://haldor.teams.dashboard/./src/containers/Forms/AssignmentForm/KnowledgeRequirements.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Assignment/Microsoft.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/SingleAssignmentV1.js","webpack://haldor.teams.dashboard/./src/containers/Plans/Plans.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Assignment/SubmissionsView.js","webpack://haldor.teams.dashboard/./src/components/List/UserPlanning.js","webpack://haldor.teams.dashboard/./src/containers/CoreContent/Selected.js","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Consumer.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Plan/Types/CompulsoryPlan.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Plan/Functionality/PlanPosts.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Plan/Types/PreschoolPlan.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Plan/PlanningWrapper.js","webpack://haldor.teams.dashboard/./src/containers/SinglePages/SingleCourse.js","webpack://haldor.teams.dashboard/./src/containers/Lesson/Partials/AttendanceHistory.js","webpack://haldor.teams.dashboard/./src/containers/Lesson/Partials/ReportHistory.js","webpack://haldor.teams.dashboard/./src/components/List/UserAbsence.js","webpack://haldor.teams.dashboard/./src/containers/Lesson/Single.js","webpack://haldor.teams.dashboard/./src/containers/CalendarEvent/SingleCalendarEvent.js","webpack://haldor.teams.dashboard/./src/components/LanguageRender/LanguageRender.js","webpack://haldor.teams.dashboard/./src/containers/Forms/SMS.js","webpack://haldor.teams.dashboard/./src/containers/SMS/Overview.js","webpack://haldor.teams.dashboard/./src/containers/SMS/Single.js","webpack://haldor.teams.dashboard/./src/containers/Verdict/Page/NewVerdict.js","webpack://haldor.teams.dashboard/./src/containers/App.js","webpack://haldor.teams.dashboard/./src/containers/AssessmentsTab/MyAssessments.js","webpack://haldor.teams.dashboard/./src/containers/AttendanceTab/AttendanceTabSections.js","webpack://haldor.teams.dashboard/./src/containers/NotFound.js","webpack://haldor.teams.dashboard/./src/containers/PrintPages/PrintAssignment.js","webpack://haldor.teams.dashboard/./src/containers/PrintPages/PrintPlanning.js","webpack://haldor.teams.dashboard/./src/containers/PrintApp.js","webpack://haldor.teams.dashboard/./src/teams/components/Header/index.js","webpack://haldor.teams.dashboard/./src/teams/App.js","webpack://haldor.teams.dashboard/./src/teams/containers/Courses/Create.js","webpack://haldor.teams.dashboard/./src/teams/containers/Forms/SchoolSettings.js","webpack://haldor.teams.dashboard/./src/teams/containers/Sections/Assessments.js","webpack://haldor.teams.dashboard/./src/teams/containers/HaldorTab/index.js","webpack://haldor.teams.dashboard/./src/components/Inputs/input.js","webpack://haldor.teams.dashboard/./src/teams/containers/TabConfigure/CoursePlanConfigure.js","webpack://haldor.teams.dashboard/./src/components/Auth.js","webpack://haldor.teams.dashboard/./src/teams/containers/TabConfigure/index.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Auth/Authentication.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Auth/ApiConsent.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Auth/ClientConsent.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Step1/ServiceSelector.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Step2/SelectConsentWay.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Step2/EmailAdminInvite.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Step2/EmailAdminSent.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Step2/WaitingForResponse.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/ConsentManager.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/TermsManagemant.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/Step4/ConsentConfirm.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/IndexWrapper.js","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/App.js","webpack://haldor.teams.dashboard/./src/routes/index.js","webpack://haldor.teams.dashboard/./src/containers/Errors/AuthenticationPopup.js","webpack://haldor.teams.dashboard/./src/components/Login/LandingPage.js","webpack://haldor.teams.dashboard/./src/components/GenerateToken.js","webpack://haldor.teams.dashboard/./src/components/Providers/AuthenticationProvider.js","webpack://haldor.teams.dashboard/./src/components/Providers/LocalizationProvider.js","webpack://haldor.teams.dashboard/./src/containers/Errors/CookiesNotSupported.js","webpack://haldor.teams.dashboard/./src/index.js","webpack://haldor.teams.dashboard/./src/UI/Elements/Collapsible.scss","webpack://haldor.teams.dashboard/./src/UI/Elements/ColorLabel/Style.scss","webpack://haldor.teams.dashboard/./src/UI/Elements/DataList.scss","webpack://haldor.teams.dashboard/./src/UI/Elements/Dropdown.scss","webpack://haldor.teams.dashboard/./src/UI/Elements/List/Style.scss","webpack://haldor.teams.dashboard/./src/UI/Elements/Person.scss","webpack://haldor.teams.dashboard/./src/UI/Elements/Skeleton.scss","webpack://haldor.teams.dashboard/./src/UI/FileList/Style.scss","webpack://haldor.teams.dashboard/./src/UI/Graphs/Styles.scss","webpack://haldor.teams.dashboard/./src/UI/Inputs/Field.scss","webpack://haldor.teams.dashboard/./src/UI/Inputs/Search/Search.scss","webpack://haldor.teams.dashboard/./src/UI/Inputs/_phoneInput.scss","webpack://haldor.teams.dashboard/./src/UI/Inputs/time_picker.scss","webpack://haldor.teams.dashboard/./src/assets/css/main.scss","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/_OnlyFeedbackForm.scss","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/_SelectMatricesForm.scss","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/_AssessmentBlock.scss","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/AssignmentBlock/_AssignmentBlock.scss","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/LocalFilePicker.scss","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/_FileBlock.scss","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/_FileBrowser.scss","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/LinksBlock/_LinksBlock.scss","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/NdlaBlock/_NdlaBlock.scss","webpack://haldor.teams.dashboard/./src/components/HeaderV2/_device.scss","webpack://haldor.teams.dashboard/./src/components/HeaderV2/_web.scss","webpack://haldor.teams.dashboard/./src/components/Inputs/_blockPurpose.scss","webpack://haldor.teams.dashboard/./src/components/Inputs/_simpleSelect.scss","webpack://haldor.teams.dashboard/./src/components/List/AssignmentsStudentsProgress.scss","webpack://haldor.teams.dashboard/./src/components/List/CourseSelect.scss","webpack://haldor.teams.dashboard/./src/components/List/MeetingUsers.scss","webpack://haldor.teams.dashboard/./src/components/List/UserMentorSection.scss","webpack://haldor.teams.dashboard/./src/components/List/UserSection.scss","webpack://haldor.teams.dashboard/./src/components/List/UserSelect.scss","webpack://haldor.teams.dashboard/./src/components/Menu/index.scss","webpack://haldor.teams.dashboard/./src/components/Presentation/Cards/_AssignmentCard.scss","webpack://haldor.teams.dashboard/./src/components/Presentation/Documents/_uploadDocument.scss","webpack://haldor.teams.dashboard/./src/components/Presentation/_displayFeedbacks.scss","webpack://haldor.teams.dashboard/./src/components/Presentation/_displayName.scss","webpack://haldor.teams.dashboard/./src/components/Presentation/_infoButton.scss","webpack://haldor.teams.dashboard/./src/components/Support/_reportModal.scss","webpack://haldor.teams.dashboard/./src/components/Support/_supportLauncher.scss","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Administration/AdministrateAdjustments.scss","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/Adjustment.scss","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/GroupAdjustments.scss","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/TeacherAdjustments.scss","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Form/EditStudentAdjustmentForm.scss","webpack://haldor.teams.dashboard/./src/containers/Assignments/_MyAssignmentsV2.scss","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Form/BaseGroupForm.scss","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Form/GenerateBaseGroupsRandomly.scss","webpack://haldor.teams.dashboard/./src/containers/Bookmarks/_UserBookmarks.scss","webpack://haldor.teams.dashboard/./src/containers/Conversation/Conversation.scss","webpack://haldor.teams.dashboard/./src/containers/Conversation/Form/SelectRecipient.scss","webpack://haldor.teams.dashboard/./src/containers/CoreContent/Styles.scss","webpack://haldor.teams.dashboard/./src/containers/Errors/_CookiesNotSupported.scss","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Display/Styles.scss","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Form/Styles.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/Absence/_ReportAbsence.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/Assessment/ClearBlockAssessments.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/AssignmentForm/formAssignment.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/Courses/SearchCourses.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/AssignmentSelect.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/MultipleSectionSelector.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/_assessmentForm.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/_fileUpload.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/_smsForm.scss","webpack://haldor.teams.dashboard/./src/containers/Forms/_studentDetailsForm.scss","webpack://haldor.teams.dashboard/./src/containers/Lesson/_Lesson.scss","webpack://haldor.teams.dashboard/./src/containers/Meeting/Display/Meeting.scss","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/_BookMeeting.scss","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/_Groups.scss","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_mentorGoalOverview.scss","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_mentorVerdicts.scss","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_userAssessments.scss","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_userFileArchive.scss","webpack://haldor.teams.dashboard/./src/containers/Progress/TeacherSection.scss","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/_SelectUserForm.scss","webpack://haldor.teams.dashboard/./src/containers/Schedule/_Schedule.scss","webpack://haldor.teams.dashboard/./src/containers/Schedule/_SelectLinkedPosition.scss","webpack://haldor.teams.dashboard/./src/containers/Section/SectionTypes/_sectionStats.scss","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Partials/_Bookmark.scss","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/_onboarding.scss","webpack://haldor.teams.dashboard/./src/containers/User/Partials/Subjects.scss","webpack://haldor.teams.dashboard/./src/containers/User/Partials/UserRoles.scss","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/_SubjectPage.scss","webpack://haldor.teams.dashboard/./src/containers/Verdict/Verdict.scss","webpack://haldor.teams.dashboard/./src/containers/Wizard/WizardTimeLine.scss","webpack://haldor.teams.dashboard/./src/containers/WopiFrame/Styles.scss","webpack://haldor.teams.dashboard/./src/teams/components/Header/Header.scss","webpack://haldor.teams.dashboard/./node_modules/moment/locale/ sync [/\\\\](sv(\\.js)","webpack://haldor.teams.dashboard/./src/UI/Elements/Collapsible.scss?d22b","webpack://haldor.teams.dashboard/./src/UI/Elements/ColorLabel/Style.scss?d2d8","webpack://haldor.teams.dashboard/./src/UI/Elements/DataList.scss?a789","webpack://haldor.teams.dashboard/./src/UI/Elements/Dropdown.scss?2dc7","webpack://haldor.teams.dashboard/./src/UI/Elements/List/Style.scss?911d","webpack://haldor.teams.dashboard/./src/UI/Elements/Person.scss?7cbf","webpack://haldor.teams.dashboard/./src/UI/Elements/Skeleton.scss?049f","webpack://haldor.teams.dashboard/./src/UI/FileList/Style.scss?afc9","webpack://haldor.teams.dashboard/./src/UI/Graphs/Styles.scss?f564","webpack://haldor.teams.dashboard/./src/UI/Inputs/Field.scss?ad6b","webpack://haldor.teams.dashboard/./src/UI/Inputs/Search/Search.scss?1818","webpack://haldor.teams.dashboard/./src/UI/Inputs/_phoneInput.scss?4a0a","webpack://haldor.teams.dashboard/./src/UI/Inputs/time_picker.scss?b0a5","webpack://haldor.teams.dashboard/./src/assets/css/main.scss?fc23","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/_OnlyFeedbackForm.scss?6dc3","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/Blocks/AssessmentBlock/_SelectMatricesForm.scss?6077","webpack://haldor.teams.dashboard/./src/components/BlockAssessments/_AssessmentBlock.scss?eefe","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/AssignmentBlock/_AssignmentBlock.scss?cff4","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/LocalFilePicker.scss?c43d","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/_FileBlock.scss?583b","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/FileBlock/_FileBrowser.scss?e7fe","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/LinksBlock/_LinksBlock.scss?fb6d","webpack://haldor.teams.dashboard/./src/components/BlockEditor/Blocks/NdlaBlock/_NdlaBlock.scss?560d","webpack://haldor.teams.dashboard/./src/components/HeaderV2/_device.scss?6523","webpack://haldor.teams.dashboard/./src/components/HeaderV2/_web.scss?72b0","webpack://haldor.teams.dashboard/./src/components/Inputs/_blockPurpose.scss?1fc0","webpack://haldor.teams.dashboard/./src/components/Inputs/_simpleSelect.scss?5ac9","webpack://haldor.teams.dashboard/./src/components/List/AssignmentsStudentsProgress.scss?c76a","webpack://haldor.teams.dashboard/./src/components/List/CourseSelect.scss?5673","webpack://haldor.teams.dashboard/./src/components/List/MeetingUsers.scss?6a18","webpack://haldor.teams.dashboard/./src/components/List/UserMentorSection.scss?d330","webpack://haldor.teams.dashboard/./src/components/List/UserSection.scss?7baf","webpack://haldor.teams.dashboard/./src/components/List/UserSelect.scss?b2bb","webpack://haldor.teams.dashboard/./src/components/Menu/index.scss?dc19","webpack://haldor.teams.dashboard/./src/components/Presentation/Cards/_AssignmentCard.scss?7abf","webpack://haldor.teams.dashboard/./src/components/Presentation/Documents/_uploadDocument.scss?453b","webpack://haldor.teams.dashboard/./src/components/Presentation/_displayFeedbacks.scss?93e4","webpack://haldor.teams.dashboard/./src/components/Presentation/_displayName.scss?8ebd","webpack://haldor.teams.dashboard/./src/components/Presentation/_infoButton.scss?7d12","webpack://haldor.teams.dashboard/./src/components/Support/_reportModal.scss?32f4","webpack://haldor.teams.dashboard/./src/components/Support/_supportLauncher.scss?0ca9","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Administration/AdministrateAdjustments.scss?03d2","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/Adjustment.scss?d128","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/GroupAdjustments.scss?059a","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Display/TeacherAdjustments.scss?1052","webpack://haldor.teams.dashboard/./src/containers/AdditionalAdjustments/Form/EditStudentAdjustmentForm.scss?5066","webpack://haldor.teams.dashboard/./src/containers/Assignments/_MyAssignmentsV2.scss?074a","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Form/BaseGroupForm.scss?c950","webpack://haldor.teams.dashboard/./src/containers/BaseGroups/Form/GenerateBaseGroupsRandomly.scss?6623","webpack://haldor.teams.dashboard/./src/containers/Bookmarks/_UserBookmarks.scss?d663","webpack://haldor.teams.dashboard/./src/containers/Conversation/Conversation.scss?a9b5","webpack://haldor.teams.dashboard/./src/containers/Conversation/Form/SelectRecipient.scss?15a3","webpack://haldor.teams.dashboard/./src/containers/CoreContent/Styles.scss?9e0a","webpack://haldor.teams.dashboard/./src/containers/Errors/_CookiesNotSupported.scss?3861","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Display/Styles.scss?5dbe","webpack://haldor.teams.dashboard/./src/containers/FormTemplate/Form/Styles.scss?ab8a","webpack://haldor.teams.dashboard/./src/containers/Forms/Absence/_ReportAbsence.scss?d9bb","webpack://haldor.teams.dashboard/./src/containers/Forms/Assessment/ClearBlockAssessments.scss?c78f","webpack://haldor.teams.dashboard/./src/containers/Forms/AssignmentForm/formAssignment.scss?4980","webpack://haldor.teams.dashboard/./src/containers/Forms/Courses/SearchCourses.scss?7e6c","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/AssignmentSelect.scss?a354","webpack://haldor.teams.dashboard/./src/containers/Forms/Partials/MultipleSectionSelector.scss?af82","webpack://haldor.teams.dashboard/./src/containers/Forms/_assessmentForm.scss?10a1","webpack://haldor.teams.dashboard/./src/containers/Forms/_fileUpload.scss?a13d","webpack://haldor.teams.dashboard/./src/containers/Forms/_smsForm.scss?fa05","webpack://haldor.teams.dashboard/./src/containers/Forms/_studentDetailsForm.scss?a9f6","webpack://haldor.teams.dashboard/./src/containers/Lesson/_Lesson.scss?3e9f","webpack://haldor.teams.dashboard/./src/containers/Meeting/Display/Meeting.scss?a8c5","webpack://haldor.teams.dashboard/./src/containers/Meeting/Form/_BookMeeting.scss?000e","webpack://haldor.teams.dashboard/./src/containers/Overview/Sections/_Groups.scss?05be","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_mentorGoalOverview.scss?e12c","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_mentorVerdicts.scss?392d","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_userAssessments.scss?5e4b","webpack://haldor.teams.dashboard/./src/containers/Progress/Partials/_userFileArchive.scss?784f","webpack://haldor.teams.dashboard/./src/containers/Progress/TeacherSection.scss?f9db","webpack://haldor.teams.dashboard/./src/containers/Schedule/Partials/_SelectUserForm.scss?dcca","webpack://haldor.teams.dashboard/./src/containers/Schedule/_Schedule.scss?a5fd","webpack://haldor.teams.dashboard/./src/containers/Schedule/_SelectLinkedPosition.scss?89cb","webpack://haldor.teams.dashboard/./src/containers/Section/SectionTypes/_sectionStats.scss?ef34","webpack://haldor.teams.dashboard/./src/containers/SinglePages/Partials/_Bookmark.scss?8b53","webpack://haldor.teams.dashboard/./src/containers/TeamsOnboarding/_onboarding.scss?e18c","webpack://haldor.teams.dashboard/./src/containers/User/Partials/Subjects.scss?e28e","webpack://haldor.teams.dashboard/./src/containers/User/Partials/UserRoles.scss?0c19","webpack://haldor.teams.dashboard/./src/containers/Verdict/Display/_SubjectPage.scss?1a27","webpack://haldor.teams.dashboard/./src/containers/Verdict/Verdict.scss?cc42","webpack://haldor.teams.dashboard/./src/containers/Wizard/WizardTimeLine.scss?f611","webpack://haldor.teams.dashboard/./src/containers/WopiFrame/Styles.scss?4b4c","webpack://haldor.teams.dashboard/./src/teams/components/Header/Header.scss?0b22"],"sourcesContent":["/*\n\tshorthash\n\t(c) 2013 Bibig\n\t\n\thttps://github.com/bibig/node-shorthash\n\tshorthash may be freely distributed under the MIT license.\n*/\n\nfunction bitwise(str) {\n\tvar hash = 0;\n\tif (str.length == 0) return hash;\n\tfor (var i = 0; i < str.length; i++) {\n\t\tvar ch = str.charCodeAt(i);\n\t\thash = ((hash << 5) - hash) + ch;\n\t\thash = hash & hash; // Convert to 32bit integer\n\t}\n\treturn hash;\n}\n\nfunction binaryTransfer(integer, binary) {\n\tbinary = binary || 62;\n\tvar stack = [];\n\tvar num;\n\tvar result = '';\n\tvar sign = integer < 0 ? '-' : '';\n\n\tfunction table(num) {\n\t\tvar t = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\t\treturn t[num];\n\t}\n\n\tinteger = Math.abs(integer);\n\n\twhile (integer >= binary) {\n\t\tnum = integer % binary;\n\t\tinteger = Math.floor(integer / binary);\n\t\tstack.push(table(num));\n\t}\n\n\tif (integer > 0) {\n\t\tstack.push(table(integer));\n\t}\n\n\tfor (var i = stack.length - 1; i >= 0; i--) {\n\t\tresult += stack[i];\n\t}\n\n\treturn sign + result;\n}\n\nfunction unique(text) {\n\tvar id = binaryTransfer(bitwise(text), 61);\n\treturn id.replace('-', 'Z');\n}\n\nexports.bitwise = bitwise;\nexports.binaryTransfer = binaryTransfer;\nexports.unique = unique;","export const ROLE_STUDENT = 'STUDENT';\nexport const ROLE_TEACHER = 'TEACHER';\nexport const ROLE_ADMINISTRATOR = 'SCHOOL_ADMINISTRATOR';\nexport const ROLE_SYSADMIN = 'SYSADMIN';\nexport const ROLE_MENTOR = 'MENTOR';\nexport const ROLE_COURSE_ADMIN = 'COURSE_ADMINISTRATOR';\nexport const ROLE_STANDARD_CURRICULUM_ADMIN = 'STANDARD_CURRICULUM_ADMIN';\nexport const ROLE_CONVERSATION_ADMIN = 'CONVERSATION_ADMIN';\nexport const ROLE_SPECIAL_PEDAGOGUE = 'SPECIAL_PEDAGOGUE';","\nArray.prototype.getActiveSchool = function( key ) {\n\tvar response = this.find( s => s.id == localStorage.getItem(\"hal.school\" + key) );\n\n\tif ( response != null )\n\t\treturn response;\n\telse\n\t\tif ( this.length > 0 ) return this[0];\n\t\treturn { type: '' };\n}\n\nString.prototype.capitalize = function() {\n\treturn this.charAt(0).toUpperCase() + this.slice(1);\n}\n","\nvar store = require('../');\nvar ROLE_STUDENT = require('../constants/roles').ROLE_STUDENT;\nvar ROLE_CONVERSATION_ADMIN = require('../constants/roles').ROLE_CONVERSATION_ADMIN;\n\nvar fetchRole = function (activeRole, currentUser, overrideRole) {\n\tif (overrideRole == null) {\n\t\tvar localStorageRole = localStorage.getItem(\"hal.role\" + currentUser.userId);\n\n\t\tif (localStorageRole == null) {\n\t\t\tif (currentUser.userRoles != null && currentUser.userRoles.length > 0) {\n\t\t\t\tvar currentRole = currentUser.userRoles[0].toUpperCase();\n\t\t\t\tif (currentRole == ROLE_CONVERSATION_ADMIN) {\n\t\t\t\t\tcurrentUser.userRoles.forEach((role) => {\n\t\t\t\t\t\tif (role != ROLE_CONVERSATION_ADMIN && currentRole == ROLE_CONVERSATION_ADMIN) {\n\t\t\t\t\t\t\tcurrentRole = role;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlocalStorage.setItem(\"hal.role\" + currentUser.userId, currentRole.toUpperCase());\n\n\t\t\t\tconst newAction = { type: \"SET_ROLE\", payload: currentRole.toUpperCase() };\n\t\t\t\tstore.default.dispatch(newAction);\n\t\t\t} else {\n\t\t\t\tlocalStorage.setItem(\"hal.role\" + currentUser.userId, ROLE_STUDENT);\n\n\t\t\t\tconst newAction = { type: \"SET_ROLE\", payload: ROLE_STUDENT };\n\t\t\t\tstore.default.dispatch(newAction);\n\t\t\t}\n\t\t} else {\n\t\t\tif (localStorageRole == ROLE_CONVERSATION_ADMIN) {\n\t\t\t\tif (currentUser.userRoles.length > 0) {\n\t\t\t\t\tcurrentUser.userRoles.forEach((role) => {\n\t\t\t\t\t\tif (role != ROLE_CONVERSATION_ADMIN && localStorageRole == ROLE_CONVERSATION_ADMIN) {\n\t\t\t\t\t\t\tlocalStorageRole = role;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlocalStorage.setItem(\"hal.role\" + currentUser.userId, localStorageRole.toUpperCase() );\n\t\t\tconst newAction = { type: \"SET_ROLE\", payload: localStorageRole.toUpperCase() };\n\t\t\tstore.default.dispatch(newAction);\n\t\t}\n\t} else {\n\t\tlocalStorage.setItem(\"hal.role\" + currentUser.userId, overrideRole.toUpperCase());\n\n\t\tconst newAction = { type: \"SET_ROLE\", payload: overrideRole.toUpperCase() };\n\t\tstore.default.dispatch(newAction);\n\t}\n}\n\nmodule.exports = {\n\tfetchRole,\n}\n","import moment from 'moment';\n\nexport const assignmentsStudentsProgress_assignmentsDateFilter_key = \"assignmentsStudentsProgress_assignmentsDateFilter\";\nexport const myAssignmentsWrapper_selectedTab_key = \"myAssignmentsWrapper_selectedTab\";\n\nexport const clearLocalStorage = function () {\n\t// Get the name of the schools\n\tvar schools = {};\n\tfor (var i = 0; i < localStorage.length; i++) {\n\t\tif (localStorage.key(i).includes(\"hal.school\")) {\n\t\t\tschools[localStorage.key(i)] = localStorage.getItem(localStorage.key(i));\n\t\t}\n\t}\n\n\t// Get the name of the roles\n\tvar roles = {};\n\tfor (var i = 0; i < localStorage.length; i++) {\n\t\tif (localStorage.key(i).includes(\"hal.role\")) {\n\t\t\troles[localStorage.key(i)] = localStorage.getItem(localStorage.key(i));\n\t\t}\n\t}\n\n\t// Get language and schedule type\n\tvar language = null;\n\tvar scheduleType = null;\n\tfor (var i = 0; i < localStorage.length; i++) {\n\t\tif (localStorage.key(i) == 'language') {\n\t\t\tlanguage = localStorage.getItem(localStorage.key(i));\n\t\t}\n\n\t\tif (localStorage.key(i) == 'haldor-schedule-type') {\n\t\t\tscheduleType = localStorage.getItem(localStorage.key(i));\n\t\t}\n\t}\n\n\t// clear the local storage\n\tlocalStorage.clear();\n\n\t// again add back the schools to local storage\n\tfor (var key in schools) {\n\t\tlocalStorage.setItem(key, schools[key]);\n\t}\n\n\t// again add back the roles to local storage\n\tfor (var key in roles) {\n\t\tlocalStorage.setItem(key, roles[key]);\n\t}\n\n\t// again add back the language to local storage\n\tif (language != null) {\n\t\tlocalStorage.setItem('language', language);\n\t}\n\n\t// again add back the schedule type to local storage\n\tif (scheduleType != null) {\n\t\tlocalStorage.setItem('haldor-schedule-type', scheduleType);\n\t}\n}\n\nexport const clearPlanFilterObjects = function () {\n\tlocalStorage.removeItem('plans_filter_objects');\n}\n\nexport const activeDataAvailable = function (userId) {\n\tvar school = localStorage.getItem(\"hal.school\" + userId);\n\n\treturn school !== null;\n}\n\nexport const getActiveSchool = function (userId) {\n\tvar school = localStorage.getItem(\"hal.school\" + userId);\n\treturn school;\n}\n\nexport const setMenuItems = function (items) {\n\tif (items != null) {\n\t\tlocalStorage.setItem('menu_items', JSON.stringify(items));\n\t}\n}\n\nexport const getMenuItems = function () {\n\tlet items = localStorage.getItem('menu_items');\n\n\tif (items != null && items != '') {\n\t\tlet decoded = JSON.parse(items);\n\t\tif (decoded.length > 0) {\n\t\t\treturn decoded;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\nexport const saveWithExpiration = function (key, value, expiration = null) {\n\tif (expiration == null) {\n\t\texpiration = moment().add(12, 'hours').format();\n\t} else {\n\t\texpiration = moment(expiration).format();\n\t}\n\n\tlet item = {\n\t\tdata: value,\n\t\texpiration: expiration,\n\t};\n\n\tlocalStorage.setItem(key, JSON.stringify(item));\n}\n\nexport const saveWithExpirationAndLastModified = function (key, value, expiration = null) {\n\tif (expiration == null) {\n\t\texpiration = moment().add(12, 'hours').format();\n\t} else {\n\t\texpiration = moment(expiration).format();\n\t}\n\n\tlet item = {\n\t\tdata: value,\n\t\texpiration: expiration,\n\t\tlastModifiedUTC: moment().utc()\n\t};\n\n\tlocalStorage.setItem(key, JSON.stringify(item));\n}\n\nexport const getWithExpiration = function (key) {\n\tlet item = localStorage.getItem(key);\n\n\tif (item == null) {\n\t\treturn null;\n\t}\n\n\tlet obj = null;\n\n\ttry {\n\t\tobj = JSON.parse(item);\n\t} catch (e) {\n\t\tobj = item;\n\t}\n\n\tif (typeof obj == 'string') {\n\t\treturn obj;\n\t}\n\n\tif (typeof obj == 'object') {\n\t\tif (moment().isSameOrAfter(moment(obj.expiration))) {\n\t\t\t// Item has expired\n\t\t\tlocalStorage.removeItem(key);\n\t\t\treturn null;\n\t\t}\n\n\t\treturn obj.data;\n\t}\n\n\treturn null;\n}\n\nexport const getObjectExpiration = function (key) {\n\tlet item = localStorage.getItem(key);\n\n\tif (item == null) {\n\t\treturn null;\n\t}\n\n\tlet obj = null;\n\n\ttry {\n\t\tobj = JSON.parse(item);\n\t} catch (e) {\n\t\tobj = item;\n\t}\n\n\tif (typeof obj == 'string') {\n\t\treturn obj;\n\t}\n\n\tif (typeof obj == 'object') {\n\t\treturn obj.expiration;\n\t}\n\n\treturn null;\n}\n\nexport const getBasedOnLastModified = function (key, lastModifiedUTC) {\n\tlet item = localStorage.getItem(key);\n\n\tif (item == null) {\n\t\treturn null;\n\t}\n\n\tlet obj = null;\n\n\ttry {\n\t\tobj = JSON.parse(item);\n\t} catch (e) {\n\t\tobj = item;\n\t}\n\n\tif (typeof obj == 'string') {\n\t\treturn obj;\n\t}\n\n\tif (typeof obj == 'object') {\n\t\tif (moment.utc(lastModifiedUTC).isSameOrAfter(moment.utc(obj.lastModifiedUTC)) || moment().utc().isSameOrAfter(moment(obj.expiration))) {\n\t\t\t// object contains older data than on server\n\t\t\tlocalStorage.removeItem(key);\n\t\t\treturn null;\n\t\t}\n\n\t\treturn obj.data;\n\t}\n\n\treturn null;\n}\n\nexport const isSupported = () => {\n\ttry {\n\t\tconst key = \"__some_random_key_you_are_not_going_to_use__\";\n\t\tlocalStorage.setItem(key, key);\n\t\tlocalStorage.removeItem(key);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}","export default function ({ dispatch }) {\n return next => action => {\n if (action.payload != null) {\n if (typeof action.payload == 'string') {\n try {\n const newAction = { ...action, payload: JSON.parse(action.payload) };\n dispatch(newAction); \n } catch (error) {\n next(action);\n } \n }\n else {\n next(action);\n }\n } else {\n return next(action);\n }\n }\n};","/**\n * @typedef {import('types').HaldorEnvironment} HaldorEnvironment\n */\n\nconst environments = require('../../app-config/_environments.json');\n\n/**\n * @returns HaldorEnvironment\n */\nconst getEnvironment = () => {\n\t/** @type {HaldorEnvironment} environment */\n\tconst environment = environments.find(environment =>\n\t\tenvironment.domains.indexOf(window.location.host) > -1\n\t);\n\n\treturn environment;\n}\n\nexport default getEnvironment;","import React from 'react';\n\nclass DataClass {\n\n\tconstructor(props) {\n\t\tthis.data = props;\n\t}\n\n\tlog = () => {\n\t\tconsole.log(this.data);\n\t}\n\n\tdebug = () => {\n\t\tconsole.debug(this);\n\t}\n\n\tgetHTML = (html) => {\n\t\ttry {\n\t\t\thtml = html.replace(/amp;/g, '');\n\t\t\thtml = html.replace(/amp;wd/g, '');\n\t\t\thtml = html.replace(/</g, '<');\n\t\t\thtml = html.replace(/>/g, '>');\n\t\t\thtml = html.replace(/\\<\\/b\\>/ig, ' ');\n\t\t\thtml = html.replace(/\\<\\/i\\>/ig, ' ');\n\t\t\thtml = html.replace(/\\<\\/a\\>/ig, ' ');\n\t\t\thtml = html.replace(/\\<\\/p\\>/ig, '

');\n\t\t} catch (error) {\n\t\t\thtml = html;\n\t\t}\n\n\t\treturn html;\n\t}\n\n}\n\nexport default DataClass;\n","import moment from 'moment';\nimport DataObject from './index.js';\n\nclass DateTime extends DataObject {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet locale = localStorage.getItem('language');\n\n\t\tif (locale != null) {\n\t\t\tif (locale == 'sv') {\n\t\t\t\tlocale = 'sv-se';\n\t\t\t\tlocalStorage.setItem(\"language\", \"sv-se\");\n\t\t\t} else if (locale == 'en') {\n\t\t\t\tlocale = 'en-us';\n\t\t\t\tlocalStorage.setItem(\"language\", \"en-us\");\n\t\t\t} else if (locale == 'nb') {\n\t\t\t\tlocale = 'nb-no';\n\t\t\t\tlocalStorage.setItem(\"language\", \"nb-no\");\n\t\t\t} else if (locale == 'nn') {\n\t\t\t\tlocale = 'nn-no';\n\t\t\t\tlocalStorage.setItem(\"language\", \"nn-no\");\n\t\t\t}\n\n\t\t\tmoment.locale(locale);\n\t\t}\n\n\t\tif (this.data != null) {\n\t\t\tif (this.data.constructor.name == 'DateTime') {\n\t\t\t\tthis.data = moment.utc(this.data.getTimeStamp());\n\t\t\t} else {\n\t\t\t\tthis.data = moment.utc(this.data);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.data = moment.utc();\n\t\t}\n\t}\n\n\tgetMoment = () => {\n\t\treturn this.data;\n\t}\n\n\tset = (arg1, arg2) => {\n\t\tthis.data = this.data.set(arg1, arg2);\n\t\treturn this;\n\t}\n\n\tadd = (...args) => {\n\t\tthis.data = this.data.add(...args);\n\t\treturn this;\n\t}\n\n\tclone = () => {\n\t\treturn this.data.clone();\n\t}\n\n\tsubtract = (...args) => {\n\t\tthis.data = this.data.subtract(args);\n\t\treturn this;\n\t}\n\n\tgetUtc = () => {\n\t\tthis.data = moment.utc(this.data);\n\t\treturn this;\n\t}\n\n\tgetLongDate = () => {\n\t\treturn this.data.local().format('LL');\n\t}\n\n\tgetLongDateWithTime = () => {\n\t\treturn this.data.local().format('LLL');\n\t}\n\n\tgetDateStamp = () => {\n\t\treturn this.data.local().format('YYYY-MM-DD');\n\t}\n\n\tgetTimeStamp = () => {\n\t\treturn this.data.local().format('YYYY-MM-DD LTS');\n\t}\n\n\tgetHourStamp = () => {\n\t\treturn this.data.local().format('YYYY-MM-DD LT');\n\t}\n\n\tgetTimeStampHours = () => {\n\t\treturn this.data.local().format('YYYY-MM-DD LT');\n\t}\n\n\tgetTime = () => {\n\t\treturn this.data.local().format('LT');\n\t}\n\n\tgetShortDate = (includeTime = false) => {\n\t\tif (includeTime) {\n\t\t\treturn this.data.local().format('D MMM - LT');\n\t\t}\n\n\t\treturn this.data.local().format('D MMM');\n\t}\n\n\tgetDay = () => {\n\t\treturn this.data.local().format('dddd');\n\t}\n\n\tgetDateString = () => {\n\t\treturn this.data.local().format('dddd D MMMM');\n\t}\n\n\tgetFromNow = () => {\n\t\treturn this.data.local().fromNow();\n\t}\n\n\tformat = (format) => {\n\t\treturn this.data.local().format(format);\n\t}\n\n\tisSame = (date) => {\n\t\treturn this.data.isSame(date);\n\t}\n\n\tgetUTCTimeStamp = () => {\n\t\treturn this.data.format('YYYY-MM-DDTHH:mm:ss');\n\t}\n\n\tendOf = (period) => {\n\t\tthis.data = this.data.endOf(period);\n\t\treturn this;\n\t}\n\n}\n\nexport default DateTime;\n","import packageJson from './../../package.json';\n\nimport { isSupported } from 'helpers/localstorage';\nimport getEnviroment from 'lib/env';\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\n\nconst shorthash = require('../../app-config/shorthash.js');\nlet s_shortterm_id = shorthash.unique(new Date().toUTCString());\n\nif (isSupported()) {\n\tif (window.location.pathname === '/Auth' && localStorage.getItem('hsid') != null) {\n\t\ts_shortterm_id = localStorage.getItem('hsid');\n\t} else {\n\t\tlocalStorage.setItem('hsid', s_shortterm_id);\n\t}\n}\n\nconst appInsights = new ApplicationInsights({\n\tconfig: {\n\t\tinstrumentationKey: getEnviroment().applicationInsightKey,\n\t\tdisableExceptionTracking: false,\n\t}\n});\n\n\nappInsights.loadAppInsights();\nappInsights.addTelemetryInitializer((envelope) => {\n\tenvelope.data.hsid = s_shortterm_id;\n});\nappInsights.context.application.ver = packageJson.version;\n\nconst getEnhancedLogLevel = () => {\n\tif (localStorage.getItem('enhanced-log-level') != null) {\n\t\treturn parseInt(localStorage.getItem('enhanced-log-level'));\n\t}\n\treturn 0;\n}\n\nconst setEnhancedLogLevel = (level) => {\n\tlocalStorage.setItem('enhanced-log-level', level);\n\treturn level;\n}\n\nexport { appInsights, getEnhancedLogLevel, setEnhancedLogLevel };","/**\n * @typedef {import('@azure/msal-browser').RedirectRequest} RedirectRequest\n */\n\nimport * as microsoftTeams from \"@microsoft/teams-js\";\nimport * as msal from '@azure/msal-browser';\nimport axios from 'axios';\nimport getEnvironment from 'lib/env';\nimport moment from 'moment';\nimport store from '../index';\nimport DateTime from '_class/DateTime';\nimport { appInsights } from 'lib/appInsights';\n\n/**\n * @typedef {Object} MSALConfig MSAL Config model\n */\nconst msalConfig = {\n\tauth: {\n\t\tclientId: getEnvironment().clientId,\n\t\tauthority: 'https://login.microsoftonline.com/common/',\n\t\tpostLogoutRedirectUri: window.location.origin + '/',\n\t\tredirectUri: window.location.origin + '/',\n\t\tnavigateToLoginRequestUrl: false,\n\t},\n\tcache: {\n\t\t// TODO: Decide if we should use sessionStorage (default) or localStorage here\n\t\t// localStorage seems to work better for our use case\n\t\tcacheLocation: \"localStorage\",\n\t\tstoreAuthStateInCookie: true,\n\t},\n};\n\nconsole.log('_env', getEnvironment());\n\n/**\n * @type {RedirectRequest} loginRequest\n */\nconst loginRequest = {\n\tscopes: [\n\t\t\"openid\",\n\t\t\"profile\",\n\t\t\"offline_access\",\n\t],\n};\n\n/**\n * @type {Array} graphScopes\n */\nconst graphScopes = [\n\t\"Files.ReadWrite.All\",\n];\n\nconst instance = new msal.PublicClientApplication(msalConfig);\n\nconst _addToast = (message, type = 'warning') => {\n\tconst error = {\n\t\ttranslateMsg: message,\n\t\ttype: type,\n\t\ttarget: 'API',\n\t\ttime: new DateTime(),\n\t};\n\n\tstore.dispatch({\n\t\ttype: 'ADD_ERROR',\n\t\tpayload: error,\n\t});\n}\n\nconst requirePopupConsent = (clientId, redirectUri, scopes, knownClientApplications = []) => new Promise(async (resolve, reject) => {\n\tconst msalCustomConfig = {\n\t\tauth: {\n\t\t\tclientId: clientId,\n\t\t\tauthority: 'https://login.microsoftonline.com/common/',\n\t\t\tpostLogoutRedirectUri: window.location.origin + '/',\n\t\t\tredirectUri: window.location.origin + redirectUri,\n\t\t\tnavigateToLoginRequestUrl: false,\n\t\t},\n\t\tcache: {\n\t\t\t// TODO: Decide if we should use sessionStorage (default) or localStorage here\n\t\t\t// localStorage seems to work better for our use case\n\t\t\tcacheLocation: \"localStorage\",\n\t\t\tstoreAuthStateInCookie: false,\n\t\t},\n\t};\n\n\tconst msalClient = new msal.PublicClientApplication(msalCustomConfig);\n\n\tvar customRequest = {\n\t\tscopes: scopes\n\t}\n\n\tcustomRequest.account = getUser();\n\n\tmsalClient.acquireTokenSilent(customRequest).then(response => {\n\t\tresolve(response);\n\t}).catch(error => {\n\t\tmsalClient.acquireTokenPopup(customRequest).then((token) => {\n\t\t\tresolve(token);\n\t\t}).catch(error => {\n\t\t\treject(error);\n\t\t});\n\t});\n});\n\nconst getToken = (request) => new Promise(async (resolve, reject) => {\n\trequest.account = getUser();\n\n\tif (microsoftTeams.app.isInitialized()) {\n\t\tmicrosoftTeams.authentication.getAuthToken().then((token) => {\n\t\t\tresolve({ accessToken: token });\n\t\t}).catch((error) => {\n\t\t\tappInsights.trackTrace({ message: \"EDU005 | Teams SDK - getAuthToken fails\" }, error);\n\t\t\tconsole.log(error);\n\t\t\treject('Failed to retrieve token from Teams SDK');\n\t\t});\n\t} else {\n\t\tif (instance.getAllAccounts().length == 0) {\n\t\t\treject('User not logged in');\n\t\t\treturn true;\n\t\t}\n\n\t\tconst token = await new Promise(async (resolveToken, rejectToken) => {\n\t\t\tinstance.acquireTokenSilent(request).then(token => {\n\t\t\t\tresolveToken(token);\n\t\t\t})\n\t\t\t\t.catch(async (error) => {\n\t\t\t\t\tappInsights.trackTrace({ message: \"EDU005 | MSAL - AcquireTokenSilent fails (step 503)\" }, error);\n\t\t\t\t\tresolveToken(null);\n\t\t\t\t});\n\t\t}).catch(error => {\n\t\t\tconsole.log(\"error catch\", error);\n\t\t\treject(error);\n\t\t});\n\n\t\tresolve(token);\n\t}\n});\n\nlet tokenErrorCallbacks = [];\nconst onMsalTokenError = (callback, ...args) => {\n\tif (callback != null) {\n\t\ttokenErrorCallbacks.push(callback);\n\t\treturn true;\n\t}\n\n\ttokenErrorCallbacks.forEach(callback => {\n\t\tif (callback != null && typeof callback == 'function') {\n\t\t\tcallback(...args);\n\t\t}\n\t})\n}\n\nlet loginRequiredCallbacks = [];\nconst onMsalLoginRequired = (callback) => {\n\treturn new Promise((resolve) => {\n\t\tif (callback != null) {\n\t\t\tloginRequiredCallbacks.push(callback);\n\t\t\tresolve(true);\n\t\t\treturn true;\n\t\t}\n\n\t\tlet promises = [];\n\n\t\tloginRequiredCallbacks.forEach(callback => {\n\t\t\tif (callback != null) {\n\t\t\t\tlet promise = callback();\n\t\t\t\tpromises.push(promise);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})\n\n\t\tPromise.all(promises).then(() => {\n\t\t\tresolve(1);\n\t\t})\n\t})\n}\n\nconst getUser = () => {\n\tif (microsoftTeams.app.isInitialized()) {\n\t\treturn { username: localStorage.getItem('session.username') };\n\t} else {\n\t\tconst accounts = instance.getAllAccounts();\n\t\tif (accounts.length > 0) {\n\t\t\tconst username = localStorage.getItem('session.username');\n\t\t\tif (username) {\n\t\t\t\treturn accounts.find(account => account.username === username) || accounts[0];\n\t\t\t} else {\n\t\t\t\treturn accounts[0];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nconst setUser = (username) => {\n\tlocalStorage.setItem('session.username', username);\n}\n\nconst setOnboardingUser = (username) => {\n\tvar existingUserName = localStorage.getItem('onboarding.username');\n\n\tif (username != existingUserName) {\n\t\tlocalStorage.removeItem('onboarding.expireTokenIn');\n\t\tlocalStorage.setItem('onboarding.username', username);\n\t}\n}\n\nconst setOnboardingToken = (token) => {\n\tlocalStorage.setItem('onboarding.token', token);\n}\n\nconst setOnboardingExpireTokenIn = (expireIn) => {\n\tlocalStorage.setItem('onboarding.expireTokenIn', moment().add(expireIn, 's').format(\"YYYY-MM-DD HH:mm\"))\n}\n\nconst isTokenValid = () => {\n\tvar date = localStorage.getItem('onboarding.expireTokenIn');\n\n\tif (date != null) {\n\t\tvar now = moment();\n\t\tvar expireDate = moment(date);\n\n\t\tif (now < expireDate) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nconst getSchoolId = () => new Promise(async (resolve, reject) => {\n\tvar currentStore = store.getState();\n\tvar currentActiveSchoolId = currentStore.user.activeSchool;\n\n\t// If we have a school in the store, return it\n\tif (currentActiveSchoolId != null) {\n\t\tresolve(currentActiveSchoolId);\n\t\treturn;\n\t}\n\n\tlet properties = {\n\t\tuser: null\n\t}\n\n\t// if we dont have in store, backup check in localstorage\n\tif (microsoftTeams.app.isInitialized()) {\n\t\tmicrosoftTeams.app.getContext().then((context) => {\n\t\t\tvar schoolId = localStorage.getItem('hal.school' + context.user.id);\n\t\t\tproperties.user = context.user.id;\n\n\n\t\t\tif (schoolId == null) {\n\t\t\t\tappInsights.trackTrace({ message: \"EDU025a | MSAL - SchoolId could not be found through teams context\" }, properties);\n\t\t\t}\n\n\t\t\tresolve(schoolId);\n\t\t});\n\t} else {\n\t\tif (instance.getAllAccounts().length > 0) {\n\t\t\tconst account = getUser();\n\n\t\t\tif (account != null) {\n\t\t\t\tconst id = account.homeAccountId.split('.')[0];\n\t\t\t\tconst schoolId = localStorage.getItem('hal.school' + id);\n\t\t\t\tproperties.user = id;\n\n\t\t\t\tif (schoolId == null) {\n\t\t\t\t\tappInsights.trackTrace({ message: \"EDU025a | MSAL - SchoolId could not be found through account\" }, properties);\n\t\t\t\t}\n\n\t\t\t\tresolve(schoolId);\n\t\t\t}\n\t\t}\n\t}\n});\n\nconst getUserId = () => {\n\tconst user = getUser();\n\n\tif (user != null) {\n\t\tif (user.homeAccountId?.indexOf('.') > -1) {\n\t\t\treturn user.homeAccountId.split('.')[0];\n\t\t}\n\n\t\treturn user.homeAccountId;\n\t}\n\n\treturn null;\n}\n\nconst getTokenForScope = async () => {\n\ttry {\n\t\tconst account = getUser();\n\t\tconst customRequest = {\n\t\t\tscopes: [\"Files.ReadWrite.All\"],\n\t\t\taccount: account,\n\t\t};\n\n\t\ttry {\n\t\t\tconst tokenResponse = await instance.acquireTokenSilent(customRequest);\n\t\t\treturn tokenResponse.accessToken;\n\t\t} catch (silentError) {\n\t\t\tconst tokenResponse = await instance.acquireTokenPopup(customRequest);\n\t\t\treturn tokenResponse.accessToken;\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Token acquisition error:\", error);\n\t\treturn null;\n\t}\n};\n\nconst getConsentStatus = async () => {\n\tconst account = getUser();\n\tinstance.acquireTokenSilent({\n\t\tscopes: [\"Files.ReadWrite.All\"],\n\t\taccount: account\n\t}).then((tokenResponse) => {\n\t\tif (!tokenResponse.scopes.includes(\"Files.ReadWrite.All\")) {\n\t\t\tappInsights.trackTrace({ message: \"EDU100 | MSAL - User in tenant \" + tokenResponse.tenantId + \" has not consented to Files.ReadWrite.All\" });\n\t\t}\n\t\telse {\n\t\t\tappInsights.trackTrace({ message: \"EDU101 | MSAL - User in tenant \" + tokenResponse.tenantId + \" has consented to Files.ReadWrite.All\" });\n\t\t}\n\t}).catch((error) => {\n\t\tappInsights.trackTrace({ message: \"EDU102 | MSAL - User in tenant \" + account.tenantId + \" errorcode \" + error.errorCode });\n\t});\n\n};\n\nconst http = axios.create({\n\tbaseURL: getEnvironment().baseURL,\n});\n\nconst errors = {\n\tAuthError: msal.AuthError,\n\tAuthErrorMessage: msal.AuthErrorMessage,\n\tBrowserAuthError: msal.BrowserAuthError,\n\tBrowserAuthErrorMessage: msal.BrowserAuthErrorMessage,\n\tBrowserConfigurationAuthError: msal.BrowserConfigurationAuthError,\n\tBrowserConfigurationAuthErrorMessage: msal.BrowserConfigurationAuthErrorMessage,\n\tInteractionRequiredAuthError: msal.InteractionRequiredAuthError,\n};\n\nconst clearInteractionProgress = () => {\n\tif (document.cookie.indexOf('interaction_in_progress') > -1 || document.cookie.indexOf('interaction.status') > -1) {\n\t\tdocument.cookie.split(\";\").forEach(function (c) {\n\t\t\tdocument.cookie = c.replace(/^ +/, \"\").replace(/=.*/, \"=;expires=\" + new Date().toUTCString() + \";path=/\");\n\t\t});\n\t}\n\n\tObject.keys(sessionStorage).forEach(key => {\n\t\tif (key.indexOf('interaction.status') > -1) {\n\t\t\tsessionStorage.removeItem(key);\n\t\t}\n\t});\n\n\tObject.keys(localStorage).forEach(key => {\n\t\tif (key.indexOf('interaction.status') > -1) {\n\t\t\tlocalStorage.removeItem(key);\n\t\t}\n\t});\n}\n\nhttp.interceptors.request.use((config) => {\n\treturn new Promise(async (resolve, reject) => {\n\t\tlet request = { ...loginRequest };\n\n\t\tif (config.url.indexOf('graph.microsoft.com') > -1) {\n\t\t\t// Add scopes for MS Graph\n\t\t\trequest.scopes = [\n\t\t\t\t...graphScopes,\n\t\t\t\t...request.scopes\n\t\t\t];\n\t\t} else {\n\t\t\t// Add scopes for environment\n\t\t\trequest.scopes = [\n\t\t\t\t...getEnvironment().scopes,\n\t\t\t\t...request.scopes\n\t\t\t];\n\t\t}\n\n\t\tvar token = null;\n\t\tvar onboardingInit = localStorage.getItem('onboarding:init');\n\n\t\t/** If Admin consent is present then we make sure accessToken always have to taken from getToken method **/\n\t\tvar onboardingValid = localStorage.getItem(\"onboarding.valid\");\n\n\t\tconst { pathname } = window.location;\n\n\t\tif ((pathname.indexOf('/teams/he') > -1 && pathname.indexOf('/tab-configure') < 0 && onboardingValid == null) || (pathname.indexOf('/teams/he/tab-configure') > -1 && onboardingInit != null && onboardingValid == null)) {\n\t\t\tlet accessToken = localStorage.getItem('onboarding.token');\n\n\t\t\tif (!accessToken)\n\t\t\t\tconsole.log(\"token does not exit in localstorage\", accessToken);\n\n\t\t\ttoken = {\n\t\t\t\taccessToken: accessToken\n\t\t\t}\n\t\t} else {\n\t\t\ttoken = await getToken(request);\n\t\t}\n\n\t\tconst lcid = localStorage.getItem('language');\n\t\tlet currentSchool = await getSchoolId();\n\n\t\tif (currentSchool != null) {\n\t\t\tif (config.params == null) {\n\t\t\t\tconfig.params = {};\n\t\t\t}\n\n\t\t\tconfig.params['SchoolId'] = currentSchool;\n\t\t} else {\n\t\t\tappInsights.trackTrace({ message: \"EDU025b | MSAL - SchoolId could not be found\" });\n\t\t}\n\n\t\tif (lcid != null) {\n\t\t\tif (config.params == null) {\n\t\t\t\tconfig.params = {};\n\t\t\t}\n\n\t\t\tconfig.params['lcid'] = lcid;\n\t\t}\n\n\t\tif (token != null) {\n\t\t\tconfig.headers.common['Authorization'] = \"Bearer \" + token.accessToken;\n\t\t}\n\n\t\t// TODO: Reject promise if something goes wrong with fetching token\n\t\tresolve(config);\n\t})\n}, function (error) {\n\treturn Promise.reject(error);\n});\n\nhttp.interceptors.response.use((response) => {\n\tif (response.status == 204) {\n\t\tresponse.data = null;\n\t}\n\n\treturn response;\n}, async (error) => {\n\tif (error == null || error.response == null) {\n\t\treturn Promise.reject(error);\n\t}\n\n\tif (error.response.status == 401) {\n\t\treturn onMsalLoginRequired().then((result) => {\n\t\t\treturn http.request(error.config)\n\t\t})\n\t}\n\n\tif (error.response.status == 403) {\n\t\tappInsights.trackTrace({ message: \"EDU021 | MSAL lib interceptor got status 403\" }, {\n\t\t\tdata: error?.response?.data,\n\t\t\tparams: error?.config?.params,\n\t\t\turl: error?.config?.url,\n\t\t\tmethod: error?.config?.method,\n\t\t\tbaseURL: error?.config?.baseURL,\n\t\t\tschoolId: error?.config?.params['SchoolId'],\n\t\t});\n\n\t\t// Dispatch an error (toast bar)\n\t\t_addToast(\"You don't seem to have permission to perform this action. For support, contact your school administrator.\", 'error');\n\n\t\treturn Promise.reject(error);\n\t}\n\n\tif (error.response.status == 0) {\n\t\tappInsights.trackTrace({ message: \"EDU020 | MSAL lib interceptor got status 0\" }, {\n\t\t\tdata: error?.response?.data,\n\t\t\tparams: error?.config?.params,\n\t\t\turl: error?.config?.url,\n\t\t\tmethod: error?.config?.method,\n\t\t\tbaseURL: error?.config?.baseURL,\n\t\t\tschoolId: error?.config?.params['SchoolId'],\n\t\t});\n\n\t\t// Wait 1 second before trying again\n\t\tawait new Promise((resolve) => {\n\t\t\tsetTimeout(() => resolve(1), 1000);\n\t\t});\n\n\t\t// Save or update number of tries in HTTP headers\n\t\tif (error.config.headers['Retries'] == null) {\n\t\t\t// Dispatch an error (toast bar) first retry\n\t\t\t_addToast(\"You seem to have lost connection to the server. You can keep working as usual while we're trying to reconnect you.\");\n\n\t\t\terror.config.headers['Retries'] = '1';\n\t\t} else {\n\t\t\terror.config.headers['Retries'] = parseInt(error.config.headers['Retries']) + 1 + '';\n\t\t}\n\n\t\tif (parseInt(error.config.headers['Retries']) > 49) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\n\t\t// Make call again\n\t\treturn http.request(error.config)\n\t}\n\n\treturn Promise.reject(error)\n});\n\n// Export members of msal.js\nexport {\n\tloginRequest,\n\tgetToken,\n\tgetTokenForScope,\n\tgetConsentStatus,\n\thttp,\n\tgetUser,\n\tsetUser,\n\tsetOnboardingUser,\n\tgetUserId,\n\tsetOnboardingToken,\n\trequirePopupConsent,\n\terrors,\n\tonMsalTokenError,\n\tsetOnboardingExpireTokenIn,\n\tisTokenValid,\n\tonMsalLoginRequired,\n\tclearInteractionProgress,\n};\n\n// Export MSAL instance\nexport default instance;","import { http } from 'lib/msal';\nimport getEnvironment from 'lib/env';\n\nlet api = {\n\tget: function (route, useBigAzure) {\n\t\tif (useBigAzure) {\n\t\t\treturn http.get(route, { baseURL: getEnvironment()?.baseURL });\n\t\t}\n\t\treturn http.get(route);\n\t},\n\tput: function (route, data) {\n\t\treturn http.put(route, data);\n\t},\n\tpost: function (route, data) {\n\t\treturn http.post(route, data, {\n\t\t\theaders: {\n\t\t\t\t'content-type': 'application/json'\n\t\t\t},\n\t\t});\n\t},\n\tdelete: function (route, data) {\n\t\treturn http.delete(route, {\n\t\t\tdata: data != null ? data : null,\n\t\t});\n\t},\n\tpatch: function (route, data, operations) {\n\t\treturn new Promise((resolve) => {\n\t\t\thttp.patch(route, operations).then((response) => {\n\t\t\t\tresolve(response);\n\t\t\t});\n\t\t});\n\t},\n\tgetFile: function (id) {\n\t\treturn http.get(`fileItems/${id}`, {\n\t\t\tresponseType: 'blob',\n\t\t});\n\t},\n\tgetOneDriveFile: function (route, token) {\n\t\treturn http.get(route, {\n\t\t\theaders: {\n\t\t\t\t'Authorization': `Bearer ${token}`\n\t\t\t}\n\t\t});\n\t}\n};\n\nexport default api;","import api from 'lib/api';\n\nexport const SCHEDULE_TODAY = 'SCHEDULE_GET_SCHEDULE_TODAY';\nexport const CLEAR_SCHEDULE_FROM_STORE = 'CLEAR_SCHEDULE_FROM_STORE';\nexport const GET_SCHEDULE_ITEM = 'SCHEDULE_GET_SCHEDULE_ITEM';\nexport const GET_SCHEDULES_BY_ID = 'SCHEDULE_GET_SCHEDULE_ITEMS'\nexport const GET_SCHEDULE_FOR_USER = 'SCHEDULE_GET_USER_SCHEDULE';\nexport const GET_SCHEDULE_FOR_USERS = 'GET_SCHEDULE_FOR_USERS';\nexport const CLEAR_SCHEDULE_ITEM = 'SCHEDULE_CLEAR_SCHEDULE_ITEM';\nexport const GET_ACTIVITIES_FOR_USER = 'GET_ACTIVITIES_FOR_USER';\nexport const GET_ACTIVITIES_FOR_GROUPS = 'GET_ACTIVITIES_FOR_GROUPS';\nexport const CLEAR_ACTIVITIES_FOR_OTHERS_STORE = 'CLEAR_ACTIVITIES_FOR_OTHERS_STORE';\nexport const CLEAR_SEARCHED_SCHEDULES = 'CLEAR_SEARCHED_SCHEDULES'\nexport const UPDATE_LESSON_LIST = 'UPDATE_LESSON_LIST';\nexport const GET_ACTIVITIES_BY_ID = 'GET_ACTIVITIES_BY_ID';\n\nexport const SUBMIT_CALENDAR_EVENT = 'SCHEDULE_CREATE_CALENDAR_EVENT';\nexport const UPDATE_CALENDAR_EVENT = 'SCHEDULE_UPDATE_CALENDAR_EVENT';\nexport const DELETE_CALENDAR_EVENT = 'SCHEDULE_DELETE_CALENDAR_EVENT';\nexport const DELETE_LESSON_IN_LIST = 'DELETE_LESSON_IN_LIST';\n\nexport const GET_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE =\n\t'GET_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE';\nexport const CLEAR_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE =\n\t'CLEAR_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE';\n\nexport const SET_LAST_FETCHED = 'SET_LAST_FETCHED';\n\nexport const getSchedule = (start, end) => ({\n\ttype: SCHEDULE_TODAY,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`schedule?starttime=${start}&endtime=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getScheduleForMe = (user, start, end) => ({\n\ttype: GET_SCHEDULE_FOR_USER,\n\tpayload: new Promise(async (resolve, reject) => {\n\t\tapi.get(`schedule?starttime=${start}&endtime=${end}`).then((response) => {\n\t\t\tresolve({\n\t\t\t\tuserId: user,\n\t\t\t\tdocuments: response.data,\n\t\t\t});\n\t\t}).catch((e) => {\n\t\t\tconsole.log(e);\n\t\t})\n\t}),\n});\n\nexport const getScheduleForUser = (user, start, end) => ({\n\ttype: GET_SCHEDULE_FOR_USER,\n\tpayload: new Promise(async (resolve, reject) => {\n\t\tapi.get(`schedule/user/${user}/?starttime=${start}&endtime=${end}`).then((response) => {\n\t\t\tresolve({\n\t\t\t\tuserId: user,\n\t\t\t\tdocuments: response.data,\n\t\t\t});\n\t\t}).catch((e) => {\n\t\t\tconsole.log(e);\n\t\t})\n\t}),\n});\n\nexport const getActivitiesForMe = (start, end, userId) => ({\n\ttype: GET_ACTIVITIES_FOR_USER,\n\tpayload: new Promise(async (resolve) => {\n\t\tapi.get(`users/me/activities?startDate=${start}&endDate=${end}`).then((response) => {\n\t\t\tresolve({\n\t\t\t\tuserId: userId,\n\t\t\t\tdocuments: response.data,\n\t\t\t});\n\t\t});\n\t}),\n});\n\nexport const getActivitiesById = (userId, start, end) => ({\n\ttype: GET_ACTIVITIES_BY_ID,\n\tpayload: new Promise(async (resolve) => {\n\t\tapi.get(`activities/users/${userId}?startDate=${start}&endDate=${end}`)\n\t\t\t.then((response) => {\n\t\t\t\tresolve({\n\t\t\t\t\tdocuments: response.data,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\tconsole.log(e);\n\t\t\t});\n\t}),\n});\n\nexport const getScheduleForGroups = (startDate, endDate, section, id) => ({\n\ttype: GET_SCHEDULE_FOR_USERS,\n\tpayload: new Promise(async (resolve) => {\n\t\tapi.post(`schedule/users?starttime=${startDate}&endtime=${endDate}`, section).then((response) => {\n\t\t\tresolve({\n\t\t\t\tdocuments: response.data,\n\t\t\t\tstartDate: startDate,\n\t\t\t\tendDate: endDate,\n\t\t\t\tid: id\n\t\t\t});\n\t\t}).catch((e) => {\n\t\t\tconsole.log(e);\n\t\t})\n\t}),\n})\nexport const getActivitesForGroups = (startDate, endDate, section, id) => ({\n\ttype: GET_ACTIVITIES_FOR_GROUPS,\n\tpayload: new Promise(async (resolve) => {\n\t\tapi.post(`activities/sections?startDate=${startDate}&endDate=${endDate}`, section).then((response) => {\n\t\t\tresolve({\n\t\t\t\tdocuments: response.data,\n\t\t\t\tstartDate: startDate,\n\t\t\t\tendDate: endDate,\n\t\t\t\tid: id\n\t\t\t});\n\t\t});\n\t}),\n});\n\nexport const getScheduleItem = (id) => ({\n\ttype: GET_SCHEDULE_ITEM,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`schedule/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getScheduleItems = (id) => ({\n\ttype: GET_SCHEDULES_BY_ID,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`schedule/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const setLastFetched = (date) => ({ type: SET_LAST_FETCHED, payload: date });\n\nexport const clearScheduleItem = () => ({\n\ttype: CLEAR_SCHEDULE_ITEM,\n\tpayload: true,\n});\nexport const clearSearchedSchedules = () => ({\n\ttype: CLEAR_SEARCHED_SCHEDULES,\n\tpayload: true,\n});\nexport const clearActivitesForOther = () => ({\n\ttype: CLEAR_ACTIVITIES_FOR_OTHERS_STORE,\n\tpayload: [],\n});\n\nexport const clearScheduleFromStore = () => ({\n\ttype: CLEAR_SCHEDULE_FROM_STORE,\n\tpayload: [],\n});\n\nexport const submitCalendarEvent = (values) => ({\n\ttype: SUBMIT_CALENDAR_EVENT,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`schedule`, values).then((response) => {\n\t\t\t// TODO: Add error here\n\t\t\tif (false) {\n\t\t\t\treject(response.data);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const updateCalendarEvent = (values) => ({\n\ttype: UPDATE_CALENDAR_EVENT,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put(`schedule`, values).then((response) => {\n\t\t\tif (false) {\n\t\t\t\treject(response);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const deleteCalendarEvent = (id) => ({\n\ttype: DELETE_CALENDAR_EVENT,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.delete(`schedule/${id}`).then((response) => {\n\t\t\tif (response.status != 200) reject(0);\n\n\t\t\tresolve(1);\n\t\t});\n\t}),\n});\n\nexport const getNotReportedSchedulePositions = (roleId, startDate, endDate, callback) => ({\n\ttype: GET_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`schedule/notreported?roleId=${roleId}&startDate=${startDate}&endDate=${endDate}`).then(\n\t\t\t(response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t);\n\t}),\n});\n\nexport const clearNotReportedSchedulePositions = () => ({\n\ttype: CLEAR_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE,\n\tpayload: [],\n});\n\nexport const updateLessonInList = (updatedLessonList) => {\n\treturn async (dispatch) => {\n\t\ttry {\n\t\t\tdispatch({\n\t\t\t\ttype: UPDATE_LESSON_LIST,\n\t\t\t\tpayload: updatedLessonList,\n\t\t\t});\n\t\t\treturn updatedLessonList;\n\t\t} catch (error) {\n\t\t\t// Handle the error appropriately\n\t\t\tthrow error;\n\t\t}\n\t};\n\n}\n\nexport const deleteLessonInList = (removedId) => {\n\treturn async (dispatch) => {\n\t\ttry {\n\t\t\tdispatch({\n\t\t\t\ttype: DELETE_LESSON_IN_LIST,\n\t\t\t\tpayload: removedId\n\t\t\t});\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\t// Handle the error appropriately\n\t\t\tthrow error;\n\t\t}\n\t};\n\n}","import api from 'lib/api';\nimport { CLEAR_SCHEDULE_FROM_STORE } from './schedule';\n\nexport const ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS = 'ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS';\nexport const ACTIVE_TASK = 'ACTIVE_TASK';\nexport const ASSIGNMENT_CREATE = 'ASSIGNMENTS_ASSIGNMENT_CREATE';\nexport const ASSIGNMENT_UPDATE = 'ASSIGNMENTS_ASSIGNMENT_UPDATE';\nexport const CLEAR_ASSIGNMENT_SECTION = 'ASSIGNMENTS_CLEAR_ASSIGNMENT_SECTION';\nexport const CLEAR_ASSIGNMENTS_FROM_STORE = 'CLEAR_ASSIGNMENTS_FROM_STORE';\nexport const CLEAR_LATEST_ASSIGNMENTS = 'CLEAR_LATEST_ASSIGNMENTS';\nexport const CREATE_ASSIGNMENT_TASK_WORKSPACE = 'CREATE_ASSIGNMENT_TASK_WORKSPACE';\nexport const CREATE_BULK_TASKS = 'ASSIGNMENTS_CREATE_BULK_TASKS';\nexport const DELETE_ASSIGNMENT_FROM_STORE = 'DELETE_ASSIGNMENT_FROM_STORE';\nexport const DELETE_USER_ASSIGNMENT_DOCUMENT = 'DELETE_USER_ASSIGNMENT_DOCUMENT';\nexport const GET_ASSIGNMENT_EVENTS_PAGINATION = 'GET_ASSIGNMENT_EVENTS_PAGINATION';\nexport const GET_ASSIGNMENT_SECTION = 'ASSIGNMENTS_GET_ASSIGNMENT_SECTION';\nexport const GET_ASSIGNMENT_STATUS = 'ASSIGNMENTS_GET_ASSIGNMENT_STATUS';\nexport const GET_ASSIGNMENT_STUDENT_ADJUSTMENTS = 'ASSIGNMENTS_GET_ASSIGNMENT_STUDENT_ADJUSTMENTS';\nexport const GET_FOLDER_FILES = 'GET_FOLDER_FILES';\nexport const GET_HALDOR_ASSIGNMENTS = 'GET_HALDOR_ASSIGNMENTS';\nexport const GET_LATEST_HALDOR_ASSIGNMENTS = 'GET_LATEST_HALDOR_ASSIGNMENTS';\nexport const GET_LATEST_MICROSOFT_ASSIGNMENTS = 'GET_LATEST_MICROSOFT_ASSIGNMENTS';\nexport const GET_MICROSOFT_EDUCATION_ASSIGNMENTS = 'GET_MICROSOFT_EDUCATION_ASSIGNMENTS';\nexport const GET_TEAMS_ASSIGNMENT_DETAILS = 'ASSIGNMENT_SGET_TEAMS_ASSIGNMENT_DETAILS';\nexport const GET_TEAMS_ASSIGNMENT_SUBMISSION = 'ASSIGNMENTS_GET_TEAMS_ASSIGNMENT_SUBMISSION';\nexport const GET_TEAMS_ASSIGNMENTS = 'ASSIGNMENTS_GET_TEAMS_ASSIGNMENT';\nexport const SEARCH_ASSIGNMENT = 'SEARCH_ASSIGNMENT';\nexport const SET_ACTIVE_ASSIGNMENT = 'SET_ACTIVE_ASSIGNMENT';\nexport const SET_ASSIGNMENT_SERVICES = 'SET_ASSIGNMENT_SERVICES';\nexport const SET_MY_ASSIGNMENTS_ACTIVE_GROUP = 'ASSIGNMENTS_SET_ACTIVE_GROUP_ON_MY_ASSIGNMENTS';\nexport const SET_TEACHER_DONE = 'SET_TEACHER_DONE';\nexport const UPDATE_ACTIVE_ASSIGNMENT = 'UPDATE_ACTIVE_ASSIGNMENT';\nexport const UPDATE_ASSIGNMENT_LIST = 'UPDATE_ASSIGNMENT_LIST';\nexport const UPDATE_ASSIGNMENT_TASK_STATUS = 'UPDATE_ASSIGNMENT_TASK_STATUS';\nexport const UPDATE_ASSIGNMENT_TASK_SUBMITTED_DATE = 'UPDATE_ASSIGNMENT_TASK_SUBMITTED_DATE';\nexport const UPLOAD_USER_ONE_DRIVE_DOCUMENT = 'UPLOAD_USER_ONE_DRIVE_DOCUMENT';\nexport const SET_CURRENT_ASSIGNMENT_EVENT_PAGE = 'SET_CURRENT_ASSIGNMENT_EVENT_PAGE';\nexport const CLEAR_ASSIGNMENT_EVENT_PAGINATION_FROM_STORE = 'CLEAR_ASSIGNMENT_EVENT_PAGINATION';\nexport const SET_ASSIGNMENT_EVENT_PAGE_FILTER = 'SET_ASSIGNMENT_EVENT_PAGE_FILTER';\nexport const SET_ASSIGNMENT_EVENT_PAGE_SORT = 'SET_ASSIGNMENT_EVENT_PAGE_SORT';\n\nexport const getMicrosoftEducationAssignments = (graphId) => ({\n\ttype: GET_MICROSOFT_EDUCATION_ASSIGNMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tlet endpoint = 'assignments?origin=MS_ASSIGNMENTS';\n\t\tif (graphId != null) {\n\t\t\tendpoint += '&graphId=' + graphId;\n\t\t}\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getHaldorAssignments = (graphId, startDate, endDate, expand = null) => ({\n\ttype: GET_HALDOR_ASSIGNMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tlet endpoint = 'assignments?origin=HALDOR_ASSIGNMENTS';\n\t\tif (graphId != null) {\n\t\t\tendpoint += '&graphId=' + graphId;\n\t\t}\n\n\t\tif (startDate != null) {\n\t\t\tendpoint += '&startDate=' + startDate;\n\t\t}\n\n\t\tif (endDate != null) {\n\t\t\tendpoint += '&endDate=' + endDate;\n\t\t}\n\n\t\tif (expand != null) {\n\t\t\tendpoint += '&expand=' + expand;\n\t\t}\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\nexport const clearAssignmentEventPaginationFromStore = () => ({\n\ttype: CLEAR_ASSIGNMENT_EVENT_PAGINATION_FROM_STORE,\n\tpayload: new Promise((resolve) => {\n\t\tresolve();\n\t}),\n});\n\n\nexport const setCurrentAssignmentEventPage = (page) => ({\n\ttype: SET_CURRENT_ASSIGNMENT_EVENT_PAGE,\n\tpayload: new Promise((resolve) => {\n\t\tresolve(page);\n\t}),\n});\n\nexport const setAssignmentEventPageFilter = (filterField, filterValues) => ({\n\ttype: SET_ASSIGNMENT_EVENT_PAGE_FILTER,\n\tpayload: { filterField, filterValues }\n});\n\nexport const setAssignmentEventPageSort = (sortField, sortOrder) => ({\n\ttype: SET_ASSIGNMENT_EVENT_PAGE_SORT,\n\tpayload: { sortField, sortOrder }\n});\n\nexport const getAssignmentEvents = (page, pageSize = 10, params) => {\n\treturn async (dispatch) => {\n\t\ttry {\n\t\t\tconst response = await api.post(`assignments/events?page=${page}&pageSize=${pageSize}`, params);\n\n\t\t\tvar data = {\n\t\t\t\tpage: page,\n\t\t\t\ttotal: response.data?.total,\n\t\t\t\tevents: response.data?.data,\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: GET_ASSIGNMENT_EVENTS_PAGINATION,\n\t\t\t\tpayload: data\n\t\t\t});\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\t// Handle the error appropriately\n\t\t\tthrow error;\n\t\t}\n\t};\n};\n\nexport const createAssignment = (values) => {\n\treturn async (dispatch) => {\n\t\tconst json = JSON.stringify(values);\n\t\tconst response = await api.post('assignments', json);\n\t\tdispatch({ type: ASSIGNMENT_CREATE, payload: response.data });\n\t\tdispatch({ type: CLEAR_SCHEDULE_FROM_STORE });\n\t};\n};\n\nexport const updateAssignment = (values) => {\n\treturn async (dispatch) => {\n\t\tawait api.put('assignments', values);\n\t\tconst response = await api.get(`assignments/${values.id}`);\n\t\tdispatch({ type: ASSIGNMENT_UPDATE, payload: response.data });\n\t\tdispatch({ type: CLEAR_SCHEDULE_FROM_STORE });\n\t};\n};\n\nexport const uploadUserOneDrive = (assignmentId, files) => ({\n\ttype: UPLOAD_USER_ONE_DRIVE_DOCUMENT,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`assignments/${assignmentId}/uploadOneDriveDocuments`, files)\n\t\t\t.then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t}),\n});\n\nexport const updateAssignmentInList = (updatedAssignment) => {\n\treturn async (dispatch) => {\n\t\ttry {\n\t\t\tdispatch({\n\t\t\t\ttype: UPDATE_ASSIGNMENT_LIST,\n\t\t\t\tpayload: updatedAssignment,\n\t\t\t});\n\t\t\treturn updatedAssignment;\n\t\t} catch (error) {\n\t\t\t// Handle the error appropriately\n\t\t\tthrow error;\n\t\t}\n\t};\n\n}\n\nexport const updateAssignmentTaskStatus = (assignmentId, assignmentTaskId, status) => {\n\treturn async (dispatch) => {\n\t\ttry {\n\t\t\tconst response = await api.put('assignments/Student/Status?assignmentTaskId=' + assignmentTaskId + '&status=' + status)\n\t\t\tdispatch({\n\t\t\t\ttype: UPDATE_ASSIGNMENT_TASK_STATUS,\n\t\t\t\tpayload: response.data,\n\t\t\t});\n\t\t\treturn response.data;\n\t\t} catch (error) {\n\t\t\t// Handle the error appropriately\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\nexport const updateAssignmentTaskSubmittedDate = (task) => {\n\treturn async (dispatch) => {\n\t\ttry {\n\t\t\tconst response = await api.put(`assignments/${task.assignmentId}/tasks/${task.id}/submittedDate`, task.submittedDate);\n\t\t\tdispatch({\n\t\t\t\ttype: UPDATE_ASSIGNMENT_TASK_SUBMITTED_DATE,\n\t\t\t\tpayload: response.data,\n\t\t\t});\n\t\t\treturn response.data;\n\t\t} catch (error) {\n\t\t\t// Handle the error appropriately\n\t\t\tthrow error;\n\t\t}\n\t};\n};\n\nexport const createBulkAssignments = (values) => {\n\treturn async (dispatch) => {\n\t\tconst json = JSON.stringify(values);\n\t\tconst response = await api.post('assignments/bulk', json);\n\t\tdispatch({ type: CREATE_BULK_TASKS, payload: response.data });\n\t\tdispatch({ type: CLEAR_SCHEDULE_FROM_STORE });\n\t};\n};\n\nexport const createAssignmentTaskWorkspace = (assignmentId, assignmentTaskId) => ({\n\ttype: CREATE_ASSIGNMENT_TASK_WORKSPACE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`assignments/${assignmentId}/tasks/${assignmentTaskId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateBulkAssignmentObject = (id, origin = false) => ({\n\ttype: CREATE_BULK_TASKS,\n\tpayload: new Promise((resolve) => {\n\t\tlet endpoint = `assignments/${id}`;\n\t\tif (origin) {\n\t\t\tendpoint = endpoint + \"?origin=HALDOR_ASSIGNMENTS\"\n\t\t}\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve([response.data]);\n\t\t});\n\t}),\n});\n\nexport const getTaskDetails = (id, team) => ({\n\ttype: ACTIVE_TASK,\n\tpayload: new Promise((resolve, reject) => {\n\t\tlet url = `assignments/${id}`;\n\t\tif (team != null) {\n\t\t\turl += `?groupId=${team}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getAssignmentKnowledgeCollections = (sectionId, assignmentId) => ({\n\ttype: ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`knowledge/section/${sectionId}/assignment/${assignmentId}/collections`).then(\n\t\t\t(response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t);\n\t}),\n});\n\nexport const getFolderFiles = (assignmentId, taskId) => ({\n\ttype: GET_FOLDER_FILES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${assignmentId}/task/${taskId}/files`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteAssignmentUserDocument = (assignmentId, fileName) => ({\n\ttype: DELETE_USER_ASSIGNMENT_DOCUMENT,\n\tpayload: new Promise((resolve) => {\n\t\tconst values = {\n\t\t\tassignmentId: assignmentId,\n\t\t\tfileName: fileName,\n\t\t};\n\n\t\tapi.delete(`assignments/${assignmentId}/deleteDocument/${fileName}`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateActiveAssignment = (assignment) => ({\n\ttype: UPDATE_ACTIVE_ASSIGNMENT,\n\tpayload: assignment,\n});\n\nexport const setActiveAssignment = (id) => ({\n\ttype: SET_ACTIVE_ASSIGNMENT,\n\tpayload: id,\n});\n\nexport const deleteAssignmentFromStore = (id) => ({\n\ttype: DELETE_ASSIGNMENT_FROM_STORE,\n\tpayload: new Promise((resolve) => {\n\t\tresolve(id);\n\t}),\n});\n\nexport const clearAssignmentsFromStore = () => ({\n\ttype: CLEAR_ASSIGNMENTS_FROM_STORE,\n\tpayload: true,\n});\n\nexport const getLatestMicrosoftEducationAssignments = (team) => ({\n\ttype: GET_LATEST_MICROSOFT_ASSIGNMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/?graphId=${team}&top=10&origin=MS_ASSIGNMENTS`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getLatestHaldorAssignments = (team) => ({\n\ttype: GET_LATEST_HALDOR_ASSIGNMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/?graphId=${team}&top=10&origin=HALDOR_ASSIGNMENTS`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMicrosoftAssignments = (team) => ({\n\ttype: GET_TEAMS_ASSIGNMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/?graphId=${team}&origin=MS_ASSIGNMENTS`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMicrosoftAssignmentDetails = (id) => ({\n\ttype: GET_TEAMS_ASSIGNMENT_DETAILS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${id}/details`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getAssignmentSubmission = (assignment, submission) => ({\n\ttype: GET_TEAMS_ASSIGNMENT_SUBMISSION,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${assignment}/submissions/${submission}/files`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const setTeacherDone = (assignmentId, done) => ({\n\ttype: SET_TEACHER_DONE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post(`assignments/${assignmentId}/teacherdone`, done).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearLatestAssignments = () => ({\n\ttype: CLEAR_LATEST_ASSIGNMENTS,\n\tpayload: [],\n});\n\nexport const setAssignmentServices = (services) => ({\n\ttype: SET_ASSIGNMENT_SERVICES,\n\tpayload: services,\n});\n\nexport const searchAssignment = (value) => ({\n\ttype: SEARCH_ASSIGNMENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/search?term=${value}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getAssignmentStatus = (assignmentId) => ({\n\ttype: GET_ASSIGNMENT_STATUS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${assignmentId}/status`).then((response) => {\n\t\t\tvar reponseObject = { assigmentId: assignmentId, created: response.data };\n\t\t\tresolve(reponseObject);\n\t\t});\n\t}),\n});\n\nexport const getStudentAdditionalAdjustmentsForAssignment = (assignmentId) => ({\n\ttype: GET_ASSIGNMENT_STUDENT_ADJUSTMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${assignmentId}/studentAdditionalAdjustments`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const setMyAssignmentsActiveGroup = (groupId) => ({\n\ttype: SET_MY_ASSIGNMENTS_ACTIVE_GROUP,\n\tpayload: groupId,\n});\n\nexport const getAssignmentSection = (id, callback) => ({\n\ttype: GET_ASSIGNMENT_SECTION,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${id}`).then((response) => {\n\t\t\tvar data = response.data;\n\n\t\t\tif (data && data.courses != null && data.courses.length > 0) {\n\t\t\t\tdata.courses.forEach((element) => {\n\t\t\t\t\tvar sortedList = [];\n\t\t\t\t\tif (element.details != null && element.details.length > 0) {\n\t\t\t\t\t\tvar activeDetailIndex = element.details.findIndex(\n\t\t\t\t\t\t\t(element) => element.endDate == null\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (activeDetailIndex > -1) {\n\t\t\t\t\t\t\tvar activeDetail = element.details[activeDetailIndex];\n\t\t\t\t\t\t\telement.details.splice(activeDetailIndex, 1);\n\t\t\t\t\t\t\telement.details.unshift(activeDetail);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const clearAssignmentSection = () => ({\n\ttype: CLEAR_ASSIGNMENT_SECTION,\n\tpayload: true,\n});\n","import api from 'lib/api';\n\nexport const KNOWLEDGE = 'KNOWLEDGE';\nexport const CLEAR_KNOWLEDGE = 'CLEAR_KNOWLEDGE';\nexport const ACTIVE_PLAN_KNOWLEDGECOLLECTIONS = 'ACTIVE_PLAN_KNOWLEDGECOLLECTIONS';\nexport const ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS = 'ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS';\nexport const UPDATE_CLARIFICATION = 'UPDATE_CLARIFICATION';\nexport const DELETE_CLARIFICATION = 'DELETE_CLARIFICATION';\n\n\nexport const getKnowledgeBySection = (sectionId, grouped, callback) => ({\n\ttype: KNOWLEDGE,\n\tpayload: new Promise((resolve) => {\n\t\tlet endpoint = `knowledge/section/${sectionId}`;\n\n\t\tif (grouped) {\n\t\t\tendpoint = `${endpoint}/grouped/paragraph`;\n\t\t} else {\n\t\t\tendpoint = `${endpoint}/collections`;\n\t\t}\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\nexport const getGroupedKnowledgeBySection = (sectionId, callback) => ({\n\ttype: KNOWLEDGE,\n\tpayload: new Promise((resolve) => {\n\t\tconst endpoint = `knowledge/section/${sectionId}/collections`;\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\nexport const getPlanKnowledgeCollections = (sectionId, planId, callback) => ({\n\ttype: ACTIVE_PLAN_KNOWLEDGECOLLECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`knowledge/section/${sectionId}/plan/${planId}/collections`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\nexport const getAssignmentKnowledgeCollections = (sectionId, assignmentId, callback) => ({\n\ttype: ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`knowledge/section/${sectionId}/assignment/${assignmentId}/collections`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateClarification = (clarification, callback) => ({\n\ttype: UPDATE_CLARIFICATION,\n\tpayload: new Promise((resolve) => {\n\t\tconst endpoint = 'knowledge/clarification';\n\n\t\tapi.put(endpoint, clarification).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteClarification = (clarification, callback) => ({\n\ttype: DELETE_CLARIFICATION,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`knowledge/clarification/${clarification.id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const clearKnowledge = () => ({\n\ttype: CLEAR_KNOWLEDGE,\n\tpayload: [],\n});\n","\nexport function objectsAreSame(x, y) {\n\tlet objectsAreSame = true;\n\n\tfor (var i = 0; x.length > i; i++) {\n\t\tif (typeof (x[i]) != 'undefined' && typeof (y[i]) != 'undefined') {\n\t\t\tfor (var propertyName in x[i]) {\n\t\t\t\tif (x[i][propertyName] !== y[i][propertyName]) {\n\t\t\t\t\tobjectsAreSame = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tobjectsAreSame = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn objectsAreSame;\n};\n\nexport function allEntriesEqual(array) {\n\treturn new Set(array).size == 1;\n};\n\nexport function updateObjectInArray(array, object, onlyReplace = false) {\n\t// Make some elementary checks before running any functions\n\tif (array != null && object != null) {\n\t\t// Make sure the object provided has an id property before doing anything\n\t\tif (object.id != null) {\n\t\t\t// Make a find on the array provided to determine if the object already exists\n\t\t\tconst foundIndex = array.findIndex(arrayObject => {\n\t\t\t\treturn arrayObject.id == object.id;\n\t\t\t});\n\n\t\t\t// Check if index was found, we need to replace 'object' with existing array entry\n\t\t\tif (foundIndex > -1) {\n\t\t\t\tarray.splice(foundIndex, 1, object);\n\t\t\t} else if (!onlyReplace) {\n\t\t\t\t// The item wasnt found, add it\n\t\t\t\t// Since most of our order is by when it was created we insert the object at first position\n\t\t\t\tarray.unshift(object);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return array back (Should always be the case)\n\treturn array;\n}\n\nArray.prototype.unique = function () {\n\tvar arr = [];\n\tfor (var i = 0; i < this.length; i++) {\n\t\tif (!arr.includes(this[i])) {\n\t\t\tarr.push(this[i]);\n\t\t}\n\t}\n\n\treturn arr;\n}\n\nArray.prototype.clear = function () {\n\tfor (var i = this.length; i > 0; i--) {\n\t\tthis.pop();\n\t}\n}\n\n","import {\n\tASSIGNMENT_CREATE,\n\tASSIGNMENT_UPDATE,\n\tACTIVE_TASK,\n\tGET_FOLDER_FILES,\n\tSET_ACTIVE_ASSIGNMENT,\n\tDELETE_ASSIGNMENT_FROM_STORE,\n\tCLEAR_ASSIGNMENTS_FROM_STORE,\n\tGET_TEAMS_ASSIGNMENTS,\n\tGET_TEAMS_ASSIGNMENT_DETAILS,\n\tGET_LATEST_MICROSOFT_ASSIGNMENTS,\n\tGET_LATEST_HALDOR_ASSIGNMENTS,\n\tGET_TEAMS_ASSIGNMENT_SUBMISSION,\n\tCLEAR_LATEST_ASSIGNMENTS,\n\tGET_HALDOR_ASSIGNMENTS,\n\tGET_MICROSOFT_EDUCATION_ASSIGNMENTS,\n\tSET_ASSIGNMENT_SERVICES,\n\tSEARCH_ASSIGNMENT,\n\tGET_ASSIGNMENT_STATUS,\n\tUPLOAD_USER_ONE_DRIVE_DOCUMENT,\n\tSET_MY_ASSIGNMENTS_ACTIVE_GROUP,\n\tGET_ASSIGNMENT_SECTION,\n\tCLEAR_ASSIGNMENT_SECTION,\n\tCREATE_ASSIGNMENT_TASK_WORKSPACE,\n\tUPDATE_ASSIGNMENT_LIST,\n\tUPDATE_ACTIVE_ASSIGNMENT\n} from 'actions/assignments';\n\nimport Moment from 'moment';\n\nimport { ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS } from 'actions/knowledge';\n\nimport { updateObjectInArray } from 'helpers/array';\nimport { CREATE_BULK_TASKS } from '../actions/assignments';\n\n\nconst INITIAL_STATE = {\n\tassignments: null,\n\thaldorAssignmentsFetchedUTC: null,\n\tteamsAssignmentsFetchedUTC: null,\n\tdrafts: [],\n\tupcoming: [],\n\toverdue: [],\n\tcurrent: [],\n\tsubmitted: [],\n\tclosed: [],\n\tlocked: [],\n\tteamsAssignments: null,\n\tactive_assignment: null,\n\tactive_knowledgeCollection: [],\n\tnewAssignment: null,\n\tnewAssignments: null,\n\tsearch_results: null,\n\tfolderFiles: [],\n\tteamsAssignmentDetails: null,\n\tlatestMicrosoftAssignments: [],\n\tlatestHaldorAssignments: [],\n\tactiveServices: { haldor: false, microsoft: false },\n\tuploadError: {},\n\tactiveGroup: null,\n\tsection: null\n};\n\nfunction UpdateExistingAssignmentInList(assignment, list) {\n\tlet assignmentList = list ? [...list] : [];\n\tif (assignment != null) {\n\t\tconst index = assignmentList.findIndex(a => a.id == assignment.id);\n\t\tif (index !== -1) {\n\t\t\tassignmentList[index] = assignment;\n\t\t}\n\t}\n\n\treturn assignmentList;\n}\n\n\nexport default function (state = INITIAL_STATE, action) {\n\n\tswitch (action.type) {\n\t\tcase ACTIVE_TASK:\n\t\t\tvar updatedAssignmentList = UpdateExistingAssignmentInList(action.payload, state.assignments);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tactive_assignment: action.payload,\n\t\t\t\tassignments: updatedAssignmentList\n\t\t\t};\n\n\t\tcase SET_ASSIGNMENT_SERVICES:\n\t\t\treturn { ...state, activeServices: action.payload };\n\n\t\tcase CLEAR_LATEST_ASSIGNMENTS:\n\t\t\treturn { ...state, latestMicrosoftAssignments: [], latestHaldorAssignments: [] };\n\n\t\tcase ACTIVE_ASSIGNMENT_KNOWLEDGECOLLECTIONS:\n\t\t\treturn { ...state, active_knowledgeCollection: action.payload };\n\t\tcase UPDATE_ASSIGNMENT_LIST:\n\t\t\tvar updatedAssignmentList = UpdateExistingAssignmentInList(action.payload, state.assignments);\n\t\t\treturn { ...state, assignments: updatedAssignmentList };\n\t\tcase GET_MICROSOFT_EDUCATION_ASSIGNMENTS:\n\t\t\tif (action.payload != null && action.payload.length > 0) {\n\t\t\t\tlet educationDrafts = getDrafts(action.payload, state);\n\t\t\t\tlet educationUpcoming = getUpcoming(action.payload, state);\n\t\t\t\tlet educationOverdue = getOverdue(action.payload, state);\n\t\t\t\tlet educationCurrent = getCurrent(action.payload, state);\n\t\t\t\tlet educationSubmitted = getSubmitted(action.payload, state);\n\t\t\t\tlet educationClosed = getClosed(action.payload, state);\n\t\t\t\tlet educationLocked = getLocked(action.payload, state);\n\t\t\t\tlet teamsAssignmentsFetchedUTC = Moment.utc();\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tclosed: educationClosed,\n\t\t\t\t\tlocked: educationLocked,\n\t\t\t\t\tsubmitted: educationSubmitted,\n\t\t\t\t\tcurrent: educationCurrent,\n\t\t\t\t\toverdue: educationOverdue,\n\t\t\t\t\tupcoming: educationUpcoming,\n\t\t\t\t\tdrafts: educationDrafts,\n\t\t\t\t\tteamsAssignments: action.payload,\n\t\t\t\t\tteamsAssignmentsFetchedUTC: teamsAssignmentsFetchedUTC\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_HALDOR_ASSIGNMENTS:\n\t\t\tlet drafts = getDrafts(action.payload, state);\n\t\t\tlet upcoming = getUpcoming(action.payload, state);\n\t\t\tlet overdue = getOverdue(action.payload, state);\n\t\t\tlet current = getCurrent(action.payload, state);\n\t\t\tlet submitted = getSubmitted(action.payload, state);\n\t\t\tlet closed = getClosed(action.payload, state);\n\t\t\tlet locked = getLocked(action.payload, state);\n\t\t\tlet haldorAssignmentsFetchedUTC = Moment.utc();\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tclosed,\n\t\t\t\tlocked,\n\t\t\t\tsubmitted,\n\t\t\t\tcurrent,\n\t\t\t\toverdue,\n\t\t\t\tupcoming,\n\t\t\t\tdrafts,\n\t\t\t\tassignments: action.payload,\n\t\t\t\thaldorAssignmentsFetchedUTC: haldorAssignmentsFetchedUTC\n\t\t\t};\n\n\t\tcase CREATE_ASSIGNMENT_TASK_WORKSPACE:\n\t\t\tlet active_assignment = state.active_assignment;\n\t\t\tactive_assignment.tasks[0].workspace = action.payload;\n\t\t\treturn { ...state, active_assignment: active_assignment };\n\n\t\tcase SEARCH_ASSIGNMENT:\n\t\t\treturn { ...state, search_results: action.payload };\n\n\t\tcase GET_FOLDER_FILES:\n\t\t\treturn { ...state, folderFiles: action.payload };\n\n\t\tcase ASSIGNMENT_CREATE:\n\t\t\tlet createList = state.assignments;\n\n\t\t\t/**\n\t\t\t * We need to check if the payload is an array or an object since we have two api's that return different data structures\n\t\t\t */\n\t\t\tif (Array.isArray(action.payload)) {\n\t\t\t\tcreateList = [...state.assignments, ...action.payload];\n\t\t\t} else if (typeof action.payload === 'object') {\n\t\t\t\tcreateList = [...state.assignments, action.payload];\n\t\t\t}\n\n\t\t\tlet updatedDrafts = getDrafts(action.payload, state);\n\t\t\tlet updatedUpoming = getUpcoming(action.payload, state);\n\t\t\tlet updatedOverdue = getOverdue(action.payload, state);\n\t\t\tlet updatedCurrent = getCurrent(action.payload, state);\n\t\t\tlet updatedSubmitted = getSubmitted(action.payload, state);\n\t\t\tlet updatedClosed = getClosed(action.payload, state);\n\t\t\tlet updatedLocked = getLocked(action.payload, state);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tnewAssignment: action.payload,\n\t\t\t\tassignments: createList,\n\t\t\t\tclosed: updatedClosed,\n\t\t\t\tsubmitted: updatedSubmitted,\n\t\t\t\tcurrent: updatedCurrent,\n\t\t\t\toverdue: updatedOverdue,\n\t\t\t\tupcoming: updatedUpoming,\n\t\t\t\tdrafts: updatedDrafts,\n\t\t\t\tlocked: updatedLocked,\n\t\t\t};\n\n\t\tcase CREATE_BULK_TASKS:\n\t\t\tlet assignments = state.assignments || [];\n\n\t\t\tassignments = assignments.concat(action.payload);\n\n\t\t\tlet updatedBulkDrafts = getDrafts(action.payload, state);\n\t\t\tlet updatedBulkUpoming = getUpcoming(action.payload, state);\n\t\t\tlet updatedBulkOverdue = getOverdue(action.payload, state);\n\t\t\tlet updatedBulkCurrent = getCurrent(action.payload, state);\n\t\t\tlet updatedBulkSubmitted = getSubmitted(action.payload, state);\n\t\t\tlet updatedBulkClosed = getClosed(action.payload, state);\n\t\t\tlet updatedBulkLocked = getLocked(action.payload, state);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tassignments: assignments,\n\t\t\t\tclosed: updatedBulkClosed,\n\t\t\t\tsubmitted: updatedBulkSubmitted,\n\t\t\t\tcurrent: updatedBulkCurrent,\n\t\t\t\toverdue: updatedBulkOverdue,\n\t\t\t\tupcoming: updatedBulkUpoming,\n\t\t\t\tdrafts: updatedBulkDrafts,\n\t\t\t\tnewAssignments: action.payload,\n\t\t\t\tlocked: updatedBulkLocked,\n\t\t\t};\n\n\t\tcase ASSIGNMENT_UPDATE:\n\t\t\tif (action.payload.tasks != null && action.payload.tasks.length > 0) {\n\t\t\t\taction.payload.tasks = action.payload.tasks.filter(function (task) {\n\t\t\t\t\treturn task.markedForDeletion != true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet updatedAssignment = action.payload;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tactive_assignment: updatedAssignment,\n\t\t\t\tassignments: updateAssignmentInList(updatedAssignment, state.assignments),\n\t\t\t\tclosed: updateAssignmentInList(updatedAssignment, state.closed),\n\t\t\t\tsubmitted: updateAssignmentInList(updatedAssignment, state.submitted),\n\t\t\t\tcurrent: updateAssignmentInList(updatedAssignment, state.current),\n\t\t\t\toverdue: updateAssignmentInList(updatedAssignment, state.overdue),\n\t\t\t\tupcoming: updateAssignmentInList(updatedAssignment, state.upcoming),\n\t\t\t\tdrafts: updateAssignmentInList(updatedAssignment, state.drafts),\n\t\t\t};\n\n\t\tcase UPDATE_ACTIVE_ASSIGNMENT:\n\t\t\tlet updatedActiveAssignment = action.payload;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tactive_assignment: updatedActiveAssignment,\n\t\t\t}\n\t\tcase SET_ACTIVE_ASSIGNMENT:\n\t\t\tif (typeof action.id !== 'undefined' && action.id !== null) {\n\t\t\t\tlet selected = null;\n\n\t\t\t\tif (action.id == parseInt(action.id, 10)) {\n\t\t\t\t\tselected = state.assignments.haldorAssignments.find((assignment) => {\n\t\t\t\t\t\treturn assignment.id == action.id;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tselected = state.assignments.microsoftAssignments.find((assignment) => {\n\t\t\t\t\t\treturn assignment.id == action.id;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (selected != null) {\n\t\t\t\t\treturn { ...state, active_assignment: selected };\n\t\t\t\t} else {\n\t\t\t\t\treturn { ...state, active_assignment: null };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, active_assignment: null };\n\n\t\tcase DELETE_ASSIGNMENT_FROM_STORE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tassignments: [...state.assignments].filter((t) => t.id != action.payload),\n\t\t\t\tclosed: [...state.closed].filter((t) => t.id != action.payload),\n\t\t\t\tsubmitted: [...state.submitted].filter((t) => t.id != action.payload),\n\t\t\t\tcurrent: [...state.current].filter((t) => t.id != action.payload),\n\t\t\t\toverdue: [...state.overdue].filter((t) => t.id != action.payload),\n\t\t\t\tupcoming: [...state.upcoming].filter((t) => t.id != action.payload),\n\t\t\t\tdrafts: [...state.drafts].filter((t) => t.id != action.payload),\n\t\t\t};\n\n\t\tcase CLEAR_ASSIGNMENTS_FROM_STORE:\n\t\t\t// Clear assignment filter objects from localstorage\n\t\t\tlocalStorage.removeItem(\"assignments_filter_objects\");\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tclosed: [],\n\t\t\t\tsubmitted: [],\n\t\t\t\tcurrent: [],\n\t\t\t\toverdue: [],\n\t\t\t\tupcoming: [],\n\t\t\t\tdrafts: [],\n\t\t\t\tassignments: null,\n\t\t\t\tteamsAssignments: null,\n\t\t\t\thaldorAssignmentsFetchedUTC: null,\n\t\t\t\tteamsAssignmentsFetchedUTC: null,\n\t\t\t};\n\n\t\tcase GET_TEAMS_ASSIGNMENTS:\n\t\t\tlet teamsDrafts = getDrafts(action.payload, state);\n\t\t\tlet teamsUpcoming = getUpcoming(action.payload, state);\n\t\t\tlet teamsOverdue = getOverdue(action.payload, state);\n\t\t\tlet teamsCurrent = getCurrent(action.payload, state);\n\t\t\tlet teamsSubmitted = getSubmitted(action.payload, state);\n\t\t\tlet teamsClosed = getClosed(action.payload, state);\n\t\t\tlet teamsLocked = getLocked(action.payload, state);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tteamsAssignments: action.paylod,\n\t\t\t\t// assignments: action.payload,\n\t\t\t\tclosed: teamsClosed,\n\t\t\t\tsubmitted: teamsSubmitted,\n\t\t\t\tcurrent: teamsCurrent,\n\t\t\t\toverdue: teamsOverdue,\n\t\t\t\tupcoming: teamsUpcoming,\n\t\t\t\tdrafts: teamsDrafts,\n\t\t\t\tlocked: teamsLocked,\n\t\t\t};\n\n\t\tcase GET_TEAMS_ASSIGNMENT_DETAILS:\n\t\t\treturn { ...state, teamsAssignmentDetails: action.payload };\n\n\t\tcase GET_LATEST_HALDOR_ASSIGNMENTS:\n\t\t\treturn { ...state, latestHaldorAssignments: action.payload };\n\n\t\tcase GET_LATEST_MICROSOFT_ASSIGNMENTS:\n\t\t\treturn { ...state, latestMicrosoftAssignments: action.payload };\n\n\t\tcase GET_TEAMS_ASSIGNMENT_SUBMISSION:\n\t\t\treturn { ...state, submission: action.payload };\n\n\t\tcase GET_ASSIGNMENT_STATUS:\n\t\t\tif (action.payload.created == true) {\n\t\t\t\tlet newState = JSON.parse(JSON.stringify(state));\n\n\t\t\t\tlet currentAssignmentIndex = newState.current.find(\n\t\t\t\t\t(ss) => ss.id == action.payload.assigmentId\n\t\t\t\t);\n\t\t\t\tif (currentAssignmentIndex != null) {\n\t\t\t\t\tcurrentAssignmentIndex.created = Moment().format();\n\n\t\t\t\t\tif (newState.current != null) {\n\t\t\t\t\t\tnewState.current = updateObjectInArray(newState.current, currentAssignmentIndex);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet overdueAssignmentIndex = newState.overdue.find(\n\t\t\t\t\t(ss) => ss.id == action.payload.assigmentId\n\t\t\t\t);\n\t\t\t\tif (overdueAssignmentIndex != null) {\n\t\t\t\t\toverdueAssignmentIndex.created = Moment().format();\n\n\t\t\t\t\tif (newState.overdue != null) {\n\t\t\t\t\t\tnewState.overdue = updateObjectInArray(newState.overdue, overdueAssignmentIndex);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newState.active_assignment != null) {\n\t\t\t\t\tnewState.active_assignment = {\n\t\t\t\t\t\t...newState.active_assignment,\n\t\t\t\t\t\tcreated:\n\t\t\t\t\t\t\taction.payload.created == true ? Moment().format() : '0001-01-01T00:00:00',\n\t\t\t\t\t\tlocked: !action.payload.created,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase UPLOAD_USER_ONE_DRIVE_DOCUMENT:\n\t\t\tlet requestError = {};\n\t\t\tif (action.error) {\n\t\t\t\trequestError.error = true;\n\t\t\t\trequestError.message = action.payload.response.message;\n\t\t\t\trequestError.data = action.payload.response.data;\n\t\t\t} else {\n\t\t\t\trequestError.error = false;\n\t\t\t}\n\n\t\t\treturn { ...state, uploadError: requestError };\n\n\t\tcase SET_MY_ASSIGNMENTS_ACTIVE_GROUP:\n\t\t\treturn { ...state, activeGroup: action.payload };\n\n\t\tcase GET_ASSIGNMENT_SECTION:\n\t\t\treturn { ...state, section: action.payload };\n\n\t\tcase CLEAR_ASSIGNMENT_SECTION:\n\t\t\treturn { ...state, section: null };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n\n/***\n * Update list of assignments with new assignment\n */\nfunction updateAssignmentInList(assignment, list) {\n\tlet assignmentList = list ? [...list] : [];\n\tif (assignment != null) {\n\t\tconst index = assignmentList.findIndex(a => a.id == assignment.id);\n\t\tif (index !== -1) {\n\t\t\tassignmentList[index] = assignment;\n\t\t}\n\t}\n\n\treturn assignmentList;\n}\n\nfunction getDrafts(payload, state) {\n\tlet list = state.drafts;\n\tif (Array.isArray(payload)) {\n\t\tfor (var assignment of payload) {\n\t\t\tconst foundIndex = list.findIndex(arrayObject => {\n\t\t\t\treturn arrayObject.id == assignment.id;\n\t\t\t});\n\n\t\t\t// Check if index was found, we need to replace 'object' with existing array entry\n\t\t\tif (foundIndex > -1) {\n\t\t\t\tlist.splice(foundIndex, 1, assignment);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (assignment.id == parseInt(assignment.id, 10)) {\n\t\t\t\tif (assignment.published == '0001-01-01T00:00:00' && list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\tlist.push(assignment);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tassignment.status == 'draft' &&\n\t\t\t\t\tassignment.assignedDateTime == null &&\n\t\t\t\t\t(assignment.reference == null || !state.activeServices?.haldor)\n\t\t\t\t) {\n\t\t\t\t\tlist.push(assignment);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (payload.id == parseInt(payload.id, 10)) {\n\t\t\tif (\n\t\t\t\tpayload.status == 'ASSIGNMENT_DRAFT' &&\n\t\t\t\t(payload.reference == null || !state.activeServices?.haldor)\n\t\t\t) {\n\t\t\t\tlist.push(payload);\n\t\t\t}\n\t\t} else {\n\t\t\tif (\n\t\t\t\tpayload.status == 'draft' &&\n\t\t\t\tpayload.assignedDateTime == null &&\n\t\t\t\t(payload.reference == null || !state.activeServices?.haldor)\n\t\t\t) {\n\t\t\t\tlist.push(payload);\n\t\t\t}\n\t\t}\n\t}\n\n\tlist = sortList(list);\n\n\treturn list;\n}\n\nfunction getOverdue(payload, state) {\n\tconst timeNow = Moment();\n\tlet list = state.overdue;\n\tif (Array.isArray(payload)) {\n\t\tfor (var assignment of payload) {\n\t\t\tconst foundIndex = list.findIndex(arrayObject => {\n\t\t\t\treturn arrayObject.id == assignment.id;\n\t\t\t});\n\n\t\t\t// Check if index was found, we need to replace 'object' with existing array entry\n\t\t\tif (foundIndex > -1) {\n\t\t\t\tlist.splice(foundIndex, 1, assignment);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (assignment.id == parseInt(assignment.id, 10)) {\n\t\t\t\t// Haldor assignment\n\t\t\t\tconst isBefore = timeNow.isBefore(Moment.utc(assignment.startDate).local());\n\t\t\t\tconst isAfter = timeNow.isAfter(Moment.utc(assignment.dueDate).local());\n\t\t\t\tif ((assignment.status == 'ASSIGNMENT_OPEN' || assignment.status == 'ASSIGNMENT_LOCKED') && assignment.published != '0001-01-01T00:00:00' && !isBefore && isAfter) {\n\t\t\t\t\tif (assignment.tasks.length > 0) {\n\t\t\t\t\t\tconst task = assignment.tasks[0];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_NOT_STARTED' ||\n\t\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_STARTED' ||\n\t\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_CAN_DEVELOP' ||\n\t\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_NOT_COMPLETE'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Microsoft assignment\n\t\t\t\tif (\n\t\t\t\t\tassignment.status == 'assigned' &&\n\t\t\t\t\ttimeNow.isAfter(assignment.dueDateTime) &&\n\t\t\t\t\t(assignment.reference == null || !state.activeServices?.haldor)\n\t\t\t\t) {\n\t\t\t\t\tlist.push(assignment);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (payload.id == parseInt(payload.id, 10)) {\n\t\t\t// Haldor assignment\n\t\t\tconst isBefore = timeNow.isBefore(Moment.utc(payload.startDate).local());\n\t\t\tconst isAfter = timeNow.isAfter(Moment.utc(payload.dueDate).local());\n\t\t\tif ((payload.status == 'ASSIGNMENT_OPEN' || assignment.status == 'ASSIGNMENT_LOCKED') && !isBefore && isAfter) {\n\t\t\t\tif (payload.tasks.length > 0) {\n\t\t\t\t\tconst task = payload.tasks[0];\n\t\t\t\t\tif (\n\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_NOT_STARTED' ||\n\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_STARTED' ||\n\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_CAN_DEVELOP' ||\n\t\t\t\t\t\ttask.status == 'ASSIGNMENT_TASK_NOT_COMPLETE'\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\t\t\tlist.push(payload);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\t\tlist.push(payload);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Microsoft assignment\n\t\t\tif (\n\t\t\t\tpayload.status == 'assigned' &&\n\t\t\t\ttimeNow.isAfter(payload.dueDateTime) &&\n\t\t\t\t(payload.reference == null || !state.activeServices?.haldor)\n\t\t\t) {\n\t\t\t\tlist.push(payload);\n\t\t\t}\n\t\t}\n\t}\n\n\tlist = sortList(list);\n\n\treturn list;\n}\n\nfunction getCurrent(payload, state) {\n\tconst timeNow = Moment();\n\n\tlet list = state.current;\n\tif (Array.isArray(payload)) {\n\t\tfor (var assignment of payload) {\n\t\t\tconst foundIndex = list.findIndex(arrayObject => {\n\t\t\t\treturn arrayObject.id == assignment.id;\n\t\t\t});\n\n\t\t\t// Check if index was found, we need to replace 'object' with existing array entry\n\t\t\tif (foundIndex > -1) {\n\t\t\t\tlist.splice(foundIndex, 1, assignment);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (assignment.id == parseInt(assignment.id, 10)) {\n\t\t\t\tconst isBefore = timeNow.isBefore(Moment.utc(assignment.startDate).local());\n\t\t\t\tconst isAfter = timeNow.isAfter(Moment.utc(assignment.dueDate).local());\n\t\t\t\tif ((assignment.status == 'ASSIGNMENT_OPEN' || assignment.status == 'ASSIGNMENT_LOCKED') && !isBefore && !isAfter &&\n\t\t\t\t\tassignment.published !== '0001-01-01T00:00:00') {\n\t\t\t\t\tif (assignment.tasks.length == 0) {\n\t\t\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tassignment.tasks[0] != null &&\n\t\t\t\t\t\tassignment.tasks[0].status != 'ASSIGNMENT_TASK_SUBMITTED'\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tassignment.status == 'assigned' &&\n\t\t\t\t\tassignment.assignedDateTime != null &&\n\t\t\t\t\ttimeNow.isBefore(Moment(assignment.dueDateTime))\n\t\t\t\t) {\n\t\t\t\t\tif (assignment.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (payload.id == parseInt(payload.id, 10)) {\n\t\t\tconst isBefore = timeNow.isBefore(Moment.utc(payload.startDate).local());\n\t\t\tconst isAfter = timeNow.isAfter(Moment.utc(payload.dueDate).local());\n\t\t\tif ((payload.status == 'ASSIGNMENT_OPEN' || assignment.status == 'ASSIGNMENT_LOCKED') && !isBefore && !isAfter && payload?.published !== '0001-01-01T00:00:00') {\n\t\t\t\tif (payload.tasks.length == 0) {\n\t\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\t\tlist.push(payload);\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tpayload.tasks[0] != null &&\n\t\t\t\t\tpayload.tasks[0].status != 'ASSIGNMENT_TASK_SUBMITTED'\n\t\t\t\t) {\n\t\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\t\tlist.push(payload);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (\n\t\t\t\tpayload.status == 'assigned' &&\n\t\t\t\tpayload.assignedDateTime != null &&\n\t\t\t\ttimeNow.isBefore(Moment(payload.dueDateTime))\n\t\t\t) {\n\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\tlist.push(payload);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlist = sortListDesc(list);\n\n\treturn list;\n}\n\nfunction getUpcoming(payload, state) {\n\tconst timeNow = Moment();\n\n\tlet list = state.upcoming;\n\tif (Array.isArray(payload)) {\n\t\tfor (var assignment of payload) {\n\t\t\tconst foundIndex = list.findIndex(arrayObject => {\n\t\t\t\treturn arrayObject.id == assignment.id;\n\t\t\t});\n\n\t\t\t// Check if index was found, we need to replace 'object' with existing array entry\n\t\t\tif (foundIndex > -1) {\n\t\t\t\tlist.splice(foundIndex, 1, assignment);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (assignment.id == parseInt(assignment.id, 10)) {\n\t\t\t\tconst isBefore = timeNow.isBefore(Moment.utc(assignment.startDate).local());\n\t\t\t\tif ((assignment.status == 'ASSIGNMENT_OPEN' || assignment.status == 'ASSIGNMENT_LOCKED') && isBefore) {\n\t\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tassignment.status == 'assigned' &&\n\t\t\t\t\tassignment.assignedDateTime != null &&\n\t\t\t\t\ttimeNow.isBefore(Moment(assignment.assignedDateTime))\n\t\t\t\t) {\n\t\t\t\t\tif (assignment.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\t\tlist.push(assignment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (payload.id == parseInt(payload.id, 10)) {\n\t\t\tconst isBefore = timeNow.isBefore(Moment.utc(payload.startDate).local());\n\t\t\tif ((payload.status == 'ASSIGNMENT_OPEN' || assignment.status == 'ASSIGNMENT_LOCKED') && isBefore) {\n\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\tlist.push(payload);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (\n\t\t\t\tpayload.status == 'assigned' &&\n\t\t\t\tpayload.assignedDateTime != null &&\n\t\t\t\ttimeNow.isBefore(Moment(payload.assignedDateTime))\n\t\t\t) {\n\t\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\t\tlist.push(payload);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlist = sortList(list);\n\n\treturn list;\n}\n\nfunction getSubmitted(payload, state) {\n\tlet list = state.submitted;\n\tif (Array.isArray(payload)) {\n\t\tpayload.forEach((assignment) => {\n\t\t\tif (\n\t\t\t\tassignment.tasks != null &&\n\t\t\t\tassignment.tasks.length > 0 &&\n\t\t\t\tassignment.tasks[0] != null &&\n\t\t\t\tassignment.tasks[0].status == 'ASSIGNMENT_TASK_SUBMITTED'\n\t\t\t) {\n\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\tlist.push(assignment);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (\n\t\t\tpayload.tasks != null &&\n\t\t\tpayload.tasks.length > 0 &&\n\t\t\tpayload.tasks[0] != null &&\n\t\t\tpayload.tasks[0].status == 'ASSIGNMENT_TASK_SUBMITTED'\n\t\t) {\n\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\tlist.push(payload);\n\t\t\t}\n\t\t}\n\t}\n\n\tsortList(list);\n\n\treturn list;\n}\n\nfunction getLocked(payload, state) {\n\tlet list = state.locked;\n\tif (Array.isArray(payload)) {\n\t\tpayload.forEach((assignment) => {\n\t\t\tif (assignment.status == 'ASSIGNMENT_LOCKED' && assignment.published !== '0001-01-01T00:00:00') {\n\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\tlist.push(assignment);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (payload.status == 'ASSIGNMENT_LOCKED' && payload?.published !== '0001-01-01T00:00:00') {\n\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\tlist.push(payload);\n\t\t\t}\n\t\t}\n\t}\n\n\tlist = sortList(list);\n\n\treturn list;\n}\n\nfunction getClosed(payload, state) {\n\tlet list = state.closed;\n\tif (Array.isArray(payload)) {\n\t\tpayload.forEach((assignment) => {\n\t\t\tif (assignment.status == 'ASSIGNMENT_CLOSED' && assignment.published !== '0001-01-01T00:00:00') {\n\t\t\t\tif (list.findIndex((t) => t.id == assignment.id) == -1) {\n\t\t\t\t\tlist.push(assignment);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (payload == null) {\n\t\t\treturn list;\n\t\t}\n\n\t\tif (payload.status == 'ASSIGNMENT_CLOSED' && payload?.published !== '0001-01-01T00:00:00') {\n\t\t\tif (payload.reference == null || !state.activeServices?.haldor) {\n\t\t\t\tlist.push(payload);\n\t\t\t}\n\t\t}\n\t}\n\n\tlist = sortList(list);\n\n\treturn list;\n}\n\nfunction sortList(list) {\n\treturn list.sort(function (a, b) {\n\t\tlet dateA = a.dueDate;\n\t\tlet dateB = b.dueDate;\n\t\tif (a.displayName != null) {\n\t\t\tdateA = a.dueDateTime;\n\t\t}\n\t\tif (b.displayName != null) {\n\t\t\tdateB = b.dueDateTime;\n\t\t}\n\n\t\treturn Moment(dateB).unix() - Moment(dateA).unix();\n\t});\n}\n\nfunction sortListDesc(list) {\n\treturn list.sort(function (a, b) {\n\t\tlet dateA = a.dueDate;\n\t\tlet dateB = b.dueDate;\n\t\tif (a.displayName != null) {\n\t\t\tdateA = a.dueDateTime;\n\t\t}\n\t\tif (b.displayName != null) {\n\t\t\tdateB = b.dueDateTime;\n\t\t}\n\n\t\treturn Moment(dateA).unix() - Moment(dateB).unix();\n\t});\n}\n","import api from 'lib/api';\n\nexport const GET_TYPES = 'GET_TYPES';\n\nexport const getTypes = (lcid) => ({\n\ttype: GET_TYPES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`status/${lcid}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n","import { GET_TYPES } from '../actions/status';\n\nconst INITIAL_STATE = {\n status: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n switch (action.type) {\n case GET_TYPES:\n\t\taction.payload?.assignmentTaskStatus?.sort((a,b) => a.index - b.index);\n \treturn { ...state, status: action.payload };\n default:\n return state;\n }\n}\n","import api from 'lib/api';\n\nexport const SEARCH_PLANS = 'SEARCH_PLANS';\nexport const GET_PLANS = 'GET_PLANS';\nexport const ACTIVE_PLAN = 'ACTIVE_PLAN';\nexport const ACTIVE_PLAN_KNOWLEDGECOLLECTIONS = 'ACTIVE_PLAN_KNOWLEDGECOLLECTIONS';\nexport const GET_PLANS_BY_SECTIONID = 'GET_PLANS_BY_SECTIONID';\nexport const SET_ACTIVE_PLAN = 'SET_ACTIVE_PLAN';\nexport const PLAN_UPDATE = 'PLANNING_UPDATE';\nexport const CLEAR_PLANS_FROM_STORE = 'CLEAR_PLANS_FROM_STORE';\nexport const CLEAR_SECTION_PLANS = 'CLEAR_SECTION_PLANS';\nexport const PLAN_DELETE_PLAN = 'PLAN_DELETE_PLAN';\nexport const PLAN_DELETE_ASSIGNMENT_FROM_PLAN = 'PLAN_DELETE_ASSIGNMENT_FROM_PLAN';\nexport const CREATE_BULK_PLANS = 'CREATE_BULK_PLANS';\nexport const CREATE_PLAN = 'CREATE_PLAN';\nexport const GET_PLAN_STUDENT_ADDITIONAL_ADJUSTMENTS = 'PLANS_GET_STUDENT_ADDITIONAL_ADJUSTMENTS';\nexport const GET_PLAN_SECTION = 'PLANS_GET_PLAN_SECTION';\nexport const CLEAR_PLAN_SECTION = 'PLANS_CLEAR_PLAN_SECTION';\n\nexport const getPlans = (startDate, endDate) => ({\n\ttype: GET_PLANS,\n\tpayload: new Promise((resolve) => {\n\t\tvar endpoint = 'planning';\n\n\t\tif (startDate != null && endDate != null) {\n\t\t\tendpoint += '?startDate=' + startDate;\n\t\t\tendpoint += '&endDate=' + endDate;\n\t\t}\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getPlanDetails = (id, callback) => ({\n\ttype: ACTIVE_PLAN,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`planning/${id}?ver=2`)\n\t\t\t.then((response) => {\n\t\t\t\tresolve(response.data);\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t}),\n});\n\nexport const createBulkPlans = (bulkPlans) => ({\n\ttype: CREATE_BULK_PLANS,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`planning/bulk?ver=2`, bulkPlans).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createPlan = (plan) => ({\n\ttype: CREATE_PLAN,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`planning/?ver=2`, plan).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getPlanKnowledgeCollections = (sectionId, planId, callback) => ({\n\ttype: ACTIVE_PLAN_KNOWLEDGECOLLECTIONS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`knowledge/section/${sectionId}/plan/${planId}/collections`).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const updatePlan = (values) => ({\n\ttype: PLAN_UPDATE,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`planning?ver=2`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getPlansBySectionId = (id, callback) => ({\n\ttype: GET_PLANS_BY_SECTIONID,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`planning/section/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const deletePlan = (id) => ({\n\ttype: PLAN_DELETE_PLAN,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`planning/${id}`).then((response) => {\n\t\t\tresolve(id);\n\t\t});\n\t}),\n});\n\nexport const setActivePlan = (id) => ({\n\ttype: SET_ACTIVE_PLAN,\n\tpayload: id\n});\n\nexport const clearPlansFromStore = (id) => ({\n\ttype: CLEAR_PLANS_FROM_STORE,\n\tpayload: []\n});\n\nexport const clearSectionPlansFromStore = () => ({\n\ttype: CLEAR_SECTION_PLANS,\n\tpayload: []\n})\n\nexport const deleteAssignmentFromPlan = (planId, assignmentId) => ({\n\ttype: PLAN_DELETE_ASSIGNMENT_FROM_PLAN,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`planning/${planId}/assignment/${assignmentId}`).then((response) => {\n\t\t\tresolve({ 'planId': planId, 'assignmentId': assignmentId });\n\t\t});\n\t}),\n});\n\nexport const getStudentAdditionalAdjustmentsForPlan = (planId) => ({\n\ttype: GET_PLAN_STUDENT_ADDITIONAL_ADJUSTMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`planning/${planId}/studentAdditionalAdjustments`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n})\n\nexport const getPlanSection = (id) => ({\n\ttype: GET_PLAN_SECTION,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${id}`).then((response) => {\n\n\t\t\tvar data = response.data;\n\n\t\t\tif (data && data.courses != null && data.courses.length > 0) {\n\t\t\t\tdata.courses.forEach(element => {\n\t\t\t\t\tvar sortedList = [];\n\t\t\t\t\tif (element.details != null && element.details.length > 0) {\n\t\t\t\t\t\tvar activeDetailIndex = element.details.findIndex(element => element.endDate == null);\n\n\t\t\t\t\t\tif (activeDetailIndex > -1) {\n\t\t\t\t\t\t\tvar activeDetail = element.details[activeDetailIndex];\n\t\t\t\t\t\t\telement.details.splice(activeDetailIndex, 1);\n\t\t\t\t\t\t\telement.details.unshift(activeDetail);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearPlanSection = () => ({\n\ttype: CLEAR_PLAN_SECTION,\n\tpayload: null,\n});","import {\n\tGET_PLANS,\n\tACTIVE_PLAN,\n\tGET_PLANS_BY_SECTIONID,\n\tSET_ACTIVE_PLAN,\n\tCLEAR_PLANS_FROM_STORE,\n\tPLAN_UPDATE,\n\tPLAN_DELETE_PLAN,\n\tPLAN_DELETE_ASSIGNMENT_FROM_PLAN,\n\tSEARCH_PLANS,\n\tCLEAR_SECTION_PLANS,\n\tCREATE_PLAN,\n\tCREATE_BULK_PLANS,\n\tGET_PLAN_SECTION,\n\tCLEAR_PLAN_SECTION,\n} from 'actions/plans';\n\nimport { ACTIVE_PLAN_KNOWLEDGECOLLECTIONS } from 'actions/knowledge';\n\nimport { updateObjectInArray } from 'helpers/array';\n\nconst INITIAL_STATE = {\n\tplans: null,\n\tactive_plan: {},\n\tactive_knowledgeCollection: [],\n\tsectionPlans: [],\n\tsearch_results: null,\n\tcreatedPlanId: null,\n\tcreatedPlans: null,\n\tsection: null,\n\tversion: '1',\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase ACTIVE_PLAN:\n\t\t\tlet updateList = updateObjectInArray(state.plans, action.payload);\n\t\t\treturn { ...state, active_plan: action.payload, plans: updateList };\n\n\t\tcase ACTIVE_PLAN_KNOWLEDGECOLLECTIONS:\n\t\t\treturn { ...state, active_knowledgeCollection: action.payload };\n\n\t\tcase CREATE_PLAN:\n\t\t\treturn { ...state, createdPlanId: action.payload };\n\n\t\tcase GET_PLANS:\n\t\t\treturn { ...state, plans: action.payload };\n\n\t\tcase SEARCH_PLANS:\n\t\t\treturn { ...state, search_results: action.payload };\n\n\t\tcase GET_PLANS_BY_SECTIONID:\n\t\t\treturn { ...state, sectionPlans: action.payload };\n\n\t\tcase SET_ACTIVE_PLAN:\n\t\t\tif (action.id != null) {\n\t\t\t\tlet selected = state.plans.find((plan) => { return plan.id == action.id });\n\n\t\t\t\tif (typeof (selected) != 'undefined') {\n\t\t\t\t\treturn { ...state, active_plan: selected };\n\t\t\t\t} else {\n\t\t\t\t\treturn { ...state, active_plan: INITIAL_STATE.active_plan };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, active_plan: INITIAL_STATE.active_plan };\n\n\t\tcase PLAN_UPDATE:\n\t\t\treturn { ...state, active_plan: action.payload };\n\n\t\tcase CLEAR_PLANS_FROM_STORE:\n\t\t\treturn { ...state, plans: INITIAL_STATE.plans, active_plan: INITIAL_STATE.active_plan };\n\t\tcase CLEAR_SECTION_PLANS:\n\t\t\treturn { ...state, sectionPlans: INITIAL_STATE.sectionPlans };\n\n\t\tcase PLAN_DELETE_PLAN:\n\t\t\tif (action.payload != null) {\n\t\t\t\tlet currentPlans = state.plans;\n\t\t\t\tif (currentPlans != null && currentPlans.length > 0) {\n\t\t\t\t\t// Try to find index of the now deleted plan\n\t\t\t\t\tlet foundIndex = currentPlans.findIndex(function (plan) {\n\t\t\t\t\t\treturn plan.id == action.payload;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (foundIndex > -1) {\n\t\t\t\t\t\t// Remove the index from list\n\t\t\t\t\t\tcurrentPlans.splice(foundIndex, 1);\n\t\t\t\t\t\treturn { ...state, plans: currentPlans };\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase PLAN_DELETE_ASSIGNMENT_FROM_PLAN:\n\t\t\treturn state;\n\n\t\tcase CREATE_BULK_PLANS:\n\t\t\tif (action.payload != null) {\n\t\t\t\tvar currentPlans = state.plans;\n\n\t\t\t\tif (currentPlans == null)\n\t\t\t\t\tcurrentPlans = [];\n\n\t\t\t\treturn { ...state, plans: [...currentPlans, ...action.payload], createdPlans: action.payload };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_PLAN_SECTION:\n\t\t\treturn { ...state, section: action.payload };\n\n\t\tcase CLEAR_PLAN_SECTION:\n\t\t\treturn { ...state, section: null };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_SECTIONS = 'GET_SECTIONS';\nexport const GET_SECTION = 'GET_SECTION';\nexport const GET_FILTERED_SECTION = 'GET_FILTERED_SECTION';\nexport const GET_SECTION_DETAILS = 'GET_SECTION_DETAILS';\nexport const SET_ACTIVE_SECTION = 'SET_ACTIVE_SECTION';\nexport const GET_EDUCATION_GROUPS = 'GET_EDUCATION_GROUPS';\nexport const GET_EDUCATION_GROUPS_LEGACY = 'GET_EDUCATION_GROUPS_LEGACY';\nexport const GET_ARCHIVED_EDUCATION_GROUPS = 'GET_ARCHIVED_EDUCATION_GROUPS';\nexport const GET_MENTOR_GROUPS = 'GET_MENTOR_GROUPS';\nexport const GROUPS_LOADING = 'GROUPS_FETCH_IS_LOADING';\nexport const CLEAR_SECTIONS_FROM_STORE = 'CLEAR_SECTIONS_FROM_STORE';\nexport const GET_SCHOOL_BY_GROUP_GRAPH_ID = 'GET_SCHOOL_BY_GROUP_GRAPH_ID';\nexport const GET_SECTION_BY_GRAPH_ID = 'GET_SECTION_BY_GRAPH_ID';\nexport const SET_ARCHIVING_SECTION = 'SET_ARCHIVING_SECTION';\nexport const GET_SECTION_ATTENDANCE_STATS = 'SECTIONS_GET_SECTION_ATTENDANCE_STATISTICS';\nexport const CLEAR_SECTION_ATTENDANCE_STATS = 'CLEAR_SECTION_ATTENDANCE_STATS';\nexport const GET_GROUP_ABSENCE = 'SECTIONS_GET_GROUP_ABSENCE';\nexport const GET_SECTION_GUARDIANS = 'SECTIONS_GET_SECTION_GUARDIANS';\nexport const GET_STUDENT_ATTENDANCE_STATS = 'GET_STUDENT_ATTENDANCE_STATS';\nexport const CLEAR_STUDENT_ATTENDANCE_STATS = 'CLEAR_STUDENT_ATTENDANCE_STATS';\nexport const INFORM_ADD_TAB = 'INFORM_ADD_TAB';\nexport const GET_SECTION_TEAMS_CHANNEL = 'GET_SECTION_TEAMS_CHANNEL';\nexport const GET_SECTION_ASESSMENT_STATISTICS = 'SECTIONS_GET_SECTION_ASSESSMENT_STATISTICS';\nexport const GET_ARCHIEVED_MENTOR_GROUPS = 'GET_ARCHIEVED_MENTOR_GROUPS';\nexport const TOGGLE_SELECTED_SECTION = 'SECTIONS_TOGGLE_SELECTED_SECTION';\nexport const CLEAR_SELECTED_SECTIONS = 'SECTIONS_CLEAR_SELECTED_SECTIONS';\nexport const GET_GROUP_STUDENT_ADJUSTMENTS = 'SECTIONS_GET_GROUP_STUDENT_ADDITIONAL_ADJUSTMENTS';\nexport const GET_GROUP_STUDENT_ADJUSTMENTS_MULTIPLE = 'SECTIONS_GET_GROUP_STUDENT_ADDITIONAL_ADJUSTMENTS_MULTIPLE';\n\nexport const getSections = (callback) => ({\n\ttype: GET_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sections').then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const getSchoolByGroupGraphId = (graphId) => {\n\treturn {\n\t\ttype: GET_SCHOOL_BY_GROUP_GRAPH_ID,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tapi.get(`sections/${graphId}/school`).then((response) => {\n\t\t\t\tif (response.status == 204) {\n\t\t\t\t\tresolve(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n};\n\nexport const getSectionByGraphId = (graphId, additionalParams = null) => {\n\treturn {\n\t\ttype: GET_SECTION_BY_GRAPH_ID,\n\t\tpayload: new Promise((resolve) => {\n\n\t\t\tlet params = '';\n\t\t\tif (additionalParams != null) {\n\t\t\t\tparams = '?expand=' + additionalParams;\n\t\t\t}\n\n\t\t\tapi.get(`sections/${graphId}${params}`).then((response) => {\n\t\t\t\tif (response.status == 204) {\n\t\t\t\t\tresolve(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n};\n\nexport const getMentorGroups = (callback) => ({\n\ttype: GET_MENTOR_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sections?type=MENTOR_GROUP').then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const getArchievedMentorGroups = (callback) => ({\n\ttype: GET_ARCHIEVED_MENTOR_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sections?type=MENTOR_GROUP&archived=true').then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const getLegacyEducationGroups = () => ({\n\ttype: GET_EDUCATION_GROUPS_LEGACY,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sections/legacy?type=EDUCATION_GROUP').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const getEducationGroups = () => ({\n\ttype: GET_EDUCATION_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sections?type=EDUCATION_GROUP').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getArchivedEducationGroups = (callback) => ({\n\ttype: GET_ARCHIVED_EDUCATION_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sections?type=EDUCATION_GROUP&archived=true').then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const getSection = (id, owners = true, additionalParams = '') => ({\n\ttype: GET_SECTION,\n\tpayload: new Promise((resolve, reject) => {\n\t\tlet params = null;\n\t\tif (owners) {\n\t\t\tparams = 'expand=owners;members;courses;historic_students;' + additionalParams;\n\t\t} else {\n\t\t\tparams = 'expand=members;courses;historic_students'\n\t\t}\n\n\t\tapi.get(`sections/${id}?${params}`)\n\t\t\t.then((response) => {\n\t\t\t\tvar data = response.data;\n\n\t\t\t\tif (data && data.courses != null && data.courses.length > 0) {\n\t\t\t\t\tdata.courses.forEach((element) => {\n\t\t\t\t\t\tvar sortedList = [];\n\t\t\t\t\t\tif (element.details != null && element.details.length > 0) {\n\t\t\t\t\t\t\tvar activeDetailIndex = element.details.findIndex(\n\t\t\t\t\t\t\t\t(element) => element.endDate == null\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (activeDetailIndex > -1) {\n\t\t\t\t\t\t\t\tvar activeDetail = element.details[activeDetailIndex];\n\t\t\t\t\t\t\t\telement.details.splice(activeDetailIndex, 1);\n\t\t\t\t\t\t\t\telement.details.unshift(activeDetail);\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}\n\n\t\t\t\tresolve(response.data);\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\treject(e);\n\t\t\t});\n\t}),\n});\n\nexport const getFilteredSection = (id, startDate, endDate) => ({\n\ttype: GET_FILTERED_SECTION,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${id}/start/${startDate}/end/${endDate}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const appendSectionDetails = (id) => ({\n\ttype: GET_SECTION_DETAILS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const setActiveSection = (id) => ({\n\ttype: SET_ACTIVE_SECTION,\n\tpayload: id,\n});\n\nexport const clearSectionsFromStore = () => ({\n\ttype: CLEAR_SECTIONS_FROM_STORE,\n\tpayload: [],\n});\n\nexport const updateArchived = (group) => ({\n\ttype: SET_ARCHIVING_SECTION,\n\tpayload: new Promise((resolve) => {\n\t\tlet values = { ...group };\n\t\tvalues.archived = !group.archived;\n\t\tdelete values.events;\n\n\t\tapi.put(`sections`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSectionAttendance = (sectionId, start, end) => ({\n\ttype: GET_SECTION_ATTENDANCE_STATS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`attendance/Statistics?sectionId=${sectionId}&startDate=${start}&endDate=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getStudentAttendance = (studentId, start, end, sectionId) => ({\n\ttype: GET_STUDENT_ATTENDANCE_STATS,\n\tpayload: new Promise((resolve) => {\n\t\tif (sectionId != 0 && sectionId != null) {\n\t\t\tapi.get(`attendance/Statistics?studentId=${studentId}&startDate=${start}&endDate=${end}§ionId=${sectionId}`)\n\t\t\t\t.then((response) => {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tapi.get(`attendance/Statistics?studentId=${studentId}&startDate=${start}&endDate=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearStudentAttendance = () => ({\n\ttype: CLEAR_STUDENT_ATTENDANCE_STATS,\n\tpayload: true,\n});\n\nexport const clearSectionAttendanceStats = () => ({\n\ttype: CLEAR_SECTION_ATTENDANCE_STATS,\n\tpayload: true,\n});\n\nexport const getGroupAbsenceForToday = (id, start, end) => ({\n\ttype: GET_GROUP_ABSENCE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${id}/absences?startDate=${start}&endDate=${end}`).then((response) => {\n\t\t\tlet values = {\n\t\t\t\tgroupId: id,\n\t\t\t\tvalue: response.data,\n\t\t\t};\n\n\t\t\tresolve(values);\n\t\t});\n\t}),\n});\n\nexport const getSectionAssessmentStatistics = (sectionId, start, end, subjects = []) => ({\n\ttype: GET_SECTION_ASESSMENT_STATISTICS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = `assessments/sections/${sectionId}/statistics?startDate=${start}&endDate=${end}`\n\n\t\tapi.post(url, subjects).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSectionGuardians = (id) => ({\n\ttype: GET_SECTION_GUARDIANS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${id}/guardians`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getTeamChannels = (groupId) => ({\n\ttype: GET_SECTION_TEAMS_CHANNEL,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${groupId}/channels`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const informAboutTabData = (sectionId, tabId) => ({\n\ttype: INFORM_ADD_TAB,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`sections/${sectionId}/tabs/${tabId}`, null).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const toggleSelectedSection = (section, groupAssignment = false) => ({\n\ttype: TOGGLE_SELECTED_SECTION,\n\tpayload: { section, groupAssignment },\n});\n\nexport const clearSelectedSections = () => ({\n\ttype: CLEAR_SELECTED_SECTIONS,\n\tpayload: true,\n});\n\nexport const getStudentAdditionalAdjustmentsForGroup = (groupId) => ({\n\ttype: GET_GROUP_STUDENT_ADJUSTMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections/${groupId}/studentAdditionalAdjustments`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getStudentAdditionalAdjustmentsForMultipleGroups = (group) => ({\n\ttype: GET_GROUP_STUDENT_ADJUSTMENTS_MULTIPLE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`StudentAdditionalAdjustments?sectionId=${group}`).then((response) => {\n\t\t\tlet data = null;\n\t\t\tif (response.data != null) {\n\t\t\t\tdata = [];\n\n\t\t\t\tresponse.data.forEach((adjustment) => {\n\t\t\t\t\tadjustment.groupId = group;\n\t\t\t\t\tdata.push(adjustment);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tresolve(data);\n\t\t});\n\t}),\n});\n","import {\n\tGET_SECTIONS,\n\tGET_SECTION,\n\tGET_FILTERED_SECTION,\n\tGET_SECTION_DETAILS,\n\tGET_EDUCATION_GROUPS,\n\tGET_ARCHIVED_EDUCATION_GROUPS,\n\tGET_MENTOR_GROUPS,\n\tGET_ARCHIEVED_MENTOR_GROUPS,\n\tSET_ACTIVE_SECTION,\n\tCLEAR_SECTIONS_FROM_STORE,\n\tGET_SCHOOL_BY_GROUP_GRAPH_ID,\n\tGET_SECTION_BY_GRAPH_ID,\n\tGET_SECTION_ATTENDANCE_STATS,\n\tCLEAR_SECTION_ATTENDANCE_STATS,\n\tGET_GROUP_ABSENCE,\n\tGET_SECTION_GUARDIANS,\n\tGET_STUDENT_ATTENDANCE_STATS,\n\tCLEAR_STUDENT_ATTENDANCE_STATS,\n\tGET_SECTION_TEAMS_CHANNEL,\n\tGET_SECTION_ASESSMENT_STATISTICS,\n\tTOGGLE_SELECTED_SECTION,\n\tCLEAR_SELECTED_SECTIONS,\n\tGET_EDUCATION_GROUPS_LEGACY\n} from 'actions/sections';\n\nfunction sortMatrices(section, state) {\n\tif (section != null && section.courses != null) {\n\t\tif (section.courses.length > 0) {\n\t\t\tsection.courses.forEach((course) => {\n\t\t\t\tif (course.details != null) {\n\t\t\t\t\tif (course.details.length > 0) {\n\t\t\t\t\t\tcourse.details.forEach((detail) => {\n\t\t\t\t\t\t\tif (detail.matrix != null) {\n\t\t\t\t\t\t\t\tif (detail.matrix._Rows != null) {\n\t\t\t\t\t\t\t\t\tvar rows = detail.matrix._Rows.sort((a, b) => {\n\t\t\t\t\t\t\t\t\t\treturn a.paragraph - b.paragraph || a.sentenceNr - b.sentenceNr;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tdetail.matrix._Rows = rows;\n\t\t\t\t\t\t\t\t}\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}\n\t\t\t})\n\t\t}\n\t}\n}\n\nconst INITIAL_STATE = {\n\tsections: null,\n\tmentorGroups: [],\n\tmentorArchievedGroups: [],\n\teducationGroups: [],\n\tarchivedEducationGroups: [],\n\tlegacyEducationGroups: [],\n\tactiveSection: null,\n\tactiveFilteredSection: null,\n\tgraphGroupSchool: null,\n\tgraphSection: null,\n\tsectionAttendance: null,\n\tguardians: [],\n\tstudentAttendanceStats: [],\n\tteamChannels: [],\n\tassessmentStatistics: null,\n\tselected: [],\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_SCHOOL_BY_GROUP_GRAPH_ID:\n\t\t\treturn { ...state, graphGroupSchool: action.payload };\n\n\t\tcase GET_SECTIONS:\n\t\t\treturn { ...state, sections: action.payload };\n\n\t\tcase GET_SECTION_BY_GRAPH_ID:\n\t\t\treturn { ...state, graphSection: action.payload };\n\n\t\tcase GET_EDUCATION_GROUPS_LEGACY:\n\t\t\tlet groups = action.payload;\n\n\t\t\tif (Array.isArray(groups) && groups.length > 0) {\n\t\t\t\tgroups.forEach(group => { group.type = group.type + \"_LEGACY\" });\n\t\t\t}\n\n\t\t\treturn { ...state, legacyEducationGroups: groups };\n\n\t\tcase GET_EDUCATION_GROUPS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn { ...state, educationGroups: action.payload, loading: false };\n\t\t\t}\n\n\t\t\treturn { ...state, educationGroups: action.payload };\n\n\t\tcase GET_SECTION_TEAMS_CHANNEL:\n\t\t\treturn { ...state, teamChannels: action.payload };\n\n\t\tcase GET_ARCHIVED_EDUCATION_GROUPS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn { ...state, archivedEducationGroups: action.payload, loading: false };\n\t\t\t}\n\n\t\t\treturn { ...state, archivedEducationGroups: action.payload };\n\n\t\tcase GET_MENTOR_GROUPS:\n\t\t\treturn { ...state, mentorGroups: action.payload };\n\n\t\tcase GET_ARCHIEVED_MENTOR_GROUPS:\n\t\t\treturn { ...state, mentorArchievedGroups: action.payload };\n\n\t\tcase GET_SECTION:\n\t\t\tsortMatrices(action.payload, state);\n\t\t\treturn { ...state, activeSection: action.payload };\n\n\t\tcase GET_FILTERED_SECTION:\n\t\t\tsortMatrices(action.payload, state);\n\t\t\treturn { ...state, activeFilteredSection: action.payload };\n\n\t\tcase GET_SECTION_DETAILS:\n\t\t\tif (action.payload != null && state.educationGroups.length > 0) {\n\t\t\t\tconst currentIndex = state.educationGroups.findIndex(se => {\n\t\t\t\t\treturn se.id == action.payload.id;\n\t\t\t\t});\n\n\t\t\t\tif (currentIndex > -1) {\n\t\t\t\t\tlet newSections = state.educationGroups;\n\t\t\t\t\tnewSections.splice(currentIndex, 1, action.payload);\n\n\t\t\t\t\treturn { ...state, educationGroups: newSections };\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase SET_ACTIVE_SECTION:\n\t\t\treturn { ...state, activeSection: null };\n\n\t\tcase CLEAR_SECTIONS_FROM_STORE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\teducationGroups: [],\n\t\t\t\tsections: INITIAL_STATE.sections,\n\t\t\t\tmentorGroups: [],\n\t\t\t\tarchivedEducationGroups: INITIAL_STATE.archivedEducationGroups,\n\t\t\t};\n\n\t\tcase GET_SECTION_ATTENDANCE_STATS:\n\t\t\treturn { ...state, sectionAttendance: action.payload };\n\n\t\tcase CLEAR_SECTION_ATTENDANCE_STATS:\n\t\t\treturn { ...state, sectionAttendance: INITIAL_STATE.sectionAttendance };\n\n\t\tcase GET_GROUP_ABSENCE:\n\t\t\tif (action.payload != null) {\n\t\t\t\tlet activeGroup = state.activeSection;\n\t\t\t\tlet mentorGroups = state.mentorGroups;\n\n\t\t\t\tif (state.mentorGroups != null) {\n\t\t\t\t\tmentorGroups = mentorGroups.map(group => {\n\t\t\t\t\t\tif (group.id == action.payload.groupId) {\n\t\t\t\t\t\t\tgroup.absences = action.payload.value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn group;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (state.activeSection != null) {\n\t\t\t\t\tif (state.activeSection.id == action.payload.groupId) {\n\t\t\t\t\t\tactiveGroup.absences = action.payload.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, activeSection: activeGroup, mentorGroups: mentorGroups };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_SECTION_GUARDIANS:\n\t\t\treturn { ...state, guardians: [...state.guardians.filter(t => t.id != action.payload.id), action.payload] };\n\n\t\tcase GET_STUDENT_ATTENDANCE_STATS:\n\t\t\treturn { ...state, studentAttendanceStats: [...state.studentAttendanceStats, action.payload] }\n\n\t\tcase CLEAR_STUDENT_ATTENDANCE_STATS:\n\t\t\treturn { ...state, studentAttendanceStats: INITIAL_STATE.studentAttendanceStats };\n\n\t\tcase GET_SECTION_ASESSMENT_STATISTICS:\n\t\t\treturn { ...state, assessmentStatistics: action.payload };\n\n\t\tcase TOGGLE_SELECTED_SECTION:\n\t\t\tif (action.payload.section != null) {\n\t\t\t\tlet selected = [...state.selected];\n\t\t\t\tconst foundInSelected = selected.findIndex(group => group.id == action.payload.section.id);\n\n\t\t\t\tif (action.payload.groupAssignment) {\n\t\t\t\t\tselected = [action.payload.section];\n\t\t\t\t} else if (foundInSelected > -1) {\n\t\t\t\t\tselected.splice(foundInSelected, 1);\n\t\t\t\t} else {\n\t\t\t\t\tselected.push(action.payload.section);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, selected };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase CLEAR_SELECTED_SECTIONS:\n\t\t\treturn { ...state, selected: INITIAL_STATE.selected };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_FORECAST = 'ABSENCE_GET_FORECAST';\nexport const GET_CALENDAR_ATTENDENCE = 'ABSENCE_GET_CALENDAR_ATTENDENCE';\nexport const GET_SCHOOL_STUDENTS_PAGE = 'ABSENCE_GET_SCHOOL_STUDENTS_PAGE';\nexport const GET_USER_ATTENDANCE = 'ABSENCE_GET_USER_ATTENDANCE';\nexport const CLEAR_USER_ATTENDANCE = 'ABSENCE_CLEAR_USER_ATTENDANCE';\nexport const CLEAR_FORECAST = 'ABSENCE_CLEAR_FORECAST';\n\nexport const SUBMIT_ATTENDANCE = 'ABSENCE_SUBMIT_ATTENDANCE';\nexport const UPDATE_ATTENDANCE = 'ABSENCE_UPDATE_ATTENDANCE';\n\nexport const SUBMIT_ABSENCE = 'ABSENCE_SUBMIT_ABSENCE';\nexport const UPDATE_ABSENCE = 'ABSENCE_UPDATE_ABSENCE';\nexport const DELETE_ABSENCE = 'DELETE_ABSENCE';\nexport const DELETE_REPORTED_ATTENDANCE = 'ATTENDANCE_DELETE_REPORTED_ATTENDANCE';\n\nexport const GET_USER_ATTENDANCE_STATS = 'ABSENCE_GET_USER_ATTENDANCE_STATS';\n\n// Get forecast before reporting attendence\nexport const getForecast = (calendarId) => ({\n\ttype: GET_FORECAST,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`attendance/Forecast/?calendarEventId=${calendarId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearForecast = () => ({\n\ttype: CLEAR_FORECAST,\n\tpayload: true,\n});\n\n// Get reported attendence?\nexport const getAttendence = (calendarId) => ({\n\ttype: GET_CALENDAR_ATTENDENCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`attendance/ForCalendarEvent?calendarEventId=${calendarId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const submitAttendence = (values, lessonId) => ({\n\ttype: SUBMIT_ATTENDANCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`attendance/?calendarEventId=${lessonId}`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateAttendance = (values, lessonId) => ({\n\ttype: UPDATE_ATTENDANCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put(`attendance/?calendarEventId=${lessonId}`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const submitAbsence = (values) => ({\n\ttype: SUBMIT_ABSENCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post('absence', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error);\n\t\t});\n\t}),\n});\n\nexport const updateAbsence = (values) => ({\n\ttype: UPDATE_ABSENCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put('absence', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error);\n\t\t});\n\t}),\n});\n\nexport const getUserAttendanceStatistics = (userId, start, end) => ({\n\ttype: GET_USER_ATTENDANCE_STATS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`attendance/Statistics?studentId=${userId}&startDate=${start}&endDate=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getUserAttendance = (userId, start, end, sectionId) => ({\n\ttype: GET_USER_ATTENDANCE,\n\tpayload: new Promise(resolve => {\n\t\tif (sectionId != 0 && sectionId != null) {\n\t\t\tapi.get(`attendance/AttendanceDetails?studentId=${userId}&startTime=${start}&endTime=${end}§ionId=${sectionId}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\n\t\t\treturn true;\n\t\t}\n\n\t\tapi.get(`attendance/AttendanceDetails?studentId=${userId}&startTime=${start}&endTime=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearUserAttendance = () => ({\n\ttype: CLEAR_USER_ATTENDANCE,\n\tpayload: true,\n});\n\nexport const deleteAbsence = (absenceId) => ({\n\ttype: DELETE_ABSENCE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`absence/${absenceId}`).then((response) => {\n\t\t\tresolve(absenceId);\n\t\t});\n\t}),\n});\n\nexport const deleteReportedAttendance = (calendarEventId) => ({\n\ttype: DELETE_REPORTED_ATTENDANCE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`attendance/${calendarEventId}`).then((response) => {\n\t\t\tresolve(calendarEventId);\n\t\t});\n\t}),\n})\n","import * as actions from 'actions/schedule';\nimport { SUBMIT_ATTENDANCE } from 'actions/absence';\n\nconst INITIAL_STATE = {\n\tscheduleToday: [],\n\tuserSchedule: [],\n\tusersSchedule: {},\n\tuserActivites: [],\n\tactiveScheduleItem: null,\n\tschedulePositions: [],\n\tselectedLessons: [],\n\tnonOwnerActivities: [],\n\tstudentActivities: [],\n\tgroupActivities: {\n\t\tid: null,\n\t\tdata: [],\n\t\tstartDate: null,\n\t\tendDate: null\n\t},\n\tgroupSchedules: {\n\t\tid: null,\n\t\tdata: [],\n\t\tstartDate: null,\n\t\tendDate: null\n\t},\n\tlastFetched: null,\n};\n\nfunction UpdateLesson(lesson, list) {\n\tlet scheduleList = list ? [...list] : [];\n\n\tif (lesson != null) {\n\t\tconst index = scheduleList.findIndex(s => s.id == lesson.id);\n\t\tif (index !== -1) {\n\t\t\tscheduleList[index].attendanceReported = lesson.attendanceReported;\n\t\t\tscheduleList[index].examination = lesson.examination;\n\t\t\tscheduleList[index].room = lesson.room;\n\t\t}\n\t}\n\treturn scheduleList;\n}\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase actions.SET_LAST_FETCHED:\n\t\t\treturn { ...state, lastFetched: action.payload };\n\t\tcase actions.SCHEDULE_TODAY:\n\t\t\treturn { ...state, scheduleToday: action.payload };\n\n\t\tcase actions.CLEAR_SCHEDULE_FROM_STORE:\n\t\t\treturn { ...INITIAL_STATE };\n\n\t\tcase actions.CLEAR_SCHEDULE_ITEM:\n\t\t\treturn { ...state, activeScheduleItem: null };\n\n\t\tcase actions.CLEAR_SEARCHED_SCHEDULES:\n\t\t\treturn { ...state, selectedLessons: [] };\n\t\tcase actions.GET_SCHEDULE_ITEM:\n\t\t\treturn { ...state, activeScheduleItem: action.payload };\n\n\t\tcase actions.GET_SCHEDULES_BY_ID:\n\t\t\treturn { ...state, selectedLessons: [...state.selectedLessons, action.payload] }\n\t\tcase actions.GET_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE:\n\t\t\treturn { ...state, schedulePositions: action.payload };\n\n\t\tcase actions.UPDATE_LESSON_LIST:\n\t\t\tconst lesson = action.payload;\n\t\t\tlet list = state.userSchedule;\n\t\t\tif (lesson) {\n\t\t\t\tlet updatedList = UpdateLesson(lesson, list);\n\t\t\t\treturn { ...state, userSchedule: updatedList };\n\t\t\t}\n\t\tcase actions.DELETE_LESSON_IN_LIST:\n\t\t\tlet userSchedule = state.userSchedule;\n\t\t\tconst removedId = action.payload;\n\t\t\tif (removedId != null) {\n\t\t\t\tconst index = userSchedule.findIndex(s => s.id == removedId);\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tuserSchedule.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...state, userSchedule };\n\n\t\tcase SUBMIT_ATTENDANCE:\n\t\t\tlet schedulePositions = state.schedulePositions;\n\t\t\tconst scheduleId = action.payload.result;\n\n\t\t\tlet foundIndex = schedulePositions.findIndex((sch) => {\n\t\t\t\treturn sch.id == scheduleId;\n\t\t\t});\n\n\t\t\tif (foundIndex > -1) {\n\t\t\t\tschedulePositions.splice(foundIndex, 1);\n\t\t\t}\n\n\t\t\treturn { ...state, schedulePositions };\n\n\t\tcase actions.CLEAR_SCHEDULE_POSITION_WITH_NO_REPORTED_ATTENDANCE:\n\t\t\treturn { ...state, schedulePositions: [] };\n\t\tcase action.GET_SCHEDULE_FOR_USERS_REQUEST:\n\t\t\treturn;\n\t\tcase actions.GET_SCHEDULE_FOR_USERS:\n\t\t\tif (state.groupSchedules.id == null || state.groupSchedules.id != action.payload.id) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tgroupSchedules: {\n\t\t\t\t\t\t...state.groupSchedules,\n\t\t\t\t\t\tdata: action.payload.documents,\n\t\t\t\t\t\tstartDate: action.payload.startDate,\n\t\t\t\t\t\tendDate: action.payload.endDate,\n\t\t\t\t\t\tid: action.payload.id\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar startDate = state.groupSchedules.startDate < action.payload.startDate ? state.groupSchedules.startDate : action.payload.startDate;\n\t\t\t\tvar endDate = state.groupSchedules.endDate > action.payload.endDate ? state.groupSchedules.endDate : action.payload.endDate;\n\t\t\t\tvar dataArray = state.groupSchedules.data;\n\t\t\t\tconst hasId = (id) => dataArray.some(obj => obj.id === id);\n\t\t\t\taction.payload.documents.forEach(obj => {\n\t\t\t\t\tif (!hasId(obj.id)) {\n\t\t\t\t\t\tdataArray.push(obj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tgroupSchedules: {\n\t\t\t\t\t\t...state.groupSchedules,\n\t\t\t\t\t\tdata: dataArray,\n\t\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\t\tendDate: endDate,\n\t\t\t\t\t\tid: action.payload.id\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\tcase actions.GET_SCHEDULE_FOR_USER:\n\t\t\tlet usersSchedule = state.usersSchedule;\n\t\t\tusersSchedule[action.payload.userId] = action.payload.documents;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuserSchedule: action.payload.documents,\n\t\t\t\tusersSchedule,\n\t\t\t};\n\t\tcase actions.GET_ACTIVITIES_BY_ID:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstudentActivities: action.payload.documents,\n\t\t\t};\n\t\tcase actions.GET_ACTIVITIES_FOR_USER:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuserActivites: action.payload.documents,\n\t\t\t};\n\t\tcase actions.GET_ACTIVITIES_FOR_GROUPS:\n\t\t\tif (state.groupActivities.id == null || state.groupActivities.id != action.payload.id) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tgroupActivities: {\n\t\t\t\t\t\t...state.groupActivities,\n\t\t\t\t\t\tdata: action.payload.documents,\n\t\t\t\t\t\tstartDate: action.payload.startDate,\n\t\t\t\t\t\tendDate: action.payload.endDate,\n\t\t\t\t\t\tid: action.payload.id\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar startDate = state.groupActivities.startDate < action.payload.startDate ? state.groupActivities.startDate : action.payload.startDate;\n\t\t\t\tvar endDate = state.groupActivities.endDate > action.payload.endDate ? state.groupActivities.endDate : action.payload.endDate;\n\t\t\t\tvar dataArray = state.groupActivities.data;\n\t\t\t\tconst hasId = (id) => dataArray.some(obj => obj.id === id);\n\t\t\t\taction.payload.documents.forEach(obj => {\n\t\t\t\t\tif (!hasId(obj.id)) {\n\t\t\t\t\t\tdataArray.push(obj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tgroupActivities: {\n\t\t\t\t\t\t...state.groupActivities,\n\t\t\t\t\t\tdata: dataArray,\n\t\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\t\tendDate: endDate,\n\t\t\t\t\t\tid: action.payload.id\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t}\n\t\tcase actions.CLEAR_ACTIVITIES_FOR_OTHERS_STORE:\n\t\t\treturn {\n\t\t\t\t...state, groupActivities: [], groupSchedules: {\n\t\t\t\t\t...state.groupSchedules,\n\t\t\t\t\tid: null,\n\t\t\t\t\tdata: [],\n\t\t\t\t\tstartDate: null,\n\t\t\t\t\tendDate: null\n\t\t\t\t}\n\t\t\t};\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_NOTIFICATIONS = 'GET_NOTIFICATIONS';\nexport const GET_NOTIFICATION_SETTINGS = 'GET_NOTIFICATION_SETTINGS';\nexport const GET_USER_UNREAD_NOTIFICATIONS = 'NOTIFICATIONS_GET_USER_UNREAD_NOTIFICATIONS';\nexport const CLEAR_NOTIFICATIONS_FROM_STORE = 'CLEAR_NOTIFICATIONS_FROM_STORE';\nexport const MARK_NOTIFICATION_AS_READ = 'NOTIFICATIONS_MARK_NOTIFICATION_AS_READ';\n\nexport const getNotifications = (lcid) => ({\n\ttype: GET_NOTIFICATIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`notifications/lcid/${lcid}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getNotificationSettings = () => ({\n\ttype: GET_NOTIFICATION_SETTINGS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`notifications/notificationSettings`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearNotificationsFromStore = () => ({\n\ttype: CLEAR_NOTIFICATIONS_FROM_STORE,\n\tpayload: []\n});\n\nexport const markNotificationAsRead = (notificationId) => ({\n\ttype: MARK_NOTIFICATION_AS_READ,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`notifications/${notificationId}/read`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getUserUnreadNotifications = () => ({\n\ttype: GET_USER_UNREAD_NOTIFICATIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`users/me/notifications/unread`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n","import {\n\tCLEAR_NOTIFICATIONS_FROM_STORE,\n\tGET_NOTIFICATIONS,\n\tGET_USER_UNREAD_NOTIFICATIONS,\n\tGET_NOTIFICATION_SETTINGS,\n} from 'actions/notifications';\n\nconst INITIAL_STATE = {\n\tnotifications: [],\n\tnotificationSettings: [],\n\tuserNotificationSettings: [],\n\tuserUnread: null,\n};\n\nexport default function (state, action) {\n\tconst { type, payload } = action;\n\n\tif (typeof (state) === 'undefined') {\n\t\treturn INITIAL_STATE;\n\t}\n\n\tswitch (type) {\n\t\tcase GET_NOTIFICATIONS:\n\t\t\tif (typeof (payload) === 'undefined' && payload === null) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Order notifications by the id property in a DESC order\n\t\t\tpayload.map(referenceType => {\n\t\t\t\tif (typeof (referenceType.notifications) !== 'undefined' && Array.isArray(referenceType.notifications)) {\n\t\t\t\t\treferenceType.notifications.sort(function (a, b) {\n\t\t\t\t\t\treturn b.id - a.id;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn { ...state, notifications: payload };\n\n\t\tcase CLEAR_NOTIFICATIONS_FROM_STORE:\n\t\t\treturn { ...state, notifications: [] };\n\n\t\tcase GET_NOTIFICATION_SETTINGS:\n\t\t\treturn { ...state, notificationSettings: action.payload };\n\n\t\tcase GET_USER_UNREAD_NOTIFICATIONS:\n\t\t\treturn { ...state, userUnread: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}","import { KNOWLEDGE, CLEAR_KNOWLEDGE } from '../actions/knowledge';\n\n\nconst INITIAL_STATE = {\n active_section_knowledge: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n switch (action.type) {\n case KNOWLEDGE:\n return { ...state, active_section_knowledge: action.payload };\n case CLEAR_KNOWLEDGE:\n return { ...state, active_section_knowledge: null };\n default:\n return state;\n }\n}\n","/**\n * @typedef {import('types').User} UserModel\n */\n\nimport api from 'lib/api';\nimport { http, onMsalTokenError, onMsalLoginRequired } from 'lib/msal';\nimport { appInsights, setEnhancedLogLevel } from 'lib/appInsights';\nimport getEnvironment from 'lib/env';\nimport jwtDecode from 'jwt-decode';\n\nexport const SET_USER = 'SET_USER';\nexport const GET_TENANT = 'GET_TENANT';\nexport const USER_ROLES = 'USER_ROLES';\nexport const CURRENT_USER = 'CURRENT_USER';\nexport const CURRENT_USER_BASE = 'CURRENT_USER_BASE';\nexport const SET_ROLE = 'SET_ROLE';\nexport const SET_SCHOOL = 'SET_SCHOOL';\nexport const SET_SCHOOL_TYPE = 'SET_SCHOOL_TYPE';\nexport const SEARCH_USER = 'SEARCH_USER';\nexport const CLEAR_SEARCH_USER = 'CLEAR_SEARCH_USER';\nexport const GET_USER_INFO = 'GET_USER_INFO';\nexport const SET_ACTIVE_TEAMS_TAB = 'SET_ACTIVE_TEAMS_TAB';\nexport const SET_LANGUAGE = 'SET_LANGUAGE';\nexport const GET_TENANT_SCHOOLS = 'GET_TENANT_SCHOOLS';\nexport const USER_GET_USER_ABSENCE = 'USER_GET_USER_ABSENCE';\nexport const GET_USER_GUARDIAN = 'GET_USER_GUARDIAN';\nexport const GET_GUARDIAN_BY_EMAIL = 'GET_GUARDIAN_BY_EMAIL';\nexport const GET_GUARDIAN_BY_ID = 'GET_GUARDIAN_BY_ID';\nexport const SET_GUARDIAN_BY_ID = 'SET_GUARDIAN_BY_ID';\nexport const SET_USER_GUARDIAN = \"SET_USER_GUARDIAN\";\nexport const ADD_USER_GUARDIAN = \"ADD_USER_GUARDIAN\";\nexport const DELETE_USER_GUARDIAN = \"ADD_USER_GUARDIAN\";\nexport const GET_READER_PARAMS = 'USER_GET_IMMERSIVE_READER_PARAMETERS';\nexport const GET_USER_COURSES = 'GET_STUDENT_COURSES';\nexport const GET_USER_SUBJECTS = 'GET_STUDENT_SUBJECTS';\nexport const SEARCH_STAFF = 'SEARCH_STAFF';\nexport const UPDATE_USER = 'UPDATE_USER';\nexport const GET_USER_FILES = 'USER_GET_USER_FILES';\nexport const DELETE_USER_FILE = 'USER_DELETE_USER_FILE';\nexport const UPDATE_USER_FILE = 'USER_UPDATE_USER_FILES';\nexport const LINK_STUDENT_GUARDIAN = 'LINK_STUDENT_GUARDIAN';\nexport const ADD_USER_ROLE = 'ADD_USER_ROLE';\nexport const DELETE_USER_ROLE = 'DELETE_USER_ROLE';\nexport const GET_TEACHER_ROLES = 'GET_TEACHER_ROLES';\nexport const DELETE_TEACHER_ROLE = 'DELETE_TEACHER_ROLE';\nexport const ADD_TEACHER_ROLE = \"ADD_TEACHER_ROLE\";\nexport const GET_MY_MENTOR_SECTIONS = 'SECTIONS_GET_MY_USER_SECTIONS';\nexport const GET_USERS_WITHOUT_MENTOR_GROUPS = 'USERS_GET_USERS_WITHOUT_MENTOR_GROUPS';\nexport const USER_ADMIN_CHECK = 'USER_ADMIN_CHECK';\nexport const ADD_USER = 'ADD_USER';\nexport const GET_MY_SECTIONS = 'USERS_GET_MY_SECTIONS';\nexport const GET_ALL_SECTIONS = 'GET_ALL_SECTIONS';\nexport const GET_ALL_USER_SECTIONS = 'GET_ALL_USER_SECTIONS';\nexport const GET_USER_NOTIFICATION_SETTINGS = 'GET_USER_NOTIFICATION_SETTINGS';\nexport const GET_USER_ACCESSTOKEN = 'GET_USER_ACCESSTOKEN';\n\n\nconst fetchOnBehalfOfAccessToken = async (id, scopes) => {\n\treturn {\n\t\ttype: GET_USER_ACCESSTOKEN,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get(`users/${id}/access_token?scopes=${scopes}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport function getOnBehalfOfAccessToken(id, scopes) {\n\treturn async (dispatch, getState) => {\n\t\tlet token = getState().user.accessToken;\n\n\t\t// If token exists, validate if it's expired.\n\t\tif (token) {\n\t\t\ttry {\n\t\t\t\tconst decoded = jwtDecode(token);\n\t\t\t\t// 'exp' is in seconds; compare to current time in seconds.\n\t\t\t\tif (decoded.exp < Date.now() / 1000) {\n\t\t\t\t\tconsole.log(\"Access token has expired.\");\n\t\t\t\t\ttoken = null;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Error decoding token:\", error);\n\t\t\t\ttoken = null;\n\t\t\t}\n\t\t}\n\n\t\tif (token == null) {\n\t\t\tawait dispatch(fetchOnBehalfOfAccessToken(id, scopes));\n\t\t\ttoken = getState().user.accessToken;\n\t\t}\n\n\t\treturn token;\n\t}\n}\n\nexport function addUserRole(userId, roleId) {\n\treturn {\n\t\ttype: ADD_USER_ROLE,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.put(`users/${userId}/roles/${roleId}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function deleteUserRole(userId, roleId) {\n\treturn {\n\t\ttype: DELETE_USER_ROLE,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.delete(`users/${userId}/roles/${roleId}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function setActiveTeamsTab(tab) {\n\treturn {\n\t\ttype: SET_ACTIVE_TEAMS_TAB,\n\t\tpayload: tab\n\t}\n}\n\nexport function setUser(user) {\n\treturn {\n\t\ttype: SET_USER,\n\t\tpayload: user,\n\t};\n}\n\nexport function setActiveRole(role) {\n\treturn {\n\t\ttype: SET_ROLE,\n\t\tpayload: role\n\t}\n}\n\nexport function setActiveSchool(school) {\n\treturn {\n\t\ttype: SET_SCHOOL,\n\t\tpayload: school\n\t}\n}\n\nexport function setSchoolType(type) {\n\treturn {\n\t\ttype: SET_SCHOOL_TYPE,\n\t\tpayload: type\n\t}\n}\n\nexport function getTenant() {\n\treturn {\n\t\ttype: GET_TENANT,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get('tenants/educationBackendBaseUrl', true).then((response) => {\n\t\t\t\tlet environment = getEnvironment();\n\t\t\t\tif (environment != null && environment.type == \"staging\" && response.data != null) {\n\t\t\t\t\thttp.defaults.baseURL = \"https://api-swe-staging.haldor.se/api/\";\n\t\t\t\t} else if (response.data != null) {\n\t\t\t\t\thttp.defaults.baseURL = response.data;\n\t\t\t\t}\n\t\t\t}).then(() => {\n\t\t\t\tapi.get('tenants').then((response) => {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t}, (error) => {\n\t\t\t\t\treject(error.status);\n\t\t\t\t});\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport function userAdminCheck() {\n\treturn {\n\t\ttype: USER_ADMIN_CHECK,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get('services/me/checkadmin').then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t};\n}\n\nexport function getTenantSchools() {\n\treturn {\n\t\ttype: GET_TENANT_SCHOOLS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get('tenants/expand').then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport function getUserRoles(userId) {\n\treturn {\n\t\ttype: USER_ROLES,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tapi.get(`users/${userId}/roles`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport function getBaseMe() {\n\treturn {\n\t\ttype: CURRENT_USER_BASE,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tapi.get('users/me/base').then((response) => {\n\t\t\t\t/**\n\t\t\t\t * @type {UserModel} response.data\n\t\t\t\t */\n\t\t\t\tresolve(response.data);\n\t\t\t}).catch((error) => {\n\t\t\t\tif (error.response.data != null) {\n\t\t\t\t\tif (error.response.data.errorCode != null) {\n\t\t\t\t\t\tif (error.response.data.errorCode == 'invalid_grant') {\n\t\t\t\t\t\t\tonMsalTokenError(null, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport function getMe() {\n\treturn {\n\t\ttype: CURRENT_USER,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get('users/me').then((response) => {\n\t\t\t\tappInsights.trackTrace({ message: 'EDU022 | UserRoles' }, response.data.roles);\n\n\t\t\t\t/**\n\t\t\t\t * @type {UserModel} response.data\n\t\t\t\t */\n\t\t\t\tresolve(response.data);\n\t\t\t}).catch((error) => {\n\t\t\t\tif (error.response == null) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (error.response.data != null) {\n\t\t\t\t\tif (error.response.data.errorCode != null) {\n\t\t\t\t\t\tif (error.response.data.errorCode == 'invalid_grant') {\n\t\t\t\t\t\t\tonMsalTokenError(null, error);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (error.response.data.errorCode == 'interaction_required') {\n\t\t\t\t\t\t\tsetEnhancedLogLevel(1);\n\t\t\t\t\t\t\tonMsalTokenError(null, error);\n\n\t\t\t\t\t\t\tappInsights.trackTrace({ message: 'EDU014 | Got interaction_required errorCode from graph' });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treject(error.response);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treject(0);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nlet infoIds = [];\nexport function getUserInfo(id, returnType = 'base', update = false) {\n\treturn {\n\t\ttype: GET_USER_INFO,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tif ((infoIds.indexOf(id) == -1 && !update) || update) {\n\t\t\t\tif (infoIds.indexOf(id) == -1)\n\t\t\t\t\tinfoIds.push(id);\n\n\t\t\t\tapi.get(`users/${id}?returnType=${returnType}`).then((response) => {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tresolve(null);\n\t\t\t}\n\t\t}),\n\t};\n}\n\nexport function searchUser(name, schoolId) {\n\treturn {\n\t\ttype: SEARCH_USER,\n\t\tpayload: new Promise(resolve => {\n\t\t\tlet url = `users?search=${name}&userType=student`;\n\n\t\t\tif (name == '' || name == null) {\n\t\t\t\tresolve([]);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tapi.get(url).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t})\n\t};\n}\n\nexport function clearSearchUser() {\n\treturn {\n\t\ttype: CLEAR_SEARCH_USER,\n\t\tpayload: null\n\t};\n}\n\nexport function setLanguage(lcid) {\n\treturn {\n\t\ttype: SET_LANGUAGE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.put(`users/me/lcid/${lcid}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t})\n\t};\n}\n\nexport const getUserAbsence = (id, start, end) => ({\n\ttype: USER_GET_USER_ABSENCE,\n\tpayload: new Promise(resolve => {\n\t\tlet url = `users/${id}/absence/`;\n\t\tif (start != null && end != null) {\n\t\t\turl = `users/${id}/absence?start=${start}&end=${end}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport function getUserGuardian(id) {\n\treturn {\n\t\ttype: GET_USER_GUARDIAN,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get(`users/${id}/guardians`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t};\n}\n\nexport function getUserGuardianByEmail(email) {\n\treturn {\n\t\ttype: GET_GUARDIAN_BY_EMAIL,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get(`users/guardians?email=${email}`).then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject('error');\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t};\n}\nexport function getGuardianById(id) {\n\treturn {\n\t\ttype: GET_GUARDIAN_BY_ID,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get(`users/guardians/${id}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t};\n}\n\nexport function setUserGuardian(userId, guardian) {\n\treturn {\n\t\ttype: SET_USER_GUARDIAN,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.put(`users/${userId}/guardians`, guardian).then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject('error');\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t}\n}\n\nexport function setGuardian(id, guardian) {\n\treturn {\n\t\ttype: SET_GUARDIAN_BY_ID,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.put(`users/guardians/${id}`, guardian).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t}\n}\n\nexport function addUser(userItem, preOnboarding = false) {\n\treturn {\n\t\ttype: ADD_USER,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.post(`users?preOnboarding=` + preOnboarding, userItem).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function addUserGuardian(userId, guardian) {\n\treturn {\n\t\ttype: ADD_USER_GUARDIAN,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.post(`users/${userId}/guardians`, guardian).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const deleteStudentGuardian = (userId, guardianId, removeAll) => ({\n\ttype: DELETE_USER_GUARDIAN,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`users/${userId}/guardians/${guardianId}?removeAll=${removeAll}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const linkStudentGuardian = (userId, guardianId) => ({\n\ttype: LINK_STUDENT_GUARDIAN,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`users/${userId}/guardians/${guardianId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport function getReaderParameters() {\n\treturn {\n\t\ttype: GET_READER_PARAMS,\n\t\tpayload: new Promise(async (resolve) => {\n\t\t\tconst token = await api.get(`cognitiveServices/token`);\n\t\t\tconst subdomain = await api.get(`cognitiveServices/subdomain`);\n\n\t\t\tresolve({\n\t\t\t\tsubdomain: subdomain.data,\n\t\t\t\ttoken: token.data,\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const getUserCourses = (userId) => ({\n\ttype: GET_USER_COURSES,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/${userId}/courses`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getUserSubjects = (userId) => ({\n\ttype: GET_USER_SUBJECTS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/${userId}/subjects`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n})\n\nexport function updateUser(user) {\n\treturn {\n\t\ttype: UPDATE_USER,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tapi.put(`users/${user.userId}`, user).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t}\n}\n\nexport const getTeacherRoles = (userId) => ({\n\ttype: GET_TEACHER_ROLES,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/${userId}/teacherroles`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const deleteTeacherRole = (userId, SubjectCode, schoolId) => ({\n\ttype: DELETE_TEACHER_ROLE,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`users/${userId}/teacherroles/${SubjectCode}?schoolId=${schoolId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport function addTeacherRole(userId, subjectTeacher) {\n\treturn {\n\t\ttype: ADD_TEACHER_ROLE,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.post(`users/${userId}/teacherroles`, subjectTeacher).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const getUserFiles = (userId) => ({\n\ttype: GET_USER_FILES,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/${userId}/files`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const updateUserFile = (userId, file) => ({\n\ttype: UPDATE_USER_FILE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`users/${userId}/files/${file.id}`, file).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteUserFile = (userId, fileId) => ({\n\ttype: DELETE_USER_FILE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.delete(`users/${userId}/files/${fileId}`).then((response) => {\n\t\t\tresolve(fileId);\n\t\t}).catch(() => {\n\t\t\treject(0);\n\t\t});\n\t}),\n});\n\nexport const getAllUserSections = (userId, parameters) => ({\n\ttype: GET_ALL_USER_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = '';\n\t\tlet urlParams = {\n\t\t\tpageSize: 20,\n\t\t\tpageIndex: 1,\n\t\t\tfilter: '',\n\t\t\tsortBy: 'TITLE_DESC',\n\n\t\t\t...parameters,\n\t\t};\n\n\t\tfor (const key in urlParams) {\n\t\t\turl += `&${key}=${urlParams[key]}`;\n\t\t}\n\n\t\tapi.get(`users/${userId}/sections?_=${url}`).then((response) => {\n\t\t\tresolve({\n\t\t\t\tdocuments: response.data,\n\t\t\t\t...urlParams,\n\t\t\t});\n\t\t});\n\t})\n});\n\nexport const getMyMentorSections = () => ({\n\ttype: GET_MY_MENTOR_SECTIONS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/me/sections?type=MENTOR_GROUP`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n})\n\nexport const getUsersWithoutMentorGroups = () => ({\n\ttype: GET_USERS_WITHOUT_MENTOR_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`users/withoutmentorgroups`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMySections = (parameters) => ({\n\ttype: GET_MY_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = '';\n\t\tlet urlParams = {\n\t\t\tpageSize: 20,\n\t\t\tpageIndex: 1,\n\t\t\tfilter: '',\n\t\t\tsortBy: 'TITLE_DESC',\n\n\t\t\t...parameters\n\t\t};\n\n\t\tfor (const key in urlParams) {\n\t\t\turl += `&${key}=${urlParams[key]}`;\n\t\t}\n\n\t\tapi.get(`users/me/sections?_=${url}`).then((response) => {\n\t\t\tresolve({\n\t\t\t\tdocuments: response.data,\n\t\t\t\t...urlParams\n\t\t\t});\n\t\t});\n\t}),\n});\n\nexport const getAllSections = (parameters) => ({\n\ttype: GET_ALL_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = '';\n\t\tlet urlParams = {\n\t\t\tpageSize: 20,\n\t\t\tpageIndex: 1,\n\t\t\tfilter: '',\n\t\t\tsortBy: 'TITLE_DESC',\n\n\t\t\t...parameters,\n\t\t};\n\n\t\tfor (const key in urlParams) {\n\t\t\turl += `&${key}=${urlParams[key]}`;\n\t\t}\n\n\t\tapi.get(`schools/sections?_=${url}`).then((response) => {\n\t\t\tresolve({\n\t\t\t\tdocuments: response.data,\n\t\t\t\t...urlParams,\n\t\t\t});\n\t\t});\n\t})\n});\n\nexport const getUserNotificationSettings = () => ({\n\ttype: GET_USER_NOTIFICATION_SETTINGS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`users/notificationsettings`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import {\n\tSET_USER,\n\tGET_TENANT,\n\tUSER_ROLES,\n\tCURRENT_USER,\n\tCURRENT_USER_BASE,\n\tSET_ROLE,\n\tSET_SCHOOL,\n\tSET_SCHOOL_TYPE,\n\tSEARCH_USER,\n\tGET_USER_INFO,\n\tSET_ACTIVE_TEAMS_TAB,\n\tGET_TENANT_SCHOOLS,\n\tUSER_GET_USER_ABSENCE,\n\tCLEAR_SEARCH_USER,\n\tGET_USER_GUARDIAN,\n\tGET_GUARDIAN_BY_EMAIL,\n\tGET_GUARDIAN_BY_ID,\n\tSET_GUARDIAN_BY_ID,\n\tLINK_STUDENT_GUARDIAN,\n\tADD_USER_GUARDIAN,\n\tGET_READER_PARAMS,\n\tGET_USER_COURSES,\n\tGET_USER_SUBJECTS,\n\tUPDATE_USER,\n\tGET_USER_FILES,\n\tADD_USER_ROLE,\n\tDELETE_USER_ROLE,\n\tGET_TEACHER_ROLES,\n\tDELETE_TEACHER_ROLE,\n\tADD_TEACHER_ROLE,\n\tGET_MY_MENTOR_SECTIONS,\n\tGET_USERS_WITHOUT_MENTOR_GROUPS,\n\tUSER_ADMIN_CHECK,\n\tGET_MY_SECTIONS,\n\tGET_ALL_SECTIONS,\n\tGET_ALL_USER_SECTIONS,\n\tGET_USER_ACCESSTOKEN,\n\tDELETE_USER_FILE,\n\tGET_USER_NOTIFICATION_SETTINGS\n} from 'actions/user';\n\nimport { SET_ARCHIVING_SECTION } from 'actions/sections';\n\nconst INITIAL_STATE = {\n\tuser: null,\n\tcurrentUser: null,\n\tcurrentBaseUser: null,\n\tuserCourses: [],\n\tuserSubjects: [],\n\ttenant: null,\n\tactiveRole: null,\n\tactiveSchool: null,\n\troles: [],\n\tsearchResults: null,\n\tinfo: [],\n\tactiveTab: null,\n\tabsence: null,\n\tuserMentorSections: null,\n\tguardians: [],\n\tguardian: null,\n\tsearchGuardian: null,\n\treader: null,\n\tfiles: [],\n\tteacherRoles: [],\n\tsections: null,\n\tusersWithoutMentorGroups: null,\n\tonboardingUser: null,\n\tmySections: null,\n\tuserNotificationSettings: []\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_USER_ACCESSTOKEN:\n\t\t\treturn { ...state, accessToken: action.payload }\n\t\tcase USER_ADMIN_CHECK:\n\t\t\treturn { ...state, onboardingUser: action.payload };\n\n\t\tcase ADD_USER_ROLE:\n\t\t\treturn { ...state };\n\n\t\tcase DELETE_USER_ROLE:\n\t\t\treturn { ...state };\n\n\t\tcase SET_ACTIVE_TEAMS_TAB:\n\t\t\treturn { ...state, activeTab: action.payload };\n\n\t\tcase SET_USER:\n\t\t\treturn { ...state, user: action.payload };\n\n\t\tcase GET_TENANT:\n\t\t\treturn { ...state, tenant: action.payload };\n\n\t\tcase GET_TENANT_SCHOOLS:\n\t\t\treturn { ...state, tenant: action.payload };\n\n\t\tcase USER_ROLES:\n\t\t\treturn { ...state, roles: action.payload };\n\n\t\tcase CURRENT_USER:\n\t\t\treturn { ...state, currentUser: action.payload };\n\n\t\tcase CURRENT_USER_BASE:\n\t\t\treturn { ...state, currentBaseUser: action.payload };\n\n\t\tcase SET_ROLE:\n\t\t\tvar role = action.payload.toUpperCase();\n\t\t\treturn { ...state, activeRole: role };\n\n\t\tcase SET_SCHOOL:\n\t\t\treturn { ...state, activeSchool: action.payload };\n\n\t\tcase SET_SCHOOL_TYPE:\n\t\t\tlet user = state.currentUser;\n\n\t\t\tuser.schools.map(school => {\n\t\t\t\tschool.type = action.payload;\n\t\t\t});\n\n\t\t\treturn { ...state, currentUser: user };\n\n\t\tcase SEARCH_USER:\n\t\t\treturn { ...state, searchResults: action.payload };\n\n\t\tcase CLEAR_SEARCH_USER:\n\t\t\treturn { ...state, searchResults: null };\n\n\t\tcase GET_USER_INFO:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tinfo: [...state.info.filter(t => {\n\t\t\t\t\t\treturn t.userId != action.payload.userId;\n\t\t\t\t\t}), action.payload],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_USER_GUARDIAN:\n\t\t\treturn { ...state, guardians: action.payload };\n\n\t\tcase GET_GUARDIAN_BY_ID:\n\t\t\treturn { ...state, guardian: action.payload };\n\n\t\tcase SET_GUARDIAN_BY_ID:\n\t\t\treturn { ...state, guardian: action.payload };\n\n\t\tcase GET_GUARDIAN_BY_EMAIL:\n\t\t\treturn { ...state, searchGuardian: action.payload };\n\n\t\tcase ADD_USER_GUARDIAN:\n\t\t\tlet guardians = [...state.guardians];\n\t\t\tguardians.push(action.payload);\n\t\t\treturn { ...state, guardians: guardians };\n\n\t\tcase LINK_STUDENT_GUARDIAN:\n\t\t\tguardians = [...state.guardians];\n\t\t\tguardians.push(action.payload);\n\t\t\treturn { ...state, guardians: guardians };\n\n\t\tcase USER_GET_USER_ABSENCE:\n\t\t\treturn { ...state, absence: action.payload };\n\n\t\tcase GET_READER_PARAMS:\n\t\t\treturn { ...state, reader: action.payload };\n\n\t\tcase GET_USER_COURSES:\n\t\t\treturn { ...state, userCourses: action.payload };\n\n\t\tcase GET_USER_SUBJECTS:\n\t\t\treturn { ...state, userSubjects: action.payload };\n\n\t\tcase UPDATE_USER:\n\t\t\tlet info = [...state.info];\n\t\t\tif (action.payload != null) {\n\t\t\t\tconst index = info.findIndex((i) => i.userId == action.payload.userId);\n\n\t\t\t\tif (index == -1) {\n\t\t\t\t\tinfo.push(action.payload);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, info };\n\n\t\tcase GET_USER_FILES:\n\t\t\treturn { ...state, files: action.payload };\n\n\t\tcase DELETE_USER_FILE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tfiles: [...state.files].filter((file) => file.id != action.payload),\n\t\t\t};\n\n\t\tcase GET_TEACHER_ROLES:\n\t\t\treturn { ...state, teacherRoles: action.payload };\n\n\t\tcase DELETE_TEACHER_ROLE:\n\t\t\treturn { ...state, teacherRoles: action.payload };\n\n\t\tcase ADD_TEACHER_ROLE:\n\t\t\tlet teacherRoles = [];\n\t\t\tif (state.teacherRoles != null) {\n\t\t\t\tteacherRoles = [...state.teacherRoles];\n\t\t\t}\n\t\t\tif (action.payload != null) {\n\t\t\t\tlet index = teacherRoles.findIndex(i => {\n\t\t\t\t\treturn i.subjectCode == action.payload.subjectCode;\n\t\t\t\t})\n\t\t\t\tif (index != -1) {\n\t\t\t\t\tteacherRoles.splice(index, 1, action.payload);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tteacherRoles.push(action.payload);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, teacherRoles };\n\n\t\tcase GET_ALL_USER_SECTIONS:\n\t\t\tif (action.payload != null) {\n\t\t\t\tif (action.payload.pageIndex > 1) {\n\t\t\t\t\treturn { ...state, userSections: [...state.userSections, ...action.payload.documents] };\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, userSections: [...action.payload.documents] };\n\t\t\t}\n\n\t\t\treturn state;\n\t\tcase GET_MY_MENTOR_SECTIONS:\n\t\t\treturn { ...state, sections: action.payload };\n\n\t\tcase GET_USERS_WITHOUT_MENTOR_GROUPS:\n\t\t\treturn { ...state, usersWithoutMentorGroups: action.payload };\n\n\t\tcase GET_MY_SECTIONS:\n\t\t\tif (action.payload != null) {\n\t\t\t\tif (action.payload.pageIndex > 1) {\n\t\t\t\t\treturn { ...state, mySections: [...state.mySections, ...action.payload.documents] };\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, mySections: [...action.payload.documents] };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_ALL_SECTIONS:\n\t\t\tif (action.payload != null) {\n\t\t\t\tif (action.payload.pageIndex > 1) {\n\t\t\t\t\treturn { ...state, mySections: [...state.mySections, ...action.payload.documents] };\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, mySections: [...action.payload.documents] };\n\t\t\t}\n\n\t\t\treturn state;\n\t\tcase GET_USER_NOTIFICATION_SETTINGS:\n\t\t\treturn { ...state, userNotificationSettings: action.payload };\n\t\tcase SET_ARCHIVING_SECTION:\n\t\t\tif (state.mySections != null) {\n\t\t\t\tlet newMySections = JSON.parse(JSON.stringify(state.mySections));\n\t\t\t\tlet foundGroupIndex = newMySections.findIndex(g => g.id == action.payload.id);\n\n\t\t\t\tif (foundGroupIndex == -1) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tnewMySections.splice(foundGroupIndex, 1, action.payload);\n\t\t\t\treturn { ...state, mySections: newMySections };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tdefault:\n\t\t\treturn state;\n\n\t}\n}\n","import DateTime from '_class/DateTime';\nimport api from 'lib/api';\n\nexport const PUT_DATA = 'PUT_DATA';\nexport const ADD_ERROR = 'ADD_ERROR';\nexport const CREATE_TASK = 'CREATE_TASK';\nexport const DELETE_REQUEST = 'DELETE_REQUEST';\n\nexport const postData = (data, endpoint, callback) => ({\n\ttype: CREATE_TASK,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post(endpoint, data).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const putData = (endpoint, data, callback) => ({\n\ttype: PUT_DATA,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(endpoint, data).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport function addError(message, type) {\n\tconst errorType = type || 'warning';\n\n\tconst error = {\n\t\tmsg: message,\n\t\ttype: errorType,\n\t\ttarget: 'API',\n\t\ttime: new DateTime(),\n\t};\n\n\tconsole.log('running action addError payload', error);\n\n\treturn {\n\t\ttype: ADD_ERROR,\n\t\tpayload: error,\n\t};\n}\n\nexport const deleteRequest = (endpoint, id, callback) => ({\n\ttype: DELETE_REQUEST,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.delete(`${endpoint}/${id}`).then((response) => {\n\t\t\tif (response.status > 300) {\n\t\t\t\treject(err);\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(null, err);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});","import { ADD_ERROR } from '../actions/index';\n\nexport default function (state = [], action) {\n\tswitch (action.type) {\n\t\tcase ADD_ERROR:\n\t\t\treturn [ ...state, action.payload ];\n\n\t\tdefault:\n\t\t\treturn state;\n\t\t\tbreak;\n\t}\n}\n","export const SAVE_FILTER_VALUE = 'SAVE_FILTER_VALUE';\n\nexport function saveFilterValue(value) {\n\treturn {\n\t\ttype: SAVE_FILTER_VALUE,\n\t\tpayload: value,\n\t};\n}\n","import { SAVE_FILTER_VALUE } from '../actions/detailstable';\n\nconst INITIAL_STATE = {\n\tfilter: [],\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase SAVE_FILTER_VALUE:\n\t\t\tvar arr = state.filter;\n\t\t\tarr = arr.filter(item => item.id != action.payload.id);\n\t\t\tarr.push(action.payload);\n\t\t\treturn { ...state, filter: arr };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","const getObjectKeys = (...objects) => {\n\tlet keys = [];\n\n\tobjects.forEach((obj) => {\n\t\tObject.keys(obj).forEach((key) => {\n\t\t\tif (keys.indexOf(key) == -1) {\n\t\t\t\tkeys.push(key);\n\t\t\t}\n\t\t})\n\t})\n\n\treturn keys;\n}\n\nconst isPropertyDifferent = (a, b, property) => {\n\treturn a[property] != b[property];\n}\n\nconst isObjectDifferent = (a, b) => {\n\tif (typeof a != 'object' || typeof b != 'object') {\n\t\t// One of the provided values are not objects, cannot compare\n\t\treturn false;\n\t}\n\n\tlet result = false;\n\tconst keys = getObjectKeys(a, b);\n\tkeys.forEach((key) => {\n\t\t// TODO: Figure out what tyhis does\n\t\t// if (typeof a[key] == 'object' && typeof b[key] == 'object' && a[key] != null && b[key] != null) {\n\t\t// \treturn isObjectDifferent(a[key], b[key]);\n\t\t// }\n\n\t\tif (isPropertyDifferent(a, b, key)) {\n\t\t\tresult = true;\n\t\t}\n\t});\n\n\treturn result;\n}\n\nexport const get_operations = (old, changes) => {\n\tlet a = JSON.parse(JSON.stringify(old));\n\tlet b = JSON.parse(JSON.stringify(changes));\n\n\tlet operations = [];\n\n\tlet keys = getObjectKeys(a, b);\n\tlet changedKeys = [];\n\n\tkeys.forEach((key) => {\n\t\tconst inOld = Object.keys(a).find((oldKey) => oldKey == key) != null;\n\t\tconst inNew = Object.keys(b).find((newKey) => newKey == key) != null;\n\n\t\tif (inOld && inNew) {\n\t\t\tswitch (typeof a[key]) {\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'string':\n\t\t\t\t\tif (isPropertyDifferent(a, b, key)) {\n\t\t\t\t\t\tchangedKeys.push(key);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'object':\n\t\t\t\t\tif (a[key] == null || b[key] == null) {\n\t\t\t\t\t\tif (isPropertyDifferent(a, b, key)) {\n\t\t\t\t\t\t\tchangedKeys.push(key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (a[key].length != null) {\n\t\t\t\t\t\t// Is array, check for new or changed items\n\t\t\t\t\t\tb[key].forEach((item) => {\n\t\t\t\t\t\t\tif (item.id == null) {\n\t\t\t\t\t\t\t\t// New item (no id)\n\t\t\t\t\t\t\t\toperations.push({\n\t\t\t\t\t\t\t\t\top: 'add',\n\t\t\t\t\t\t\t\t\tpath: '/' + key,\n\t\t\t\t\t\t\t\t\tvalue: item,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet foundInA = a[key].find((aItem) => aItem.id == item.id);\n\t\t\t\t\t\t\tif (foundInA != null) {\n\t\t\t\t\t\t\t\tif (isObjectDifferent(item, foundInA)) {\n\t\t\t\t\t\t\t\t\toperations.push({\n\t\t\t\t\t\t\t\t\t\top: 'replace',\n\t\t\t\t\t\t\t\t\t\tpath: '/' + key,\n\t\t\t\t\t\t\t\t\t\tvalue: item,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Check for removed items\n\t\t\t\t\t\ta[key].forEach((item) => {\n\t\t\t\t\t\t\tlet foundInB = b[key].find((bItem) => bItem.id == item.id);\n\n\t\t\t\t\t\t\tif (foundInB == null) {\n\t\t\t\t\t\t\t\toperations.push({\n\t\t\t\t\t\t\t\t\top: 'remove',\n\t\t\t\t\t\t\t\t\tpath: '/' + key,\n\t\t\t\t\t\t\t\t\tvalue: item,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isObjectDifferent(a, b)) {\n\t\t\t\t\t\toperations.push({\n\t\t\t\t\t\t\top: 'replace',\n\t\t\t\t\t\t\tpath: '/' + key,\n\t\t\t\t\t\t\tvalue: b,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tchangedKeys.push(key);\n\t})\n\n\tif (changedKeys.length > 0) {\n\t\tlet value = {};\n\t\tchangedKeys.forEach((key) => {\n\t\t\tvalue[key] = b[key];\n\t\t});\n\n\t\toperations.unshift({\n\t\t\top: 'replace',\n\t\t\tpath: '/',\n\t\t\tvalue: value,\n\t\t});\n\t}\n\n\treturn operations;\n}\n","import api from 'lib/api';\nimport { get_operations } from 'lib/patch';\n\nexport const GET_ASSESSMENTS_COURSES = 'GET_ASSESSMENTS_COURSES';\nexport const GET_ASSESSMENTS = 'GET_ASSESSMENTS';\nexport const CREATE_ASSESSMENTS = 'CREATE_ASSESSMENTS';\nexport const DELETE_ASSESSMENT = 'ASSESSMENTS_DELETE_ASSESSMENTS';\nexport const DELETE_ASSESSMENTS_DETAIL = 'ASSESSMENTS_DELETE_ASSESSMENTS_DETAIL';\nexport const UPDATE_ASSESSMENT = 'UPDATE_ASSESSMENT';\nexport const UPDATE_ASSESSMENT_STATUS = 'UPDATE_ASSESSMENT_STATUS';\nexport const GET_STUDENT_COURSES_GOALS = 'ASSESSMENTS_GET_STUDENT_COURSES_AND_GOALS';\nexport const GET_STUDENT_ASSESSMENT_STATISTICS = 'ASSESSMENTS_GET_STUDENT_ASSESSMENT_STATISTICS';\n\nexport const CLEAR_MATRIX_ASSESSMENT_OVERVIEW = 'CLEAR_MATRIX_ASSESSMENT_OVERVIEW';\n\nexport const CLEAR_ASSESSMENTS = 'CLEAR_ASSESSMENTS';\nexport const CREATE_ASSESSMENTS_STUDENT = 'CREATE_ASSESSMENTS_STUDENT';\n\n\nexport const getCoursesUsedWithinMySections = (from, to) => ({\n\ttype: GET_ASSESSMENTS_COURSES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assessments/courses?fromDate=${from}&toDate=${to}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getPlanAssessments = (id) => ({\n\ttype: GET_ASSESSMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assessments/plans/${id}`).then((response) => {\n\t\t\tif (response.status > 300) {\n\t\t\t\tresolve([]);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createAssessments = (values) => ({\n\ttype: CREATE_ASSESSMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post('assessments', values).then(async (response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createStudentAssessment = (values) => ({\n\ttype: CREATE_ASSESSMENTS_STUDENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post('assessments/student', values).then(async (response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const updateAssessment = (values, assessment) => ({\n\ttype: UPDATE_ASSESSMENT,\n\tpayload: new Promise((resolve) => {\n\t\tconst operations = get_operations(assessment, values);\n\n\t\tif (operations.length > 0) {\n\t\t\tapi.patch(`assessments/${values.id}`, assessment, operations).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t} else {\n\t\t\tresolve(values);\n\t\t}\n\t}),\n});\n// Used in assignments and planning\nexport const updateAssessmentStatus = (assessmentId, status) => ({\n\ttype: UPDATE_ASSESSMENT_STATUS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`assessments/status?assessmentId=${assessmentId}&status=${status}`, null).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n// Used in multiple assessment forms\nexport const deleteAssessment = (assessmentId) => ({\n\ttype: DELETE_ASSESSMENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(\"assessments/\" + assessmentId).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n// Used in assessmentWidget\nexport const deleteAssessmentDetail = (assessmentId, detailId) => ({\n\ttype: DELETE_ASSESSMENTS_DETAIL,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`assessments/${assessmentId}/details/${detailId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getAssignmentAssessment = (id) => ({\n\ttype: GET_ASSESSMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assessments/assignments/${id}`).then((response) => {\n\t\t\tif (response.status != 200) {\n\t\t\t\tresolve(null);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n// Used in assignment and planning\nexport const clearAssessments = () => ({\n\ttype: CLEAR_ASSESSMENTS,\n\tpayload: []\n});\n\nexport const getUserSummary = (studentId, startDate, endDate, params = {}) => ({\n\ttype: GET_STUDENT_COURSES_GOALS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = `assessments/users/${studentId}/summary/data?startDate=${startDate}&endDate=${endDate}`;\n\n\t\tif (params.courseId != null) {\n\t\t\turl += `&courseId=${params.courseId}`;\n\t\t}\n\n\t\tif (params.sectionId != null) {\n\t\t\turl += `§ionId=${params.sectionId}`;\n\t\t}\n\n\t\tif (params.type != null) {\n\t\t\turl += `&type=${params.type}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getUserStatisticsDetailed = (studentId, startDate, endDate, params = {}) => ({\n\ttype: GET_STUDENT_ASSESSMENT_STATISTICS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = `assessments/users/${studentId}/statistics/detailed?startDate=${startDate}&endDate=${endDate}`;\n\n\t\tif (params.sectionId != null) {\n\t\t\turl += `§ionId=${params.sectionId}`;\n\t\t}\n\n\t\tif (params.courseId != null) {\n\t\t\turl += `&courseId=${params.courseId}`;\n\t\t}\n\n\t\tif (params.type != null) {\n\t\t\turl += `&type=${params.type}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import api from 'lib/api';\n\nexport const GET_STUDENT_ASSESSOR_ASSESSMENT = 'GET_STUDENT_ASSESSOR_ASSESSMENT';\nexport const GET_STUDENT_ASSESSOR_ASSESSMENTS = 'GET_STUDENT_ASSESSOR_ASSESSMENTS';\nexport const CREATE_STUDENT_ASSESSMENTS = 'CREATE_STUDENT_ASSESSMENTS';\nexport const UPDATE_STUDENT_ASSESSMENT = 'UPDATE_STUDENT_ASSESSMENT';\nexport const DELETE_STUDENT_ASSESSMENT = 'DELETE_STUDENT_ASSESSMENT';\n\nexport const getStudentAssessment = (id, userId, callback) => ({\n\ttype: GET_STUDENT_ASSESSOR_ASSESSMENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${id}/studentassessments/${userId}`).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const getStudentAssessments = (id, callback) => ({\n\ttype: GET_STUDENT_ASSESSOR_ASSESSMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/${id}/studentassessments`).then((response) => {\n\t\t\tif (response.status == 204) {\n\t\t\t\tresolve(null);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const createStudentAssessments = (id, assessment, callback) => ({\n\ttype: CREATE_STUDENT_ASSESSMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tconst endpoint = `assignments/${id}/studentassessment`;\n\t\tapi.post(endpoint, assessment).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\n\nexport const updateStudentAssessment = (id, assessment, callback) => ({\n\ttype: UPDATE_STUDENT_ASSESSMENT,\n\tpayload: new Promise((resolve) => {\n\t\tconst endpoint = `assignments/${id}/studentassessment`;\n\t\tapi.put(endpoint, assessment).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\n\nexport const deletStudentAssessment = (data, id, callback) => ({\n\ttype: DELETE_STUDENT_ASSESSMENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`assignments/${id}/studentassessment`, data).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});","import {\n\tGET_ASSESSMENTS,\n\tGET_ASSESSMENTS_COURSES,\n\tCLEAR_MATRIX_ASSESSMENT_OVERVIEW,\n\tCLEAR_ASSESSMENTS,\n\tGET_STUDENT_COURSES_GOALS,\n\tGET_STUDENT_ASSESSMENT_STATISTICS,\n} from 'actions/assessments';\n\nimport {\n\tGET_STUDENT_ASSESSOR_ASSESSMENT,\n\tGET_STUDENT_ASSESSOR_ASSESSMENTS\n} from 'actions/studentassessments';\n\nconst INITIAL_STATE = {\n\tcourses: [],\n\tassessments: [],\n\tassessment: null,\n\tstudentAssessment: null,\n\tstudentAssessments: [],\n\tstudentStatistics: null,\n\tstudentOverview: null,\n\tmatrixAssessments: [],\n\tuserAssessments: [],\n\tprogressSections: [],\n\tprogressAssessmentStats: [],\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\n\t\tcase GET_ASSESSMENTS:\n\t\t\treturn { ...state, assessments: action.payload };\n\t\tcase GET_ASSESSMENTS_COURSES:\n\t\t\treturn { ...state, courses: action.payload };\n\n\t\tcase GET_STUDENT_ASSESSOR_ASSESSMENT:\n\t\t\treturn { ...state, studentAssessment: action.payload };\n\n\t\tcase GET_STUDENT_COURSES_GOALS:\n\t\t\treturn { ...state, studentOverview: action.payload };\n\n\t\tcase GET_STUDENT_ASSESSMENT_STATISTICS:\n\t\t\treturn { ...state, studentStatistics: action.payload };\n\n\t\tcase GET_STUDENT_ASSESSOR_ASSESSMENTS:\n\t\t\treturn { ...state, studentAssessments: action.payload };\n\n\t\tcase CLEAR_MATRIX_ASSESSMENT_OVERVIEW:\n\t\t\treturn { ...state, matrixAssessments: INITIAL_STATE.matrixAssessments, assessments: [] };\n\n\t\tcase CLEAR_ASSESSMENTS:\n\t\t\treturn { ...state, assessments: [] };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GROUP_INFO = 'GROUP_INFO';\nexport const USER_INFO_BY_ID = 'USER_INFO_BY_ID';\n\nexport const getUserInfoById = (userid, callback) => ({\n\ttype: USER_INFO_BY_ID,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`users/${userid}/`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n\nexport const getGroupInfoById = (id, callback) => ({\n\ttype: GROUP_INFO,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`groups/${id}/`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tcallback(response.data);\n\t\t});\n\t}),\n});\n","import {\n GROUP_INFO,\n USER_INFO_BY_ID,\n} from '../actions/progress';\n\n\nconst INITIAL_STATE = {\n group: null,\n user: null,\n};\n\n\nexport default function (state = INITIAL_STATE, action) {\n switch (action.type) {\n case GROUP_INFO:\n return { ...state, group: action.payload };\n case USER_INFO_BY_ID:\n return { ...state, user: action.payload };\n default:\n return state;\n }\n}\n","/* Import dependencies */\nimport api from 'lib/api';\n\n/* Define action type */\nexport const SUBMIT_PRESCHOOL_GOAL = 'SUBMIT_PRESCHOOL';\nexport const DELETE_PRESCHOOL_GOAL = 'DELETE_PRESCHOOL';\nexport const SEARCH_PRESCHOOL_GOALS = 'SEARCH_PRESCHOOL_GOALS';\nexport const FETCH_PRESCHOOL_GOALS = 'FETCH_PRESCHOOL_GOALS';\nexport const GET_PRESCHOOL_GOALS_STATISTICS = 'PRESCHOOL_GOALS_GET_GOALS_STATISTICS';\nexport const GET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS = 'PRESCHOOL_GOALS_GET_GOAL_PLANS_AND_DOCUMENTATIONS';\nexport const RESET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS = 'RESET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS';\nexport const GET_PRESCHOOL_GOALS_USER_STATISTICS = 'PRESCHOOL_GOALS_GET_USER_STATISTICS'\n\nexport function submit_preschoolgoal(values) {\n\treturn {\n\t\ttype: SUBMIT_PRESCHOOL_GOAL,\n\t\tvalue: values,\n\t}\n}\n\nexport function fetch_preschoolgoals() {\n\treturn {\n\t\ttype: FETCH_PRESCHOOL_GOALS,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get('goals').then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t}),\n\t}\n}\n\nexport function delete_preschoolgoal(values) {\n\treturn {\n\t\ttype: DELETE_PRESCHOOL_GOAL,\n\t\tvalue: values,\n\t}\n}\n\nexport function search_preschoolgoals(search) {\n\treturn {\n\t\ttype: SEARCH_PRESCHOOL_GOALS,\n\t\tvalue: search,\n\t}\n}\n\nexport const getGoalsStatisticsForUsers = (sectionId, start, end) => ({\n\ttype: GET_PRESCHOOL_GOALS_STATISTICS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`goals/statistics/sections/${sectionId}?from=${start}&to=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getGoalsStatisticsForUser = (studentId, start, end) => ({\n\ttype: GET_PRESCHOOL_GOALS_USER_STATISTICS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`goals/statistics/users/${studentId}?from=${start}&to=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getLinkedPlansAndDocumententationsForGoal = (goalId, studentId, from, to) => ({\n\ttype: GET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`goals/${goalId}/plansAndDocumentations?from=${from}&to=${to}&studentId=${studentId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const resetLinkedPlansAndDocumentations = () => ({\n\ttype: RESET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS,\n\tpayload: true,\n});","import {\n\tFETCH_PRESCHOOL_GOALS,\n\tSUBMIT_PRESCHOOL_GOAL,\n\tDELETE_PRESCHOOL_GOAL,\n\tSEARCH_PRESCHOOL_GOALS,\n\tGET_PRESCHOOL_GOALS_STATISTICS,\n\tGET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS,\n\tRESET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS,\n\tGET_PRESCHOOL_GOALS_USER_STATISTICS,\n} from 'actions/preschoolform';\n\nconst initialState = {\n\tpreschoolGoals: [],\n\tsearchResults: [],\n\tstatistics: null,\n\tuserStatistics: null,\n\tlinkedData: [],\n}\n\nexport default function Preschoolgoal(state, action) {\n\tconst { type, value } = action;\n\n\tif (typeof (state) === 'undefined') {\n\t\treturn initialState;\n\t}\n\n\tswitch (type) {\n\t\tcase SUBMIT_PRESCHOOL_GOAL:\n\t\t\t// Cast the values of this goal to strings\n\t\t\tvalue.title += '';\n\t\t\tvalue.description += '';\n\n\t\t\tif (typeof (value.id) !== 'undefined' && value.id !== '') {\n\t\t\t\tlet goal = null;\n\t\t\t\tconst index = state.preschoolGoals.findIndex(pG => value.id === pG.id);\n\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tgoal = value;\n\t\t\t\t\tstate.preschoolGoals.splice(index, 1);\n\t\t\t\t\tstate.preschoolGoals.splice(index, 0, goal);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, preschoolGoals: state.preschoolGoals };\n\t\t\t} else {\n\t\t\t\t// Remove this when we have actual data from the API\n\t\t\t\tvalue.id = '1234-test-id-' + (state.preschoolGoals !== null ? state.preschoolGoals.length + 1 : 1);\n\t\t\t}\n\n\t\t\tstate.preschoolGoals.push(value);\n\n\t\t\treturn { ...state, preschoolGoals: state.preschoolGoals };\n\t\t\tbreak;\n\n\t\tcase DELETE_PRESCHOOL_GOAL:\n\t\t\tif (typeof (value.id) !== 'undefined' && value.id !== '') {\n\t\t\t\tconst index = state.preschoolGoals.findIndex(pG => value.id === pG.id);\n\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tstate.splice(index, 1);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, preschoolGoals: state };\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase SEARCH_PRESCHOOL_GOALS:\n\t\t\tvar results = [];\n\n\t\t\tif (value.length < 3) {\n\t\t\t\treturn { ...state, searchResults: results };\n\t\t\t}\n\n\t\t\tresults = state.preschoolGoals.filter(t => t.title.toLowerCase() === value.search.toLowerCase());\n\n\t\t\treturn { ...state, searchResults: results };\n\t\t\tbreak;\n\n\t\tcase FETCH_PRESCHOOL_GOALS:\n\t\t\treturn { ...state, preschoolGoals: action.payload };\n\t\t\tbreak;\n\n\t\tcase GET_PRESCHOOL_GOALS_STATISTICS:\n\t\t\treturn { ...state, statistics: action.payload };\n\n\t\tcase GET_PRESCHOOL_GOALS_USER_STATISTICS:\n\t\t\treturn { ...state, userStatistics: action.payload };\n\n\t\tcase GET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn { ...state, linkedData: [...state.linkedData, action.payload] }\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase RESET_PRESCHOOL_GOAL_PLANS_AND_DOCUMENTATIONS:\n\t\t\treturn { ...state, linkedData: [] };\n\n\t\tdefault:\n\t\t\treturn state;\n\t\t\tbreak;\n\t}\n}\n","import api from 'lib/api';\n\nexport const SUBMIT_POST = 'SUBMIT_POST';\nexport const UPDATE_POST = 'UPDATE_POST';\nexport const SET_ACTIVE_POST = 'SET_ACTIVE_POST';\nexport const SET_ACTIVE_POST_DETAILS = 'SET_ACTIVE_POST_DETAILS';\nexport const GET_POSTS = 'GET_POSTS';\nexport const GET_POSTS_NEXT_PAGE = 'GET_POSTS_NEXT_PAGE';\nexport const GET_SECTION_POSTS = 'GET_SECTION_POSTS';\nexport const DELETE_POST_FROM_STORE = 'DELETE_POST_FROM_STORE';\nexport const CLEAR_POSTS_FROM_STORE = 'CLEAR_POSTS_FROM_STORE';\nexport const CLEAR_SECTION_POSTS_FROM_STORE = 'CLEAR_SECTION_POSTS_FROM_STORE';\nexport const GET_POST_READ_LIST = 'POSTS_GET_READ_LIST'\nexport const DELETE_POST = 'POST_DELETE_POST';\nexport const CLEAR_POST_READ_LIST = 'CLEAR_POST_READ_LIST';\nexport const SET_PAGINATION_INFO = 'SET_PAGINATION_INFO';\nexport const DELETE_POST_FILE = 'POST_DELETE_POST_FILE';\n\nexport function submit_post(values, callback) {\n\treturn {\n\t\ttype: SUBMIT_POST,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.post('posts', values).then((response) => {\n\t\t\t\tresolve({ ...values, id: response.data });\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function update_post(values, callback) {\n\treturn {\n\t\ttype: UPDATE_POST,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.put('posts', values).then((response) => {\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\n\t\t\t\tresolve(values);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function setActivePost(id) {\n\treturn [\n\t\t{\n\t\t\ttype: SET_ACTIVE_POST,\n\t\t\tid: id,\n\t\t}\n\t]\n}\n\nexport function getPostDetails(id) {\n\treturn {\n\t\ttype: SET_ACTIVE_POST_DETAILS,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tif (typeof (id) !== 'undefined' && id !== null) {\n\t\t\t\tapi.get(`posts/${id}`).then((response) => {\n\t\t\t\t\tif (response.status > 201) {\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t};\n}\n\nexport function getPosts(callback) {\n\treturn {\n\t\ttype: GET_POSTS,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tapi.get(`posts`).then((response) => {\n\t\t\t\tresolve(response.data);\n\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function setPostCollectionInfo(info) {\n\treturn {\n\t\ttype: SET_PAGINATION_INFO,\n\t\tpayload: new Promise(resolve => {\n\t\t\tresolve(info);\n\t\t}),\n\t}\n};\n\nexport function getPostsBySectionId(id, page, status = null, startDate = null, endDate = null, pageSize = 15) {\n\treturn {\n\t\ttype: GET_SECTION_POSTS,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tlet url = `posts?sectionId=${id}`;\n\n\t\t\tif (page != null) {\n\t\t\t\turl += `&pageIndex=${page}&pageSize=${pageSize}`;\n\t\t\t}\n\n\t\t\tif (status != null) {\n\t\t\t\turl += `&filter=${status}`;\n\t\t\t}\n\n\t\t\tif (startDate != null) {\n\t\t\t\turl += `&startDate=${startDate}`;\n\t\t\t}\n\n\t\t\tif (endDate != null) {\n\t\t\t\turl += `&endDate=${endDate}`;\n\t\t\t}\n\n\t\t\tapi.get(url).then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t} else {\n\t\t\t\t\tresolve([]);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n};\n\nexport function getPostsPage(page, status = null, startDate = null, endDate = null, pageSize = 15) {\n\treturn {\n\t\ttype: GET_POSTS_NEXT_PAGE,\n\t\tpayload: new Promise((resolve) => {\n\t\t\tlet url = `posts?pageIndex=${page}&pageSize=${pageSize}`;\n\t\t\tif (status != null) {\n\t\t\t\turl += `&filter=${status}`;\n\t\t\t}\n\n\t\t\tif (startDate != null) {\n\t\t\t\turl += `&startDate=${startDate}`;\n\t\t\t}\n\n\t\t\tif (endDate != null) {\n\t\t\t\turl += `&endDate=${endDate}`;\n\t\t\t}\n\n\t\t\tapi.get(url).then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t} else {\n\t\t\t\t\tresolve([]);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n};\n\nexport function deletePostFromStore(id) {\n\treturn {\n\t\ttype: DELETE_POST_FROM_STORE,\n\t\tpayload: id\n\t}\n}\n\nexport const deletePost = (id) => ({\n\ttype: DELETE_POST,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`posts/${id}`).then((response) => {\n\t\t\tresolve(id);\n\t\t});\n\t}),\n});\n\nexport const getPostReadList = (post) => ({\n\ttype: GET_POST_READ_LIST,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`posts/${post}/reads`).then(response => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport function clearSectionPostsFromStore() {\n\treturn {\n\t\ttype: CLEAR_SECTION_POSTS_FROM_STORE,\n\t\tpayload: true,\n\t}\n};\n\nexport const clearPostsFromStore = () => ({\n\ttype: CLEAR_POSTS_FROM_STORE,\n\tpayload: true,\n});\n\nexport const clearPostReadList = () => ({\n\ttype: CLEAR_POST_READ_LIST,\n\tpayload: true,\n});\n\nexport const deletePostFile = (postId, fileId) => ({\n\ttype: DELETE_POST_FILE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`posts/${postId}/files/${fileId}`).then(() => {\n\t\t\tresolve(fileId);\n\t\t});\n\t}),\n});","import {\n\tGET_POSTS,\n\tSUBMIT_POST,\n\tUPDATE_POST,\n\tSET_ACTIVE_POST,\n\tSET_ACTIVE_POST_DETAILS,\n\tGET_POSTS_NEXT_PAGE,\n\tGET_SECTION_POSTS,\n\tDELETE_POST_FROM_STORE,\n\tCLEAR_POSTS_FROM_STORE,\n\tCLEAR_SECTION_POSTS_FROM_STORE,\n\tGET_POST_READ_LIST,\n\tCLEAR_POST_READ_LIST,\n\tSET_PAGINATION_INFO\n} from 'actions/posts';\n\nconst initialState = {\n\tposts: [],\n\tactivePost: null,\n\tcreatedPost: {},\n\tsectionPosts: [],\n\treadList: null,\n\tcollectionInformation: []\n}\n\nimport { updateObjectInArray } from 'helpers/array';\n\nexport default function Posts(state, action) {\n\tconst { type } = action;\n\n\tif (typeof (state) === 'undefined') {\n\t\treturn initialState;\n\t}\n\n\tlet combinedItems = state.posts;\n\n\tswitch (type) {\n\t\tcase GET_POSTS:\n\t\t\treturn { ...state, posts: action.payload };\n\n\t\tcase SUBMIT_POST:\n\t\t\tlet addPosts = null\n\t\t\tif (state.posts != null) {\n\t\t\t\taddPosts = updateObjectInArray(state.posts, action.payload);\n\t\t\t} else {\n\t\t\t\taddPosts = updateObjectInArray([], action.payload);\n\t\t\t}\n\n\t\t\treturn { ...state, createdPost: action.payload, posts: addPosts };\n\n\t\tcase SET_ACTIVE_POST:\n\t\t\tif (action.id != null) {\n\t\t\t\tlet selected = state.posts.find(post => {\n\t\t\t\t\treturn parseInt(post.id) == parseInt(action.id);\n\t\t\t\t});\n\n\t\t\t\tif (typeof (selected) != 'undefined') {\n\t\t\t\t\treturn { ...state, activePost: selected };\n\t\t\t\t} else {\n\t\t\t\t\treturn { ...state, activePost: null };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, activePost: null };\n\n\t\tcase SET_ACTIVE_POST_DETAILS:\n\t\t\tif (action.payload != null && !action.error) {\n\t\t\t\tlet listposts = null;\n\n\t\t\t\tif (state.posts != null) {\n\t\t\t\t\tlistposts = updateObjectInArray(state.posts, action.payload);\n\t\t\t\t} else {\n\t\t\t\t\tlistposts = updateObjectInArray([], action.payload);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, activePost: action.payload, posts: listposts };\n\t\t\t}\n\n\t\t\treturn { ...state, activePost: initialState.activePost };\n\n\t\tcase UPDATE_POST:\n\t\t\tlet updatePosts = updateObjectInArray(state.posts, action.payload);\n\n\t\t\treturn { ...state, activePost: action.payload, posts: updatePosts };\n\n\t\tcase GET_POSTS_NEXT_PAGE:\n\t\t\tlet combined = state.posts;\n\t\t\taction.payload.map(d => {\n\t\t\t\tconst checkExisting = combined.find(cb => {\n\t\t\t\t\treturn cb.id == d.id;\n\t\t\t\t});\n\n\t\t\t\tif (typeof (checkExisting) == 'undefined') {\n\t\t\t\t\tcombined.push(d)\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn { ...state, posts: combined };\n\n\t\tcase GET_SECTION_POSTS:\n\t\t\treturn { ...state, sectionPosts: action.payload };\n\n\t\tcase SET_PAGINATION_INFO:\n\t\t\treturn { ...state, collectionInformation: action.payload };\n\n\t\tcase CLEAR_SECTION_POSTS_FROM_STORE:\n\t\t\treturn { ...state, sectionPosts: [] };\n\n\t\tcase DELETE_POST_FROM_STORE:\n\t\t\tcombinedItems = combinedItems.filter(t => t.id != action.payload);\n\t\t\treturn { ...state, posts: combinedItems };\n\n\t\tcase GET_POST_READ_LIST:\n\t\t\treturn { ...state, readList: action.payload };\n\n\t\tcase CLEAR_POSTS_FROM_STORE:\n\t\t\treturn { ...state, posts: [] };\n\n\t\tcase CLEAR_POST_READ_LIST:\n\t\t\treturn { ...state, readList: null };\n\n\t\tdefault:\n\t\t\treturn state;\n\n\t\t\tbreak;\n\t}\n}\n\nfunction updatePostInList(posts, post) {\n\tlet index = posts.findIndex(t => t.id == post.id);\n\tposts.splice(index, 1);\n\tposts.splice(index, 0, post);\n\treturn posts;\n}\n","import api from 'lib/api';\n\nexport const SUBMIT_PRESCHOOL_DOCUMENT = 'SUBMIT_PRESCHOOL_DOCUMENT';\nexport const UPDATE_PRESCHOOL_DOCUMENT = 'UPDATE_PRESCHOOL_DOCUMENT';\nexport const SET_ACTIVE_PRESCHOOL_DOCUMENT = 'SET_ACTIVE_PRESCHOOL_DOCUMENT';\nexport const SET_ACTIVE_PRESCHOOL_DETAILS = 'SET_ACTIVE_PRESCHOOL_DETAILS';\nexport const GET_DOCUMENTS_PAGE = 'GET_DOCUMENTS_BY_PAGE';\nexport const GET_SECTION_DOCUMENTS = 'GET_SECTION_DOCUMENTS';\nexport const GET_PLAN_DOCUMENTS = 'GET_PLAN_DOCUMENTS';\nexport const CLEAR_DOCUMENTS_FROM_STORE = 'CLEAR_DOCUMENTS_FROM_STORE';\nexport const CLEAR_SECTION_DOCUMENTS_FROM_STORE = 'CLEAR_SECTION_DOCUMENTS_FROM_STORE';\nexport const DELETE_DOCUMENT_FROM_STORE = 'DELETE_DOCUMENT_FROM_STORE';\nexport const DELETE_DOCUMENT = 'DOCUMENT_DELETE_DOCUMENT';\nexport const GET_DOCUMENT_READ_LIST = \"GET_DOCUMENT_READ_LIST\";\nexport const CLEAR_DOCUMENT_READ_LIST = \"CLEAR_DOCUMENT_READ_LIST\";\nexport const DELETE_DOCUMENTATION_FILE = 'DOCUMENTATION_DELETE_FILE';\n\nexport function submit_preschooldocument(values, callback) {\n\treturn {\n\t\ttype: SUBMIT_PRESCHOOL_DOCUMENT,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.post('documentations', values)\n\t\t\t\t.then((response) => {\n\t\t\t\t\tif (response.status != 200) {\n\t\t\t\t\t\tthrow new Error(`Response returned HTTP status code: ${response.status}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve({ ...values, id: response.data });\n\n\t\t\t\t\tif (callback != null) {\n\t\t\t\t\t\tcallback(response.data);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\t// Handle the error appropriately\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function update_preschooldocument(values, callback) {\n\treturn {\n\t\ttype: UPDATE_PRESCHOOL_DOCUMENT,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.put('documentations', values).then((response) => {\n\t\t\t\tresolve(values);\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function setActivePreschoolDocument(id) {\n\treturn [\n\t\t{\n\t\t\ttype: SET_ACTIVE_PRESCHOOL_DOCUMENT,\n\t\t\tid: id,\n\t\t},\n\t\t{\n\t\t\ttype: SET_ACTIVE_PRESCHOOL_DETAILS,\n\t\t\tpayload: new Promise(resolve => {\n\t\t\t\tif (id != null) {\n\t\t\t\t\tapi.get(`documentations/${id}`).then((response) => {\n\t\t\t\t\t\tresolve(response.data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t]\n}\n\nexport function getPreschoolDetails(id) {\n\treturn {\n\t\ttype: SET_ACTIVE_PRESCHOOL_DETAILS,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tif (typeof (id) !== 'undefined' && id !== null) {\n\t\t\t\tapi.get(`documentations/${id}`).then((response) => {\n\t\t\t\t\tif (response.status > 201) {\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t})\n\t};\n}\n\nexport function deleteDocumentFromStore(id) {\n\treturn {\n\t\ttype: DELETE_DOCUMENT_FROM_STORE,\n\t\tpayload: id\n\t}\n}\n\nexport function getDocumentsBySectionId(id, page, status = null, startDate = null, endDate = null, pageSize = 15) {\n\treturn {\n\t\ttype: GET_SECTION_DOCUMENTS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tlet url = `documentations?pageIndex=${page}&pageSize=${pageSize}§ionId=${id}`;\n\t\t\tif (status != null) {\n\t\t\t\turl += `&filter=${status}`;\n\t\t\t}\n\t\t\tif (startDate != null) {\n\t\t\t\turl += `&startDate=${startDate}`;\n\t\t\t}\n\t\t\tif (endDate != null) {\n\t\t\t\turl += `&endDate=${endDate}`;\n\t\t\t}\n\t\t\tapi.get(url).then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t} else {\n\t\t\t\t\tresolve([]);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function clearSectionDocumentsFromStore() {\n\treturn {\n\t\ttype: CLEAR_SECTION_DOCUMENTS_FROM_STORE,\n\t\tpayload: true,\n\t}\n}\n\nexport function getDocumentsByPlanId(id) {\n\treturn {\n\t\ttype: GET_PLAN_DOCUMENTS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`documentations?planId=${id}&filter=PLAN`).then((response) => {\n\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const getDocumentReadList = (documentationId) => ({\n\ttype: GET_DOCUMENT_READ_LIST,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`documentations/${documentationId}/reads`).then(response => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n})\n\nexport const clearDocumentReadList = () => ({\n\ttype: CLEAR_DOCUMENT_READ_LIST,\n\tpayload: true,\n})\n\nexport function getDocumentsPage(page, status = null, startDate = null, endDate = null, pageSize = 15) {\n\treturn {\n\t\ttype: GET_DOCUMENTS_PAGE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tlet url = `documentations?pageIndex=${page}&pageSize=${pageSize}`;\n\t\t\tif (status != null) {\n\t\t\t\turl += `&filter=${status}`;\n\t\t\t}\n\n\t\t\tif (startDate != null) {\n\t\t\t\turl += `&startDate=${startDate}`;\n\t\t\t}\n\n\t\t\tif (endDate != null) {\n\t\t\t\turl += `&endDate=${endDate}`;\n\t\t\t}\n\n\t\t\tapi.get(url).then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t} else {\n\t\t\t\t\tresolve([]);\n\t\t\t\t}\n\t\t\t});\n\t\t}),\n\t}\n};\n\nexport const deleteDocument = (id) => ({\n\ttype: DELETE_DOCUMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`documentations/${id}`).then((response) => {\n\t\t\tresolve(id);\n\t\t});\n\t}),\n});\n\nexport const clearDocumentsFromStore = () => ({\n\ttype: CLEAR_DOCUMENTS_FROM_STORE,\n\tpayload: []\n});\n\nexport const deleteDocumentationFile = (documentationId, fileId) => ({\n\ttype: DELETE_DOCUMENTATION_FILE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`documentations/${documentationId}/files/${fileId}`).then(() => {\n\t\t\tresolve(fileId);\n\t\t});\n\t}),\n});\n","import {\n\tSET_ACTIVE_PRESCHOOL_DOCUMENT,\n\tUPDATE_PRESCHOOL_DOCUMENT,\n\tSUBMIT_PRESCHOOL_DOCUMENT,\n\tSET_ACTIVE_PRESCHOOL_DETAILS,\n\tGET_DOCUMENTS_PAGE,\n\tGET_SECTION_DOCUMENTS,\n\tCLEAR_DOCUMENT_READ_LIST,\n\tGET_PLAN_DOCUMENTS,\n\tGET_DOCUMENT_READ_LIST,\n\tDELETE_DOCUMENT_FROM_STORE,\n} from 'actions/documents';\n\nimport { updateObjectInArray } from 'helpers/array';\n\nconst initialState = {\n\tplanDocuments: [],\n\tdocuments: [],\n\treadList: null,\n\tactiveDocument: {},\n\tcreatedDocument: {},\n};\n\nexport default function Documents(state, action) {\n\tconst { type, value } = action;\n\n\tif (typeof (state) === 'undefined') {\n\t\treturn initialState;\n\t}\n\n\tswitch (type) {\n\t\tcase SUBMIT_PRESCHOOL_DOCUMENT:\n\t\t\treturn { ...state, createdDocument: value };\n\n\t\tcase SET_ACTIVE_PRESCHOOL_DOCUMENT:\n\t\t\tif (typeof (action.id) !== 'undefined' && action.id !== null) {\n\t\t\t\tlet selected = state.documents.find((doc) => { return parseInt(doc.id) == parseInt(action.id) });\n\n\t\t\t\tif (selected !== undefined) {\n\t\t\t\t\treturn { ...state, activeDocument: selected };\n\t\t\t\t} else {\n\t\t\t\t\treturn { ...state, activeDocument: initialState.activeDocument };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, activeDocument: initialState.activeDocument };\n\n\t\tcase 'get_preschool_document_image':\n\t\t\tif (state.activeDocument != initialState.activeDocument) {\n\t\t\t\t// If there is something in the activeDocument we will push the images to the state\n\t\t\t\tlet current = state.activeDocument;\n\n\t\t\t\tlet files = [];\n\t\t\t\tif (current.files != null) {\n\t\t\t\t\tfiles = current.files;\n\t\t\t\t}\n\n\t\t\t\tfiles.push(action.payload);\n\t\t\t\tcurrent.files = files;\n\n\t\t\t\treturn { ...state, activeDocument: current };\n\t\t\t} else {\n\t\t\t\t// If not we just return the state once more\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\tcase DELETE_DOCUMENT_FROM_STORE:\n\t\t\tlet combinedItems = state.documents;\n\t\t\tcombinedItems = combinedItems.filter(t => t.id != action.payload);\n\n\t\t\treturn { ...state, documents: combinedItems };\n\t\tcase GET_DOCUMENT_READ_LIST:\n\t\t\treturn { ...state, readList: action.payload };\n\t\tcase CLEAR_DOCUMENT_READ_LIST:\n\t\t\treturn { ...state, readList: initialState.readList };\n\t\tcase SET_ACTIVE_PRESCHOOL_DETAILS:\n\t\t\tif (action.payload != null) {\n\t\t\t\tlet listdocuments = null;\n\n\t\t\t\tif (state.posts != null) {\n\t\t\t\t\tlistdocuments = updateObjectInArray(state.documents, action.payload);\n\t\t\t\t} else {\n\t\t\t\t\tlistdocuments = updateObjectInArray([], action.payload);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, activeDocument: action.payload, documents: listdocuments };\n\t\t\t}\n\n\t\t\treturn { ...state, activePost: initialState.activePost };\n\n\t\tcase UPDATE_PRESCHOOL_DOCUMENT:\n\t\t\taction.payload.ReferenceType = 'document';\n\t\t\tlet updateDocuments = updateObjectInArray(state.combined, action.payload);\n\n\t\t\treturn { ...state, documents: updateDocuments, activeDocument: action.payload };\n\n\t\tcase GET_PLAN_DOCUMENTS:\n\t\t\treturn { ...state, planDocuments: action.payload };\n\n\t\tcase GET_SECTION_DOCUMENTS:\n\t\t\treturn { ...state, sectionDocuments: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\n\t\t\tbreak;\n\t}\n};\n\nfunction updateDocumentationInList(documentations, document) {\n\tlet index = documentations.findIndex(t => t.id == document.id);\n\tdocumentations.splice(index, 1);\n\tdocumentations.splice(index, 0, document);\n\treturn documentations;\n}\n","import Moment from 'moment';\n\nimport {\n\tSUBMIT_POST,\n\tUPDATE_POST,\n\tGET_POSTS_NEXT_PAGE,\n\tSET_ACTIVE_POST_DETAILS,\n\tGET_SECTION_POSTS,\n\tDELETE_POST_FROM_STORE,\n\tCLEAR_POSTS_FROM_STORE,\n\tCLEAR_SECTION_POSTS_FROM_STORE,\n\tDELETE_POST,\n} from 'actions/posts';\n\nimport {\n\tSUBMIT_PRESCHOOL_DOCUMENT,\n\tSET_ACTIVE_PRESCHOOL_DETAILS,\n\tUPDATE_PRESCHOOL_DOCUMENT,\n\tGET_PRESCHOOL_DOCUMENTS,\n\tGET_DOCUMENTS_PAGE,\n\tGET_SECTION_DOCUMENTS,\n\tCLEAR_DOCUMENTS_FROM_STORE,\n\tCLEAR_SECTION_DOCUMENTS_FROM_STORE,\n\tDELETE_DOCUMENT_FROM_STORE,\n\tDELETE_DOCUMENT,\n} from 'actions/documents';\n\nimport { updateObjectInArray } from 'helpers/array';\n\nconst initialState = {\n\tcombined: [],\n\tsectionCombined: [],\n\tposts: [],\n\tdocumentations: [],\n\tsectionDocumentations: [],\n\tsectionPosts: [],\n};\n\nexport default function CombinedEvents(state, action) {\n\tconst { type, value } = action;\n\n\tif (typeof (state) === 'undefined') {\n\t\treturn initialState;\n\t}\n\n\tswitch (type) {\n\t\tcase GET_POSTS_NEXT_PAGE:\n\t\t\tlet currentPostCombined = state.combined;\n\t\t\taction.payload.map(d => {\n\t\t\t\tconst checkExisting = currentPostCombined.find(cb => {\n\t\t\t\t\treturn cb.id == d.id && cb.ReferenceType == 'post';\n\t\t\t\t});\n\n\t\t\t\tif (typeof (checkExisting) == 'undefined') {\n\t\t\t\t\tcurrentPostCombined.push({ \"ReferenceType\": \"post\", ...d });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (currentPostCombined.length > 0) {\n\t\t\t\tcurrentPostCombined.sort(function (a, b) {\n\t\t\t\t\treturn Moment(b.published).unix() - Moment(a.published).unix();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn { ...state, combined: currentPostCombined, posts: action.payload };\n\n\t\tcase GET_SECTION_POSTS:\n\t\t\tlet currentSectionCombinedPosts = state.sectionCombined;\n\n\t\t\tif (action.payload != null && typeof (action.payload) == 'object') {\n\t\t\t\taction.payload.map(d => {\n\t\t\t\t\tconst checkExisting = currentSectionCombinedPosts.find(cb => {\n\t\t\t\t\t\treturn cb.id == d.id && cb.ReferenceType == 'post';\n\t\t\t\t\t});\n\n\t\t\t\t\tif (checkExisting == null) {\n\t\t\t\t\t\tcurrentSectionCombinedPosts.push({ \"ReferenceType\": \"post\", ...d });\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (currentSectionCombinedPosts.length > 0) {\n\t\t\t\t\tcurrentSectionCombinedPosts.sort(function (a, b) {\n\t\t\t\t\t\treturn Moment(b.published).unix() - Moment(a.published).unix();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, sectionCombined: currentSectionCombinedPosts, sectionPosts: action.payload };\n\n\t\tcase SUBMIT_POST:\n\t\t\taction.payload.ReferenceType = 'post';\n\n\t\t\tlet addPosts = null\n\t\t\tif (state.combined != null) {\n\t\t\t\taddPosts = updateObjectInArray(state.combined, action.payload);\n\t\t\t} else {\n\t\t\t\taddPosts = updateObjectInArray([], action.payload);\n\t\t\t}\n\n\t\t\treturn { ...state, combined: addPosts };\n\n\t\tcase UPDATE_POST:\n\t\t\taction.payload.ReferenceType = 'post';\n\t\t\tlet updatePosts = updateObjectInArray(state.combined, action.payload);\n\n\t\t\treturn { ...state, combined: updatePosts };\n\n\t\tcase SET_ACTIVE_POST_DETAILS:\n\t\t\tif (action.payload != null && !action.error) {\n\t\t\t\taction.payload.ReferenceType = 'post';\n\t\t\t\tlet listposts = null;\n\n\t\t\t\tif (state.combined != null) {\n\t\t\t\t\tlistposts = updateObjectInArray(state.combined, action.payload);\n\t\t\t\t} else {\n\t\t\t\t\tlistposts = updateObjectInArray([], action.payload);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, combined: listposts };\n\t\t\t}\n\t\t\treturn state;\n\n\t\tcase SUBMIT_PRESCHOOL_DOCUMENT:\n\t\t\taction.payload.ReferenceType = 'document';\n\n\t\t\tlet addDocuments = null\n\t\t\tif (state.combined != null) {\n\t\t\t\taddDocuments = updateObjectInArray(state.combined, action.payload);\n\t\t\t} else {\n\t\t\t\taddDocuments = updateObjectInArray([], action.payload);\n\t\t\t}\n\n\t\t\treturn { ...state, combined: addDocuments };\n\n\t\tcase CLEAR_SECTION_POSTS_FROM_STORE:\n\t\t\t// Add ReferenceType==Post here\n\t\t\treturn { ...state, sectionCombined: [] };\n\n\t\tcase DELETE_POST_FROM_STORE:\n\t\t\tlet currentPostsToDelete = state.combined;\n\t\t\t// Add ReferenceType==Post here\n\t\t\tcurrentPostsToDelete = currentPostsToDelete.filter(t => t.id != action.payload);\n\t\t\treturn { ...state, combined: currentPostsToDelete };\n\n\t\tcase CLEAR_POSTS_FROM_STORE:\n\t\t\t// Add ReferenceType==Post here\n\t\t\treturn { ...state, combined: [], sectionCombined: [] };\n\n\t\tcase GET_DOCUMENTS_PAGE:\n\t\t\tlet currentDocumentsCombined = state.combined;\n\t\t\taction.payload.map(d => {\n\t\t\t\t// Add ReferenceType==Document here\n\t\t\t\tconst checkExisting = currentDocumentsCombined.find(cb => {\n\t\t\t\t\treturn cb.id == d.id && cb.ReferenceType == 'document';\n\t\t\t\t});\n\n\t\t\t\tif (typeof (checkExisting) == 'undefined') {\n\t\t\t\t\tcurrentDocumentsCombined.push({ \"ReferenceType\": \"document\", ...d });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (currentDocumentsCombined.length > 0) {\n\t\t\t\tcurrentDocumentsCombined.sort(function (a, b) {\n\t\t\t\t\treturn Moment(b.published).unix() - Moment(a.published).unix();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn { ...state, combined: currentDocumentsCombined, documentations: action.payload };\n\n\t\tcase SET_ACTIVE_PRESCHOOL_DETAILS:\n\t\t\tif (action.payload != null) {\n\t\t\t\taction.payload.ReferenceType = 'document';\n\t\t\t\tlet listdocuments = null;\n\n\t\t\t\tif (state.combined != null) {\n\t\t\t\t\tlistdocuments = updateObjectInArray(state.combined, action.payload);\n\t\t\t\t} else {\n\t\t\t\t\tlistdocuments = updateObjectInArray([], action.payload);\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, combined: listdocuments };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase DELETE_DOCUMENT_FROM_STORE:\n\t\t\t// Add ReferenceType==Document here\n\t\t\tlet currentDocumentsToDelete = state.combined.filter(t => t.id != action.payload);\n\n\t\t\treturn { ...state, documents: currentDocumentsToDelete };\n\n\t\tcase GET_SECTION_DOCUMENTS:\n\t\t\tlet currentSectionCombinedDocuments = state.sectionCombined;\n\t\t\taction.payload.map(d => {\n\t\t\t\tconst checkExisting = currentSectionCombinedDocuments.find(cb => {\n\t\t\t\t\treturn cb.id == d.id && cb.ReferenceType == 'document';\n\t\t\t\t});\n\n\t\t\t\tif (typeof (checkExisting) == 'undefined') {\n\t\t\t\t\tcurrentSectionCombinedDocuments.push({ \"ReferenceType\": \"document\", ...d });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (currentSectionCombinedDocuments.length > 0) {\n\t\t\t\tcurrentSectionCombinedDocuments.sort(function (a, b) {\n\t\t\t\t\treturn Moment(b.published).unix() - Moment(a.published).unix();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn { ...state, sectionCombined: currentSectionCombinedDocuments, sectionDocumentations: action.payload };\n\n\t\tcase CLEAR_DOCUMENTS_FROM_STORE:\n\t\t\t// Add ReferenceType==Document here\n\t\t\treturn { ...state, combined: [], sectionCombined: [] };\n\n\t\tcase CLEAR_SECTION_DOCUMENTS_FROM_STORE:\n\t\t\t// Add ReferenceType==Document here\n\t\t\treturn { ...state, sectionCombined: [] };\n\n\t\tcase DELETE_POST:\n\t\t\tlet newCombinedItems = state.combined.filter(t => {\n\t\t\t\tif (action.payload == t.id && t.ReferenceType == 'post') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\treturn { ...state, combined: newCombinedItems };\n\n\t\tcase DELETE_DOCUMENT:\n\t\t\tlet newCombinedDocuments = state.combined.filter(t => {\n\t\t\t\tif (action.payload == t.id && t.ReferenceType == 'document') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\treturn { ...state, combined: newCombinedDocuments };\n\n\t\tdefault:\n\t\t\treturn state;\n\n\t\t\tbreak;\n\n\t}\n}\n","import api from 'lib/api';\n\nexport const ADD_MATRIX = 'ADD_MATRIX';\nexport const GET_MATRIX = 'GET_MATRIX';\n\nexport function addMatrix(matrix) {\n\treturn {\n\t\ttype: ADD_MATRIX,\n\t\tpayload: matrix,\n\t};\n}\n\nexport const getMatrix = (id) => ({\n\ttype: GET_MATRIX,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`matrix/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import {\n\tADD_MATRIX,\n\tGET_MATRIX\n} from '../actions/matrix';\n\n\nconst INITIAL_STATE = {\n\tmatrix: null,\n\tmatrixList: []\n};\n\nexport default function (state = INITIAL_STATE, action) {\n switch (action.type) {\n case ADD_MATRIX:\n let matrixList = state.matrixList;\n let object = state.matrixList.find(t => t.id == action.payload.id);\n if (object == null) {\n matrixList.push(action.payload);\n } else {\n matrixList.forEach((item, i) => { if (item.id == action.payload.id) a[i] = action.payload; });\n }\n\t\t\treturn { ...state, matrixList };\n\t\tcase GET_MATRIX:\n\t\t\treturn { ...state, matrix: action.payload };\n default:\n return state;\n }\n}\n","import api from 'lib/api';\n\nexport const GET_COURSE_DETAILS = 'GET_COURSE_DETAILS';\nexport const SET_ACTIVE_COURSE = 'SET_ACTIVE_COURSE';\nexport const GET_COURSES = 'GET_COURSES';\nexport const GET_COURSE_BY_COURSECODE = 'GET_COURSE_BY_COURSECODE';\nexport const ADD_COURSE = 'ADD_COURSES';\nexport const PUT_COURSE = 'PUT_COURSES';\nexport const CLEAR_COURSES_FROM_STORE = 'CLEAR_COURSES_FROM_STORE';\nexport const GET_STANDARD_COURSES = 'GET_STANDARD_COURSES';\n\nexport const addCourse = (data, callback) => ({\n\ttype: ADD_COURSE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post('courses', data).then((response) => {\n\t\t\tif (response.status != 200) {\n\t\t\t\treject(response);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const updateCourse = (data, callback) => ({\n\ttype: PUT_COURSE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put('courses', data).then((response) => {\n\t\t\tif (response.status > 300) {\n\t\t\t\treject(response);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const getCourse = (id) => ({\n\ttype: GET_COURSE_DETAILS,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`courses/${id}`).then((response) => {\n\t\t\tif (response.status != 200) {\n\t\t\t\treject(response);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t});\n\t})\n})\n\nexport const getCourseByCourseCode = (courseCode) => ({\n\ttype: GET_COURSE_BY_COURSECODE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`courses/courseCode/${courseCode}`).then((response) => {\n\t\t\tif (response.status != 200) {\n\t\t\t\treject(response);\n\t\t\t} else {\n\t\t\t\tresolve(response.data);\n\t\t\t}\n\t\t});\n\t})\n})\n\nexport const setActiveCourse = (id, callback) => {\n\treturn [\n\t\t{\n\t\t\ttype: SET_ACTIVE_COURSE,\n\t\t\tid: id,\n\t\t}\n\t];\n};\n\nexport const getCourses = (type) => ({\n\ttype: GET_COURSES,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`courses?type=${type}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getStandardCourses = () => ({\n\ttype: GET_STANDARD_COURSES,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`courses?type=PREDEFINED_COURSE`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearCoursesFromStore = () => ({\n\ttype: CLEAR_COURSES_FROM_STORE,\n\tpayload: []\n})","import api from 'lib/api';\n\nexport const SET_SEARCH_TERM = 'SET_SEARCH_TERM';\nexport const SEARCH_COURSE = 'SEARCH_COURSE';\nexport const SEARCH_SECTION = 'SEARCH_SECTION';\nexport const SEARCH_ASSIGNMENTS = 'SEARCH_ASSIGNMENTS';\nexport const SEARCH_PLANS = 'SEARCH_PLANS';\nexport const SEARCH_MENTOR_GROUPS = 'SEARCH_MENTOR_GROUPS';\nexport const SEARCH_EDUCATION_GROUPS = 'SEARCH_EDUCATION_GROUPS';\nexport const SEARCH_GROUPS = 'SEARCH_SEARCH_GROUPS';\nexport const SEARCH_HALDOR_ASSIGNMENTS_IN_GROUP = 'SEARCH_HALDOR_ASSIGNMENTS_IN_GROUP';\nexport const SEARCH_MICROSOFT_ASSIGNMENTS_IN_GROUP = 'SEARCH_MICROSOFT_ASSIGNMENTS_IN_GROUP';\nexport const SEARCH_CLEAR_RESULTS = 'SEARCH_CLEAR_SEARCH_RESULTS';\nexport const SEARCH_POSTS = 'SEARCH_POSTS';\nexport const SEARCH_SCHOOL_USERS = 'SEARCH_SCHOOL_USERS';\nexport const CLEAR_SEARCH = 'SEARCH_CLEAR_SEARCH';\nexport const SEARCH_MY_SECTIONS = 'SEARCH_MY_SECTIONS';\n\nexport const CLEAR_COURSE_SEARCH = 'SEARCH_CLEAR_COURSE_SEARCH';\n\nexport const setCurrentSearchTerm = (term) => ({\n\ttype: SET_SEARCH_TERM,\n\tpayload: term,\n})\n\nexport const searchCourseByTitle = (title, schoolType, year, callback) => ({\n\ttype: SEARCH_COURSE,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = `courses/search?term=${title}`;\n\t\tif (schoolType != null) {\n\t\t\turl += `&typeOfSchooling=${schoolType}`;\n\t\t}\n\n\t\tif (year != null) {\n\t\t\turl += `&year=${year}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const clearCourseSearch = () => ({\n\ttype: CLEAR_COURSE_SEARCH,\n\tpayload: true,\n});\n\nexport const searchSectionByTitle = (title, filtercreated, callback) => ({\n\ttype: SEARCH_SECTION,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections?title=${title}&created=${filtercreated}`).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\n// state.assignments.search_results\nexport const searchAssignment = (value) => ({\n\ttype: SEARCH_ASSIGNMENTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/search?term=${value}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const searchMicrosoftAssignmentsInGroup = (value, group) => ({\n\ttype: SEARCH_MICROSOFT_ASSIGNMENTS_IN_GROUP,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/search/?term=${value}&graphId=${group}&origin=MS_ASSIGNMENTS`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const searchHaldorAssignmentsInGroup = (value, group) => ({\n\ttype: SEARCH_HALDOR_ASSIGNMENTS_IN_GROUP,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assignments/search/?term=${value}&graphId=${group}&origin=HALDOR_ASSIGNMENTS`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const searchPlans = (value, group) => ({\n\ttype: SEARCH_PLANS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = `planning/search?term=${value}`;\n\n\t\tif (group != null) {\n\t\t\turl += `&graphId=${group}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n// state.Search.mentors\nexport const searchMentorGroups = (query) => ({\n\ttype: SEARCH_MENTOR_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`users/me/sections/?query=${query}&filter=MENTOR_GROUP;`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n// state.Search.educationGroups\nexport const searchEducationGroups = (query) => ({\n\ttype: SEARCH_EDUCATION_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`users/me/sections/?query=${query}&filter=EDUCATION_GROUP;`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n// state.Search.groups\nexport const searchGroups = (parameters) => ({\n\ttype: SEARCH_GROUPS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = '';\n\t\tlet urlParams = {\n\t\t\tpageSize: 99,\n\t\t\tpageIndex: 1,\n\t\t\tfilter: '',\n\t\t\tsortBy: 'TITLE_DESC',\n\t\t\t...parameters\n\t\t};\n\n\t\tfor (const key in urlParams) {\n\t\t\turl += `&${key}=${urlParams[key]}`;\n\t\t}\n\n\t\tapi.get(`sections/search/?_=${url}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const searchMySections = (parameters) => ({\n\ttype: SEARCH_MY_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = '';\n\t\tlet urlParams = {\n\t\t\tpageSize: 99,\n\t\t\tpageIndex: 1,\n\t\t\tfilter: '',\n\t\t\tsortBy: 'TITLE_DESC',\n\t\t\t...parameters\n\t\t};\n\n\t\tfor (const key in urlParams) {\n\t\t\turl += `&${key}=${urlParams[key]}`;\n\t\t}\n\n\t\tapi.get(`users/me/sections?_=${url}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearSearchResults = () => ({\n\ttype: SEARCH_CLEAR_RESULTS,\n\tpayload: true,\n});\n\nexport function searchSchoolUsers(search, userTypes, filter) {\n\treturn {\n\t\ttype: SEARCH_SCHOOL_USERS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tlet url = `users/search?term=${search}&userType=${userTypes}&filter=${filter}`;\n\t\t\tif (search == '' || search == null) {\n\t\t\t\tresolve([]);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tapi.get(url).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t})\n\t};\n}\n\nexport const searchPosts = (query) => ({\n\ttype: SEARCH_POSTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`posts/search?term=${query}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearSearch = () => ({\n\ttype: CLEAR_SEARCH,\n\tpayload: true,\n});","import {\n\tGET_COURSES,\n\tSET_ACTIVE_COURSE,\n\tGET_COURSE_DETAILS,\n\tGET_COURSE_BY_COURSECODE,\n\tCLEAR_COURSES_FROM_STORE,\n\tGET_STANDARD_COURSES\n} from \"actions/courses\";\n\nimport { SEARCH_COURSE, CLEAR_COURSE_SEARCH } from \"actions/search\";\n\nimport { updateObjectInArray } from \"helpers/array\";\n\nconst INITIAL_STATE = {\n\tcourses: [],\n\tstandardCourses: [],\n\tcourse: null,\n\tcourseByCourseCode: null,\n\tcourseSearchResults: []\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_COURSES:\n\t\t\treturn { ...state, courses: action.payload };\n\n\t\tcase GET_STANDARD_COURSES:\n\t\t\treturn { ...state, standardCourses: action.payload };\n\n\t\tcase SEARCH_COURSE:\n\t\t\tlet searchResult = action.payload;\n\n\t\t\tsearchResult = searchResult.sort((a, b) => {\n\t\t\t\tconst course_one_title = a.title.toLowerCase();\n\t\t\t\tconst course_two_title = b.title.toLowerCase();\n\t\t\t\tconst course_one_typeOfSchooling = a.typeOfSchooling.toLowerCase();\n\t\t\t\tconst course_two_typeOfSchooling = b.typeOfSchooling.toLowerCase();\n\n\t\t\t\tif (course_one_title > course_two_title) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (course_one_title === course_two_title && course_one_typeOfSchooling > course_two_typeOfSchooling) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (course_one_title === course_two_title && course_one_typeOfSchooling === course_two_typeOfSchooling) {\n\t\t\t\t\treturn 0;\n\t\t\t\t} else if (course_one_title === course_two_title && course_one_typeOfSchooling < course_two_typeOfSchooling) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (course_one_title < course_two_title) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn { ...state, courseSearchResults: searchResult };\n\n\t\tcase CLEAR_COURSE_SEARCH:\n\t\t\treturn { ...state, courseSearchResults: [] };\n\n\t\tcase GET_COURSE_BY_COURSECODE:\n\t\t\tif (action.error) {\n\t\t\t\treturn { ...state, courseByCourseCode: null };\n\t\t\t}\n\t\t\treturn { ...state, courseByCourseCode: action.payload };\n\n\t\tcase SET_ACTIVE_COURSE:\n\t\t\tif (typeof action.id !== \"undefined\" && action.id !== null) {\n\t\t\t\tlet selected = state.courses.find(course => {\n\t\t\t\t\treturn parseInt(course.id) == parseInt(course.id);\n\t\t\t\t});\n\n\t\t\t\tif (selected !== undefined) {\n\t\t\t\t\treturn { ...state, course: selected };\n\t\t\t\t} else {\n\t\t\t\t\treturn { ...state, course: INITIAL_STATE.course };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { ...state, course: INITIAL_STATE.course };\n\n\t\tcase GET_COURSE_DETAILS:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tcourse: action.payload,\n\t\t\t\tcourses: updateObjectInArray(\n\t\t\t\t\tstate.courses,\n\t\t\t\t\taction.payload\n\t\t\t\t)\n\t\t\t};\n\n\t\tcase CLEAR_COURSES_FROM_STORE:\n\t\t\treturn { ...state, courses: [] };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_DIRECTORY_CONTENTS = 'GET_DIRECTORY_CONTENTS';\nexport const SET_ACTIVE_DIRECTORY = 'SET_ACTIVE_DIRECTORY';\nexport const SET_SAVED_DIR_AS_ACTIVE = 'SET_SAVED_DIR_AS_ACTIVE';\nexport const GET_SECTION_DRIVES = 'GET_SECTION_DRIVES';\nexport const GET_SECTION_CONTENT = 'GET_SECTION_CONTENT';\n\nexport const getDirectoryContents = (id, callback) => {\n\treturn [\n\t\t{\n\t\t\ttype: SET_ACTIVE_DIRECTORY,\n\t\t\tfolder: id\n\t\t},\n\t\t{\n\t\t\ttype: GET_DIRECTORY_CONTENTS,\n\t\t\tpayload: new Promise(resolve => {\n\t\t\t\tlet url = 'users/me/onedrivefiles';\n\t\t\t\tif (typeof (id) !== 'undefined' && id !== null) {\n\t\t\t\t\turl = `users/me/onedrivefiles/folder/${id}`;\n\t\t\t\t}\n\n\t\t\t\tapi.get(url).then((response) => {\n\t\t\t\t\tresolve(response.data);\n\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback(response.data);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t]\n}\n\nexport const getDrivesForSection = (id, callback) => {\n\treturn [\n\t\t{\n\t\t\ttype: GET_SECTION_DRIVES,\n\t\t\tpayload: null,\n\t\t},\n\t\t{\n\t\t\ttype: GET_SECTION_DRIVES,\n\t\t\tpayload: new Promise(resolve => {\n\t\t\t\tapi.get(`sections/${id}/drives`).then((response) => {\n\t\t\t\t\tresolve(response.data);\n\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback(response.data);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}),\n\t\t}\n\t]\n}\n\nexport const getDriveSectionContent = (section, drive, folder, callback) => {\n\treturn [\n\t\t{\n\t\t\ttype: GET_SECTION_CONTENT,\n\t\t\tpayload: null,\n\t\t},\n\t\t{\n\t\t\ttype: SET_ACTIVE_DIRECTORY,\n\t\t\tfolder: folder ? folder : drive ? drive : null,\n\t\t\troot: folder ? false : true,\n\t\t},\n\t\t{\n\t\t\ttype: GET_SECTION_CONTENT,\n\t\t\tpayload: new Promise(resolve => {\n\t\t\t\tlet url = `sections/${section}/drives/${drive}`;\n\t\t\t\tif (typeof (folder) !== 'undefined' && folder !== null) {\n\t\t\t\t\turl = `sections/${section}/drives/${drive}/folder/${folder}`;\n\t\t\t\t}\n\n\t\t\t\tapi.get(url).then((response) => {\n\t\t\t\t\tif (response.data.id == 'root') {\n\t\t\t\t\t\tif (folder) {\n\t\t\t\t\t\t\tresponse.data.id = folder;\n\t\t\t\t\t\t} else if (drive) {\n\t\t\t\t\t\t\tresponse.data.id = drive;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresponse.data.id = section;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(response.data);\n\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback(response.data);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}),\n\t\t}\n\t]\n}\n\nexport const setDirectoryActive = (id, callback) => {\n\treturn [\n\t\t{\n\t\t\ttype: SET_ACTIVE_DIRECTORY,\n\t\t\tfolder: id,\n\t\t},\n\t\t{\n\t\t\ttype: SET_SAVED_DIR_AS_ACTIVE,\n\t\t\tfolder: id,\n\t\t},\n\t]\n}\n\nexport const setSectionContentActive = (drive, folder) => {\n\treturn [\n\t\t{\n\t\t\ttype: SET_ACTIVE_DIRECTORY,\n\t\t\tfolder: folder ? folder : drive ? drive : null,\n\t\t\troot: folder ? false : true,\n\t\t},\n\t\t{\n\t\t\ttype: SET_SAVED_DIR_AS_ACTIVE,\n\t\t\tfolder: folder ? folder : drive ? drive : null,\n\t\t}\n\t]\n}\n","import {\n\tGET_DIRECTORY_CONTENTS,\n\tSET_ACTIVE_DIRECTORY,\n\tSET_SAVED_DIR_AS_ACTIVE,\n\tGET_SECTION_DRIVES,\n\tGET_SECTION_CONTENT,\n} from '../actions/onedrive';\n\nconst initialState = {\n\tactiveFolders: [],\n\tactiveSections: [],\n\tactiveContent: null,\n\tfetchedFolders: [],\n\tsectionDrives: null,\n\tsectionContent: null,\n}\n\nexport default function( state, action ) {\n\tconst { type } = action;\n\n\tif ( typeof( state ) === 'undefined' ) {\n\t\treturn initialState;\n\t}\n\n\tswitch( type ) {\n\t\tcase GET_DIRECTORY_CONTENTS:\n\t\t\tlet savedFolders = state.fetchedFolders;\n\t\t\tsavedFolders.push( action.payload );\n\n\t\t\treturn { ...state, activeContent: action.payload, fetchedFolders: savedFolders };\n\n\t\tcase SET_ACTIVE_DIRECTORY:\n\t\t\tif ( typeof( action.folder ) !== 'undefined' && action.folder !== null ) {\n\t\t\t\tif ( action.folder === 'root' || action.folder === 'sharepointroot' ) {\n\t\t\t\t\treturn { ...state, activeFolders: [] };\n\t\t\t\t}\n\n\t\t\t\tlet newState = state.activeFolders;\n\n\t\t\t\tif ( action.root ) {\n\t\t\t\t\tnewState = [];\n\t\t\t\t}\n\n\t\t\t\tconst found = newState.find( function( adir ) {\n\t\t\t\t\treturn adir.id === action.folder;\n\t\t\t\t});\n\n\t\t\t\tif ( typeof( found ) === 'undefined' ) {\n\t\t\t\t\t// Not in list, add it\n\t\t\t\t\t// First search for this id in the fetchedFolders state\n\t\t\t\t\tlet savedFolder = null;\n\t\t\t\t\tstate.fetchedFolders.map( ( fdir ) => {\n\t\t\t\t\t\tif ( fdir != null ) {\n\t\t\t\t\t\t\tlet tryer = fdir.files.find( function( file ) {\n\t\t\t\t\t\t\t\treturn file.id === action.folder;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif ( typeof( tryer ) !== 'undefined' ) {\n\t\t\t\t\t\t\t\tsavedFolder = tryer;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif ( savedFolder != null ) {\n\t\t\t\t\t\t// Then use that data for creating an object for displaying the breadcrumb item\n\t\t\t\t\t\tlet folder = { id: savedFolder.id, name: savedFolder.name, folder: true };\n\n\t\t\t\t\t\tnewState.push( folder );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Already in list\n\t\t\t\t\tconst dirIndex = newState.findIndex( function( adir ) {\n\t\t\t\t\t\treturn adir.id === action.folder;\n\t\t\t\t\t});\n\n\t\t\t\t\tif ( dirIndex < newState.length ) {\n\t\t\t\t\t\t// The current dir isnt the last in the list\n\t\t\t\t\t\t// Remove all entries behind it\n\t\t\t\t\t\tnewState.splice( dirIndex + 1, newState.length );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// The current dir is the last in the list\n\t\t\t\t\t\tnewState.splice( dirIndex, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { ...state, activeFolders: newState };\n\t\t\t} else {\n\t\t\t\treturn { ...state, activeFolders: [] };\n\t\t\t}\n\n\t\tcase SET_SAVED_DIR_AS_ACTIVE:\n\t\t\tif ( typeof( action.folder ) !== 'undefined' && action.folder !== null ) {\n\t\t\t\tconst foundObject = state.fetchedFolders.find( function( dir ) {\n\t\t\t\t\tif ( dir && dir.id ) {\n\t\t\t\t\t\treturn dir.id === action.folder;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ( typeof( foundObject ) !== 'undefined' ) {\n\t\t\t\t\tif ( foundObject.type == 'sectionContent' ) {\n\t\t\t\t\t\treturn { ...state, sectionContent: foundObject };\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn { ...state, activeContent: foundObject };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Reset the state of the activeContent property\n\t\t\t\treturn { ...state,\n\t\t\t\t\tactiveContent: initialState.activeContent,\n\t\t\t\t\tsectionContent: initialState.sectionContent\n\t\t\t\t};\n\t\t\t}\n\n\t\tcase GET_SECTION_DRIVES:\n\t\t\treturn { ...state, sectionDrives: action.payload };\n\n\t\tcase GET_SECTION_CONTENT:\n\t\t\tif ( action.payload != null ) {\n\t\t\t\taction.payload.type = 'sectionContent';\n\t\t\t\tlet newFolders = state.fetchedFolders;\n\t\t\t\tnewFolders.push( action.payload );\n\n\t\t\t\treturn { ...state, sectionContent: action.payload, fetchedFolders: newFolders };\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const LOG_ACTIVITY = 'LOG_ACTIVITY';\nexport const GET_LOGS_PAGE_BY_SCHOOL = 'GET_LOGS_PAGE_BY_SCHOOL';\n\nexport function logActivity(values) {\n\treturn {\n\t\ttype: LOG_ACTIVITY,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.post('log', values).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t})\n\t}\n}\n\nexport function getLogsPage(startingTicks, pageSize) {\n\treturn {\n\t\ttype: GET_LOGS_PAGE_BY_SCHOOL,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`log?startingTicks=${startingTicks}&pageSize=${pageSize}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t})\n\t}\n}","import {\n\tLOG_ACTIVITY,\n\tGET_LOGS_PAGE_BY_SCHOOL,\n} from 'actions/logs';\n\nconst initialState = {\n\tlogs: [],\n\tstartingTicks: '',\n}\n\nexport default function Logs(state, action) {\n\tconst { type, value } = action;\n\n\tif (typeof (state) === 'undefined') {\n\t\treturn initialState;\n\t}\n\n\tswitch (type) {\n\t\tcase GET_LOGS_PAGE_BY_SCHOOL:\n\t\t\treturn { ...state, logs: action.payload };\n\n\t\tcase LOG_ACTIVITY:\n\t\t\treturn state;\n\n\t\tdefault:\n\t\t\treturn state;\n\n\t\t\tbreak;\n\t}\n}\n","import {\n\tGET_FORECAST,\n\tGET_CALENDAR_ATTENDENCE,\n\tSUBMIT_ABSENCE,\n\tUPDATE_ABSENCE,\n\tGET_USER_ATTENDANCE_STATS,\n\tGET_USER_ATTENDANCE,\n\tCLEAR_USER_ATTENDANCE,\n\tCLEAR_FORECAST,\n\tDELETE_REPORTED_ATTENDANCE,\n} from 'actions/absence';\n\nimport Moment from 'moment';\n\nconst INITIAL_STATE = {\n\tforecast: null,\n\tcalendarAttendence: null,\n\tsubmitResult: false,\n\tuserStatistics: null,\n\tuserAttendance: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_FORECAST:\n\t\t\treturn { ...state, forecast: action.payload };\n\n\t\tcase CLEAR_FORECAST:\n\t\t\treturn { ...state, forecast: null };\n\n\t\tcase SUBMIT_ABSENCE:\n\t\t\treturn { ...state, submitResult: action.payload };\n\n\t\tcase UPDATE_ABSENCE:\n\t\t\treturn { ...state, submitResult: action.payload };\n\n\t\tcase GET_CALENDAR_ATTENDENCE:\n\t\t\treturn { ...state, calendarAttendence: action.payload };\n\n\t\tcase GET_USER_ATTENDANCE:\n\t\t\tif (action.payload != null) {\n\t\t\t\tconst attendance = action.payload;\n\n\t\t\t\tattendance.sort((a, b) => {\n\t\t\t\t\treturn new Date(b.startTime) - new Date(a.startTime);\n\t\t\t\t});\n\n\t\t\t\treturn { ...state, userAttendance: attendance };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase CLEAR_USER_ATTENDANCE:\n\t\t\treturn { ...state, userAttendance: null };\n\n\t\tcase GET_USER_ATTENDANCE_STATS:\n\t\t\tlet data = {\n\t\t\t\tlabels: [],\n\t\t\t\tdatasets: [],\n\t\t\t};\n\n\t\t\tlet absent = {\n\t\t\t\tborderColor: \"rgba(242, 82, 82, 1)\",\n\t\t\t\tpointBackgroundColor: \"rgba(242, 82, 82, 1)\",\n\t\t\t\tbackgroundColor: \"rgba(242, 82, 82, 1)\",\n\t\t\t\tlabel: 'minutes-absence',\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\tlet attending = {\n\t\t\t\tborderColor: \"rgba(25, 219, 108, 1)\",\n\t\t\t\tpointBackgroundColor: \"rgba(25, 219, 108, 1)\",\n\t\t\t\tbackgroundColor: \"rgba(25, 219, 108, 1)\",\n\t\t\t\tlabel: 'minutes-attending',\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\tlet notReported = {\n\t\t\t\tborderColor: \"rgba(126, 195, 221, 1)\",\n\t\t\t\tpointBackgroundColor: \"rgba(126, 195, 221, 1)\",\n\t\t\t\tbackgroundColor: \"rgba(126, 195, 221, 1)\",\n\t\t\t\tlabel: 'minutes-not-reported',\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\taction.payload.map(date => {\n\t\t\t\tdata.labels.push(Moment(date.date).format('YYYY-MM-DD'));\n\n\t\t\t\tabsent.data.push(date.absent);\n\t\t\t\tattending.data.push(date.attending);\n\t\t\t\tnotReported.data.push(date.notReported);\n\t\t\t});\n\n\t\t\tdata.datasets.push(absent);\n\t\t\tdata.datasets.push(attending);\n\t\t\tdata.datasets.push(notReported);\n\n\t\t\treturn { ...state, userStatistics: data };\n\n\t\tcase DELETE_REPORTED_ATTENDANCE:\n\t\t\treturn { ...state, calendarAttendance: null };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_SINGLE_SCHOOL_DETAILS = 'SCHOOLS_GET_SINGLE_SCHOOL_DETAILS';\nexport const GET_SCHOOL_ABSENCE = 'SCHOOLS_GET_SINGLE_SCHOOL_ABSENCE';\nexport const SET_ACTIVE_SCHOOL = 'SCHOOLS_SET_ACTIVE_SCHOOL';\nexport const GET_SINGLE_SCHOOL_STUDENTS = 'SCHOOLS_GET_SINGLE_SCHOOL_STUDENTS';\nexport const GET_SCHOOL_GUARDIANS = 'GET_SCHOOL_GUARDIANS';\nexport const UPDATE_SCHOOL_TYPE = 'UPDATE_SCHOOL_TYPE';\nexport const GET_SCHOOL_SUBJECTTEACHERS = 'GET_SCHOOL_SUBJECTTEACHERS';\nexport const GET_SCHOOL_SERVICES = 'SCHOOLS_GET_SCHOOL_SERVICES';\nexport const GET_SCHOOLS_DATA_FOR_SECTIONS = 'GET_SCHOOLS_DATA_FOR_SECTIONS';\nexport const GET_SCHOOL_DATA_FOR_SECTIONS = 'GET_SCHOOL_DATA_FOR_SECTIONS';\nexport const GET_SINGLE_SCHOOL_BY_EXTERNALID = 'GET_SINGLE_SCHOOL_BY_EXTERNALID';\n\n\nexport const getSchoolByExternalId = (id) => ({\n\ttype: GET_SINGLE_SCHOOL_BY_EXTERNALID,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/externalId/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const getSchoolDetails = (id) => ({\n\ttype: GET_SINGLE_SCHOOL_DETAILS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSchoolDataForSections = (id) => ({\n\ttype: GET_SCHOOL_DATA_FOR_SECTIONS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/${id}/sectionsettings`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSchoolsDataForSections = () => ({\n\ttype: GET_SCHOOLS_DATA_FOR_SECTIONS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/sectionsettings`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSchoolAbsence = (id, date) => ({\n\ttype: GET_SCHOOL_ABSENCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/${id}/absence?date=${date}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSchoolStudents = (id, skip) => ({\n\ttype: GET_SINGLE_SCHOOL_STUDENTS,\n\tpayload: new Promise(resolve => {\n\t\tif (skip != null) {\n\t\t\tapi.get(`schools/${id}/students/${skip}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\n\t\t\treturn true;\n\t\t}\n\n\t\tapi.get(`schools/${id}/students`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n\n});\n\nexport const getSchoolGuardians = (id) => ({\n\ttype: GET_SCHOOL_GUARDIANS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/${id}/guardians`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSchoolSubjectTeachers = (id) => ({\n\ttype: GET_SCHOOL_SUBJECTTEACHERS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`schools/${id}/subjectteachers`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateSchoolType = (Id, Type) => {\n\treturn {\n\t\ttype: UPDATE_SCHOOL_TYPE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.put(`schools/${Id}/type/${Type}`, null).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t})\n\t};\n}\n\nexport const getSchoolServices = (id) => ({\n\ttype: GET_SCHOOL_SERVICES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`schools/${id}/services`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import {\n\tGET_SINGLE_SCHOOL_STUDENTS,\n\tGET_SINGLE_SCHOOL_DETAILS,\n\tGET_SCHOOL_ABSENCE,\n\tGET_SCHOOL_GUARDIANS,\n\tUPDATE_SCHOOL_TYPE,\n\tGET_SCHOOL_SUBJECTTEACHERS,\n\tGET_SCHOOL_SERVICES,\n\tGET_SCHOOL_DATA_FOR_SECTIONS,\n\tGET_SCHOOLS_DATA_FOR_SECTIONS,\n\tGET_SINGLE_SCHOOL_BY_EXTERNALID\n} from 'actions/schools';\n\nimport {\n\tDELETE_ABSENCE\n} from 'actions/absence';\n\nconst INITIAL_STATE = {\n\tschool: null,\n\tactive: null,\n\tstudents: null,\n\tabsence: null,\n\tguardians: [],\n\tsubjectTeacher: [],\n\tschoolServices: null,\n\tschoolDataForSection: null,\n\tschoolsDataForSection: null\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\n\tswitch (action.type) {\n\t\tcase GET_SINGLE_SCHOOL_BY_EXTERNALID:\n\t\t\treturn { ...state, school: action.payload };\n\n\t\tcase GET_SINGLE_SCHOOL_STUDENTS:\n\t\t\treturn { ...state, students: action.payload };\n\n\t\tcase GET_SINGLE_SCHOOL_DETAILS:\n\t\t\treturn { ...state, active: action.payload };\n\t\tcase GET_SCHOOLS_DATA_FOR_SECTIONS:\n\t\t\treturn { ...state, schoolsDataForSection: action.payload };\n\n\t\tcase GET_SCHOOL_DATA_FOR_SECTIONS:\n\t\t\treturn { ...state, schoolDataForSection: action.payload };\n\n\t\tcase GET_SCHOOL_ABSENCE:\n\t\t\treturn { ...state, absence: action.payload };\n\n\t\tcase GET_SCHOOL_GUARDIANS:\n\t\t\treturn { ...state, guardians: action.payload };\n\n\t\tcase UPDATE_SCHOOL_TYPE:\n\t\t\tlet active = state.active;\n\t\t\tif (active != null) {\n\t\t\t\tif (active.id == action.payload.id) {\n\t\t\t\t\treturn { ...state, active: action.payload };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_SCHOOL_SUBJECTTEACHERS:\n\t\t\treturn { ...state, subjectTeacher: action.payload };\n\n\t\tcase GET_SCHOOL_SERVICES:\n\t\t\treturn { ...state, schoolServices: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\n\t}\n\n}\n","import {\n\tSET_SEARCH_TERM,\n\tSEARCH_EDUCATION_GROUPS,\n\tSEARCH_MENTOR_GROUPS,\n\tSEARCH_GROUPS,\n\tSEARCH_HALDOR_ASSIGNMENTS_IN_GROUP,\n\tSEARCH_MICROSOFT_ASSIGNMENTS_IN_GROUP,\n\tSEARCH_CLEAR_RESULTS,\n\tSEARCH_ASSIGNMENTS,\n\tSEARCH_PLANS,\n\tSEARCH_SCHOOL_USERS,\n\tSEARCH_POSTS,\n\tCLEAR_SEARCH,\n\tSEARCH_MY_SECTIONS\n} from 'actions/search';\n\nconst INITIAL_STATE = {\n\tterm: null,\n\teducationGroups: null,\n\tmentorGroups: null,\n\tgroups: null,\n\tmentors: null,\n\tmicrosoftAssignments: [],\n\thaldorAssignments: [],\n\tassignments: [],\n\tplans: [],\n\tstudents: [],\n\tguardians: [],\n\tstaff: [],\n\tcourses: [],\n\tteachers: [],\n\tuserSearch: [],\n\tposts: [],\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase SET_SEARCH_TERM:\n\t\t\treturn { ...state, term: action.payload };\n\n\t\tcase SEARCH_EDUCATION_GROUPS:\n\t\t\treturn { ...state, educationGroups: action.payload };\n\n\t\tcase SEARCH_MENTOR_GROUPS:\n\t\t\treturn { ...state, mentorGroups: action.payload };\n\n\t\tcase SEARCH_GROUPS:\n\t\t\treturn { ...state, groups: action.payload };\n\n\t\tcase SEARCH_MY_SECTIONS:\n\t\t\treturn { ...state, groups: action.payload };\n\n\t\tcase SEARCH_MICROSOFT_ASSIGNMENTS_IN_GROUP:\n\t\t\treturn { ...state, microsoftAssignments: action.payload };\n\n\t\tcase SEARCH_HALDOR_ASSIGNMENTS_IN_GROUP:\n\t\t\treturn { ...state, haldorAssignments: action.payload };\n\n\t\tcase SEARCH_CLEAR_RESULTS:\n\t\t\treturn INITIAL_STATE;\n\n\t\tcase SEARCH_SCHOOL_USERS:\n\t\t\tvar staff = [];\n\t\t\tvar teachers = [];\n\t\t\tvar students = [];\n\t\t\tvar guardians = [];\n\t\t\tif (action.payload != null && action.payload.length > 0) {\n\t\t\t\tif (Array.isArray(action.payload)) {\n\t\t\t\t\tfor (var userItem of action.payload) {\n\t\t\t\t\t\tswitch (userItem.userType) {\n\t\t\t\t\t\t\tcase 'Staff':\n\t\t\t\t\t\t\t\tstaff.push(userItem);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Teacher':\n\t\t\t\t\t\t\t\tteachers.push(userItem);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Mentor':\n\t\t\t\t\t\t\t\tteachers.push(userItem);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Student':\n\t\t\t\t\t\t\t\tstudents.push(userItem);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'GUARDIAN':\n\t\t\t\t\t\t\t\tguardians.push(userItem);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...state, staff: staff, teachers: teachers, students: students, guardians: guardians };\n\t\tcase SEARCH_ASSIGNMENTS:\n\t\t\treturn { ...state, assignments: action.payload };\n\n\t\tcase SEARCH_PLANS:\n\t\t\treturn { ...state, plans: action.payload };\n\n\t\tcase SEARCH_POSTS:\n\t\t\treturn { ...state, posts: action.payload };\n\n\t\tcase CLEAR_SEARCH:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\teducationGroups: INITIAL_STATE.educationGroups,\n\t\t\t\tmentorGroups: INITIAL_STATE.mentorGroups,\n\t\t\t\tgroups: INITIAL_STATE.groups,\n\t\t\t\tmentors: INITIAL_STATE.mentors,\n\t\t\t\tmicrosoftAssignments: INITIAL_STATE.microsoftAssignments,\n\t\t\t\thaldorAssignments: INITIAL_STATE.haldorAssignments,\n\t\t\t\tstudents: INITIAL_STATE.students,\n\t\t\t\tstaff: INITIAL_STATE.staff,\n\t\t\t\tteachers: INITIAL_STATE.teachers,\n\t\t\t\tuserSearch: INITIAL_STATE.userSearch,\n\t\t\t\tassignments: INITIAL_STATE.assignments,\n\t\t\t\tplans: INITIAL_STATE.plans,\n\t\t\t\tguardians: INITIAL_STATE.guardians,\n\t\t\t\tterm: INITIAL_STATE.term,\n\t\t\t\tposts: INITIAL_STATE.posts,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","export const SET_PAGE_ACTIONS = 'HEADER_SET_PAGE_ACTIONS';\nexport const SET_PAGE_TITLE = 'HEADER_SET_PAGE_TITLE';\nexport const ON_ROUTE_CHANGE = 'HEADER_ON_ROUTE_CHANGE';\nexport const ON_ROUTE_BACK = 'HEADER_ON_ROUTE_BACK';\n\nexport const setPageActions = (value) => {\n\treturn {\n\t\ttype: SET_PAGE_ACTIONS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tresolve(value);\n\t\t}),\n\t};\n}\n\nexport const setPageTitle = (value) => {\n\treturn {\n\t\ttype: SET_PAGE_TITLE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tresolve(value);\n\t\t}),\n\t};\n}\n\nexport const onRouteBack = () => ({\n\ttype: ON_ROUTE_BACK,\n\tpayload: true,\n});\n","export const getRootUrl = () => {\n\tif (window.location.pathname.indexOf('assignments-tab') > -1) {\n\t\treturn `/assignments-tab/`;\n\t} else if (window.location.pathname.indexOf('planning-tab') > -1) {\n\t\treturn `/planning-tab/`;\n\t} else if (window.location.pathname.indexOf('assessments-tab') > -1) {\n\t\treturn `/assessments-tab/`;\n\t} else if (window.location.pathname.indexOf('attendance-tab') > -1) {\n\t\treturn `/attendance-tab/`;\n\t} else if (window.location.pathname.indexOf('haldor-tab') > -1) {\n\t\treturn `/haldor-tab/`;\n\t} else {\n\t\treturn `/`;\n\t}\n};\n\nexport const getParameterByName = (name, url) => {\n\tif (!url) url = window.location.href;\n\tname = name.replace(/[\\[\\]]/g, '\\\\$&');\n\tvar regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n\t\tresults = regex.exec(url);\n\tif (!results) return null;\n\tif (!results[2]) return '';\n\n\treturn decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}","import { getRootUrl } from 'helpers/url';\n\nexport const isMicrosoftTeams = () => {\n\tconst userAgent = navigator.userAgent;\n\treturn userAgent.includes(\"Teams\") || window.self !== window.top || getRootUrl().indexOf('-tab') > -1;\n}\n\nexport const isIframe = () => {\n\ttry {\n\t\treturn window.self !== window.top || getRootUrl().indexOf('-tab') > -1;\n\t} catch (e) {\n\t\treturn true;\n\t}\n}\n\nexport const backButtonEnable = () => {\n\tconst isIframe = isMicrosoftTeams();\n\n\tlet current = window.location.pathname;\n\tif (current[current.length - 1] == '/') {\n\t\t// Remove trailing slash\n\t\tcurrent = current.slice(0, -1);\n\t}\n\n\t// Remove trailing slash on getRootUrl since it always contains one\n\tif (current == getRootUrl().slice(0, -1)) {\n\t\treturn false;\n\t} else {\n\t\tif (current == '/' && isIframe) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/menu') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/search' && !isIframe) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/assignments') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/evaluations') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/posts') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/plans') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/groups') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/schedule') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/notifications') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/conversations') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/report/absence') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/report/attendance') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/courses') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/courses/standard') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/conversations/admin/flagged') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/forms/templates') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/meetings') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/progress') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/additionaladjustments') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/overview/mentor') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/bookmarks') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/administration') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (current == '/sms') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n};\n\nexport const generateMicrosoftAssignmentDeepLink = (assignment, group, channel) => {\n\tconst base = 'https://teams.microsoft.com/l/entity';\n\tconst entityId = '66aeee93-507d-479a-a3ef-8f494af43945/classroom';\n\n\tlet context = `{\"subEntityId\":\"{\\\\\"version\\\\\":\\\\\"1.0\\\\\",\\\\\"config\\\\\":{\\\\\"classes\\\\\":[{\\\\\"id\\\\\":\\\\\"${group}\\\\\",\\\\\"assignmentIds\\\\\":[\\\\\"${assignment}\\\\\"]}]},\\\\\"action\\\\\":\\\\\"navigate\\\\\",\\\\\"view\\\\\":\\\\\"assignment-viewer\\\\\"}\",\"channelId\":\"${channel}\"}`;\n\tcontext = encodeURIComponent(context);\n\n\treturn `${base}/${entityId}?context=${context}`;\n}\n","\nimport {\n\tSET_PAGE_ACTIONS,\n\tSET_PAGE_TITLE,\n\tON_ROUTE_CHANGE,\n\tON_ROUTE_BACK,\n} from 'actions/header';\n\nimport { isSupported } from 'helpers/localstorage';\n\nimport { backButtonEnable } from 'helpers/teams';\n\nlet hydrateHistory = null;\nif (isSupported()) {\n\thydrateHistory = localStorage.getItem('history') != null ? JSON.parse(localStorage.getItem('history')) : null;\n}\n\nlet pathname = window.location.pathname;\nif (pathname.indexOf('/landingpage') > -1) {\n\tpathname = pathname.replace('/landingpage', '');\n}\n\n// Init history with current route as first item\nlet history = [pathname];\n\nif (backButtonEnable() && hydrateHistory != null && hydrateHistory.length > 0) {\n\t// Only load history from local storage if on page that should show back button\n\tif (hydrateHistory[0] == pathname) {\n\t\t// If first item in hydrated history matches current route, set hydrated history as history\n\t\thistory = hydrateHistory;\n\t} else {\n\t\t// If it doesnt match we clear the item since we dont need the data\n\t\tlocalStorage.removeItem('history');\n\t}\n}\n\nif (!backButtonEnable() && isSupported()) {\n\t// If user loads on a page that shouldnt display the back button we clear history item in LS to avoid big items\n\tlocalStorage.removeItem('history');\n}\n\nconst INITIAL_STATE = {\n\tactions: null,\n\ttitle: null,\n\tbackButton: backButtonEnable() && history.length > 1,\n\tpathname: pathname,\n\thistory,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase SET_PAGE_ACTIONS:\n\t\t\treturn { ...state, actions: action.payload };\n\n\t\tcase SET_PAGE_TITLE:\n\t\t\treturn { ...state, title: action.payload };\n\n\t\tcase ON_ROUTE_CHANGE:\n\t\t\t// Dispatched from routes/index.js\n\t\t\tif (window.location.pathname == state.pathname) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tlet history = JSON.parse(localStorage.getItem('history'));\n\t\t\tif (history == null) {\n\t\t\t\thistory = [pathname];\n\t\t\t}\n\n\t\t\tif (history[0] != window.location.pathname) {\n\t\t\t\thistory.unshift(window.location.pathname);\n\t\t\t}\n\n\t\t\tif (history.length > 0) {\n\t\t\t\tlocalStorage.setItem('history', JSON.stringify(history));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttitle: null,\n\t\t\t\tactions: null,\n\t\t\t\thistory: history,\n\t\t\t\tpathname: window.location.pathname,\n\t\t\t\tbackButton: backButtonEnable() && history.length > 1,\n\t\t\t};\n\n\t\tcase ON_ROUTE_BACK:\n\t\t\tlet newHistory = JSON.parse(localStorage.getItem('history'));\n\t\t\tif (newHistory == null) {\n\t\t\t\tnewHistory = [pathname];\n\t\t\t}\n\n\t\t\tnewHistory.shift();\n\n\t\t\tif (newHistory.length > 0) {\n\t\t\t\tlocalStorage.setItem('history', JSON.stringify(newHistory));\n\t\t\t}\n\n\t\t\treturn { ...state, history: newHistory };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_VERDICT_SCALE = 'VERDICTS_VERDICT_SCALE';\nexport const GET_USER_VERDICTS = 'VERDICTS_GET_USER_VERDICTS';\nexport const SUBMIT_VERDICT = 'VERDICTS_POST_VERDICT';\nexport const UPDATE_VERDICT = 'VERDICTS_PUT_VERDICT';\nexport const GET_PLAN_ASSESSMENTS = 'VERDICTS_GET_ASSESSMENTS_PLANS';\nexport const GET_ASSIGNMENT_ASSESSMENTS = 'VERDICTS_GET_ASSESSMENTS_ASSIGNMENT';\nexport const GET_SECTION_VERDICTS = 'VERDICTS_GET_SECTION_VERDICTS';\nexport const DUPLICATE_STUDENT_VERDICT = 'VERDICTS_DUPLICATE_STUDENT_VERDICT';\nexport const DUPLICATE_STUDENTS_VERDICT = 'VERDICTS_DUPLICATE_MULTIPLE_STUDENTS_VERDICT';\nexport const GET_STUDENT_LAST_VERDICT = 'VERDICTS_GET_STUDENT_LATEST_VERDICT';\nexport const CLEAR_VERDICTS = 'VERDICTS_CLEAR_VERDICTS';\nexport const CLEAR_VERDCIT_SCALE = 'VERDICTS_CLEAR_VERDCIT_SCALE';\nexport const REQUEST_STUDENT_VERDICT = 'VERDICTS_REQUEST_STUDENT_VERDICT';\nexport const DELETE_VERDICT = 'VERDICTS_DELETE_VERDICT';\nexport const SUBMIT_BULK_VERDICTS = 'VERDICTS_SUBMIT_BULK_VERDICTS';\nexport const GET_VERDICTS_FOR_STUDENTS_IN_SECTION = 'VERDICTS_GET_VERDICTS_FOR_STUDENTS_IN_SECTION';\nexport const GET_STUDENT_COURSES = 'GET_STUDENT_COURSES';\nexport const RESET_PLAN_ASSESSMENTS = 'RESET_PLAN_ASSESSMENTS';\nexport const RESET_ASSIGNMENT_ASSESSMENTS = 'RESET_ASSIGNMENT_ASSESSMENTS';\n\nexport const getVerdictScale = () => ({\n\ttype: GET_VERDICT_SCALE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`verdict/scale`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getVerdictsForUser = (userId, courseId, start, end) => ({\n\ttype: GET_USER_VERDICTS,\n\tpayload: new Promise(resolve => {\n\t\tlet url = `users/${userId}/verdicts/course/${courseId}?_=1`;\n\t\tif (start != null) {\n\t\t\turl += `&start=${start}`;\n\t\t}\n\n\t\tif (end != null) {\n\t\t\turl += `&end=${end}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const createVerdict = (values) => ({\n\ttype: SUBMIT_VERDICT,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(\"verdict\", values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateVerdict = (values) => ({\n\ttype: SUBMIT_VERDICT,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(\"verdict\", values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getPlanAssessments = (user, courseId, start, end) => ({\n\ttype: GET_PLAN_ASSESSMENTS,\n\tpayload: new Promise(resolve => {\n\t\tlet url = `assessments/${user}/course/${courseId}/plans?`;\n\t\tif (start != null && end != null) {\n\t\t\turl = url + `startDate=${start}&endDate=${end}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const resetPlanAssessments = () => ({\n\ttype: RESET_PLAN_ASSESSMENTS,\n\tpayload: []\n});\n\nexport const getAssignmentAssessments = (user, courseId, start, end) => ({\n\ttype: GET_ASSIGNMENT_ASSESSMENTS,\n\tpayload: new Promise(resolve => {\n\t\tlet url = `assessments/${user}/course/${courseId}/assignments?`;\n\t\tif (start != null && end != null) {\n\t\t\turl = url + `startDate=${start}&endDate=${end}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const resetAssignmentAssessments = () => ({\n\ttype: RESET_ASSIGNMENT_ASSESSMENTS,\n\tpayload: []\n});\n\nexport const getSectionVerdicts = (sectionId, courseId) => ({\n\ttype: GET_SECTION_VERDICTS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`sections/${sectionId}/verdicts/course/${courseId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const duplicateStudentVerdict = (verdictId) => ({\n\ttype: DUPLICATE_STUDENT_VERDICT,\n\tpayload: new Promise(resolve => {\n\t\tconst data = [\n\t\t\tverdictId,\n\t\t];\n\n\t\tapi.post(`verdict/duplicate`, data).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const duplicateStudentsVerdict = (ids) => ({\n\ttype: DUPLICATE_STUDENTS_VERDICT,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`verdict/duplicate`, ids).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const getStudentVerdicts = (studentId, from, to) => ({\n\ttype: GET_STUDENT_COURSES,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/${studentId}/verdicts?from=${from}&to=${to}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const getStudentLatestVerdict = (studentId, courseId) => ({\n\ttype: GET_STUDENT_LAST_VERDICT,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`users/${studentId}/verdicts/course/${courseId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const deleteVerdict = (id) => ({\n\ttype: DELETE_VERDICT,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`verdict/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const clearVerdicts = () => ({\n\ttype: CLEAR_VERDICTS,\n\tpayload: null\n})\n\nexport const clearVerdictScale = () => ({\n\ttype: CLEAR_VERDCIT_SCALE,\n\tpayload: null\n})\n\nexport const requestVerdictForUser = (user, courseId) => ({\n\ttype: REQUEST_STUDENT_VERDICT,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`verdict/notify?studentId=${user}&courseId=${courseId}`, {}).then((response) => {\n\t\t\t// TODO: Handle error here\n\t\t\tif (false) {\n\t\t\t\tconsole.log('action notify reject');\n\t\t\t\treject(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const submitBulkVerdicts = (values) => ({\n\ttype: SUBMIT_BULK_VERDICTS,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`verdict/bulk`, values).then((response) => {\n\t\t\t// TODO: Handle error here\n\t\t\tif (false) {\n\t\t\t\treject(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getVerdictsForStudentsInSection = (students, sectionId, start, end) => ({\n\ttype: GET_VERDICTS_FOR_STUDENTS_IN_SECTION,\n\tpayload: new Promise(resolve => {\n\t\tlet data = JSON.stringify(students);\n\n\t\tapi.post(`sections/${sectionId}/verdicts?startDate=${start}&endDate=${end}`, students).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n})","import {\n\tGET_USER_VERDICTS,\n\tGET_PLAN_ASSESSMENTS,\n\tGET_ASSIGNMENT_ASSESSMENTS,\n\tGET_SECTION_VERDICTS,\n\tGET_STUDENT_LAST_VERDICT,\n\tGET_VERDICT_SCALE,\n\tCLEAR_VERDICTS,\n\tCLEAR_VERDCIT_SCALE,\n\tGET_VERDICTS_FOR_STUDENTS_IN_SECTION,\n\tRESET_ASSIGNMENT_ASSESSMENTS,\n\tRESET_PLAN_ASSESSMENTS\n} from 'actions/verdicts';\n\nconst INITIAL_STATE = {\n\tscale: null,\n\tuser: null,\n\tassignments: null,\n\tplans: null,\n\tsection: null,\n\tuserStudyPlans: null,\n\tlastVerdicts: [],\n\tsectionStudents: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_VERDICT_SCALE:\n\t\t\treturn { ...state, scale: action.payload };\n\n\t\tcase GET_USER_VERDICTS:\n\t\t\treturn { ...state, user: action.payload };\n\n\t\tcase RESET_ASSIGNMENT_ASSESSMENTS:\n\t\t\treturn { ...state, plans: null };\n\n\t\tcase RESET_PLAN_ASSESSMENTS:\n\t\t\treturn { ...state, assignments: null };\n\n\t\tcase GET_PLAN_ASSESSMENTS:\n\t\t\treturn { ...state, plans: action.payload };\n\n\t\tcase GET_ASSIGNMENT_ASSESSMENTS:\n\t\t\treturn { ...state, assignments: action.payload };\n\n\t\tcase GET_SECTION_VERDICTS:\n\t\t\treturn { ...state, section: action.payload };\n\n\t\tcase GET_STUDENT_LAST_VERDICT:\n\t\t\tif (action.payload != null && action.payload.length > 0) {\n\t\t\t\tlet lastVerdicts = [...state.lastVerdicts];\n\t\t\t\tlastVerdicts.push(action.payload[0]);\n\n\t\t\t\treturn { ...state, lastVerdicts };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase CLEAR_VERDICTS:\n\t\t\treturn { ...state, lastVerdicts: [], assignments: null, plans: null, user: null, userStudyPlans: null };\n\n\t\tcase CLEAR_VERDCIT_SCALE:\n\t\t\treturn { ...state, scale: null };\n\n\t\tcase GET_VERDICTS_FOR_STUDENTS_IN_SECTION:\n\t\t\treturn { ...state, sectionStudents: action.payload }\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\nimport Moment from 'moment';\n\nconst MESSAGES_PER_PAGE = 50;\n\nexport const GET_CONVERSATIONS = 'CONVERSATIONS_GET_CONVERSATIONS';\nexport const GET_CONVERSATIONS_REFERENCE = 'CONVERSATIONS_GET_CONVERSATIONS_BY_REFERENCE';\nexport const GET_CONVERSATION = 'CONVERSATIONS_GET_CONVERSATION';\nexport const GET_ARCHIVED_CONVERSATIONS = 'CONVERSATIONS_GET_ARCHIVED_CONVERSATIONS';\nexport const RESET_CONVERSATION = 'CONVERSATIONS_RESET_CONVERSATION';\nexport const GET_CONVERSATION_MESSAGES = 'CONVERSATION_GET_CONVERSATION_MESSAGES';\nexport const GET_USER_CONTACTS = 'CONVERSATION_GET_USER_CONTACTS';\nexport const SEARCH_CONVERSATIONS = 'CONVERSATION_SEARCH_CONVERSATIONS';\nexport const CLEAR_SEARCH_CONVERSATIONS = 'CONVERSATION_CLEAR_SEARCH_CONVERSATIONS';\nexport const UPDATE_CONVERSATION = 'CONVERSATION_UPDATE_CONVERSATION';\nexport const ARCHIVE_CONVERSATION = 'CONVERSATION_ARCHIVE_CONVERSATION';\nexport const GET_USER_GUARDIAN = 'CONVERSATION_GET_USER_GUARDIAN';\nexport const FLAG_MESSAGE = 'CONVERSATION_FLAG_MESSAGE';\nexport const UPDATE_SEARCHED_CONVERSATIONS = 'UPDATE_SEARCHED_CONVERSATIONS';\nexport const STAGE_CONVERSATION = 'CONVERSATION_STAGE_NEW_CONVERSATION';\nexport const SUBMIT_CONVERSATION = 'CONVERSATION_SUBMIT_NEW_CONVERSATION';\nexport const SUBMIT_CONVERSATION_MESSAGE = 'CONVERSATION_SUBMIT_CONVERSATION_MESSAGE';\n\nexport const getConversations = () => {\n\treturn {\n\t\ttype: GET_CONVERSATIONS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations`).then((response) => {\n\t\t\t\tconst sortItems = (a, b) => {\n\t\t\t\t\tif (a.messages.length > 0 && b.messages.length > 0)\n\t\t\t\t\t\treturn Moment(b.messages[0].created).unix() - Moment(a.messages[0].created).unix();\n\t\t\t\t\telse\n\t\t\t\t\t\treturn 0;\n\t\t\t\t};\n\t\t\t\tresponse.data.sort(sortItems);\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const getConversationsByReference = (referenceId, referenceType) => {\n\treturn {\n\t\ttype: GET_CONVERSATIONS_REFERENCE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations?referenceId=${referenceId}&referenceType=${referenceType}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const getArchivedConversations = () => {\n\treturn {\n\t\ttype: GET_ARCHIVED_CONVERSATIONS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations?archived=true`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const getConversation = (id) => {\n\treturn {\n\t\ttype: GET_CONVERSATION,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations/${id}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const getMessages = (conversation, page) => {\n\treturn {\n\t\ttype: GET_CONVERSATION_MESSAGES,\n\t\tpayload: new Promise(resolve => {\n\t\t\tlet skip = page * MESSAGES_PER_PAGE;\n\t\t\tlet top = skip + MESSAGES_PER_PAGE;\n\n\t\t\tapi.get(`conversations/${conversation}/messages?skip=${skip}&top=${top}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const submitMessage = (message) => {\n\treturn {\n\t\ttype: SUBMIT_CONVERSATION_MESSAGE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.post('conversations/message', message).then((response) => {\n\t\t\t\tlet data = {\n\t\t\t\t\t...message,\n\t\t\t\t\tid: response.data,\n\t\t\t\t};\n\n\t\t\t\tresolve(data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const createConversation = (conversation) => {\n\treturn {\n\t\ttype: SUBMIT_CONVERSATION,\n\t\tpayload: new Promise(resolve => {\n\t\t\tif (conversation.id != null) {\n\t\t\t\tdelete conversation.id;\n\t\t\t}\n\n\t\t\tapi.post(`conversations`, conversation).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const stageConversation = (conversation) => {\n\treturn {\n\t\ttype: STAGE_CONVERSATION,\n\t\tpayload: new Promise(resolve => {\n\t\t\tresolve(conversation);\n\t\t}),\n\t}\n}\n\nexport const getContacts = () => {\n\treturn {\n\t\ttype: GET_USER_CONTACTS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations/contacts`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport const searchConversation = (query) => {\n\treturn {\n\t\ttype: SEARCH_CONVERSATIONS,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations/?search=${query}`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const clearSearch = () => {\n\treturn {\n\t\ttype: CLEAR_SEARCH_CONVERSATIONS,\n\t\tpayload: true,\n\t};\n}\n\nexport const resetConversation = () => {\n\treturn {\n\t\ttype: RESET_CONVERSATION,\n\t\tpayload: true,\n\t};\n}\n\nexport const archiveConversation = (conversation) => {\n\treturn {\n\t\ttype: ARCHIVE_CONVERSATION,\n\t\tpayload: new Promise(resolve => {\n\t\t\tconversation.status = 'ARCHIVED';\n\n\t\t\tapi.put(`conversations/`, conversation).then((response) => {\n\t\t\t\tresolve(conversation);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const flagMessage = (id, reason) => {\n\treturn {\n\t\ttype: FLAG_MESSAGE,\n\t\tpayload: new Promise(resolve => {\n\t\t\tconst values = {\n\t\t\t\t'messageId': id,\n\t\t\t\t'reason': reason,\n\t\t\t};\n\n\t\t\tapi.post(`conversations/flagged`, values).then((response) => {\n\t\t\t\tresolve({\n\t\t\t\t\tflagID: response.data,\n\t\t\t\t\t...values\n\t\t\t\t});\n\t\t\t});\n\t\t}),\n\t}\n}\n\nexport function getUserGuardian(id) {\n\treturn {\n\t\ttype: GET_USER_GUARDIAN,\n\t\tpayload: new Promise((resolve, reject) => {\n\t\t\tapi.get(`conversations/contacts/${id}/guardians`).then((response) => {\n\t\t\t\tresolve({ userId: id, guardians: response.data });\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport function updateSearchedConversations(results) {\n\treturn {\n\t\ttype: UPDATE_SEARCHED_CONVERSATIONS,\n\t\tpayload: results\n\t};\n}","import {\n\tGET_CONVERSATIONS,\n\tGET_CONVERSATIONS_REFERENCE,\n\tGET_CONVERSATION,\n\tGET_ARCHIVED_CONVERSATIONS,\n\tRESET_CONVERSATION,\n\tGET_CONVERSATION_MESSAGES,\n\tGET_USER_CONTACTS,\n\tSEARCH_CONVERSATIONS,\n\tCLEAR_SEARCH_CONVERSATIONS,\n\tUPDATE_CONVERSATION,\n\tARCHIVE_CONVERSATION,\n\tGET_USER_GUARDIAN,\n\tFLAG_MESSAGE,\n\n\tSTAGE_CONVERSATION,\n\tSUBMIT_CONVERSATION_MESSAGE,\n\tSUBMIT_CONVERSATION,\n\tUPDATE_SEARCHED_CONVERSATIONS,\n} from 'actions/conversation';\n\nconst INITIAL_STATE = {\n\tconversations: null,\n\tconversation: null,\n\tarchived: null,\n\tmessages: [],\n\tguardians: [],\n\tcontacts: null,\n\tstaged: null,\n\tnew: null,\n\tsearchResults: null,\n\treferenceConversations: null,\n\tresults: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_CONVERSATIONS:\n\t\t\treturn { ...state, conversations: action.payload };\n\n\t\tcase GET_CONVERSATIONS_REFERENCE:\n\t\t\treturn { ...state, referenceConversations: action.payload };\n\n\t\tcase GET_CONVERSATION:\n\t\t\treturn { ...state, conversation: action.payload };\n\n\t\tcase GET_ARCHIVED_CONVERSATIONS:\n\t\t\treturn { ...state, archived: action.payload };\n\n\t\tcase GET_CONVERSATION_MESSAGES:\n\t\t\tif (action.payload != null && action.payload.length > 0) {\n\t\t\t\treturn { ...state, messages: state.messages.unshift(...action.payload) };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase SUBMIT_CONVERSATION_MESSAGE:\n\t\t\tif (state.conversation != null) {\n\t\t\t\tlet conversationMessage = { ...state.conversation };\n\t\t\t\tconversationMessage.messages.push(action.payload);\n\n\t\t\t\treturn { ...state, conversation: conversationMessage };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_USER_CONTACTS:\n\t\t\treturn { ...state, contacts: action.payload };\n\n\t\tcase SEARCH_CONVERSATIONS:\n\t\t\treturn { ...state, searchResults: action.payload };\n\n\t\tcase CLEAR_SEARCH_CONVERSATIONS:\n\t\t\treturn { ...state, searchResults: INITIAL_STATE.searchResults };\n\n\t\tcase STAGE_CONVERSATION:\n\t\t\treturn { ...state, staged: action.payload };\n\n\t\tcase SUBMIT_CONVERSATION:\n\t\t\treturn { ...state, new: action.payload };\n\n\t\tcase UPDATE_CONVERSATION:\n\t\t\tlet update = { ...state.conversations };\n\t\t\tlet found = update.findIndex(conversation => {\n\t\t\t\treturn conversation.id == action.payload.id;\n\t\t\t});\n\n\t\t\tif (found != null) {\n\t\t\t\tupdate.splice(found, 1, action.payload);\n\t\t\t\treturn { ...state, conversations: update };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase UPDATE_SEARCHED_CONVERSATIONS:\n\t\t\tlet searchResults = action.payload;\n\t\t\tlet foundArchivedConversation = searchResults.findIndex(conversation => \n\t\t\t\t{\n\t\t\t\t\tif(conversation.status == 'ARCHIVED'){\n\t\t\t\t\t\treturn conversation.id == action.payload.id;\n\t\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (foundArchivedConversation != null){\n\t\t\t\tsearchResults.splice(foundArchivedConversation, 1);\n\t\t\t\tif (searchResults == null) {\n\t\t\t\t\tsearchResults = [];\n\t\t\t\t}\n\t\t\t\treturn { ...state, results: searchResults};\n\t\t\t}\n\t\t\treturn state;\n\t\n\t\tcase ARCHIVE_CONVERSATION:\n\t\t\tlet remove = [...state.conversations];\n\t\t\tlet archived = [...(state.archived ?? [])];\n\t\t\tlet foundConversation = remove.findIndex(conversation => {\n\t\t\t\treturn conversation.id == action.payload.id;\n\t\t\t});\n\n\t\t\tif (archived == null) {\n\t\t\t\tarchived = [];\n\t\t\t}\n\n\t\t\tif (foundConversation != null) {\n\t\t\t\tremove.splice(foundConversation, 1);\n\t\t\t\tarchived.push(action.payload);\n\n\t\t\t\treturn { ...state, conversations: remove, archived: archived };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase RESET_CONVERSATION:\n\t\t\treturn { ...state, conversation: INITIAL_STATE.conversation };\n\n\t\tcase FLAG_MESSAGE:\n\t\t\tif (state.conversation != null) {\n\t\t\t\tif (state.conversation.messages != null && state.conversation.messages.length > 0) {\n\t\t\t\t\tlet conversation = { ...state.conversation };\n\t\t\t\t\tlet foundMessage = conversation.messages.findIndex(message => {\n\t\t\t\t\t\treturn message.id == action.payload.messageId;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (foundMessage > -1) {\n\t\t\t\t\t\tlet newMessage = { ...conversation.messages[foundMessage] };\n\t\t\t\t\t\tnewMessage.flagID = action.payload.flagID;\n\t\t\t\t\t\tnewMessage.text = '';\n\n\t\t\t\t\t\tconversation.messages.splice(foundMessage, 1, newMessage);\n\t\t\t\t\t\treturn { ...state, conversation: conversation };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_USER_GUARDIAN:\n\t\t\tlet currentGuardians = state.guardians;\n\t\t\tconst foundInGuardians = currentGuardians.findIndex(userGuardians => {\n\t\t\t\treturn userGuardians.userId == action.payload.userId;\n\t\t\t});\n\n\t\t\tif (foundInGuardians > -1) {\n\t\t\t\tcurrentGuardians.splice(foundInGuardians, 1, action.payload);\n\t\t\t} else {\n\t\t\t\tcurrentGuardians.push(action.payload);\n\t\t\t}\n\n\t\t\treturn { ...state, guardians: currentGuardians };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_FLAGGED_MESSAGES = 'CONVERSATIONS_ADMIN_GET_FLAGGED_MESSAGES';\nexport const UPDATE_FLAGGED_MESSAGE = 'CONVERSATIONS_ADMIN_UPDATE_FLAGGED_MESSAGE';\nexport const DELETE_FLAGGED_MESSAGE = 'CONVERSATIONS_ADMIN_DELETE_FLAGGED_MESSAGE';\n\nexport const getFlaggedMessages = () => {\n\treturn {\n\t\ttype: GET_FLAGGED_MESSAGES,\n\t\tpayload: new Promise(resolve => {\n\t\t\tapi.get(`conversations/flagged`).then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t});\n\t\t}),\n\t};\n}\n\nexport const updateFlaggedMessage = (flag) => ({\n\ttype: UPDATE_FLAGGED_MESSAGE,\n\tpayload: new Promise(resolve => {\n\t\tapi.put('conversations/flagged', flag).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteFlaggedMessage = (flagId) => ({\n\ttype: DELETE_FLAGGED_MESSAGE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`conversations/flagged/${flagId}`).then((response) => {\n\t\t\tresolve(flagId);\n\t\t});\n\t}),\n});\n","import {\n\tGET_FLAGGED_MESSAGES,\n} from 'actions/conversation_admin';\n\nconst INITIAL_STATE = {\n\tflagged: []\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_FLAGGED_MESSAGES:\n\t\t\treturn { ...state, flagged: action.payload };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_FORM_TEMPLATES = 'TEMPLATE_GET_FORM_TEMPLATES';\nexport const GET_FORM_TEMPLATE = 'TEMPLATE_GET_FORM_SINGLE_TEMPLATE';\nexport const CREATE_FORM_TEMPLATE = 'TEMPLATE_CREATE_FORM_TEMPLATE';\nexport const UPDATE_FORM_TEMPLATE = 'TEMPLATE_CREATE_FORM_TEMPLATE';\nexport const CLEAR_FORM_TEMPLATE = 'TEMPLATE_CLEAR_SINGLE_FORM_TEMPLATE';\n\nexport const CREATE_FORM = 'TEMPLATE_ASSIGN_FORM_TEMPLATE';\nexport const UPDATE_FORM = 'TEMPLATE_UPDATE_FORM';\nexport const UPDATE_FORM_INSTANCE = 'TEMPLATE_UPDATE_FORM_INSTANCE';\nexport const CREATE_FORM_INSTANCE = 'TEMPLATE_CREATE_FORM_INSTANCE';\nexport const GET_FORM = 'TEMPLATE_GET_FORM';\nexport const CLEAR_FORM = 'TEMPLATE_CLEAR_FORM_DATA';\nexport const GET_FORMS = 'TEMPLATE_GET_FORMS';\nexport const GET_MY_FORMS = 'TEMPLATE_GET_MY_FORMS';\nexport const GET_FORM_INSTANCE = 'TEMPLATE_GET_FORM_INSTANCE';\n\nexport const createFormTemplate = (template) => ({\n\ttype: CREATE_FORM_TEMPLATE,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`formtemplates`, template).then((data) => {\n\t\t\tresolve(data);\n\t\t});\n\t}),\n});\n\nexport const updateFormTemplate = (template) => ({\n\ttype: UPDATE_FORM_TEMPLATE,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`formtemplates`, template).then((response) => {\n\t\t\tresolve(template);\n\t\t});\n\t}),\n});\n\nexport const getFormTemplates = () => ({\n\ttype: GET_FORM_TEMPLATES,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`formtemplates`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getFormTemplate = (id) => ({\n\ttype: GET_FORM_TEMPLATE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`formtemplates/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearFormTemplate = () => ({\n\ttype: CLEAR_FORM_TEMPLATE,\n\tpayload: true,\n});\n\nexport const createForm = (form) => ({\n\ttype: CREATE_FORM_INSTANCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`forms`, form).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateForm = (form) => ({\n\ttype: UPDATE_FORM,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`forms`, form).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getForm = (id) => ({\n\ttype: GET_FORM,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`forms/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearForm = () => ({\n\ttype: CLEAR_FORM,\n\tpayload: true,\n});\n\nexport const getForms = (creator = false) => ({\n\ttype: GET_FORMS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`forms?creator=${creator}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMyForms = () => ({\n\ttype: GET_MY_FORMS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`forms?creator=true`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateFormInstance = (instance) => ({\n\ttype: UPDATE_FORM_INSTANCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put(`forms/instance`, instance).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error);\n\t\t});\n\t}),\n});\n\nexport const getFormInstance = (id) => ({\n\ttype: GET_FORM_INSTANCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`forms/instance/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n","import {\n\tGET_FORM_TEMPLATES,\n\tGET_FORM_TEMPLATE,\n\tGET_MY_FORMS,\n\tUPDATE_FORM_TEMPLATE,\n\tCLEAR_FORM_TEMPLATE,\n\tGET_FORM,\n\tGET_FORMS,\n\tGET_FORM_INSTANCE,\n\tCLEAR_FORM,\n\tCREATE_FORM_INSTANCE\n} from 'actions/templates';\n\nconst INITIAL_STATE = {\n\ttemplates: null,\n\tformTemplate: null,\n\tform: null,\n\tforms: null,\n\tinstance: null,\n\tcreatedForm: 0\n}\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_FORM_TEMPLATES:\n\t\t\treturn { ...state, templates: action.payload };\n\n\t\tcase GET_FORM_TEMPLATE:\n\t\t\treturn { ...state, formTemplate: action.payload };\n\n\t\tcase UPDATE_FORM_TEMPLATE:\n\t\t\treturn { ...state, formTemplate: action.payload };\n\n\t\tcase CLEAR_FORM_TEMPLATE:\n\t\t\treturn { ...state, formTemplate: INITIAL_STATE.formTemplate };\n\n\t\tcase GET_FORM:\n\t\t\treturn { ...state, form: action.payload };\n\n\t\tcase CLEAR_FORM:\n\t\t\treturn { ...state, form: INITIAL_STATE.form, formTemplate: INITIAL_STATE.formTemplate };\n\n\t\tcase GET_FORMS:\n\t\t\treturn { ...state, forms: action.payload };\n\n\t\tcase GET_FORM_INSTANCE:\n\t\t\treturn { ...state, instance: action.payload };\n\n\t\tcase GET_MY_FORMS:\n\t\t\treturn { ...state, myForms: action.payload };\n\n\t\tcase CREATE_FORM_INSTANCE:\n\t\t\treturn { ...state, createdForm: action.payload.id, instance: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n\n","import api from 'lib/api';\nimport { CLEAR_SCHEDULE_FROM_STORE } from './schedule';\n\nexport const GET_CURRENT_MEETINGS = 'MEETINGS_GET_MEETINGS';\nexport const GET_PAST_MEETINGS = 'MEETINGS_GET_PAST_MEETINGS';\nexport const GET_USER_MEETINGS = 'MEETINGS_GET_USER_MEETINGS';\nexport const GET_MEETING = 'MEETINGS_GET_SINGLE_MEETING';\nexport const CREATE_MEETING = 'MEETINGS_CREATE_MEETING';\n\nexport const GET_MEETING_INSTANCE = 'GET_MEETING_INSTANCE';\nexport const MEETING_INSTANCE_UPDATE = 'MEETING_INSTANCE_UPDATE';\nexport const MEETING_ADD_INSTANCES = 'MEETING_ADD_INSTANCES';\nexport const MEETING_MEETING_UPDATE = 'MEETING_MEETING_UPDATE';\nexport const ADD_MEETING_INSTANCE_RELATIONSHIP = 'MEETING_ADD_INSTANCE_RELATIONSHIP';\nexport const DELETE_MEETING_INSTANCE_RELATIONSHIP = 'DELETE_MEETING_INSTANCE_RELATIONSHIP';\nexport const MEETING_INSTANCE_UPDATE_DATE = 'MEETING_INSTANCE_UPDATE_DATE';\nexport const CREATE_MEETING_FORM_INSTANCE = 'CREATE_MEETING_FORM_INSTANCE';\nexport const MEETING_INSTANCE_SEND_REMINDER = 'MEETING_INSTANCE_SEND_REMINDER';\nexport const DELETE_MEETING_RELATIONSHIP = 'DELETE_MEETING_RELATIONSHIP';\nexport const CLEAR_MEETING = 'CLEAR_MEETING';\nexport const SAVE_WIZARD_MEETING = 'MEETINGS_SAVE_WIZARD_MEETING';\nexport const CLEAR_WIZARD_MEETING = 'MEETINGS_CLEAR_WIZARD_MEETING';\nexport const DELETE_MEETING_INSTANCE_PARTICIPANT = 'MEETINGS_DELETE_MEETING_INSTANCE_PARTICIPANT';\nexport const DELETE_MEETING = 'MEETINGS_DELETE_MEETING';\nexport const DELETE_MEETING_INSTANCE = 'MEETINGS_DELETE_MEETING_INSTANCE';\n\n\nexport const createMeeting = (meeting) => {\n\treturn async (dispatch) => {\n\t\tconst response = await api.post('meetings', meeting);\n\t\tdispatch({ type: CREATE_MEETING, payload: response.data });\n\t\tdispatch({ type: CLEAR_SCHEDULE_FROM_STORE });\n\t};\n};\n\nexport const getCurrentMeetings = () => ({\n\ttype: GET_CURRENT_MEETINGS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`meetings?filter=active`).then(response => {\n\t\t\tresolve(response.data ?? []);\n\t\t});\n\t}),\n});\n\nexport const getPastMeetings = () => ({\n\ttype: GET_PAST_MEETINGS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`meetings?filter=inactive`).then((response) => {\n\t\t\tresolve(response.data ?? []);\n\t\t});\n\t}),\n});\n\nexport const getUserMeetings = (user, start, end) => ({\n\ttype: GET_USER_MEETINGS,\n\tpayload: new Promise(resolve => {\n\t\tlet url = `meetings?studentId=${user}&start=${start}`;\n\t\tif (end != null) {\n\t\t\turl += `&end=${end}`;\n\t\t}\n\n\t\tapi.get(url).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMeeting = (id) => ({\n\ttype: GET_MEETING,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`meetings/${id}`).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMeetingInstance = (id, instanceId) => ({\n\ttype: GET_MEETING_INSTANCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`meetings/${id}/instance/${instanceId}`).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateMeetingInstance = (instance) => ({\n\ttype: MEETING_INSTANCE_UPDATE,\n\tpayload: new Promise(resolve => {\n\t\tapi.put('meetings/instance', instance).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateMeetingInstanceDate = (instance, onError) => ({\n\ttype: MEETING_INSTANCE_UPDATE_DATE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put('meetings/instance/date', instance).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t\t\t.catch((reason) => {\n\t\t\t\tif (onError != null) {\n\t\t\t\t\tonError(reason);\n\t\t\t\t}\n\t\t\t});\n\t}),\n});\n\nexport const updateMeeting = (values) => {\n\treturn async (dispatch) => {\n\t\tawait api.put('meetings', values);\n\t\tconst response = await api.get(`meetings/${values.id}`);\n\t\tdispatch({ type: GET_MEETING, payload: response.data });\n\t\tdispatch({ type: CLEAR_SCHEDULE_FROM_STORE });\n\t};\n};\n\nexport const addMeetingInstances = (id, instances) => ({\n\ttype: MEETING_ADD_INSTANCES,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`meetings/${id}/instances`, instances).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t})\n});\n\nexport const sendMeetingInstanceTimeBookingReminder = (id, instanceId) => ({\n\ttype: MEETING_INSTANCE_SEND_REMINDER,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`meetings/${id}/instance/${instanceId}/reminder`, {}).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t})\n});\n\n\nexport const createMeetingInstanceRelationship = (meeting, instance, relation) => ({\n\ttype: ADD_MEETING_INSTANCE_RELATIONSHIP,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`meetings/${meeting}/instance/${instance}/relationships`, relation).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteMeetingInstanceRelationship = (meetingId, instanceId, relationshipId) => ({\n\ttype: DELETE_MEETING_INSTANCE_RELATIONSHIP,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`meetings/${meetingId}/instance/${instanceId}/relationship/${relationshipId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteMeetingRelationship = (meetingId, relationshipId) => ({\n\ttype: DELETE_MEETING_RELATIONSHIP,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`meetings/${meetingId}/relationship/${relationshipId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteMeetingInstanceParticipant = (meetingId, instanceId, participantId) => ({\n\ttype: DELETE_MEETING_INSTANCE_PARTICIPANT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`meetings/${meetingId}/instance/${instanceId}/participant/${participantId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteMeeting = (meetingId) => ({\n\ttype: DELETE_MEETING,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`meetings/${meetingId}`).then((response) => {\n\t\t\tif (response.status == 200) {\n\t\t\t\tresolve(meetingId);\n\t\t\t} else {\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t})\n\t})\n});\n\nexport const deleteMeetingInstance = (meetingId, instanceId) => ({\n\ttype: DELETE_MEETING_INSTANCE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`meetings/${meetingId}/instance/${instanceId}`).then((response) => {\n\t\t\tif (response.status == 200) {\n\t\t\t\tresolve(instanceId);\n\t\t\t} else {\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t})\n\t})\n});\n\nexport const createMeetingFormInstance = (meetingId, instanceId, instance) => ({\n\ttype: CREATE_MEETING_FORM_INSTANCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`meetings/${meetingId}/instance/${instanceId}/formInstance`, instance).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const clearMeeting = () => ({\n\ttype: CLEAR_MEETING,\n\tpayload: null\n});\n\nexport const saveWizardMeeting = (meeting) => ({\n\ttype: SAVE_WIZARD_MEETING,\n\tpayload: meeting,\n});\n\nexport const clearWizardMeeting = () => ({\n\ttype: CLEAR_WIZARD_MEETING,\n\tpayload: true,\n});\n","import {\n\tGET_CURRENT_MEETINGS,\n\tGET_PAST_MEETINGS,\n\tGET_MEETING,\n\tGET_MEETING_INSTANCE,\n\tCREATE_MEETING,\n\tMEETING_INSTANCE_UPDATE_DATE,\n\tGET_USER_MEETINGS,\n\tMEETING_INSTANCE_UPDATE,\n\tCLEAR_MEETING,\n\tSAVE_WIZARD_MEETING,\n\tCLEAR_WIZARD_MEETING,\n\tDELETE_MEETING,\n\tDELETE_MEETING_INSTANCE,\n} from 'actions/meetings';\n\nconst INITIAL_STATE = {\n\tcurrent: [],\n\tpast: [],\n\tuser: [],\n\tmeetingsByCreator: [],\n\tmeeting: null,\n\tmeetingInstance: null,\n\tcreatedId: 0,\n\twizardMeeting: null,\n\tdeletedMeeting: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tlet meeting = { ...state.meeting };\n\n\tswitch (action.type) {\n\t\tcase GET_CURRENT_MEETINGS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn { ...state, current: action.payload.filter((m) => m.id != state.deletedMeeting) };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_PAST_MEETINGS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn { ...state, past: action.payload.filter((m) => m.id != state.deletedMeeting) };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_USER_MEETINGS:\n\t\t\treturn { ...state, user: action.payload };\n\n\t\tcase GET_MEETING:\n\t\t\treturn { ...state, meeting: action.payload };\n\n\t\tcase GET_MEETING_INSTANCE:\n\t\t\treturn { ...state, meetingInstance: action.payload };\n\n\t\tcase CREATE_MEETING:\n\t\t\treturn { ...state, meeting: action.payload };\n\n\t\tcase CLEAR_MEETING:\n\t\t\treturn { ...state, meeting: null };\n\n\t\tcase SAVE_WIZARD_MEETING:\n\t\t\treturn { ...state, wizardMeeting: action.payload };\n\n\t\tcase CLEAR_WIZARD_MEETING:\n\t\t\treturn { ...state, wizardMeeting: INITIAL_STATE.wizardMeeting };\n\n\t\tcase DELETE_MEETING:\n\t\t\tif (!action.payload) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tcurrent: [...state.current].filter(m =>\n\t\t\t\t\tm.id != action.payload\n\t\t\t\t),\n\t\t\t\tdeletedMeeting: action.payload,\n\t\t\t};\n\n\t\tcase DELETE_MEETING_INSTANCE:\n\t\t\tif (!action.payload) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tmeeting.instances = meeting.instances.filter(i =>\n\t\t\t\ti.id != action.payload\n\t\t\t);\n\n\t\t\treturn { ...state, meeting };\n\n\t\tcase MEETING_INSTANCE_UPDATE:\n\t\t\treturn state;\n\n\t\tcase MEETING_INSTANCE_UPDATE_DATE:\n\t\t\tmeeting.instances = [...meeting.instances.filter(t => t.id != action.payload.id), action.payload];\n\t\t\treturn { ...state, meeting, meetingInstance: action.payload }\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import api from 'lib/api';\n\nexport const CREATE_NOTE = 'NOTES_CREATE_NEW_NOTE';\nexport const UPDATE_NOTE = 'NOTES_UPDATE_NOTE';\nexport const SET_ACTIVE_NOTE = 'NOTES_SET_ACTIVE_NOTE';\nexport const RESET_ACTIVE_NOTE = 'NOTES_RESET_ACTIVE_NOTE';\nexport const GET_NOTES_BY_REFERENCE = 'NOTES_GET_NOTES_BY_REFERENCE';\nexport const GET_MENTOR_NOTES_BY_REFERENCE = 'GET_MENTOR_NOTES_BY_REFERENCE';\nexport const REMOVE_NOTE_BY_ID = 'NOTES_REMOVE_NOTE_BY_ID';\n\nexport const createNote = (note) => ({\n\ttype: CREATE_NOTE,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`notes`, note).then((response) => {\n\t\t\tlet newNote = {\n\t\t\t\tid: response.data,\n\t\t\t\t...note,\n\t\t\t}\n\n\t\t\tresolve(newNote);\n\t\t});\n\t}),\n});\n\nexport const updateNote = (note) => ({\n\ttype: UPDATE_NOTE,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`notes`, note).then((data) => {\n\t\t\tresolve(data);\n\t\t});\n\t}),\n});\n\nexport const setActiveNote = (note) => ({\n\ttype: SET_ACTIVE_NOTE,\n\tpayload: note,\n});\n\nexport const resetActiveNote = () => ({\n\ttype: RESET_ACTIVE_NOTE,\n\tpayload: true,\n});\n\nexport const getNotesByReference = (id, type) => ({\n\ttype: GET_NOTES_BY_REFERENCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`notes/reference/${id}/type/${type}`).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getMentorNotesByReference = (id, type) => ({\n\ttype: GET_MENTOR_NOTES_BY_REFERENCE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`notes/reference/${id}/type/${type}`).then(response => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const removeNote = (id) => ({\n\ttype: REMOVE_NOTE_BY_ID,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`notes/${id}`).then((response) => {\n\t\t\tresolve(id);\n\t\t});\n\t}),\n});\n","import {\n\tCREATE_NOTE,\n\tGET_NOTES_BY_REFERENCE,\n\tGET_MENTOR_NOTES_BY_REFERENCE,\n\tRESET_ACTIVE_NOTE,\n\tSET_ACTIVE_NOTE,\n\tREMOVE_NOTE_BY_ID,\n} from 'actions/notes';\n\nconst INITIAL_STATE = {\n\tnotes: [],\n\tmentorNotes: [],\n\tactive: null,\n\tnew: null,\n};\n\nfunction removeNote(state = [], id) {\n\tif (id == null) {\n\t\treturn state;\n\t}\n\n\tlet newState = [...state];\n\tnewState = newState.filter(note => {\n\t\treturn note.id != id;\n\t});\n\n\treturn newState;\n}\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_NOTES_BY_REFERENCE:\n\t\t\treturn { ...state, notes: action.payload };\n\n\t\tcase GET_MENTOR_NOTES_BY_REFERENCE:\n\t\t\treturn { ...state, mentorNotes: action.payload };\n\n\t\tcase SET_ACTIVE_NOTE:\n\t\t\treturn { ...state, active: action.payload };\n\n\t\tcase RESET_ACTIVE_NOTE:\n\t\t\treturn { ...state, active: INITIAL_STATE.active };\n\n\t\tcase CREATE_NOTE:\n\t\t\treturn { ...state, new: action.payload };\n\n\t\tcase REMOVE_NOTE_BY_ID:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tmentorNotes: removeNote(state.mentorNotes, action.payload),\n\t\t\t\tnotes: removeNote(state.notes, action.payload)\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import api from 'lib/api';\n\nexport const GET_MENU_ITEMS = 'MENU_GET_MENU_ITEMS';\n\nexport const getMenuItems = () => ({\n\ttype: GET_MENU_ITEMS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`navigation`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n","import { isSupported, setMenuItems, getMenuItems } from 'helpers/localstorage';\nimport {\n\tGET_MENU_ITEMS,\n} from 'actions/menu';\n\nlet rehydrate_items = null;\n\nif (isSupported(() => localStorage)) {\n\trehydrate_items = getMenuItems();\n}\n\nconst INITIAL_STATE = {\n\titems: rehydrate_items,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\n\tswitch (action.type) {\n\t\tcase GET_MENU_ITEMS:\n\t\t\tif (action.payload != null) {\n\t\t\t\tsetMenuItems(action.payload);\n\t\t\t}\n\n\t\t\treturn { ...state, items: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n\n}\n","import api from 'lib/api';\n\nexport const GET_ADDITIONAL_ADJUSTMENTS = 'ADDITIONAL_ADJUSTMENTS_GET_ADJUSTMENTS';\nexport const GET_STUDENT_ADJUSTMENTS = 'ADDITIONAL_ADJUSTMENTS_GET_STUDENT_ADJUSTMENTS';\nexport const CREATE_STUDENT_ADJUSTMENT = 'ADDITIONAL_ADJUSTMENTS_CREATE_STUDENT_ADJUSTMENT';\nexport const UPDATE_STUDENT_ADJUSTMENT = 'ADDITIONAL_ADJUSTMENTS_UPDATE_STUDENT_ADJUSTMENT';\nexport const ADD_ADJUSTMENT_COMMENT = 'ADDITIONAL_ADJUSTMENTS_ADD_ADJUSTMENT_COMMENT';\nexport const GET_SCHOOL_ADJUSTMENTS = 'GET_SCHOOL_ADJUSTMENTS';\nexport const GET_GROUP_ADJUSTMENTS = 'ADDITIONAL_ADJUSTMENTS_GET_GROUP_ADJUSTMENTS';\nexport const GET_GROUP_ADJUSTMENTS_MULTIPLE = 'ADDITIONAL_ADJUSTMENTS_GET_GROUP_ADJUSTMENTS_MULTIPLE';\nexport const GET_STUDENT_ADJUSTMENTS_BY_COURSE = 'GET_STUDENT_ADJUSTMENTS_BY_COURSE';\nexport const GET_STUDENT_ADJUSTMENTS_BY_SUBJECT = 'GET_STUDENT_ADJUSTMENTS_BY_SUBJECT';\n\nexport const CREATE_ADDITIONAL_ADJUSTMENT = 'CREATE_ADDITIONAL_ADJUSTMENT';\nexport const SWITCH_ACTIVE_ADDITIONAL_ADJUSTMENT = 'SWITCH_ACTIVE_ADDITIONAL_ADJUSTMENT';\nexport const UPDATE_ADDITIONAL_ADJUSTMENT = 'UPDATE_ADDITIONAL_ADJUSTMENT';\nexport const UPDATE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT = 'UPDATE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT';\n\nexport const DELETE_ADDITIONAL_ADJUSTMENT = 'ADDITIONAL_ADJUSTMENTS_DELETE_ADDITIONAL_ADJUSTMENT';\nexport const DELETE_STUDENT_ADDITIONAL_ADJUSTMENT = 'ADDITIONAL_ADJUSTMENTS_DELETE_STUDENT_ADDITIONAL_ADJUSTMENT';\nexport const DELETE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT = 'DELETE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT';\n\n\nexport const getAdditionalAdjustments = () => ({\n\ttype: GET_ADDITIONAL_ADJUSTMENTS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get('AdditionalAdjustments').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getStudentAdjustments = (student, start, end) => ({\n\ttype: GET_STUDENT_ADJUSTMENTS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`StudentAdditionalAdjustments?studentId=${student}&start=${start}&end=${end}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getStudentAdjustmentsByCourse = (student, courseId) => ({\n\ttype: GET_STUDENT_ADJUSTMENTS_BY_COURSE,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`StudentAdditionalAdjustments?studentId=${student}&courseId=${courseId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getStudentAdjustmentsBySubject = (groupId, subjectId, studentId) => ({\n\ttype: GET_STUDENT_ADJUSTMENTS_BY_SUBJECT,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`sections/${groupId}/subjects/${subjectId}/studentAdditionalAdjustments?userId=${studentId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t})\n});\n\nexport const createStudentAdjustment = (values) => ({\n\ttype: CREATE_STUDENT_ADJUSTMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.post('StudentAdditionalAdjustments', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateStudentAdjustment = (values) => ({\n\ttype: UPDATE_STUDENT_ADJUSTMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.put('StudentAdditionalAdjustments', values).then((response) => {\n\t\t\tresolve({\n\t\t\t\toldId: values.id,\n\t\t\t\t...response.data\n\t\t\t});\n\t\t});\n\t}),\n});\n\nexport const addComment = (values, studentAdjustment) => ({\n\ttype: ADD_ADJUSTMENT_COMMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`StudentAdditionalAdjustments/${studentAdjustment}/comments`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const getSchoolAdjustments = () => ({\n\ttype: GET_SCHOOL_ADJUSTMENTS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get('StudentAdditionalAdjustments').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createAdditionalAdjustment = (values) => ({\n\ttype: CREATE_ADDITIONAL_ADJUSTMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.post('AdditionalAdjustments', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const switchActiveAdjustment = (values) => ({\n\ttype: SWITCH_ACTIVE_ADDITIONAL_ADJUSTMENT,\n\tpayload: new Promise(resolve => {\n\t\tvalues.items = [];\n\n\t\tapi.put('AdditionalAdjustments/Disable', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateAdditionalAdjustment = (values) => ({\n\ttype: UPDATE_ADDITIONAL_ADJUSTMENT,\n\tpayload: new Promise(resolve => {\n\t\tvalues.items = [];\n\n\t\tapi.put('AdditionalAdjustments', values).then((response) => {\n\t\t\tresolve({ oldId: values.id, ...response.data });\n\t\t})\n\t}),\n});\n\nexport const deleteStudentAdjustment = (adjustment) => ({\n\ttype: DELETE_STUDENT_ADDITIONAL_ADJUSTMENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`StudentAdditionalAdjustments/${adjustment.id}`).then((response) => {\n\t\t\tresolve(adjustment.id);\n\t\t})\n\t})\n});\n\nexport const deleteStudentAdditionalAdjustmentComment = (comment) => ({\n\ttype: DELETE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`StudentAdditionalAdjustments/${comment.studentAdjustmentID}/comments/${comment.id}`).then((response) => {\n\t\t\tif (response.data == true) {\n\t\t\t\tresolve(comment);\n\t\t\t}\n\t\t})\n\t}),\n});\n\nexport const updateStudentAdditionalAdjustmentComment = (values) => ({\n\ttype: UPDATE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`StudentAdditionalAdjustments/${values.studentAdjustmentID}/comments`, values).then((response) => {\n\t\t\tresolve(values);\n\t\t})\n\t})\n})\n\nexport const deleteAdditionalAdjustment = (adjustment) => ({\n\ttype: DELETE_ADDITIONAL_ADJUSTMENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`AdditionalAdjustments/${adjustment.id}`).then((response) => {\n\t\t\tresolve(adjustment.id);\n\t\t})\n\t})\n})","import {\n\tGET_ADDITIONAL_ADJUSTMENTS,\n\tGET_STUDENT_ADJUSTMENTS,\n\tADD_ADJUSTMENT_COMMENT,\n\tGET_SCHOOL_ADJUSTMENTS,\n\tCREATE_ADDITIONAL_ADJUSTMENT,\n\tSWITCH_ACTIVE_ADDITIONAL_ADJUSTMENT,\n\tUPDATE_ADDITIONAL_ADJUSTMENT,\n\tCREATE_STUDENT_ADJUSTMENT,\n\tUPDATE_STUDENT_ADJUSTMENT,\n\tDELETE_ADDITIONAL_ADJUSTMENT,\n\tDELETE_STUDENT_ADDITIONAL_ADJUSTMENT,\n\tDELETE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT,\n\tUPDATE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT,\n\tGET_STUDENT_ADJUSTMENTS_BY_COURSE,\n\tGET_STUDENT_ADJUSTMENTS_BY_SUBJECT,\n} from 'actions/additional_adjustments'\n\nimport {\n\tGET_GROUP_STUDENT_ADJUSTMENTS,\n\tGET_GROUP_STUDENT_ADJUSTMENTS_MULTIPLE,\n} from 'actions/sections'\n\nimport { GET_ASSIGNMENT_STUDENT_ADJUSTMENTS } from 'actions/assignments';\nimport { GET_PLAN_STUDENT_ADDITIONAL_ADJUSTMENTS } from 'actions/plans';\n\nconst INITIAL_STATE = {\n\tadjustments: [],\n\tstudentAdjustments: [],\n\tstudentAdjustmentsByCourse: [],\n\tstudentAdjustmentsBySubject: [],\n\tschoolAdjustments: [],\n\tcreatedAdjustment: null,\n\tassignment: null,\n\tplan: null,\n\tgroupAdjustments: [],\n\tmultipleGroupAdjustments: [],\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tlet studentAdjustments = [...state.studentAdjustments];\n\tlet studentAdjustmentsByCourse = [...state.studentAdjustmentsByCourse];\n\tlet studentAdjustmentsBySubject = [...state.studentAdjustmentsBySubject];\n\tlet schoolAdjustments = [...state.schoolAdjustments];\n\tlet assignmentAdjustments = JSON.parse(JSON.stringify(state.assignment));\n\tlet planAdjustments = JSON.parse(JSON.stringify(state.plan));\n\tlet groupAdjustments = JSON.parse(JSON.stringify(state.groupAdjustments));\n\tlet multipleGroupAdjustments = JSON.parse(JSON.stringify(state.multipleGroupAdjustments));\n\n\tswitch (action.type) {\n\t\tcase GET_ADDITIONAL_ADJUSTMENTS:\n\t\t\treturn { ...state, adjustments: action.payload };\n\n\t\tcase GET_STUDENT_ADJUSTMENTS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn { ...state, studentAdjustments: action.payload };\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_STUDENT_ADJUSTMENTS_BY_COURSE:\n\t\t\treturn { ...state, studentAdjustmentsByCourse: action.payload };\n\n\t\tcase GET_STUDENT_ADJUSTMENTS_BY_SUBJECT:\n\t\t\treturn { ...state, studentAdjustmentsBySubject: action.payload };\n\n\t\tcase ADD_ADJUSTMENT_COMMENT:\n\t\t\tconst foundAdjustment = studentAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundCourseAdjustment = studentAdjustmentsByCourse.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundSubjectAdjustmentComment = studentAdjustmentsBySubject.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundSchoolAdjustmentComment = schoolAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t})\n\n\t\t\tconst foundGroupAdjustmentComment = groupAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t})\n\n\t\t\tlet foundAssignmentAdjustmentComment = -1;\n\t\t\tif (assignmentAdjustments != null) {\n\t\t\t\tfoundAssignmentAdjustmentComment = assignmentAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlet foundPlanAdjustmentComment = -1;\n\t\t\tif (planAdjustments != null) {\n\t\t\t\tfoundPlanAdjustmentComment = planAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (foundAdjustment > -1) {\n\t\t\t\tlet newAdjustment = JSON.parse(JSON.stringify(studentAdjustments[foundAdjustment]));\n\t\t\t\tnewAdjustment.comments.unshift(action.payload);\n\t\t\t\tstudentAdjustments.splice(foundAdjustment, 1, newAdjustment);\n\t\t\t}\n\n\t\t\tif (foundCourseAdjustment > -1) {\n\t\t\t\tlet newCourseAdjustment = JSON.parse(JSON.stringify(studentAdjustmentsByCourse[foundCourseAdjustment]));\n\t\t\t\tnewCourseAdjustment.comments.unshift(action.payload);\n\t\t\t\tstudentAdjustmentsByCourse.splice(foundCourseAdjustment, 1, newCourseAdjustment);\n\t\t\t}\n\n\t\t\tif (foundSubjectAdjustmentComment > -1) {\n\t\t\t\tlet newSchoolAdjustment = JSON.parse(JSON.stringify(studentAdjustmentsBySubject[foundSubjectAdjustmentComment]));\n\t\t\t\tnewSchoolAdjustment.comments.unshift(action.payload);\n\t\t\t\tstudentAdjustmentsBySubject.splice(foundSubjectAdjustmentComment, 1, newSchoolAdjustment);\n\t\t\t}\n\n\t\t\tif (foundSchoolAdjustmentComment > -1) {\n\t\t\t\tlet newSchoolAdjustment = JSON.parse(JSON.stringify(schoolAdjustments[foundSchoolAdjustmentComment]));\n\t\t\t\tnewSchoolAdjustment.comments.unshift(action.payload);\n\t\t\t\tschoolAdjustments.splice(foundSchoolAdjustmentComment, 1, newSchoolAdjustment);\n\t\t\t}\n\n\t\t\tif (foundAssignmentAdjustmentComment > -1) {\n\t\t\t\tlet newAssignmentAdjustment = JSON.parse(JSON.stringify(assignmentAdjustments[foundAssignmentAdjustmentComment]));\n\t\t\t\tnewAssignmentAdjustment.comments.unshift(action.payload);\n\t\t\t\tassignmentAdjustments.splice(foundAssignmentAdjustmentComment, 1, newAssignmentAdjustment);\n\t\t\t}\n\n\t\t\tif (foundPlanAdjustmentComment > -1) {\n\t\t\t\tlet newAssignmentAdjustment = JSON.parse(JSON.stringify(planAdjustments[foundPlanAdjustmentComment]));\n\t\t\t\tnewAssignmentAdjustment.comments.unshift(action.payload);\n\t\t\t\tassignmentAdjustments.splice(foundPlanAdjustmentComment, 1, newAssignmentAdjustment);\n\t\t\t}\n\n\t\t\tif (foundGroupAdjustmentComment > -1) {\n\t\t\t\tlet newGroupAdjustment = JSON.parse(JSON.stringify(groupAdjustments[foundGroupAdjustmentComment]));\n\t\t\t\tnewGroupAdjustment.comments.unshift(action.payload);\n\t\t\t\tgroupAdjustments.splice(foundGroupAdjustmentComment, 1, newGroupAdjustment);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstudentAdjustments: studentAdjustments,\n\t\t\t\tstudentAdjustmentsByCourse: studentAdjustmentsByCourse,\n\t\t\t\tstudentAdjustmentsBySubject: studentAdjustmentsBySubject,\n\t\t\t\tschoolAdjustments: schoolAdjustments,\n\t\t\t\tassignment: assignmentAdjustments,\n\t\t\t\tplan: planAdjustments,\n\t\t\t\tgroupAdjustments: groupAdjustments,\n\t\t\t};\n\n\t\tcase CREATE_STUDENT_ADJUSTMENT:\n\t\t\treturn { ...state, studentAdjustments: [...state.studentAdjustments, action.payload] ,studentAdjustmentsBySubject:[...state.studentAdjustmentsBySubject,action.payload] }\n\n\t\tcase GET_SCHOOL_ADJUSTMENTS:\n\t\t\treturn { ...state, schoolAdjustments: action.payload };\n\n\t\tcase CREATE_ADDITIONAL_ADJUSTMENT:\n\t\t\treturn { ...state, adjustments: [...state.adjustments, action.payload], createdAdjustment: action.payload };\n\n\t\tcase SWITCH_ACTIVE_ADDITIONAL_ADJUSTMENT:\n\t\t\treturn { ...state, adjustments: [...state.adjustments.filter(t => t.id != action.payload.id), action.payload] }\n\n\t\tcase UPDATE_ADDITIONAL_ADJUSTMENT:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tadjustments: [...state.adjustments.filter(t => t.id != action.payload.id), action.payload],\n\t\t\t\t//schoolAdjustments: [...state.schoolAdjustments.filter(t => t.id != action.payload.id), action.payload],\n\t\t\t}\n\n\t\tcase UPDATE_STUDENT_ADJUSTMENT:\n\t\t\tif (assignmentAdjustments != null) {\n\t\t\t\tassignmentAdjustments = [...assignmentAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload]\n\t\t\t}\n\n\t\t\tif (planAdjustments != null) {\n\t\t\t\tplanAdjustments = [...planAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload]\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstudentAdjustments: [...state.studentAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload],\n\t\t\t\tschoolAdjustments: [...state.schoolAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload],\n\t\t\t\tstudentAdjustmentsByCourse: [...studentAdjustmentsByCourse.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload],\n\t\t\t\tstudentAdjustmentsBySubject: [...studentAdjustmentsBySubject.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload],\n\t\t\t\tgroupAdjustments: [...groupAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload],\n\t\t\t\tmultipleGroupAdjustments: [...multipleGroupAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload.oldId;\n\t\t\t\t}), action.payload],\n\t\t\t\tassignment: assignmentAdjustments,\n\t\t\t\tplan: planAdjustments,\n\t\t\t}\n\n\t\tcase DELETE_ADDITIONAL_ADJUSTMENT:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tadjustments: [...state.adjustments.filter(t =>\n\t\t\t\t\tt.id != action.payload\n\t\t\t\t)],\n\t\t\t\tschoolAdjustments: [...state.schoolAdjustments.filter(t => {\n\t\t\t\t\treturn t.id != action.payload;\n\t\t\t\t})],\n\t\t\t}\n\n\t\tcase DELETE_STUDENT_ADDITIONAL_ADJUSTMENT:\n\t\t\tconst foundAdjustmentToBeDeleted = studentAdjustments.findIndex(adj => adj.id == action.payload)\n\t\t\tconst foundAdjustmentToBeDeletedFromSchool = schoolAdjustments.findIndex(adj => adj.id == action.payload)\n\t\t\tconst foundAdjustmentToBeDeletedFromCourse = studentAdjustmentsByCourse.findIndex(adj => adj.id == action.payload)\n\t\t\tconst foundAdjustmentToBeDeletedFromSubject = studentAdjustmentsBySubject.findIndex(adj => adj.id == action.payload)\n\t\t\tlet foundAdjustmentToBeDeletedFromAssignment = -1;\n\t\t\tlet foundAdjustmentToBeDeletedFromPlan = -1;\n\n\t\t\tif (assignmentAdjustments != null) {\n\t\t\t\tfoundAdjustmentToBeDeletedFromAssignment = assignmentAdjustments.findIndex(adj => adj.id == action.payload)\n\t\t\t}\n\n\t\t\tif (planAdjustments != null) {\n\t\t\t\tfoundAdjustmentToBeDeletedFromPlan = planAdjustments.findIndex(adj => adj.id == action.payload)\n\t\t\t}\n\n\t\t\tif (foundAdjustmentToBeDeleted > -1) {\n\t\t\t\tif (studentAdjustments[foundAdjustmentToBeDeleted].status == 'DELETED') {\n\t\t\t\t\tstudentAdjustments.splice(foundAdjustmentToBeDeleted, 1);\n\t\t\t\t} else {\n\t\t\t\t\tlet newAdjustment = { ...studentAdjustments[foundAdjustmentToBeDeleted] };\n\t\t\t\t\tnewAdjustment.status = 'DELETED';\n\t\t\t\t\tstudentAdjustments.splice(foundAdjustmentToBeDeleted, 1, newAdjustment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (foundAdjustmentToBeDeletedFromSchool > -1) {\n\t\t\t\tif (schoolAdjustments[foundAdjustmentToBeDeletedFromSchool].status == 'DELETED') {\n\t\t\t\t\tschoolAdjustments.splice(foundAdjustmentToBeDeletedFromSchool, 1);\n\t\t\t\t} else {\n\t\t\t\t\tlet newAdjustment = { ...studentAdjustments[foundAdjustmentToBeDeletedFromSchool] };\n\t\t\t\t\tnewAdjustment.status = 'DELETED';\n\t\t\t\t\tschoolAdjustments.splice(foundAdjustmentToBeDeletedFromSchool, 1, newAdjustment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (foundAdjustmentToBeDeletedFromCourse > -1) {\n\t\t\t\tif (studentAdjustmentsByCourse[foundAdjustmentToBeDeletedFromCourse].status == 'DELETED') {\n\t\t\t\t\tstudentAdjustmentsByCourse.splice(foundAdjustmentToBeDeletedFromCourse, 1);\n\t\t\t\t} else {\n\t\t\t\t\tlet newAdjustment = { ...studentAdjustmentsByCourse[foundAdjustmentToBeDeletedFromCourse] };\n\t\t\t\t\tnewAdjustment.status = 'DELETED';\n\t\t\t\t\tstudentAdjustmentsByCourse.splice(foundAdjustmentToBeDeletedFromCourse, 1, newAdjustment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (foundAdjustmentToBeDeletedFromSubject > -1) {\n\t\t\t\tif (studentAdjustmentsBySubject[foundAdjustmentToBeDeletedFromSubject].status == 'DELETED') {\n\t\t\t\t\tstudentAdjustmentsBySubject.splice(foundAdjustmentToBeDeletedFromSubject, 1);\n\t\t\t\t} else {\n\t\t\t\t\tlet newAdjustment = { ...studentAdjustmentsBySubject[foundAdjustmentToBeDeletedFromSubject] };\n\t\t\t\t\tnewAdjustment.status = 'DELETED';\n\t\t\t\t\tstudentAdjustmentsBySubject.splice(foundAdjustmentToBeDeletedFromSubject, 1, newAdjustment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (foundAdjustmentToBeDeletedFromAssignment > -1) {\n\t\t\t\tif (assignmentAdjustments[foundAdjustmentToBeDeletedFromAssignment].status == 'DELETED') {\n\t\t\t\t\tassignmentAdjustments.splice(foundAdjustmentToBeDeletedFromAssignment, 1);\n\t\t\t\t} else {\n\t\t\t\t\tlet newAdjustment = { ...assignmentAdjustments[foundAdjustmentToBeDeletedFromAssignment] };\n\t\t\t\t\tnewAdjustment.status = 'DELETED';\n\t\t\t\t\tassignmentAdjustments.splice(foundAdjustmentToBeDeletedFromAssignment, 1, newAdjustment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (foundAdjustmentToBeDeletedFromPlan > -1) {\n\t\t\t\tif (planAdjustments[foundAdjustmentToBeDeletedFromPlan].status == 'DELETED') {\n\t\t\t\t\tplanAdjustments.splice(foundAdjustmentToBeDeletedFromPlan, 1);\n\t\t\t\t} else {\n\t\t\t\t\tlet newAdjustment = { ...planAdjustments[foundAdjustmentToBeDeletedFromPlan] };\n\t\t\t\t\tnewAdjustment.status = 'DELETED';\n\t\t\t\t\tassignmentAdjustments.splice(foundAdjustmentToBeDeletedFromPlan, 1, newAdjustment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstudentAdjustments: studentAdjustments,\n\t\t\t\tschoolAdjustments: schoolAdjustments,\n\t\t\t\tstudentAdjustmentsByCourse: studentAdjustmentsByCourse,\n\t\t\t\tstudentAdjustmentsBySubject: studentAdjustmentsBySubject,\n\t\t\t\tassignment: assignmentAdjustments,\n\t\t\t\tplan: planAdjustments,\n\t\t\t};\n\n\t\tcase DELETE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT:\n\t\t\tconst studentAdjustment = studentAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundCourseAdjustmentComment = studentAdjustmentsByCourse.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundSubjectAdjustmentCommentDelete = studentAdjustmentsBySubject.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundSchoolAdjustmentCommentDelete = schoolAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tlet foundAssignmentAdjustmentCommentDelete = -1;\n\t\t\tif (assignmentAdjustments != null) {\n\t\t\t\tfoundAssignmentAdjustmentCommentDelete = assignmentAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet foundPlanAdjustmentCommentDelete = -1;\n\t\t\tif (planAdjustments != null) {\n\t\t\t\tfoundPlanAdjustmentCommentDelete = planAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet foundGroupAdjustmentCommentDelete = -1;\n\t\t\tif (groupAdjustments != null) {\n\t\t\t\tfoundGroupAdjustmentCommentDelete = groupAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (action.payload.status == 'DELETED') {\n\t\t\t\tif (studentAdjustment > -1) {\n\t\t\t\t\tlet newAdjustment = { ...studentAdjustments[studentAdjustment] };\n\t\t\t\t\tnewAdjustment.comments = newAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tstudentAdjustments.splice(studentAdjustment, 1, newAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundCourseAdjustmentComment > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...studentAdjustmentsByCourse[foundCourseAdjustmentComment] };\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tstudentAdjustmentsByCourse.splice(foundCourseAdjustmentComment, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundSchoolAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...schoolAdjustments[foundSchoolAdjustmentCommentDelete] };\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tschoolAdjustments.splice(foundSchoolAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundSubjectAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...studentAdjustmentsBySubject[foundSubjectAdjustmentCommentDelete] };\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tstudentAdjustmentsBySubject.splice(foundSubjectAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundSchoolAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...schoolAdjustments[foundSchoolAdjustmentCommentDelete] };\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tschoolAdjustments.splice(foundSchoolAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundAssignmentAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...assignmentAdjustments[foundAssignmentAdjustmentCommentDelete] };\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tassignmentAdjustments.splice(foundAssignmentAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundPlanAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...planAdjustments[foundPlanAdjustmentCommentDelete] };\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tplanAdjustments.splice(foundPlanAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundGroupAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newGroupAdjustment = { ...groupAdjustments[foundGroupAdjustmentCommentDelete] };\n\t\t\t\t\tnewGroupAdjustment.comments = newGroupAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tgroupAdjustments.splice(foundGroupAdjustmentCommentDelete, 1, newGroupAdjustment);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tstudentAdjustments: studentAdjustments,\n\t\t\t\t\tstudentAdjustmentsByCourse: studentAdjustmentsByCourse,\n\t\t\t\t\tstudentAdjustmentsBySubject: studentAdjustmentsBySubject,\n\t\t\t\t\tschoolAdjustments: schoolAdjustments,\n\t\t\t\t\tassignment: assignmentAdjustments,\n\t\t\t\t\tplan: planAdjustments,\n\t\t\t\t\tgroupAdjustments: groupAdjustments,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tif (studentAdjustment > -1) {\n\t\t\t\t\tlet newAdjustment = { ...studentAdjustments[studentAdjustment] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewAdjustment.comments = newAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewAdjustment.comments.push(newComment);\n\n\t\t\t\t\tstudentAdjustments.splice(studentAdjustment, 1, newAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundCourseAdjustmentComment > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...studentAdjustmentsByCourse[foundCourseAdjustmentComment] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewCourseAdjustment.comments.push(newComment);\n\n\t\t\t\t\tstudentAdjustmentsByCourse.splice(foundCourseAdjustmentComment, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundSchoolAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...schoolAdjustments[foundSchoolAdjustmentCommentDelete] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewCourseAdjustment.comments.push(newComment);\n\n\t\t\t\t\tschoolAdjustments.splice(foundSchoolAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundSubjectAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...studentAdjustmentsBySubject[foundSubjectAdjustmentCommentDelete] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewCourseAdjustment.comments.push(newComment);\n\n\t\t\t\t\tstudentAdjustmentsBySubject.splice(foundSubjectAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundAssignmentAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...assignmentAdjustments[foundAssignmentAdjustmentCommentDelete] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewCourseAdjustment.comments.push(newComment);\n\n\t\t\t\t\tassignmentAdjustments.splice(foundAssignmentAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundPlanAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...planAdjustments[foundPlanAdjustmentCommentDelete] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewCourseAdjustment.comments.push(newComment);\n\n\t\t\t\t\tplanAdjustments.splice(foundPlanAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\tif (foundGroupAdjustmentCommentDelete > -1) {\n\t\t\t\t\tlet newCourseAdjustment = { ...groupAdjustments[foundGroupAdjustmentCommentDelete] };\n\t\t\t\t\tlet newComment = { ...action.payload };\n\t\t\t\t\tnewComment.status = 'DELETED';\n\n\t\t\t\t\tnewCourseAdjustment.comments = newCourseAdjustment.comments.filter(t => t.id != action.payload.id);\n\t\t\t\t\tnewCourseAdjustment.comments.push(newComment);\n\n\t\t\t\t\tgroupAdjustments.splice(foundGroupAdjustmentCommentDelete, 1, newCourseAdjustment);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tstudentAdjustments: studentAdjustments,\n\t\t\t\t\tstudentAdjustmentsByCourse: studentAdjustmentsByCourse,\n\t\t\t\t\tstudentAdjustmentsBySubject: studentAdjustmentsBySubject,\n\t\t\t\t\tschoolAdjustments: schoolAdjustments,\n\t\t\t\t\tassignment: assignmentAdjustments,\n\t\t\t\t\tplan: planAdjustments,\n\t\t\t\t\tgroupAdjustments: groupAdjustments,\n\t\t\t\t};\n\t\t\t}\n\n\t\tcase UPDATE_STUDENT_ADDITIONAL_ADJUSTMENT_COMMENT:\n\t\t\tconst studentAdjustmentObject = studentAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundCourseAdjustmentCommentObject = studentAdjustmentsByCourse.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundSubjectAdjustmentCommentUpdate = studentAdjustmentsBySubject.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundSchoolAdjustmentCommentUpdate = schoolAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tconst foundGroupAdjustmentCommentUpdate = groupAdjustments.findIndex(adj => {\n\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t});\n\n\t\t\tlet foundAssignmentAdjustmentCommentUpdate = -1;\n\t\t\tif (assignmentAdjustments != null) {\n\t\t\t\tfoundAssignmentAdjustmentCommentUpdate = assignmentAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet foundPlanAdjustmentCommentUpdate = -1;\n\t\t\tif (planAdjustments != null) {\n\t\t\t\tfoundPlanAdjustmentCommentUpdate = planAdjustments.findIndex(adj => {\n\t\t\t\t\treturn adj.id == action.payload.studentAdjustmentID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (studentAdjustmentObject > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...studentAdjustments[studentAdjustmentObject] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tstudentAdjustments.splice(studentAdjustmentObject, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\tif (foundCourseAdjustmentCommentObject > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...studentAdjustmentsByCourse[foundCourseAdjustmentCommentObject] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tstudentAdjustmentsByCourse.splice(foundCourseAdjustmentCommentObject, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\tif (foundSubjectAdjustmentCommentUpdate > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...studentAdjustmentsBySubject[foundSubjectAdjustmentCommentUpdate] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tstudentAdjustmentsBySubject.splice(foundSubjectAdjustmentCommentUpdate, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\tif (foundSchoolAdjustmentCommentUpdate > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...schoolAdjustments[foundSchoolAdjustmentCommentUpdate] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tschoolAdjustments.splice(foundSchoolAdjustmentCommentUpdate, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\tif (foundAssignmentAdjustmentCommentUpdate > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...assignmentAdjustments[foundAssignmentAdjustmentCommentUpdate] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tassignmentAdjustments.splice(foundAssignmentAdjustmentCommentUpdate, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\tif (foundPlanAdjustmentCommentUpdate > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...planAdjustments[foundPlanAdjustmentCommentUpdate] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tplanAdjustments.splice(foundPlanAdjustmentCommentUpdate, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\tif (foundGroupAdjustmentCommentUpdate > -1) {\n\t\t\t\tlet newAdjustmentTwo = { ...groupAdjustments[foundGroupAdjustmentCommentUpdate] };\n\n\t\t\t\tnewAdjustmentTwo.comments = newAdjustmentTwo.comments.filter(t => t.id != action.payload.id);\n\t\t\t\tnewAdjustmentTwo.comments.push(action.payload);\n\n\t\t\t\tgroupAdjustments.splice(foundGroupAdjustmentCommentUpdate, 1, newAdjustmentTwo);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstudentAdjustments: studentAdjustments,\n\t\t\t\tstudentAdjustmentsByCourse: studentAdjustmentsByCourse,\n\t\t\t\tstudentAdjustmentsBySubject: studentAdjustmentsBySubject,\n\t\t\t\tschoolAdjustments: schoolAdjustments,\n\t\t\t\tassignment: assignmentAdjustments,\n\t\t\t\tplan: planAdjustments,\n\t\t\t\tgroupAdjustments: groupAdjustments,\n\t\t\t};\n\n\t\tcase GET_ASSIGNMENT_STUDENT_ADJUSTMENTS:\n\t\t\treturn { ...state, assignment: action.payload };\n\n\t\tcase GET_PLAN_STUDENT_ADDITIONAL_ADJUSTMENTS:\n\t\t\treturn { ...state, plan: action.payload };\n\n\t\tcase GET_GROUP_STUDENT_ADJUSTMENTS:\n\t\t\treturn { ...state, groupAdjustments: action.payload };\n\n\t\tcase GET_GROUP_STUDENT_ADJUSTMENTS_MULTIPLE:\n\t\t\tif (action.payload != null) {\n\t\t\t\tlet multipleAdjustments = state.multipleGroupAdjustments;\n\n\t\t\t\taction.payload.forEach(adjustment => {\n\t\t\t\t\tlet found = multipleAdjustments.findIndex(adj => adj.id == adjustment.id);\n\n\t\t\t\t\tif (found == -1)\n\t\t\t\t\t\tmultipleAdjustments.push(adjustment);\n\t\t\t\t})\n\n\t\t\t\treturn { ...state, multipleGroupAdjustments: multipleAdjustments };\n\t\t\t}\n\n\t\t\treturn state;\n\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_MEETING_TIME_BLOCKS = 'GET_MEETING_TIME_BLOCKS';\nexport const CREATE_MEETING_TIME_BLOCKS = 'CREATE_MEETING_TIME_BLOCKS';\nexport const UPDATE_MEETING_TIME_BLOCKS = 'UPDATE_MEETING_TIME_BLOCKS';\nexport const UPDATE_MEETING_TIME_BLOCK_SLOT = 'UPDATE_MEETING_TIME_BLOCK_SLOT';\nexport const DELETE_MEETING_TIME_BLOCKS = 'DELETE_MEETING_TIME_BLOCKS';\nexport const GET_MEETING_TIME_BLOCK_SLOTS = 'GET_MEETING_TIME_BLOCK_SLOTS';\n\nexport const getMeetingTimeBlocks = (meetingId) => ({\n\ttype: GET_MEETING_TIME_BLOCKS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`timeblocks/meeting/${meetingId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createMeetingTimeBlocks = (meetingId, timeBlocks) => ({\n\ttype: CREATE_MEETING_TIME_BLOCKS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post(`timeblocks/meeting/${meetingId}`, timeBlocks).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateMeetingTimeBlock = (meetingId, timeBlock) => ({\n\ttype: UPDATE_MEETING_TIME_BLOCKS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`timeblocks/meeting/${meetingId}`, timeBlock).then((response) => {\n\t\t\tresolve(timeBlock);\n\t\t});\n\t}),\n});\n\nexport const updateMeetingTimeBlockSlot = (meetingId, timeBlockSlot) => ({\n\ttype: UPDATE_MEETING_TIME_BLOCK_SLOT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`timeblocks/meeting/${meetingId}/slots`, timeBlockSlot).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteMeetingTimeBlock = (meetingId, blockId, callback) => ({\n\ttype: DELETE_MEETING_TIME_BLOCKS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`timeblocks/meeting/${meetingId}/block/${blockId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n","import {\n\tGET_MEETING_TIME_BLOCKS,\n\tCREATE_MEETING_TIME_BLOCKS,\n\tUPDATE_MEETING_TIME_BLOCKS,\n\tUPDATE_MEETING_TIME_BLOCK_SLOT,\n\tDELETE_MEETING_TIME_BLOCKS,\n} from '../actions/timeblocks';\nimport Moment from 'moment';\n\nconst INITIAL_STATE = {\n\tmeetingTimeBlocks: [],\n\tmeetingTimeBlockSlots: [],\n\tmeetingTimeBlockSlot: {}\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_MEETING_TIME_BLOCKS:\n\t\t\treturn { ...state, meetingTimeBlocks: action.payload.sort((a, b) => new Moment(a.startTime).unix() - new Moment(b.startTime).unix()) };\n\t\tcase CREATE_MEETING_TIME_BLOCKS:\n\t\t\treturn { ...state, meetingTimeBlocks: [...state.meetingTimeBlocks, ...action.payload].sort((a, b) => new Moment(a.startTime).unix() - new Moment(b.startTime).unix()) };\n\t\tcase UPDATE_MEETING_TIME_BLOCKS:\n\t\t\treturn { ...state, meetingTimeBlocks: [...state.meetingTimeBlocks.filter(t => t.id != action.payload.id)].sort((a, b) => new Moment(a.startTime).unix() - new Moment(b.startTime).unix()) };\n\t\tcase UPDATE_MEETING_TIME_BLOCK_SLOT:\n\t\t\treturn { ...state, meetingTimeBlockSlot: action.payload };\n\t\tcase DELETE_MEETING_TIME_BLOCKS:\n\t\t\treturn { ...state, meetingTimeBlocks: [...state.meetingTimeBlocks.filter(t => t.id != action.payload)].sort((a, b) => new Moment(a.startTime).unix() - new Moment(b.startTime).unix()) };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_BASE_GROUP = 'BASE_GROUPS_GET_BASE_GROUP';\nexport const GET_BASE_GROUPS = 'BASE_GROUPS_GET_BASE_GROUPS';\nexport const CREATE_BASE_GROUP = 'BASE_GROUPS_CREATE_BASE_GROUPS';\nexport const UPDATE_BASE_GROUP = 'BASE_GROUPS_UPDATE_BASE_GROUP';\nexport const DELETE_BASE_GROUP = 'BASE_GROUPS_DELETE_BASE_GROUP';\nexport const CLEAR_ACTIVE_BASE_GROUP = 'BASE_GROUPS_CLEAR_ACTIVE';\n\nexport const getBaseGroup = (baseGroupId) => ({\n\ttype: GET_BASE_GROUP,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`basegroups/${baseGroupId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const setActiveBaseGroup = (basegroup) => ({\n\ttype: GET_BASE_GROUP,\n\tpayload: new Promise(resolve => {\n\t\tresolve(basegroup);\n\t}),\n});\n\nexport const getBaseGroups = (groupId) => ({\n\ttype: GET_BASE_GROUPS,\n\tpayload: new Promise(resolve => {\n\t\tapi.get(`basegroups/section/${groupId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createBaseGroup = (values) => ({\n\ttype: CREATE_BASE_GROUP,\n\tpayload: new Promise(resolve => {\n\t\tapi.post('basegroups', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateBaseGroup = (values) => ({\n\ttype: UPDATE_BASE_GROUP,\n\tpayload: new Promise(resolve => {\n\t\tapi.put(`basegroups`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const deleteBaseGroup = (baseGroupId) => ({\n\ttype: DELETE_BASE_GROUP,\n\tpayload: new Promise(resolve => {\n\t\tapi.delete(`basegroups/${baseGroupId}`).then(() => {\n\t\t\tresolve(baseGroupId);\n\t\t});\n\t}),\n});\n\nexport const clearActiveBaseGroup = () => ({\n\ttype: CLEAR_ACTIVE_BASE_GROUP,\n\tpayload: true,\n});\n","import {\n\tGET_BASE_GROUP,\n\tGET_BASE_GROUPS,\n\tCREATE_BASE_GROUP,\n\tUPDATE_BASE_GROUP,\n\tDELETE_BASE_GROUP,\n\tCLEAR_ACTIVE_BASE_GROUP,\n} from 'actions/basegroups';\n\nconst INITIAL_STATE = {\n\tbaseGroups: [],\n\tbaseGroup: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_BASE_GROUP:\n\t\t\treturn { ...state, baseGroup: action.payload };\n\n\t\tcase GET_BASE_GROUPS:\n\t\t\treturn { ...state, baseGroups: action.payload };\n\n\t\tcase CREATE_BASE_GROUP:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tbaseGroup: action.payload,\n\t\t\t\tbaseGroups: [...state.baseGroups, action.payload],\n\t\t\t};\n\n\t\tcase UPDATE_BASE_GROUP:\n\t\t\treturn { ...state, baseGroup: action.payload };\n\n\t\tcase DELETE_BASE_GROUP:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tbaseGroups: [...state.baseGroups.filter(t => t.id != action.payload)],\n\t\t\t\tbaseGroup: INITIAL_STATE.baseGroup,\n\t\t\t};\n\n\t\tcase CLEAR_ACTIVE_BASE_GROUP:\n\t\t\treturn { ...state, baseGroup: INITIAL_STATE.baseGroup };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","/**\n * @typedef {import('types').Bookmark} Bookmark\n */\n\nimport api from 'lib/api';\n\nexport const GET_MY_BOOKMARKS = 'BOOKMARKS_GET_MY_BOOKMARKS';\nexport const GET_BOOKMARK_BY_REFERENCE = 'BOOKMARKS_GET_BOOKMARK_BY_REFERENCE';\nexport const CREATE_BOOKMARK = 'BOOKMARKS_CREATE_BOOKMARK';\nexport const DELETE_BOOKMARK = 'BOOKMARKS_DELETE_BOOKMARK';\n\nexport const getMyBookmarks = () => ({\n\ttype: GET_MY_BOOKMARKS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('users/me/bookmarks').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n/**\n * @param {number} referenceId\n * @param {string} referenceType ASSIGNMENT, PLAN\n */\nexport const getBookmarkByReference = (referenceId, referenceType) => ({\n\ttype: GET_BOOKMARK_BY_REFERENCE,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`bookmarks?referenceId=${referenceId}&referenceType=${referenceType}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n/**\n * @param {Bookmark} values\n */\nexport const createBookmark = (values) => ({\n\ttype: CREATE_BOOKMARK,\n\tpayload: new Promise(resolve => {\n\t\tapi.post(`users/me/bookmarks`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n/**\n * @param {number} id\n */\nexport const deleteBookmark = (id) => ({\n\ttype: DELETE_BOOKMARK,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`users/me/bookmarks/${id}`).then(() => {\n\t\t\tresolve(id);\n\t\t});\n\t}),\n});","import {\n\tGET_MY_BOOKMARKS,\n\tGET_BOOKMARK_BY_REFERENCE,\n\tCREATE_BOOKMARK,\n\tDELETE_BOOKMARK,\n} from 'actions/bookmarks';\n\nconst INITIAL_STATE = {\n\tuser: [],\n\treference: [],\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\n\tswitch (action.type) {\n\t\tcase GET_MY_BOOKMARKS:\n\t\t\treturn { ...state, user: action.payload };\n\n\t\tcase GET_BOOKMARK_BY_REFERENCE:\n\t\t\treturn { ...state, reference: action.payload };\n\n\t\tcase CREATE_BOOKMARK:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuser: [...state.user, ...action.payload],\n\t\t\t\treference: [...state.reference, ...action.payload],\n\t\t\t};\n\n\t\tcase DELETE_BOOKMARK:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuser: [...state.user.filter(bookmark =>\n\t\t\t\t\tbookmark.id != action.payload\n\t\t\t\t)],\n\t\t\t\treference: state.reference != null && state.reference.id == action.payload ?\n\t\t\t\t\tINITIAL_STATE.reference : state.reference,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n\n}","import api from 'lib/api';\n\nexport const CHECK_PLAGIARISM = 'CHECK_PLAGIARISM';\nexport const VALIDATE_PLAGIARISM_LICENSE = 'VALIDATE_PLAGIARISM_LICENSE';\n\nexport const checkPlagiarism = (data, callback) => ({\n\ttype: CHECK_PLAGIARISM,\n\tpayload: new Promise((resolve) => {\n\t\tconst endpoint = 'Plagiarism/multi';\n\t\tapi.post(endpoint, data).then((response) => {\n\t\t\tresolve(response.data);\n\n\t\t\tif (callback != null) {\n\t\t\t\tcallback(response.data);\n\t\t\t}\n\t\t});\n\t}),\n});\n\nexport const validatePlagiarismLicense = (schoolId) => ({\n\ttype: VALIDATE_PLAGIARISM_LICENSE,\n\tpayload: new Promise((resolve) => {\n\t\tconst endpoint = 'Plagiarism/' + schoolId + '/checkForValidPlagiarismLicense';\n\n\t\tapi.get(endpoint).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import {\n\tVALIDATE_PLAGIARISM_LICENSE\n} from 'actions/plagiarism';\n\nconst INITIAL_STATE = {\n\thasValidPlagiarismLicense: false\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase VALIDATE_PLAGIARISM_LICENSE:\n\t\t\treturn { ...state, hasValidPlagiarismLicense: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import axios from 'axios'\nimport moment from 'moment';\nimport { http } from 'lib/msal';\nimport { saveWithExpiration, getWithExpiration } from 'helpers/localstorage';\n\nexport const REGISTER_LANGUAGES = 'LANGUAGES_REGISTER_LANGUAGES';\nexport const GET_TRANSLATIONS_FOR_LANGUAGE = 'LANGUAGES_GET_TRANSLATIONS_FOR_LANGUAGE';\nexport const LOAD_TRANSLATIONS_FILE = 'LANGUAGES_LOAD_TRANSLATIONS_FILE';\n\nexport const registerLanguages = () => ({\n\ttype: REGISTER_LANGUAGES,\n\tpayload: new Promise((resolve) => {\n\t\tconst languages = [\n\t\t\t'sv-se',\n\t\t\t'en-us',\n\t\t\t'da-dk',\n\t\t\t'nb-no'\n\t\t];\n\n\t\tresolve(languages);\n\t})\n});\n\nexport const getTranslations = (lcid) => ({\n\ttype: GET_TRANSLATIONS_FOR_LANGUAGE,\n\tpayload: new Promise((resolve) => {\n\t\tif (getWithExpiration(`localizations-${lcid}`) != null) {\n\t\t\tresolve(JSON.parse(getWithExpiration(`localizations-${lcid}`)));\n\t\t\treturn true;\n\t\t}\n\n\t\taxios.get(`${http.defaults.baseURL}localization/${lcid}?service=HALDOR_EDUCATION`).then((response) => {\n\t\t\tif (response.status == 200) {\n\t\t\t\tsaveWithExpiration(`localizations-${lcid}`, JSON.stringify(response.data), moment().add('8', 'hours'));\n\n\t\t\t\tresolve(response.data);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve([]);\n\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tresolve([]);\n\t\t\t});\n\t}),\n});","import {\n\tREGISTER_LANGUAGES,\n\tGET_TRANSLATIONS_FOR_LANGUAGE,\n\tLOAD_TRANSLATIONS_FILE,\n} from 'actions/languages';\n\nconst INITIAL_STATE = {\n\ttranslations: null,\n\tlanguages: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase REGISTER_LANGUAGES:\n\t\t\treturn { ...state, languages: action.payload };\n\n\t\tcase GET_TRANSLATIONS_FOR_LANGUAGE:\n\t\t\treturn { ...state, translations: action.payload };\n\n\t\tcase LOAD_TRANSLATIONS_FILE:\n\t\t\treturn { ...state, translations: [...state.translations, ...action.payload] };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}","import api from 'lib/api';\nimport axios from 'axios'\nimport { http } from 'lib/msal';\n\nexport const GET_SERVICES = 'GET_SERVICES';\nexport const SET_SELECTED_SERVICES = 'SET_SELECTED_SERVICES'\nexport const POST_CREATE_TENANT = 'POST_CREATE_TENANT';\nexport const POST_CREATE_TENANT_SERVICES = 'POST_CREATE_TENANT_SERVICES';\nexport const PUT_UPDATE_TENANT_SERVICES = 'PUT_UPDATE_TENANT_SERVICES';\nexport const PUT_UPDATE_TENANT_SERVICE_CONSENT = 'PUT_UPDATE_TENANT_SERVICE_CONSENT';\nexport const POST_INVITE_ADMIN = 'POST_INVITE_ADMIN';\nexport const GET_CONSENT_INFO = 'GET_CONSENT_INFO';\nexport const GET_ADMIN_INVITATIONS = 'GET_ADMIN_INVITATIONS';\nexport const GET_CONSENT_PRESENT = 'GET_CONSENT_PRESENT';\nexport const POST_SELECTED_PRODUCTS_NOTES = 'POST_SELECTED_PRODUCTS_NOTES';\nexport const SET_EMAIL_SENT_LIST = 'SET_EMAIL_SENT_LIST';\nexport const PUT_UPDATE_TENANT_PRODUCTS = 'PUT_UPDATE_TENANT_PRODUCTS';\nexport const GET_TENANT_PRODUCTS = 'GET_TENANT_PRODUCTS';\nexport const PUT_UPDATE_TENANT = 'PUT_UPDATE_TENANT';\n\nexport const getServices = () => ({\n\ttype: GET_SERVICES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`services/products`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getTenantProducts = () => ({\n\ttype: GET_TENANT_PRODUCTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`tenants/products`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getConsentInfo = () => ({\n\ttype: GET_CONSENT_INFO,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`services/consents`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getAdminInvitations = () => ({\n\ttype: GET_ADMIN_INVITATIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`services/admin/invitations`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const isConsentPresent = (tenantId) => ({\n\ttype: GET_CONSENT_PRESENT,\n\tpayload: new Promise((resolve, reject) => {\n\t\taxios.get(`${http.defaults.baseURL}services/tenant/${tenantId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error);\n\t\t});\n\t}),\n});\n\nexport const saveSelectedProductsAsNotes = (onTenantLevel = true) => ({\n\ttype: POST_SELECTED_PRODUCTS_NOTES,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`services/products/saveAsNote?onTenantLevel=` + onTenantLevel, null).then((response) => {\n\t\t\tresolve(response.status);\n\t\t});\n\t}),\n});\n\nexport const sendAdminInvitation = (recipients) => ({\n\ttype: POST_INVITE_ADMIN,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`services/admin/invite`, recipients).then((response) => {\n\t\t\tresolve(response.status);\n\t\t}).catch(error => {\n\t\t\tif (error.response) {\n\t\t\t\tresolve(error.response.status);\n\t\t\t}\n\n\t\t\tresolve(500);\n\t\t});\n\t}),\n});\n\nexport const setEmailSentList = (recipients) => ({\n\ttype: SET_EMAIL_SENT_LIST,\n\tpayload: recipients\n});\n\n\nexport const createTenant = (tenant, preOnboarding = false) => ({\n\ttype: POST_CREATE_TENANT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post(`tenants?preOnboarding=` + preOnboarding, tenant).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateTenant = (tenant) => ({\n\ttype: PUT_UPDATE_TENANT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`tenants`, tenant).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const createTenantServices = (tenantServices) => ({\n\ttype: POST_CREATE_TENANT_SERVICES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.post(`tenants/services`, tenantServices).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\n\nexport const updateTenantServices = (tenantServices) => ({\n\ttype: PUT_UPDATE_TENANT_SERVICES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`tenants/services`, tenantServices).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateTenantProducts = (products) => ({\n\ttype: PUT_UPDATE_TENANT_PRODUCTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`tenants/products`, products).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateTenantServiceConsent = (tenantServices) => ({\n\ttype: PUT_UPDATE_TENANT_SERVICE_CONSENT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`tenants/service/consent`, tenantServices).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const setSelectedServices = (selectedServices) => ({\n\ttype: SET_SELECTED_SERVICES,\n\tpayload: new Promise((resolve) => {\n\t\tresolve(selectedServices);\n\t}),\n});\n","import moment from 'moment';\n\nclass ServiceManager {\n\tconstructor(tenantServices, schoolServices) {\n\t\tthis.tenantServices = tenantServices;\n\t\tthis.schoolServices = schoolServices;\n\t}\n\n\tgetServices = () => {\n\t\treturn {\n\t\t\thaldorEducation: this.haveService('HALDOR_EDUCATION'),\n\t\t\thaldorCoursePlanning: this.haveService('HALDOR_COURSEPLANNING'),\n\t\t\tmicrosoft: this.haveService('MS_ASSIGNMENTS'),\n\t\t\thaldor: this.haveService('HALDOR_ASSIGNMENTS'),\n\t\t\tnews: this.haveService('HALDOR_NEWS'),\n\t\t\tschedule: this.haveService('HALDOR_SCHEDULE'),\n\t\t\tadvancedSchedule: this.haveService('HALDOR_ADVANCED_CALENDAR'),\n\t\t\tplans: this.haveService('HALDOR_PLANS'),\n\t\t\tconversations: this.haveService('HALDOR_CONVERSATIONS'),\n\t\t\tattendance: this.haveService('HALDOR_ATTENDANCE'),\n\t\t\tforms: this.haveService('HALDOR_FORMS'),\n\t\t\tmeetings: this.haveService('HALDOR_MEETINGS'),\n\t\t\tverdicts: this.haveService('HALDOR_VERDICTS'),\n\t\t\tadditionalAdjustments: this.haveService('HALDOR_ADDITIONAL_ADJUSTMENTS'),\n\t\t\tteamsMeeting: this.haveService('HALDOR_TEAMSMEETINGS'),\n\t\t\tnotes: this.haveService('HALDOR_NOTES'),\n\t\t\texportAssessments: this.haveService('HALDOR_EXPORTASSESSMENTS'),\n\t\t\tplagiarism: this.haveService('HALDOR_EDUCATION_PLAGIARISM'),\n\t\t\timmersiveReaderPlans: this.haveService('IMMERSIVE_READER_PLANS'),\n\t\t\timmersiveReaderAssignments: this.haveService('IMMERSIVE_READER_ASSIGNMENTS'),\n\t\t\timmersiveReaderPosts: this.haveService('IMMERSIVE_READER_POSTS'),\n\t\t\timmersiveReaderConversations: this.haveService('IMMERSIVE_READER_CONVERSATIONS')\n\t\t};\n\t};\n\n\thaveService = (serviceId) => {\n\t\treturn (this.tenantServices != null && this.tenantServices.find((service) => {\n\t\t\treturn (\n\t\t\t\tservice.serviceId == serviceId &&\n\t\t\t\tmoment(service.serviceEnd).isSameOrAfter(moment(), 'day')\n\t\t\t);\n\t\t}) != null) ||\n\t\t\t(this.schoolServices != null && this.schoolServices.find(service => {\n\t\t\t\treturn service.serviceId == serviceId &&\n\t\t\t\t\tmoment(service.serviceEnd).isSameOrAfter(moment(), 'day');\n\t\t\t}) != null);\n\t};\n}\n\nexport default ServiceManager;","import {\n\tGET_SERVICES,\n\tSET_SELECTED_SERVICES,\n\tGET_CONSENT_INFO,\n\tGET_CONSENT_PRESENT,\n\tPOST_INVITE_ADMIN,\n\tGET_ADMIN_INVITATIONS,\n\tSET_EMAIL_SENT_LIST,\n\tGET_TENANT_PRODUCTS,\n} from 'actions/services';\nimport { GET_SCHOOL_SERVICES } from 'actions/schools';\nimport { GET_TENANT } from 'actions/user';\nimport ServiceManager from '_class/ServiceManager';\n\nconst INITIAL_STATE = {\n\tavailableProducts: null,\n\tselectedServices: [],\n\ttenantProducts: [],\n\tconsentInfo: null,\n\tinviteAdminStatus: null,\n\tadminInvitations: [],\n\temailSentList: [],\n\tisAppConsented: {\n\t\tdata: null,\n\t\terror: null,\n\t\trequestResponseCode: null\n\t},\n\ttenantServices: null,\n\tschoolServices: null,\n\tavailableServices: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_SERVICES:\n\t\t\treturn { ...state, availableProducts: action.payload };\n\n\t\tcase SET_SELECTED_SERVICES:\n\t\t\treturn { ...state, selectedServices: action.payload };\n\n\t\tcase GET_CONSENT_INFO:\n\t\t\treturn { ...state, consentInfo: action.payload };\n\n\t\tcase POST_INVITE_ADMIN:\n\t\t\treturn { ...state, inviteAdminStatus: action.payload };\n\n\t\tcase GET_ADMIN_INVITATIONS:\n\t\t\treturn { ...state, adminInvitations: action.payload };\n\n\t\tcase GET_CONSENT_PRESENT:\n\t\t\tvar existingObject = state.isAppConsented;\n\t\t\texistingObject.data = action.error ? null : action.payload;\n\t\t\texistingObject.error = action.error ? action.payload?.response : null;\n\t\t\texistingObject.requestResponseCode = action.error ? action.payload?.response?.status : 200;\n\t\t\treturn { ...state, isAppConsented: existingObject };\n\t\tcase SET_EMAIL_SENT_LIST:\n\t\t\treturn { ...state, emailSentList: action.payload }\n\n\t\tcase GET_TENANT_PRODUCTS:\n\t\t\treturn { ...state, tenantProducts: action.payload }\n\n\t\tcase GET_TENANT:\n\t\t\treturn { ...state, tenantServices: action.payload !== null ? action.payload.tenantServices : null, availableServices: new ServiceManager(action.payload !== null ? action.payload.tenantServices : null, state.schoolServices).getServices() };\n\n\t\tcase GET_SCHOOL_SERVICES:\n\t\t\treturn { ...state, schoolServices: action.payload, availableServices: new ServiceManager(state.tenantServices, action.payload).getServices() };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","export const ASSESSMENT_TYPES = Object.freeze({\n SELF: \"Self\",\n PEER: \"Peer\",\n TEACHER: \"Teacher\"\n});","import api from 'lib/api';\nimport { get_operations } from 'lib/patch';\nimport { ASSESSMENT_TYPES } from '../components/BlockAssessments/AssessmentTypes';\n\nexport const GET_BLOCK_TYPES = 'BLOCKS_GET_BLOCK_TYPES';\nexport const CLEAR_BLOCK_TYPES = 'BLOCK_CLEAR_BLOCK_TYPES';\nexport const SAVE_BLOCKS_ON_REFERENCE = 'BLOCKS_SAVE_BLOCKS_ON_REFERENCE';\nexport const CREATE_ASSESSMENT_BLOCK = 'BLOCKS_CREATE_ASSESSMENT_BLOCK';\nexport const UPDATE_ASSESSMENT_BLOCK = 'BLOCKS_UPDATE_ASSESSMENT_BLOCK';\nexport const UPDATE_BLOCKS_ON_REFERENCE = 'BLOCKS_UPDATE_BLOCKS_ON_REFERENCE';\nexport const GET_BLOCKS_BY_REFERENCE = 'BLOCKS_GET_BLOCKS_BY_REFERENCE';\nexport const CLEAR_BLOCKS_ON_REFERENCE = 'BLOCKS_CLEAR_BLOCKS_ON_REFERENCE';\nexport const DELETE_BLOCK = 'BLOCKS_DELETE_BLOCK';\n\nexport const getBlockTypes = () => ({\n\ttype: GET_BLOCK_TYPES,\n\tpayload: new Promise((resolve, reject) => {\n\t\treturn api.get(`blocks/types`)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject(null);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t})\n});\n\nexport const clearBlockTypes = () => ({\n\ttype: CLEAR_BLOCK_TYPES,\n\tpayload: true,\n});\n\nexport const saveBlocksOnReference = (blocks, referenceId, referenceType) => ({\n\ttype: SAVE_BLOCKS_ON_REFERENCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tconst values = JSON.parse(JSON.stringify(blocks)).map(block => {\n\t\t\tblock.referenceId = referenceId;\n\t\t\tblock.referenceType = referenceType;\n\t\t\treturn block;\n\t\t});\n\n\t\tapi.post(`blocks`, values)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject(null);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t}),\n});\n\nexport const updateBlocksOnReference = (blocks, referenceId, referenceType) => ({\n\ttype: UPDATE_BLOCKS_ON_REFERENCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tconst values = JSON.parse(JSON.stringify(blocks)).map(block => {\n\t\t\tblock.referenceId = referenceId;\n\t\t\tblock.referenceType = referenceType;\n\t\t\treturn block;\n\t\t});\n\n\t\tapi.put(`blocks`, values)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject(null);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t}),\n});\n\nexport const clearBlocksOnReference = () => ({\n\ttype: CLEAR_BLOCKS_ON_REFERENCE,\n\tpayload: true,\n})\n\nexport const getBlocksByReference = (referenceId, referenceType) => ({\n\ttype: GET_BLOCKS_BY_REFERENCE,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`blocks?referenceId=${referenceId}&referenceType=${referenceType}`)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject(null);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t})\n});\n\nexport const deleteBlock = (blockId) => ({\n\ttype: DELETE_BLOCK,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.delete(`blocks/${blockId}`)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status > 300) {\n\t\t\t\t\treject(response.data);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t})\n})\n\nconst createAssessmentPart = (resource, courses) => new Promise(async (resolve) => {\n\tlet partValue = resource;\n\tif (resource.referenceType == 'assessmentGoal') {\n\t\tconst goal = await api.post('assessmentGoals', resource.value);\n\n\t\tpartValue = {\n\t\t\treferenceType: resource.referenceType,\n\t\t\treferenceId: goal.data.id,\n\t\t\tpermissions: partValue.permissions,\n\t\t\toriginId: resource.originId,\n\t\t\tassessmentBlockPartRows: goal.data.rows.map((row) => ({\n\t\t\t\treferenceType: 'assessmentGoalRow',\n\t\t\t\treferenceId: row.id,\n\t\t\t})),\n\t\t\tassessmentBlockPartRelationships: courses.map((courseId) => ({\n\t\t\t\tcourseId: courseId,\n\t\t\t})),\n\t\t\tassessmentType: resource.assessmentType\n\t\t};\n\t}\n\n\tif (resource.referenceType == 'matrix') {\n\t\t// Delete stored course object from resource before sending to API\n\t\tdelete partValue.value;\n\t}\n\n\tconst part = await api.post('assessmentParts', partValue);\n\tresolve(part.data);\n});\n\nconst updateAssessmentPart = (resource, oldResource, courses) => new Promise(async (resolve) => {\n\tif (resource.id == null || oldResource == null) {\n\t\tconst part = createAssessmentPart(resource, courses);\n\t\tresolve(part);\n\t\treturn true;\n\t}\n\n\tif (resource.referenceType == 'assessmentGoal') {\n\t\tlet goal = resource.value;\n\n\t\tconst oldGoal = oldResource.value;\n\n\t\tlet operations = get_operations(oldGoal, goal);\n\n\t\tif (operations.length > 0) {\n\t\t\tawait api.patch(`assessmentGoals/${resource.referenceId}`, oldResource, operations);\n\t\t}\n\t}\n\n\tdelete resource.value;\n\tdelete oldResource.value;\n\n\tresource.assessmentBlockPartRelationships = courses.map((courseId) => {\n\t\tlet foundRelationship = oldResource.assessmentBlockPartRelationships.find((rel) => rel.courseId == courseId);\n\t\tif (foundRelationship != null) {\n\t\t\treturn foundRelationship;\n\t\t}\n\n\t\treturn {\n\t\t\tcourseId: courseId,\n\t\t}\n\t});\n\n\tlet operations = get_operations(oldResource, resource);\n\n\tif (operations != null && operations.length > 0) {\n\t\t/** We dont need to add any assessmentblockrelationships for matrices. For assessmentGoals the relationships is added above. */\n\t\tvar filteredOperations = operations.filter(item => {\n\t\t\treturn !(item.op == \"add\" && item.path == \"/assessmentBlockPartRelationships\")\n\t\t});\n\n\t\tif (filteredOperations.length > 0) {\n\t\t\tawait api.patch(`assessmentParts/${resource.id}`, oldResource, filteredOperations)\n\t\t}\n\t}\n\n\tresolve(resource);\n});\n\nexport const createAssessmentBlock = (block, referenceId, referenceType) => ({\n\ttype: CREATE_ASSESSMENT_BLOCK,\n\tpayload: new Promise(async (resolve) => {\n\t\tlet values = JSON.parse(JSON.stringify(block));\n\t\tlet resources = [];\n\t\tlet courses = [];\n\n\t\tvalues.resources.forEach((resource) => {\n\t\t\tif (resource.referenceType == 'matrix') {\n\t\t\t\tcourses.push(resource.value.id);\n\t\t\t}\n\t\t});\n\n\t\tlet typeResource = values.resources.filter(resource => {\n\t\t\treturn resource['@odata.type'] == 'assessmenttype';\n\t\t})[0]?.value;\n\n\t\tvalues.resources = values.resources.filter(resource => {\n\t\t\treturn resource['@odata.type'] != 'assessmenttype';\n\t\t});\n\n\t\tvalues.resources.forEach(resource => {\n\t\t\tresource.assessmentType = typeResource == null ? ASSESSMENT_TYPES.TEACHER : typeResource;\n\t\t});\n\n\t\tvalues.assessmentType = typeResource == null ? ASSESSMENT_TYPES.TEACHER : typeResource;\n\n\t\tawait Promise.all(\n\t\t\tvalues.resources.map((resource) => new Promise(async (resolve) => {\n\t\t\t\tif (resource['@odata.type'] == 'Haldor.Blocks.AssessmentBlockPart') {\n\t\t\t\t\tconst part = await createAssessmentPart(resource, courses);\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\t'@odata.type': 'Haldor.Blocks.AssessmentBlockPart',\n\t\t\t\t\t\tid: part.id,\n\t\t\t\t\t\tassessmentType: resource.assessmentType\n\t\t\t\t\t});\n\n\t\t\t\t\tresolve(resource);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresources.push(resource);\n\t\t\t\tresolve(resource);\n\t\t\t}))\n\t\t);\n\n\t\tvalues.type = 'Haldor.Blocks.AssessmentBlock';\n\t\tvalues.resources = resources;\n\t\tvalues.referenceId = referenceId;\n\t\tvalues.referenceType = referenceType;\n\n\t\tapi.post('blocks', [values]).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateAssessmentBlock = (block, oldBlock) => ({\n\ttype: UPDATE_ASSESSMENT_BLOCK,\n\tpayload: new Promise(async (resolve) => {\n\t\tlet values = JSON.parse(JSON.stringify(block));\n\t\tlet resources = [];\n\t\tlet courses = [];\n\n\t\tvalues.resources.forEach((resource) => {\n\t\t\tif (resource.referenceType == 'matrix') {\n\t\t\t\tcourses.push(resource.value.id);\n\t\t\t}\n\t\t});\n\t\tif (courses.length > 0) {\n\t\t\tawait Promise.all(courses.map((course) => new Promise(async (resolve) => {\n\t\t\t\tvar assessmentGoalResource = block.resources.filter(resource => { return resource.referenceType == 'assessmentGoal' && resource.id });\n\t\t\t\tif (assessmentGoalResource) {\n\t\t\t\t\tawait Promise.all(assessmentGoalResource.map((resource) => new Promise(async (resolve) => {\n\t\t\t\t\t\tif (!resource.assessmentBlockPartRelationships.includes(course)) {\n\t\t\t\t\t\t\tvar operations = [{\n\t\t\t\t\t\t\t\top: 'add',\n\t\t\t\t\t\t\t\tpath: '/assessmentBlockPartRelationships',\n\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\tassessmentBlockPartId: resource.id,\n\t\t\t\t\t\t\t\t\tcourseId: course\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}];\n\t\t\t\t\t\t\tawait api.patch(`assessmentParts/${resource.id}`, resource, operations);\n\t\t\t\t\t\t\tresolve(resource);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve(resource);\n\t\t\t\t\t})));\n\t\t\t\t}\n\t\t\t\tresolve(course);\n\t\t\t})));\n\t\t}\n\n\t\tvar deletedResources = oldBlock.resources.filter(item => { return !values.resources.find(currentItem => currentItem.id == item.id) });\n\t\tif (deletedResources != null && deletedResources.length > 0) {\n\t\t\tawait Promise.all(deletedResources.map((resource) => new Promise(async (resolve) => {\n\t\t\t\tif (resource['@odata.type'] == 'Haldor.Blocks.AssessmentBlockPart') {\n\t\t\t\t\tdelete resource.index;\n\n\t\t\t\t\tvar operations = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\top: 'remove',\n\t\t\t\t\t\t\tpath: '/',\n\t\t\t\t\t\t\tvalue: resource,\n\t\t\t\t\t\t}\n\t\t\t\t\t];\n\n\t\t\t\t\tresource.assessmentBlockPartRelationships.map(relationship => {\n\t\t\t\t\t\toperations.push({\n\t\t\t\t\t\t\top: 'remove',\n\t\t\t\t\t\t\tpath: '/assessmentBlockPartRelationships',\n\t\t\t\t\t\t\tvalue: relationship,\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\n\t\t\t\t\tawait api.patch(`assessmentParts/${resource.id}`, resource, operations);\n\n\t\t\t\t\tresolve(resource);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tresolve(resource);\n\t\t\t})));\n\t\t}\n\n\t\tawait Promise.all(\n\t\t\tvalues.resources.map((resource) => new Promise(async (resolve) => {\n\t\t\t\tif (resource['@odata.type'] == 'Haldor.Blocks.AssessmentBlockPart') {\n\t\t\t\t\tdelete resource.index;\n\n\t\t\t\t\tconst oldResource = oldBlock.resources.find((res) => res.id == resource.id);\n\t\t\t\t\tconst part = await updateAssessmentPart(resource, oldResource, courses);\n\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\t'@odata.type': 'Haldor.Blocks.AssessmentBlockPart',\n\t\t\t\t\t\tid: part.id,\n\t\t\t\t\t\tassessmentType: resource.assessmentType ?? ASSESSMENT_TYPES.TEACHER\n\t\t\t\t\t});\n\n\t\t\t\t\tresolve(resource);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresources.push(resource);\n\t\t\t\tresolve(resource);\n\t\t\t}))\n\t\t);\n\n\t\tresources = resources.filter((resource) => resource.id != null);\n\t\tvalues.resources = resources;\n\t\tvalues.referenceId = oldBlock.referenceId;\n\t\tvalues.referenceType = oldBlock.referenceType;\n\n\t\tapi.put('blocks', [values]).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n})","import {\n\tGET_BLOCK_TYPES,\n\tGET_BLOCKS_BY_REFERENCE,\n\tSAVE_BLOCKS_ON_REFERENCE,\n\tCLEAR_BLOCKS_ON_REFERENCE,\n\tCLEAR_BLOCK_TYPES,\n} from 'actions/blocks';\n\nconst INITIAL_STATE = {\n\ttypes: null,\n\treference: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\n\t\tcase GET_BLOCKS_BY_REFERENCE:\n\t\t\treturn { ...state, reference: action.payload };\n\n\t\tcase GET_BLOCK_TYPES:\n\t\t\treturn { ...state, types: action.payload };\n\n\t\tcase CLEAR_BLOCK_TYPES:\n\t\t\treturn { ...state, types: null };\n\n\t\tcase CLEAR_BLOCKS_ON_REFERENCE:\n\t\t\treturn { ...state, reference: INITIAL_STATE.reference };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}","import api from 'lib/api';\n\nexport const GET_SUBJECTS = 'SUBJECTS_GET_SUBJECTS';\nexport const GET_TENANT_SUBJECTS = 'SUBJECTS_GET_TENANT_SUBJECTS';\nexport const SEARCH_SUBJECTS = 'SUBJECTS_SEARCH_SUBJECTS';\nexport const CREATE_SUBJECT = 'SUBJECTS_CREATE_SUBJECT';\nexport const GET_SECTION_SUBJECTS = 'SUBJECTS_GET_SECTION_SUBJECTS';\nexport const CLEAR_SECTION_SUBJECTS = 'SUBJECTS_CLEAR_SECTION_SUBJECTS';\n\nexport const getSubjects = () => ({\n\ttype: GET_SUBJECTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`subjects`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getTenantSubjects = (tenantId) => ({\n\ttype: GET_TENANT_SUBJECTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`subjects/tenants/${tenantId}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const searchSubjects = (query) => ({\n\ttype: SEARCH_SUBJECTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`subjects/search?term=${query}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const createSubject = (values) => ({\n\ttype: CREATE_SUBJECT,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post(`subjects`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error)\n\t\t});\n\t}),\n});\n\nexport const getSectionSubjects = (sectionId) => ({\n\ttype: GET_SECTION_SUBJECTS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`assessments/sections/${sectionId}/subjects`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\nexport const clearSectionSubjects = () => ({\n\ttype: CLEAR_SECTION_SUBJECTS,\n\tpayload: true,\n});","import {\n\tGET_SUBJECTS,\n\tGET_TENANT_SUBJECTS,\n\tSEARCH_SUBJECTS,\n\tCREATE_SUBJECT,\n\tGET_SECTION_SUBJECTS,\n\tCLEAR_SECTION_SUBJECTS,\n} from 'actions/subjects';\n\nconst INITIAL_STATE = {\n\tsubjects: null,\n\ttenant: null,\n\tsearch: null,\n\tcreated: null,\n\tsection: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_TENANT_SUBJECTS:\n\t\t\treturn { ...state, tenant: action.payload };\n\n\t\tcase GET_SUBJECTS:\n\t\t\treturn { ...state, subjects: action.payload };\n\n\t\tcase SEARCH_SUBJECTS:\n\t\t\treturn { ...state, search: action.payload };\n\n\t\tcase CREATE_SUBJECT:\n\t\t\treturn { ...state, created: action.payload };\n\n\t\tcase GET_SECTION_SUBJECTS:\n\t\t\treturn { ...state, section: action.payload };\n\t\tcase CLEAR_SECTION_SUBJECTS:\n\t\t\treturn { ...state, section: null };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import api from 'lib/api';\n\nexport const GET_SMS_LIST = 'SMS_GET_SMS_LIST';\nexport const GET_SMS = 'SMS_GET_SMS';\nexport const CREATE_SMS = 'SMS_CREATE_SMS';\nexport const UPDATE_SMS = 'SMS_UPDATE_SMS';\nexport const DELETE_SMS = 'SMS_DELETE_SMS';\nexport const GET_REMAINING_SMS = 'SMS_GET_SMS_REMAINING';\nexport const GET_SMS_STATISTICS = 'SMS_GET_SMS_STATISTICS';\nexport const GET_SMS_EDUCATION_SECTIONS = 'SMS_GET_SMS_EDUCATION_SECTIONS';\nexport const GET_SMS_MENTOR_SECTIONS = 'SMS_GET_SMS_MENTOR_SECTIONS';\n\nexport const getSMSList = (group, status, start, end) => ({\n\ttype: GET_SMS_LIST,\n\tpayload: new Promise((resolve) => {\n\t\tlet url = `sms?_=1`;\n\n\t\tif (group != null) {\n\t\t\turl += `§ionId=${group}`;\n\t\t}\n\n\t\tif (status != null) {\n\t\t\turl += `&status=${status}`;\n\t\t}\n\n\t\tif (start != null) {\n\t\t\turl += `&startDate=${start}`;\n\t\t}\n\n\t\tif (end != null) {\n\t\t\turl += `&endDate=${end}`;\n\t\t}\n\n\t\tapi.get(url).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const getSMS = (id) => ({\n\ttype: GET_SMS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sms/${id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t})\n\t}),\n});\n\nexport const createSMS = (values) => ({\n\ttype: CREATE_SMS,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.post('sms', values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error);\n\t\t});\n\t}),\n});\n\nexport const updateSMS = (values) => ({\n\ttype: UPDATE_SMS,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.put(`sms/${values.id}`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t}).catch((error) => {\n\t\t\treject(error);\n\t\t});\n\t}),\n});\n\nexport const deleteSMS = (id) => ({\n\ttype: DELETE_SMS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`sms/${id}`).then((response) => {\n\t\t\tresolve(1);\n\t\t});\n\t}),\n})\n\nexport const getRemainingSMS = () => ({\n\ttype: GET_REMAINING_SMS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('sms/settings').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t})\n});\n\nexport const getSMSStatistics = () => ({\n\ttype: GET_SMS_STATISTICS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sms/statistics`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSMSEducationSections = () => ({\n\ttype: GET_SMS_EDUCATION_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections?serviceId=HALDOR_SMS&type=EDUCATION_GROUP`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getSMSMentorSections = () => ({\n\ttype: GET_SMS_MENTOR_SECTIONS,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`sections?serviceId=HALDOR_SMS&type=MENTOR_GROUP`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import {\n\tGET_SMS,\n\tGET_SMS_LIST,\n\tCREATE_SMS,\n\tUPDATE_SMS,\n\tGET_REMAINING_SMS,\n\tGET_SMS_STATISTICS,\n\tGET_SMS_EDUCATION_SECTIONS,\n\tGET_SMS_MENTOR_SECTIONS,\n} from 'actions/sms';\n\nconst INITIAL_STATE = {\n\tsingle: null,\n\tlist: null,\n\tremaining: null,\n\tlimit: null,\n\tstatistics: null,\n\teducationSections: null,\n\tmentorSections: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_SMS:\n\t\t\treturn { ...state, single: action.payload };\n\n\t\tcase GET_SMS_LIST:\n\t\t\treturn { ...state, list: action.payload };\n\n\t\tcase CREATE_SMS:\n\t\t\tif (state.list == null) {\n\t\t\t\treturn { ...state, list: [action.payload] };\n\t\t\t}\n\n\t\t\treturn { ...state, list: [action.payload, ...state.list] };\n\n\t\tcase UPDATE_SMS:\n\t\t\tif (state.list != null) {\n\t\t\t\t// update sms in list as well\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tsingle: action.payload,\n\t\t\t\t\tlist: [...state.list.filter(t => {\n\t\t\t\t\t\treturn t.id != action.payload.id;\n\t\t\t\t\t}), action.payload],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn { ...state, single: action.payload };\n\n\t\tcase GET_REMAINING_SMS:\n\t\t\tif (action.payload != null) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tremaining: action.payload.remainingAmount,\n\t\t\t\t\tlimit: action.payload.totalAmount * action.payload.limit,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase GET_SMS_STATISTICS:\n\t\t\treturn { ...state, statistics: action.payload };\n\n\t\tcase GET_SMS_EDUCATION_SECTIONS:\n\t\t\treturn { ...state, educationSections: action.payload };\n\n\t\tcase GET_SMS_MENTOR_SECTIONS:\n\t\t\treturn { ...state, mentorSections: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n\n}","import api from 'lib/api';\n\nexport const TOGGLE_ADVANCED_CALENDAR = 'TOGGLE_ADVANCED_CALENDAR';\n\n//activity filtering\nexport const CLEAR_FILTER = 'CLEAR_FILTER';\nexport const UPDATE_FILTER = 'UPDATE_FILTER';\nexport const TOGGLE_MY_SCHEDULE = 'TOGGLE_MY_SCHEDULE';\nexport const SET_TOTAL_AMOUNT = 'SET_TOTAL_AMOUNT';\n\n//Group filtering\nexport const SET_ALL_GROUPS = 'SET_ALL_GROUPS';\nexport const SET_ALL_SEARCHED = 'SET_ALL_SEARCHED';\nexport const TOGGLE_ALL_USERS = 'TOGGLE_ALL_USERS';\nexport const SET_CUSTOM_GROUP = 'SET_CUSTOM_GROUP';\n\nexport const SET_SEARCH_GROUP = 'SET_SEARCH_GROUP';\nexport const REMOVE_SEARCHED_GROUP = 'REMOVE_SEARCHED_GROUP';\nexport const ADD_SECTION = 'ADD_SECTION';\nexport const ADD_SECTION_SEARCH = 'ADD_SECTION_SEARCH';\n\nexport const CHANGE_SELECTED_PEOPLE = 'CHANGE_SELECTED_PEOPLE';\nexport const CHANGE_SEARCHED_PEOPLE = 'CHANGE_SEARCHED_PEOPLE';\nexport const CHANGE_SEARCH_OWNER = 'CHANGE_SEARCH_OWNER';\nexport const CHANGE_SELECTED_OWNER = 'CHANGE_SELECTED_OWNER';\n\nexport const SET_TOTAL_GROUPS = 'SET_TOTAL_GROUPS';\n\nexport const REMOVE_SELECTED_PEOPLE = 'REMOVE_SELECTED_PEOPLE';\nexport const REMOVE_SELECTED_OWNER = 'REMOVE_SELECTED_OWNER';\nexport const REMOVE_SEARCHED_PEOPLE = 'REMOVE_SEARCHED_PEOPLE';\nexport const REMOVE_SEARCHED_OWNER = 'REMOVE_SEARCHED_OWNER';\n\nexport const CLEAR_ALL = 'CLEAR_ALL';\n\nexport const SELECT_ALL_USER = 'SELECT_ALL_USER';\nexport const REMOVE_ALL_USER = 'REMOVE_ALL_USER';\nexport const REMOVE_ALL = 'REMOVE_ALL';\n\nexport const clearScheduleFilter = (data) => ({\n\ttype: CLEAR_FILTER,\n\tpayload: { filterData: data },\n});\n\nexport const toggleAdvanceCalendar = () => ({\n\ttype: TOGGLE_ADVANCED_CALENDAR,\n});\n\nexport const UpdateFilter = (data, obj) => ({\n\ttype: UPDATE_FILTER,\n\tpayload: {\n\t\tallData: data,\n\t\tobj: obj,\n\t},\n});\nexport const ClearAllFilter = () => ({\n\ttype: CLEAR_ALL,\n});\n\nexport const toggleMySchedule = () => ({\n\ttype: TOGGLE_MY_SCHEDULE,\n});\n\nexport const updateTotalUsers = (total) => ({\n\ttype: SET_TOTAL_AMOUNT,\n\tpayload: { countTotal: total },\n});\n\nexport const setAllGroups = (sections, count, groups, owners, checkedObj) => ({\n\ttype: SET_ALL_GROUPS,\n\tpayload: {\n\t\tdata: sections,\n\t\ttotal: count,\n\t\ttotalGroups: groups,\n\t\ttotalOwners: owners,\n\t\tgroupsChecked: checkedObj,\n\t},\n});\n\nexport const setAllSearched = (searchedArr, checkedObj) => ({\n\ttype: SET_ALL_SEARCHED,\n\tpayload: {\n\t\tdata: searchedArr,\n\t\tgroupsChecked: checkedObj,\n\t},\n});\n\nexport const toggleAllUsers = () => ({\n\ttype: TOGGLE_ALL_USERS,\n});\n\nexport const selectCustomGroup = (data) => ({\n\ttype: SET_CUSTOM_GROUP,\n\tpayload: { group: data },\n});\n\nexport const selectSearchGroup = (data) => ({\n\ttype: SET_SEARCH_GROUP,\n\tpayload: { group: data },\n});\n\nexport const removeCustomGroup = (group, fullObj) => ({\n\ttype: REMOVE_SEARCHED_GROUP,\n\tpayload: { group: group, obj: fullObj },\n});\n\nexport const getSections = (id, isCheckbox, userId, isSearch, callback) => ({\n\ttype: ADD_SECTION,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`sections/${id}?expand=owners;members`)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.owners === null) {\n\t\t\t\t\tresponse.data.owners = [];\n\t\t\t\t}\n\n\t\t\t\tresolve({\n\t\t\t\t\tdata: response.data,\n\t\t\t\t\tcheckBox: isCheckbox,\n\t\t\t\t\tid: id,\n\t\t\t\t\tcurrentUser: userId,\n\t\t\t\t\tsearch: isSearch,\n\t\t\t\t});\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\treject(e);\n\t\t\t});\n\t}),\n});\n\nexport const addAll = (id) => {\n\treturn new Promise((resolve, reject) => {\n\t\tapi.get(`sections/${id}?expand=owners;members`)\n\t\t\t.then((response) => {\n\t\t\t\tresolve({ data: response.data });\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\treject(e);\n\t\t\t});\n\t});\n};\n\nexport const getSectionSearch = (id, isCheckbox, callback) => ({\n\ttype: ADD_SECTION_SEARCH,\n\tpayload: new Promise((resolve, reject) => {\n\t\tapi.get(`sections/${id}?expand=owners;members`)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.owners === null) {\n\t\t\t\t\tresponse.data.owners = [];\n\t\t\t\t}\n\n\t\t\t\tresolve({ data: response.data, checkBox: isCheckbox, id: id });\n\n\t\t\t\tif (callback != null) {\n\t\t\t\t\tcallback(response.data);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\treject(e);\n\t\t\t});\n\t}),\n});\n\nexport const changeSelected = (data) => ({\n\ttype: CHANGE_SELECTED_PEOPLE,\n\tpayload: { selectedUser: data },\n});\nexport const changeSelectedOwner = (data) => ({\n\ttype: CHANGE_SELECTED_OWNER,\n\tpayload: { selectedUser: data },\n});\n\nexport const removeSelectedPeople = (data) => ({\n\ttype: REMOVE_SELECTED_PEOPLE,\n\tpayload: { selectedUser: data },\n});\n\nexport const removeSelectedOwner = (data) => ({\n\ttype: REMOVE_SELECTED_OWNER,\n\tpayload: { selectedUser: data },\n});\n\nexport const setAllActive = (id, ownerArr, findArr, searched) => ({\n\ttype: SELECT_ALL_USER,\n\tpayload: {\n\t\tid: id,\n\t\towners: ownerArr,\n\t\tnewArr: findArr,\n\t\tisSearched: searched,\n\t},\n});\n\nexport const removeAllUser = (id, obj, ownerArr, afterRemoved, searchedData = false) => ({\n\ttype: REMOVE_ALL_USER,\n\tpayload: {\n\t\tid: id,\n\t\tdata: obj,\n\t\towners: ownerArr,\n\t\tremoved: afterRemoved,\n\t\tisSearchedData: searchedData,\n\t},\n});\n\nexport const removeAll = () => ({\n\ttype: REMOVE_ALL,\n});\n","import * as actions from 'actions/ScheduleFilter';\n\nconst INITIAL_STATE = {\n\tallFilter: false,\n\tactivitiesFilter: {},\n\tuserFilter: [],\n\tdisplayMySchedule: true,\n\tselectedPeople: 0,\n\ttotalPeople: 0,\n\ttotalOwners: 0,\n\ttotalGroups: 0,\n\tallPeopleSelected: false,\n\townersSelected: 0,\n\tgroupsSelected: 0,\n\tselectedGroups: {},\n\tcustomGroup: [],\n\tstoredSearch: [],\n\tadvancedCalendarActive: false,\n};\n\nconst isGroupActive = (group, id) => {\n\tif (Object.keys(group).length === 0) {\n\t\treturn true;\n\t}\n\n\treturn group[id];\n}\n\nconst getUniqueStudents = (userFilter) => {\n\tlet selectedStudents = [];\n\tObject.values(userFilter).forEach(group => {\n\t\tObject.values(group.students).forEach(student => {\n\t\t\tif (!selectedStudents.some(s => s === student.id)) {\n\t\t\t\tselectedStudents.push(student.id);\n\t\t\t}\n\t\t});\n\t});\n\treturn selectedStudents.length;\n}\nconst getUniqueOwners = (userFilter) => {\n\tlet selectedOwners = [];\n\tObject.values(userFilter).forEach(group => {\n\t\tObject.values(group.owners).forEach(owner => {\n\t\t\tif (!selectedOwners.some(o => o === owner.id)) {\n\t\t\t\tselectedOwners.push(owner.id);\n\t\t\t}\n\t\t});\n\t});\n\treturn selectedOwners.length;\n}\n\nexport default function (state = INITIAL_STATE, action) {\n\tlet newUserFilter = null;\n\tswitch (action.type) {\n\t\tcase actions.UPDATE_FILTER:\n\t\t\tif (action.payload.allData) {\n\t\t\t\treturn { ...state, activitiesFilter: action.payload.obj, allFilter: true };\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tactivitiesFilter: {\n\t\t\t\t\t...state.activitiesFilter,\n\t\t\t\t\t...action.payload.obj,\n\t\t\t\t},\n\t\t\t\tallFilter: false,\n\t\t\t};\n\n\t\tcase actions.TOGGLE_ADVANCED_CALENDAR:\n\t\t\treturn { ...state, advancedCalendarActive: !state.advancedCalendarActive };\n\n\t\tcase actions.CLEAR_FILTER:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tactivitiesFilter: action.payload.filterData,\n\t\t\t\tallFilter: false,\n\t\t\t};\n\n\t\tcase actions.TOGGLE_MY_SCHEDULE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tdisplayMySchedule: !state.displayMySchedule,\n\t\t\t};\n\n\t\t/* handle group search function section */\n\t\tcase actions.SET_TOTAL_AMOUNT:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttotalPeople:\n\t\t\t\t\tstate.totalPeople > action.payload.countTotal\n\t\t\t\t\t\t? state.totalPeople\n\t\t\t\t\t\t: action.payload.countTotal,\n\t\t\t};\n\n\t\tcase actions.REMOVE_SEARCHED_GROUP:\n\t\t\tlet oSearch = action.payload.obj;\n\t\t\tnewUserFilter = state.userFilter.filter((x) => x.id !== action.payload.group);\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\tgroupsSelected: state.groupsSelected - 1 <= 0 ? 0 : state.groupsSelected - 1,\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\tstoredSearch: state.storedSearch.filter((x) => x.id !== action.payload.group),\n\t\t\t\ttotalPeople:\n\t\t\t\t\tstate.totalPeople - oSearch.students?.length <= 0\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: state.totalPeople - oSearch.students?.length,\n\t\t\t\ttotalOwners:\n\t\t\t\t\tstate.totalOwners - oSearch.owners?.length <= 0\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: state.totalOwners - oSearch.owners?.length,\n\t\t\t\ttotalGroups: state.totalGroups - 1 <= 0 ? 0 : state.totalGroups - 1,\n\t\t\t};\n\n\t\tcase actions.TOGGLE_ALL_USERS:\n\t\t\tif (state.allPeopleSelected) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedPeople: 0,\n\t\t\t\t\tuserFilter: [],\n\t\t\t\t\tallPeopleSelected: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tallPeopleSelected: !state.allPeopleSelected,\n\t\t\t};\n\n\t\tcase actions.SET_CUSTOM_GROUP:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tcustomGroup: action.payload.group,\n\t\t\t};\n\n\t\tcase actions.SET_SEARCH_GROUP:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstoredSearch: [...state.storedSearch, action.payload.group.userId],\n\t\t\t};\n\n\t\tcase actions.SET_ALL_SEARCHED:\n\t\t\tnewUserFilter = [...state.userFilter, ...action.payload.data];\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\tgroupsSelected: state.groupsSelected + action.payload.data.length,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, ...action.payload.groupsChecked },\n\t\t\t};\n\n\t\tcase actions.SET_ALL_GROUPS:\n\t\t\tconst items = JSON.parse(JSON.stringify(action.payload.data)).map((section) => {\n\t\t\t\tsection.owners = [];\n\t\t\t\treturn section;\n\t\t\t});\n\n\t\t\tnewUserFilter = [...state.userFilter, ...items];\n\t\t\tif (action.payload.total > state.totalPeople) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\t\tcustomGroup: action.payload.data,\n\t\t\t\t\ttotalPeople: state.totalPeople + action.payload.total ?? 0,\n\t\t\t\t\tgroupsSelected: state.groupsSelected + action.payload.totalGroups ?? 0,\n\t\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\t\ttotalGroups: state.totalGroups + action.payload.totalGroups ?? 0,\n\t\t\t\t\ttotalOwners: state.totalOwners + action.payload.totalOwners ?? 0,\n\t\t\t\t\tselectedGroups: { ...state.selectedGroups, ...action.payload.groupsChecked },\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!action.payload.totalPeople) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\t\tcustomGroup: action.payload.data,\n\t\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\t\tgroupsSelected: state.totalGroups,\n\t\t\t\t\tselectedGroups: { ...state.selectedGroups, ...action.payload.groupsChecked },\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\tcustomGroup: action.payload.data,\n\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\tselectedGroups: { ...state.selectedGroups, ...action.payload.groupsChecked },\n\t\t\t};\n\n\t\tcase actions.ADD_SECTION:\n\t\t\tif (action.payload.data?.id) {\n\t\t\t\t// Sort students and owners\n\t\t\t\taction.payload.data?.students?.sort((a, b) => (a.lastName + a.firstName).localeCompare(b.lastName + b.firstName));\n\t\t\t\taction.payload.data?.owners?.sort((a, b) => (a.lastName + a.firstName).localeCompare(b.lastName + b.firstName));\n\n\t\t\t\tlet item = JSON.parse(JSON.stringify(action.payload.data));\n\t\t\t\titem.owners = [];\n\n\t\t\t\tnewUserFilter = action.payload.checkBox ?\n\t\t\t\t\tstate.userFilter.filter((x) =>\n\t\t\t\t\t\tx.id !== action.payload.data.id\n\t\t\t\t\t).concat(item)\n\t\t\t\t\t: state.userFilter;\n\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedGroups: action.payload.checkBox ? {\n\t\t\t\t\t\t...state.selectedGroups,\n\t\t\t\t\t\t[action?.payload?.data?.id]: true\n\t\t\t\t\t}\n\t\t\t\t\t\t: state.selectedGroups,\n\t\t\t\t\ttotalGroups: state.totalGroups + 1,\n\t\t\t\t\tgroupsSelected: state.groupsSelected + 1,\n\t\t\t\t\ttotalOwners: state.totalOwners + item.owners.filter((x) =>\n\t\t\t\t\t\tx.id !== action.payload.currentUser\n\t\t\t\t\t).length,\n\t\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\t\ttotalPeople: state.totalPeople + item.students.length,\n\t\t\t\t\tcustomGroup: action.payload.search\n\t\t\t\t\t\t? state.customGroup\n\t\t\t\t\t\t: state.customGroup\n\t\t\t\t\t\t\t.filter((x) => x.id !== action.payload.data.id)\n\t\t\t\t\t\t\t.concat(action.payload.data),\n\t\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\t\tstoredSearch: !action.payload.search ?\n\t\t\t\t\t\tstate.storedSearch\n\t\t\t\t\t\t: state.storedSearch\n\t\t\t\t\t\t\t.filter((x) => x.id !== action.payload.data.id)\n\t\t\t\t\t\t\t.concat(action.payload.data),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\tcase actions.SELECT_ALL_USER:\n\t\t\tnewUserFilter = state.userFilter\n\t\t\t\t.filter((x) => x.id !== action.payload.id)\n\t\t\t\t.concat(action.payload.newArr);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, [action.payload.id]: true },\n\t\t\t\tgroupsSelected: state.groupsSelected + 1,\n\t\t\t};\n\n\t\tcase actions.REMOVE_ALL_USER:\n\t\t\tnewUserFilter = [...action.payload.removed];\n\t\t\tif (action.payload.data?.students?.length) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedGroups: { ...state.selectedGroups, [action?.payload?.data?.id]: false },\n\t\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\t\tallPeopleSelected: false,\n\t\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\t\tgroupsSelected: state.groupsSelected - 1 <= 0 ? 0 : state.groupsSelected - 1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tgroupsSelected: state.groupsSelected - 1 <= 0 ? 0 : state.groupsSelected - 1,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, [action?.payload?.data?.id]: false },\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t};\n\n\t\tcase actions.CHANGE_SELECTED_PEOPLE:\n\t\t\tnewUserFilter = state.userFilter\n\t\t\t\t.filter((x) => x.id !== action.payload.selectedUser.id)\n\t\t\t\t.concat(action.payload.selectedUser);\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\tallPeopleSelected: false,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, [action?.payload?.selectedUser?.id]: true },\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\tgroupsSelected: isGroupActive(state.selectedGroups, action?.payload?.selectedUser?.id) ?\n\t\t\t\t\tstate.groupsSelected + 1 : state.groupsSelected,\n\t\t\t};\n\n\t\tcase actions.CHANGE_SELECTED_OWNER:\n\t\t\tnewUserFilter = state.userFilter\n\t\t\t\t.filter((x) => x.id !== action.payload.selectedUser.id)\n\t\t\t\t.concat(action.payload.selectedUser);\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\tallPeopleSelected: false,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, [action?.payload?.selectedUser?.id]: true },\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t};\n\n\t\tcase actions.REMOVE_SELECTED_PEOPLE:\n\t\t\tif (\n\t\t\t\taction.payload.selectedUser.students.length === 0 &&\n\t\t\t\taction.payload.selectedUser.owners.length === 0\n\t\t\t) {\n\t\t\t\tnewUserFilter = state.userFilter.filter((x) => x.id !== action.payload.selectedUser.id);\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tallPeopleSelected: false,\n\t\t\t\t\tgroupsSelected: state.groupsSelected - 1 <= 0 ? 0 : state.groupsSelected - 1,\n\t\t\t\t\tselectedGroups: { ...state.selectedGroups, [action.payload.selectedUser.id]: false },\n\t\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tnewUserFilter = state.userFilter\n\t\t\t\t.filter((x) => x.id !== action.payload.selectedUser.id)\n\t\t\t\t.concat(action.payload.selectedUser);\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tallPeopleSelected: false,\n\t\t\t\tgroupsSelected: state.groupsSelected,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, [action.payload.selectedUser.id]: true },\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\tselectedPeople: getUniqueStudents(newUserFilter),\n\t\t\t};\n\n\t\tcase actions.REMOVE_SELECTED_OWNER:\n\t\t\tif (\n\t\t\t\taction.payload.selectedUser.students.length === 0 &&\n\t\t\t\taction.payload.selectedUser.owners.length === 0\n\t\t\t) {\n\t\t\t\tnewUserFilter = state.userFilter.filter((x) => x.id !== action.payload.selectedUser.id);\n\t\t\t\treturn {\n\t\t\t\t\tallPeopleSelected: false,\n\t\t\t\t\t...state,\n\t\t\t\t\tgroupsSelected: state.groupsSelected - 1 <= 0 ? 0 : state.groupsSelected - 1,\n\t\t\t\t\tselectedGroups: { ...state.selectedGroups, [action.payload.selectedUser.id]: false },\n\t\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tnewUserFilter = state.userFilter\n\t\t\t\t.filter((x) => x.id !== action.payload.selectedUser.id)\n\t\t\t\t.concat(action.payload.selectedUser);\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tallPeopleSelected: false,\n\t\t\t\tgroupsSelected: state.groupsSelected,\n\t\t\t\tselectedGroups: { ...state.selectedGroups, [action.payload.selectedUser.id]: true },\n\t\t\t\tuserFilter: newUserFilter,\n\t\t\t\townersSelected: getUniqueOwners(newUserFilter),\n\t\t\t};\n\n\t\tcase actions.REMOVE_ALL:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuserFilter: [],\n\t\t\t\townersSelected: 0,\n\t\t\t\tselectedPeople: 0,\n\t\t\t\tgroupsSelected: 0,\n\t\t\t\tallPeopleSelected: false,\n\t\t\t\tselectedGroups: {},\n\t\t\t};\n\n\t\t// Clear everything, used for when changing school\n\t\tcase actions.CLEAR_ALL:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tuserFilter: [],\n\t\t\t\townersSelected: 0,\n\t\t\t\tselectedPeople: 0,\n\t\t\t\tgroupsSelected: 0,\n\t\t\t\tallPeopleSelected: false,\n\t\t\t\tselectedGroups: {},\n\t\t\t\tcustomGroup: [],\n\t\t\t\ttotalPeople: 0,\n\t\t\t\ttotalOwners: 0,\n\t\t\t\ttotalGroups: 0,\n\t\t\t\tstoredSearch: [],\n\t\t\t\tadvancedCalendarActive: false,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","import api from 'lib/api';\n\nexport const GET_WELCOME_INFORMATION_TEXT = 'INFORMATION_TEXT_GET_WELCOME_TEXT';\nexport const UPDATE_INFORMATION_TEXT_READ = 'INFORMATION_TEXT_UPDATE_INFORMATION_TEXT_READ';\nexport const HIDE_WELCOME_MODAL = 'HIDE_WELCOME_MODAL';\n\nexport const getWelcomeInformation = () => ({\n\ttype: GET_WELCOME_INFORMATION_TEXT,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get('informationTexts?messageType=welcome').then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const updateInformationTextRead = (values) => ({\n\ttype: UPDATE_INFORMATION_TEXT_READ,\n\tpayload: new Promise((resolve) => {\n\t\tapi.put(`informationTexts/contentread`, values).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n})\n\nexport const hideWelcomeWindow = () => ({\n\ttype:HIDE_WELCOME_MODAL,\n})","import {\n\tGET_WELCOME_INFORMATION_TEXT,\n\tHIDE_WELCOME_MODAL,\n} from 'actions/information_texts';\n\nconst INITIAL_STATE = {\n\twelcome: null,\n\thideWelcomeModal:false,\n\n};\n\nexport default function informationTexts(state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_WELCOME_INFORMATION_TEXT:\n\t\t\treturn { ...state, welcome: action.payload };\n\t case HIDE_WELCOME_MODAL:\n\t\t\treturn {...state, hideWelcomeModal:true}\t\t\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}","import api from 'lib/api';\n\nexport const GET_SCHOOL_TYPES = 'GET_SCHOOL_TYPES';\n\nexport const getSchoolTypes = () => ({\n\ttype: GET_SCHOOL_TYPES,\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`tenants/schooltypes`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});","import {\n\tGET_SCHOOL_TYPES,\n} from 'actions/tenants';\n\nconst INITIAL_STATE = {\n\tschoolTypes: []\n}\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_SCHOOL_TYPES:\n\t\t\treturn { ...state, schoolTypes: action.payload ?? [] };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import {\n\tGET_ASSIGNMENT_EVENTS_PAGINATION,\n\tSET_CURRENT_ASSIGNMENT_EVENT_PAGE,\n\tCLEAR_ASSIGNMENT_EVENT_PAGINATION_FROM_STORE,\n\tSET_ASSIGNMENT_EVENT_PAGE_FILTER,\n\tSET_ASSIGNMENT_EVENT_PAGE_SORT\n} from 'actions/assignments';\nimport moment from 'moment';\n\nconst INITIAL_STATE = {\n\tevents: [],\n\thistory: [],\n\tcurrentPage: 0,\n\ttotal: 0,\n\tsortField: null,\n\tsortOrder: null,\n\tfilterField: null,\n\tfilterValues: null,\n\tlastFetched: null,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n\tswitch (action.type) {\n\t\tcase GET_ASSIGNMENT_EVENTS_PAGINATION:\n\t\t\tlet pageInfo = {\n\t\t\t\tpage: action.payload.page,\n\t\t\t\tevents: action.payload.events,\n\t\t\t};\n\n\t\t\tif (action.payload.events != null && action.payload.events.length > 0) { state.history.push(pageInfo); }\n\n\t\t\treturn { ...state, currentPage: action.payload.page, events: action.payload.events, history: state.history, total: action.payload.total, lastFetched: moment() };\n\t\tcase SET_CURRENT_ASSIGNMENT_EVENT_PAGE:\n\t\t\tvar existingHistory = state.history.find(t => t.page == action.payload);\n\n\t\t\tif (existingHistory != null) {\n\t\t\t\treturn { ...state, currentPage: action.payload, events: existingHistory.events };\n\t\t\t}\n\n\t\t\treturn { ...state };\n\t\tcase CLEAR_ASSIGNMENT_EVENT_PAGINATION_FROM_STORE:\n\t\t\treturn {\n\t\t\t\t...state, events: [], history: [], currentPage: 0, total: 0, sortField: null,\n\t\t\t\tsortOrder: null,\n\t\t\t\tfilterField: null,\n\t\t\t\tfilterValues: null,\n\t\t\t\tlastFetched: null\n\t\t\t};\n\n\t\tcase SET_ASSIGNMENT_EVENT_PAGE_FILTER:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tevents: [],\n\t\t\t\thistory: [],\n\t\t\t\tcurrentPage: 0,\n\t\t\t\ttotal: 0,\n\t\t\t\tlastFetched: null,\n\t\t\t\tfilterField: action.payload.filterField,\n\t\t\t\tfilterValues: action.payload.filterValues\n\t\t\t};\n\t\tcase SET_ASSIGNMENT_EVENT_PAGE_SORT:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tevents: [],\n\t\t\t\thistory: [],\n\t\t\t\tcurrentPage: 0,\n\t\t\t\ttotal: 0,\n\t\t\t\tlastFetched: null,\n\t\t\t\tsortField: action.payload.sortField,\n\t\t\t\tsortOrder: action.payload.sortOrder\n\t\t\t};\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};","import { combineReducers } from 'redux';\nimport { reducer as reduxFormReducer } from 'redux-form';\n\nimport Assignments from './reducer_assignments';\nimport Status from './reducer_status';\nimport Planning from './reducer_plans';\nimport Sections from './reducer_sections';\nimport Schedule from './reducer_schedule';\nimport Notifications from './reducer_notifications';\nimport Knowledge from './reducer_knowledge';\nimport User from './reducer_user';\nimport Errors from './reducer_errors';\nimport DetailsTable from './reducer_detailstable';\nimport Assessments from './reducer_assessments';\nimport Progress from './reducer_progress';\nimport Preschoolgoal from './reducer_preschoolgoal';\nimport Posts from './reducer_posts';\nimport Documents from './reducer_documents';\nimport CombinedEvents from './reducer_combined_events';\nimport Matrix from './reducer_matrix';\nimport Courses from './reducer_courses';\nimport OneDrive from './reducer_onedrive';\nimport Logs from './reducer_logs';\nimport Absence from './reducer_absence';\nimport School from './reducer_schools';\nimport Search from './reducer_search';\nimport Header from './reducer_header';\nimport Verdicts from './reducer_verdicts';\nimport Conversation from './reducer_conversation';\nimport ConversationAdmin from './reducer_conversations_admin';\nimport Templates from './reducer_templates';\nimport Meetings from './reducer_meetings';\nimport Notes from './reducer_notes';\nimport Menu from './reducer_menu';\nimport AdditionalAdjustments from './reducer_adjustments';\nimport TimeBlocks from './reducer_timeblocks';\nimport BaseGroups from './reducer_basegroups';\nimport Bookmarks from './reducer_bookmarks';\nimport Plagiarism from './reducer_plagiarism';\nimport Languages from './reducer_languages';\nimport Services from './reducer_services';\nimport Blocks from './reducer_blocks';\nimport Subjects from './reducer_subjects';\nimport SMS from './reducer_sms';\nimport ScheduleFilter from './reducer_scheduleFilter';\nimport InformationTexts from './reducer_information_texts';\nimport Tenant from './reducer_tenants';\nimport AssignmentEventsPagination from './reducer_assignments_events_pagination';\n\n\nconst rootReducer = combineReducers({\n\tform: reduxFormReducer,\n\tassignments: Assignments,\n\tstatus: Status,\n\tplanning: Planning,\n\tsections: Sections,\n\tschedule: Schedule,\n\tNotifications: Notifications,\n\tknowledge: Knowledge,\n\tuser: User,\n\terrors: Errors,\n\tdetailsTable: DetailsTable,\n\tassessments: Assessments,\n\tprogress: Progress,\n\tPreschoolGoals: Preschoolgoal,\n\tPosts: Posts,\n\tDocuments: Documents,\n\tCombinedEvents: CombinedEvents,\n\tMatrix: Matrix,\n\tCourses: Courses,\n\tonedrive: OneDrive,\n\tLogs: Logs,\n\tAbsence: Absence,\n\tSchool,\n\tSearch,\n\tHeader,\n\tVerdicts,\n\tConversation,\n\tConversationAdmin,\n\tTemplates,\n\tMeetings,\n\tNotes,\n\tMenu,\n\tAdditionalAdjustments,\n\tTimeBlocks,\n\tBaseGroups,\n\tBookmarks,\n\tPlagiarism,\n\tLanguages,\n\tServices,\n\tSubjects,\n\tBlocks,\n\tSMS,\n\tScheduleFilter,\n\tInformationTexts,\n\tTenant,\n\tAssignmentEventsPagination: AssignmentEventsPagination\n});\n\nexport default rootReducer;\n","import React, { useEffect, useState } from \"react\";\nimport { Prompt } from 'react-router-dom';\n\nexport const FormPrompt = ({ hasUnsavedChanges, formPromptMessage, currentPathContext }) => {\n\tconst [currentPath, setCurrentPath] = useState(currentPathContext);\n\n\tuseEffect(() => {\n\t\tconst onBeforeUnload = (e) => {\n\t\t\tif (hasUnsavedChanges) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.returnValue = \"\";\n\t\t\t}\n\t\t};\n\t\twindow.addEventListener(\"beforeunload\", onBeforeUnload);\n\t\treturn () => window.removeEventListener(\"beforeunload\", onBeforeUnload);\n\n\t}, [hasUnsavedChanges]);\n\n\tconst onLocationChange = (location) => {\n\t\t// If the user is trying to navigate to the same page or if hash changing, we don't need to prompt \n\t\tif (location.pathname === currentPath) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn formPromptMessage;\n\t};\n\n\treturn ;\n};","import React from 'react';\n\nconst Plus = (props) => (\n\t\n\t\t\n\t\n);\n\nexport default Plus;","import React from 'react';\n\nconst Minus = (props) => {\n\treturn \n\t\t\n\t\n}\n\nexport default Minus;","import React from 'react';\n\nconst Trash = props => (\n \n \n \n \n \n \n \n \n);\n\nexport default Trash;\n","import React from 'react';\n\nconst Pen = props => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default Pen;\n","import React from 'react';\n\nconst Document = props => (\n \n \n \n \n \n \n \n \n \n);\n\nexport default Document;\n","import React from 'react';\n\nconst MS_OneDrive = props => (\n \n \n \n \n \n);\n\nexport default MS_OneDrive;\n","import React from 'react';\n\nconst Close = () => (\n \n \n \n);\n\nexport default Close;\n","import React from 'react';\n\nconst Arrow_Down = props => (\n \n);\n\nexport default Arrow_Down;\n","import React from 'react';\n\nconst Image = props => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n);\n\nexport default Image;\n","import React from 'react';\n\nconst Chevron = props => (\n\t\n\t\t\n\t\n);\n\nexport default Chevron;\n","import React from 'react';\n\nconst Immersive_Reader = props => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\n\t\n);\n\nexport default Immersive_Reader;\n","import React from 'react';\n\nconst AssignmentTaskStatusStarted = React.memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nexport default AssignmentTaskStatusStarted;","import React from 'react';\n\nconst AssignmentTaskStatusNotStarted = React.memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nexport default AssignmentTaskStatusNotStarted;\n","import React from 'react';\n\nconst AssignmentTaskStatusSubmitted = React.memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nexport default AssignmentTaskStatusSubmitted;","import React from 'react';\n\nconst AssignmentTaskStatusNotComplete = React.memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nexport default AssignmentTaskStatusNotComplete;","import React from 'react';\n\nconst AssignmentTaskStatusCanDevelop = React.memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nexport default AssignmentTaskStatusCanDevelop;","import React from 'react';\n\nconst AssignmentTaskStatusCompleted = React.memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nexport default AssignmentTaskStatusCompleted;","import React from 'react';\n\nconst FolderIcon = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FolderIcon;","import React from 'react';\n\nconst OneDriveIcon = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t)\n};\n\nexport default OneDriveIcon;","/* Import Icons */\nimport Plus from './IconsSrc/plus';\nimport Minus from './IconsSrc/minus';\nimport Trash from './IconsSrc/trash';\nimport Pen from './IconsSrc/pen';\nimport Document from './IconsSrc/document';\nimport MS_OneDrive from './IconsSrc/ms-onedrive';\nimport Close from './IconsSrc/close';\nimport Arrow_Down from './IconsSrc/arrow_down';\nimport Image from './IconsSrc/image';\nimport Chevron from './IconsSrc/chevron';\nimport Immersive_Reader from './IconsSrc/immersive_reader';\nimport AssignmentTaskStatusStarted from './IconsSrc/assignment_task_status_started';\nimport AssignmentTaskStatusNotStarted from './IconsSrc/assignment_task_status_not_started';\nimport AssignmentTaskStatusSubmitted from './IconsSrc/assignment_task_status_submitted';\nimport AssignmentTaskStatusNotComplete from './IconsSrc/assignment_task_status_not_complete';\nimport AssignmentTaskStatusCanDevelop from './IconsSrc/assignment_task_status_can_develop';\nimport AssignmentTaskStatusCompleted from './IconsSrc/assignment_task_status_completed';\nimport FolderIcon from './IconsSrc/folder_icon';\nimport OneDriveIcon from './IconsSrc/one_drive_icon';\n\nexport {\n\tPlus,\n\tMinus,\n\tTrash,\n\tPen,\n\tDocument,\n\tMS_OneDrive,\n\tClose,\n\tArrow_Down,\n\tImage,\n\tChevron,\n\tImmersive_Reader,\n\tAssignmentTaskStatusStarted,\n\tAssignmentTaskStatusNotStarted,\n\tAssignmentTaskStatusSubmitted,\n\tAssignmentTaskStatusNotComplete,\n\tAssignmentTaskStatusCanDevelop,\n\tAssignmentTaskStatusCompleted,\n\tFolderIcon,\n\tOneDriveIcon\n};","import { Stack } from '@mui/material';\nimport { AssignmentTaskStatusSubmitted, AssignmentTaskStatusNotStarted, AssignmentTaskStatusStarted, AssignmentTaskStatusCanDevelop, AssignmentTaskStatusNotComplete } from 'UI/Icons';\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Select from 'react-select';\nimport './_simpleSelect.scss';\n\n/**\n * @param {string} props name - Input name\n * @param {string} props id - Input id\n * @param {Array} props options\n * @param {function} props onChange\n *\n * @returns {JSX Component}\n */\nclass SimpleSelect extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tvalue: this.props.selectedValue != null ? this.props.selectedValue : null,\n\t\t\tdisabled: this.props.disabled != null ? this.props.disabled : false,\n\t\t\toptions: [],\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.parseOptions();\n\t}\n\n\tparseOptions() {\n\t\tlet initOptions = [];\n\t\tlet assignmentTaskStatusIcons = [\n\t\t\t{ id: 'ASSIGNMENT_TASK_NOT_STARTED', icon: },\n\t\t\t{ id: 'ASSIGNMENT_TASK_STARTED', icon: },\n\t\t\t{ id: 'ASSIGNMENT_TASK_SUBMITTED', icon: },\n\t\t\t{ id: 'ASSIGNMENT_TASK_NOT_COMPLETE', icon: },\n\t\t\t{ id: 'ASSIGNMENT_TASK_CAN_DEVELOP', icon: },\n\t\t]\n\n\t\tif (this.props.status != null) {\n\t\t\tif (this.props.type == 'assignment') {\n\t\t\t\tinitOptions = this.props.status.assignmentTaskStatus.filter(t => t.selectable);\n\n\t\t\t\tinitOptions.forEach(option => {\n\t\t\t\t\tconst icon = assignmentTaskStatusIcons.find(item => item.id === option.id)?.icon;\n\t\t\t\t\toption.icon = icon || null;\n\t\t\t\t});\n\t\t\t} else if (this.props.type == 'planning') {\n\t\t\t\tinitOptions = this.props.status.planningStatus.filter(t => t.selectable);\n\t\t\t} else if (this.props.type == 'assessment') {\n\t\t\t\tinitOptions = this.props.status.assessmentStatus.filter(t => t.selectable);\n\t\t\t\t// Remove icons and colors from options for assessments\n\t\t\t\tinitOptions.forEach(option => { option.icon = null; option.color = null; });\n\t\t\t}\n\t\t}\n\n\t\tconst options = initOptions.map((option) => {\n\t\t\tif (option != undefined) {\n\t\t\t\tlet leftInfo = null;\n\n\t\t\t\tif (option.color) {\n\t\t\t\t\tswitch (option.id) {\n\t\t\t\t\t\tcase 'ASSESSMENT_PUBLISHED':\n\t\t\t\t\t\t\tleftInfo =
;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'ASSESSMENT_STARTED':\n\t\t\t\t\t\t\tleftInfo =
;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'ASSESSMENT_COMPLETED':\n\t\t\t\t\t\t\tleftInfo =
;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tleftInfo =
;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tleftInfo = option.icon ?
{option.icon}
: leftInfo;\n\n\t\t\t\tconst obj = {\n\t\t\t\t\tvalue: option.id,\n\t\t\t\t\tcolor: null,\n\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{leftInfo}\n\t\t\t\t\t\t\t
{option.value}
\n\t\t\t\t\t\t\n\t\t\t\t\t),\n\t\t\t\t};\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t});\n\n\t\tthis.setState({ options });\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (newProps) => {\n\t\tif (newProps.selectedValue !== this.props.selectedValue) {\n\t\t\tthis.setState({ value: newProps.selectedValue });\n\t\t}\n\n\t\tthis.setState({ disabled: newProps.disabled });\n\n\t\tthis.parseOptions();\n\t}\n\n\t_onChange = (option) => {\n\t\tthis.setState({ value: option.value }, () => {\n\t\t\tthis.props.onChange(this.props.item, option);\n\t\t});\n\t}\n\n\trender() {\n\t\tlet selectValue = null;\n\n\t\tif (this.state.options != null) {\n\t\t\tlet selected = this.state.options.find(option =>\n\t\t\t\toption.value == this.state.value\n\t\t\t);\n\t\t\tselectValue = selected;\n\t\t}\n\n\t\treturn (\n\t\t\t this._onChange(value)}\n\t\t\t\tclassName=\"simple-select\"\n\t\t\t\tplaceholder={this.props.placeholder != null ? this.props.placeholder : ''}\n\t\t\t\tcomponents={{ IndicatorSeparator: () => null }}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tstatus: state.status.status,\n\t};\n}\n\nexport default connect(mapStateToProps, {})(SimpleSelect);\n","import { useSelector } from \"react-redux\";\nimport { translate as getTranslate } from '@haldor/ui';\n\nexport const useTranslate = () => {\n\treturn getTranslate(useSelector(state => state.Languages.translations));\n}","export const getDescription = (description) => {\n\ttry {\n\t\tdescription = description.replace(/amp;/g, '');\n\t\tdescription = description.replace(/amp;wd/g, '');\n\t\tdescription = description.replace(/</g, '<');\n\t\tdescription = description.replace(/>/g, '>');\n\t\tdescription = description.replace(/\\<\\/b\\>/ig, ' ');\n\t\tdescription = description.replace(/\\<\\/i\\>/ig, ' ');\n\t\tdescription = description.replace(/\\<\\/a\\>/ig, ' ');\n\t\tdescription = description.replace(/\\<\\/p\\>/ig, '

');\n\t} catch (error) {\n\t\tdescription = description;\n\t}\n\n\treturn description;\n};\n\nexport const debounce = (func, wait, immediate) => {\n\tvar timeout;\n\n\treturn function () {\n\t\tvar context = this, args = arguments;\n\t\tvar later = function () {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) func.apply(context, args);\n\t\t};\n\n\t\tvar callNow = immediate && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t\tif (callNow) func.apply(context, args);\n\t};\n}\n\nexport const throttle = (func, limit) => {\n\tlet lastFunc\n\tlet lastRan\n\n\treturn function () {\n\t\tconst context = this\n\t\tconst args = arguments\n\t\tif (!lastRan) {\n\t\t\tfunc.apply(context, args)\n\t\t\tlastRan = Date.now()\n\t\t} else {\n\t\t\tclearTimeout(lastFunc)\n\t\t\tlastFunc = setTimeout(function () {\n\t\t\t\tif (Date.now() - lastRan >= limit) {\n\t\t\t\t\tfunc.apply(context, args)\n\t\t\t\t\tlastRan = Date.now()\n\t\t\t\t}\n\t\t\t}, limit - (Date.now() - lastRan))\n\t\t}\n\t}\n}\n\nexport const getImmersiveReaderDataFromBlocks = (title, blocks) => {\n\tlet data = {\n\t\ttitle: title,\n\t\tchunks: [\n\t\t\t{\n\t\t\t\tcontent: \"

\" + title + \"

\",\n\t\t\t\tmimeType: \"text/html\",\n\t\t\t},\n\t\t],\n\t};\n\n\tif (blocks != null) {\n\t\tblocks.forEach(block => {\n\t\t\tif (block.type == 'Haldor.Blocks.Editor') {\n\t\t\t\tif (block.title != null && block.title != '') {\n\t\t\t\t\tdata.chunks.push({\n\t\t\t\t\t\tcontent: `

${block.title}

`,\n\t\t\t\t\t\tmimeType: \"text/html\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tdata.chunks.push({\n\t\t\t\t\tcontent: getDescription(block.value),\n\t\t\t\t\tmimeType: \"text/html\",\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t}\n\n\treturn data;\n}\n\n/**\n * Capitalize string\n * @param {string} string\n * @returns {string} Capitalized string\n */\nexport const capitalize = (string) => {\n\tif (string == null) {\n\t\treturn '';\n\t}\n\n\treturn string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}","import React from 'react';\nimport DataObject from './index.js';\n\nclass ColorScale extends DataObject {\n\n\tcolors = [\n\t\t'#f55d6e', // Not achieved\n\t\t'#1bd308', // Lowest\n\t\t'#1ede34',\n\t\t'#23de96',\n\t\t'#12d3ad',\n\t\t'#2bbbc1', // Middle\n\t\t'#179bbc',\n\t\t'#1e87b5',\n\t\t'#1e6fb5',\n\t\t'#0b5ca8', // Highest\n\t];\n\n\tget(addRed = true) {\n\t\tlet size = this.data;\n\t\tif (addRed) {\n\t\t\tsize = size - 1;\n\t\t}\n\n\t\tlet result = [];\n\n\t\tif (size == 1) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 2) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 3) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 4) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[7],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 5) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[3],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[7],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 6) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[3],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[6],\n\t\t\t\tthis.colors[8],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 7) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[3],\n\t\t\t\tthis.colors[4],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[6],\n\t\t\t\tthis.colors[8],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 8) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[2],\n\t\t\t\tthis.colors[3],\n\t\t\t\tthis.colors[4],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[6],\n\t\t\t\tthis.colors[8],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size == 9) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[2],\n\t\t\t\tthis.colors[3],\n\t\t\t\tthis.colors[4],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[6],\n\t\t\t\tthis.colors[7],\n\t\t\t\tthis.colors[8],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\t\t}\n\n\t\tif (size > 9) {\n\t\t\tresult = [\n\t\t\t\tthis.colors[1],\n\t\t\t\tthis.colors[2],\n\t\t\t\tthis.colors[3],\n\t\t\t\tthis.colors[4],\n\t\t\t\tthis.colors[5],\n\t\t\t\tthis.colors[6],\n\t\t\t\tthis.colors[7],\n\t\t\t\tthis.colors[8],\n\t\t\t\tthis.colors[9],\n\t\t\t];\n\n\t\t\tlet needed = size - 9;\n\t\t\tfor (let i = 0; i < needed; i++) {\n\t\t\t\tresult.push(this.colors[9]);\n\t\t\t}\n\t\t}\n\n\t\tif (addRed) {\n\t\t\tresult.unshift(this.colors[0]);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tgetAll() {\n\t\treturn this.colors;\n\t}\n\n}\n\nexport default ColorScale;\n","import React from 'react';\nimport { useTranslate } from 'lib/translate';\nimport { Icon } from '@haldor/ui';\nimport ColorScale from '_class/ColorScale';\n\nconst AssessmentDetailField = (props) => {\n\tconst translate = useTranslate();\n\tconst { resource, row } = props;\n\n\t/**\n\t * @param {object} cell\n\t */\n\tconst onCellClick = (cell) => {\n\t\tlet value = [];\n\t\tif (props.input.value != null && props.input.value !== '') {\n\t\t\tvalue = props.input.value;\n\t\t}\n\n\t\tif (getIsCellSelected(cell)) {\n\t\t\tvalue = value.filter((value) =>\n\t\t\t\tvalue.cellId != cell.id && value.assessmentBlockPartRowId != row.id\n\t\t\t);\n\t\t} else {\n\t\t\tconst existing = getRowValue(row.id);\n\n\t\t\tvalue = value.filter((value) =>\n\t\t\t\tvalue.assessmentBlockPartRowId != row.id\n\t\t\t);\n\n\t\t\tvalue.push({\n\t\t\t\t...existing,\n\t\t\t\tcellId: cell.id,\n\t\t\t\tassessmentBlockPartRowId: row.id,\n\t\t\t});\n\t\t}\n\n\t\tprops.input.onChange(value);\n\t}\n\n\t/**\n\t * @param {number} rowId\n\t */\n\tconst getRowValue = (rowId) => {\n\t\tif (props.input.value == null || props.input.value == '') {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn props.input.value.find((value) => value.assessmentBlockPartRowId == rowId);\n\t}\n\n\t/**\n\t * @param {object} cell\n\t */\n\tconst getIsCellSelected = (cell) => {\n\t\tif (props.input.value == null || props.input.value == '') {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet foundInValue = props.input.value.find((value) =>\n\t\t\tvalue.cellId == cell.id && value.assessmentBlockPartRowId == row.id\n\t\t)\n\n\t\treturn foundInValue != null;\n\t}\n\n\tconst getRowData = () => {\n\t\tif (row.referenceType == 'matrixRow') {\n\t\t\tlet foundRow = null;\n\t\t\tlet addNotAchieved = true;\n\t\t\tresource.value.details.forEach((_detail) => {\n\t\t\t\t_detail.matrix._ParagraphSet.forEach((_paragraph) => {\n\t\t\t\t\tconst matchingRow = _paragraph.rows.find((_row) => _row.id == row.referenceId);\n\n\t\t\t\t\tif (matchingRow != null) {\n\t\t\t\t\t\tif (_detail.matrix.disableNotAchieved) {\n\t\t\t\t\t\t\taddNotAchieved = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfoundRow = JSON.parse(JSON.stringify(matchingRow));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\n\t\t\tif (foundRow != null && addNotAchieved) {\n\t\t\t\tif (foundRow?.cells.find(cell => cell.id == 'F') == null) {\n\t\t\t\t\tfoundRow?.cells.unshift({\n\t\t\t\t\t\ttext: translate('Not achieved'),\n\t\t\t\t\t\tid: 'F',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn foundRow;\n\t\t}\n\n\t\tif (row.referenceType == 'assessmentGoalRow') {\n\t\t\tlet foundRow = resource?.value?.rows.find((_row) =>\n\t\t\t\t_row.id == row.referenceId\n\t\t\t);\n\n\t\t\tif (foundRow != null) {\n\t\t\t\tfoundRow.cells.sort((a, b) => a.index - b.index);\n\t\t\t}\n\n\t\t\treturn foundRow;\n\t\t}\n\t}\n\n\t/**\n\t * @param {object} rowData\n\t */\n\tconst getColors = (rowData) => {\n\t\tlet showRed = false;\n\n\t\tif (resource.referenceType == 'assessmentGoal') {\n\t\t\tshowRed = rowData.cells.find(cell => cell.type == 'NotAchievedTextField') != null;\n\t\t}\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\tconst detail = resource.value.details.find((detail) => {\n\t\t\t\treturn detail.matrix._ParagraphSet.find((paragraph) => {\n\t\t\t\t\treturn paragraph.rows.find((row) => row.id == rowData.id)\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (detail != null && !detail.matrix.disableNotAchieved) {\n\t\t\t\tshowRed = true;\n\t\t\t}\n\t\t}\n\n\t\treturn new ColorScale(rowData.cells.length).get(showRed);\n\t}\n\n\tconst getRowParagraph = () => {\n\t\tif (row.referenceType == 'matrixRow') {\n\t\t\tlet foundParagraph = null;\n\t\t\tresource.value.details.forEach((_detail) => {\n\t\t\t\t_detail.matrix._ParagraphSet.forEach((_paragraph) => {\n\t\t\t\t\tconst matchingRow = _paragraph.rows.find((_row) => _row.id == row.referenceId);\n\n\t\t\t\t\tif (matchingRow != null) {\n\t\t\t\t\t\tfoundParagraph = _paragraph;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn foundParagraph;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {object} cell\n\t * @param {number} index\n\t */\n\tconst renderCell = (cell, index) => {\n\t\tconst selected = getIsCellSelected(cell);\n\n\t\treturn onCellClick(cell)}\n\t\t>\n\t\t\t{row.referenceType == 'assessmentGoalRow' ?\n\t\t\t\tcell.value\n\t\t\t\t: cell.text}\n\n\t\t\t\n\t\t\n\t}\n\n\tconst data = getRowData();\n\tif (data == null) {\n\t\treturn null;\n\t}\n\n\tconst colors = getColors(data);\n\tconst paragraph = getRowParagraph();\n\n\treturn (\n\t\t<>\n\t\t\t{paragraph != null && paragraph.title != null ?
{paragraph.title}
: null}\n\t\t\t{paragraph != null && paragraph.subtitle != null ?
{paragraph.subtitle}
: null}\n\t\t\t
\n\t\t\t\t{paragraph != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{paragraph.paragraphNr}.{data.sentenceNr}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\t\t\t\t\t{data.text != null ?\n\t\t\t\t\t\tdata.text\n\t\t\t\t\t\t: data.description}\n\t\t\t\t
\n\n\t\t\t\t
5 ? \"cells df overflow-protection\" : \"cells df\"}>\n\t\t\t\t\t{data.cells.map(renderCell)}\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n\n}\n\nexport default AssessmentDetailField;","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Moment from 'moment';\n\nimport { getActiveLanguage } from '@haldor/ui';\n\nimport './time_picker.scss';\n\nclass TimePicker extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tMoment.locale(getActiveLanguage());\n\t}\n\n\tonMinutesFocus = () => {\n\t\tthis.refs['minute'].select();\n\t}\n\n\tonHourFocus = () => {\n\t\tthis.refs['hour'].select();\n\t}\n\n\tonInputChange = (event) => {\n\t\tconst timeString = event.target.value;\n\n\t\tconst split = timeString.split(':');\n\n\t\tif (split.length === 2 && this.props.time) {\n\t\t\tconst newTime = Moment(this.props.time).set('hour', split[0]).set('minute', split[1]);\n\t\t\tthis.props.onChange(newTime);\n\t\t}\n\t}\n\n\tonHourChange = (event) => {\n\t\tlet hours = event.target.value;\n\n\t\tif (parseInt(hours) < 0) {\n\t\t\thours = 0;\n\t\t}\n\n\t\tif (parseInt(hours) > 23) {\n\t\t\thours = 23;\n\t\t}\n\n\t\tif (hours.length > 1) {\n\t\t\tthis.refs['minute'].focus();\n\t\t}\n\n\t\tif (parseInt(hours) < 10) {\n\t\t\thours = '0' + hours;\n\t\t}\n\n\t\tconst newTime = Moment(this.props.time).set('hour', hours);\n\t\tthis.props.onChange(newTime);\n\t}\n\n\tonMinutesChange = (event) => {\n\t\tlet minutes = event.target.value;\n\n\t\tif (minutes.length == 3) {\n\t\t\tevent.target.select();\n\t\t}\n\n\t\tif (parseInt(minutes) < 0) {\n\t\t\tminutes = 0;\n\t\t}\n\n\t\tif (parseInt(minutes) > 59) {\n\t\t\tminutes = 59;\n\t\t}\n\n\t\tif (parseInt(minutes) < 10) {\n\t\t\tminutes = '0' + minutes;\n\t\t}\n\n\t\tconst newTime = Moment(this.props.time).set('minutes', minutes);\n\t\tthis.props.onChange(newTime);\n\t}\n\n\ttoggleAmPm = () => {\n\t\tlet newTime = null;\n\n\t\tif (Moment(this.props.time).format('A') == 'AM') {\n\t\t\tnewTime = Moment(this.props.time).add(12, 'hours');\n\t\t} else {\n\t\t\tnewTime = Moment(this.props.time).subtract(12, 'hours');\n\t\t}\n\n\t\tthis.props.onChange(newTime);\n\t}\n\n\trender() {\n\t\tconst format = this.props.twelve ? 'hh' : 'HH';\n\t\tconst hours = this.props.time ? Moment(this.props.time).format(format) : Moment().format(format);\n\t\tconst minutes = this.props.time ? Moment(this.props.time).format('mm') : Moment().format('mm');\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t:\n\n\t\t\t\t\t\n\n\t\t\t\t\t{this.props.twelve ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{Moment(this.props.time).format('A')}\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tlanguages: state.Languages.languages\n\t};\n}\n\nexport default connect(mapStateToProps, {})(TimePicker);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { translate } from '@haldor/ui';\n\nimport ReactQuill, { Quill } from 'react-quill-new';\nimport swal from 'sweetalert2';\n\nimport ImageCompress from 'quill-image-compress';\nQuill.register('modules/imageCompress', ImageCompress);\n\nimport QuillResizeImage from 'quill-resize-image';\nimport { QuillDeltaToHtmlConverter } from 'quill-delta-to-html';\nimport { editingStateInitializer } from '@mui/x-data-grid/internals';\nQuill.register(\"modules/resize\", QuillResizeImage);\n\nvar BaseImageFormat = Quill.import('formats/image');\nconst ImageFormatAttributesList = [\n\t'alt',\n\t'height',\n\t'width',\n\t'style'\n];\n\nclass ImageFormat extends BaseImageFormat {\n\tstatic formats(domNode) {\n\t\treturn ImageFormatAttributesList.reduce(function (formats, attribute) {\n\t\t\tif (domNode.hasAttribute(attribute)) {\n\t\t\t\tformats[attribute] = domNode.getAttribute(attribute);\n\t\t\t}\n\t\t\treturn formats;\n\t\t}, {});\n\t}\n\tformat(name, value) {\n\t\tif (ImageFormatAttributesList.indexOf(name) > -1) {\n\t\t\tif (value) {\n\t\t\t\tthis.domNode.setAttribute(name, value);\n\t\t\t} else {\n\t\t\t\tthis.domNode.removeAttribute(name);\n\t\t\t}\n\t\t} else {\n\t\t\tsuper.format(name, value);\n\t\t}\n\t}\n}\n\nQuill.register(ImageFormat, true);\n\nclass Editor extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tlet placeHolderText = '';\n\t\tif (this.props.placeholder) {\n\t\t\tplaceHolderText = this.props.placeholder;\n\t\t}\n\n\t\tthis.state = {\n\t\t\tplaceHolderText,\n\t\t\ttext: this.props.input ? this.props.input.value : this.props.value,\n\t\t};\n\n\t\tthis.modules = {\n\t\t\tresize: {\n\t\t\t\tlocale: {},\n\t\t\t},\n\t\t\timageCompress: {\n\t\t\t\tquality: 0.85, // defaults to 0.85\n\t\t\t\tmaxWidth: 800, // defaults to 800\n\t\t\t\tmaxHeight: 800, // defaults to 800\n\t\t\t\timageType: 'image/webp', // defaults to image/jpeg\n\t\t\t\tdebug: false, // defaults to false, set this to true if checking in console.log whats happening with image\n\t\t\t},\n\t\t\ttoolbar: {\n\t\t\t\tcontainer: [\n\t\t\t\t\t[{ header: [2, 3, false] }],\n\t\t\t\t\t['bold', 'italic', 'underline', 'strike', 'blockquote'],\n\t\t\t\t\t[\n\t\t\t\t\t\t{ 'color': ['#000000', '#ffffff', '#ffbe40', '#ff3149', '#86b100'] },\n\t\t\t\t\t\t{ 'background': ['#000000', '#ffffff', '#ffbe40', '#ff3149', '#86b100'] },\n\t\t\t\t\t],\n\t\t\t\t\t[{ list: 'ordered' }],\n\t\t\t\t\t['link', 'image', 'video', 'clean'],\n\t\t\t\t\t['formula'],\n\t\t\t\t],\n\t\t\t\thandlers: {\n\t\t\t\t\timage: this.imageHandler,\n\t\t\t\t\tlink: this.urlHandler,\n\t\t\t\t},\n\t\t\t},\n\t\t\tkeyboard: {\n bindings: {\n 'list autofill': {\n prefix: /^\\s*()$/\n }\n }\n },\n\t\t};\n\n\t\tthis.quill = null;\n\t}\n\n\t_setQuill = (element) => this.quill = element;\n\n\tdisableEvent = (e) => {\n\t\te.preventDefault();\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.disabled) {\n\t\t\tconst quill = this.quill.getEditor();\n\t\t\tquill.disable();\n\t\t}\n\n\t\tconst element = document.querySelector('.ql-toolbar');\n\t\tif (element) {\n\t\t\telement.addEventListener('mousedown', this.disableEvent);\n\t\t}\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tconst element = document.querySelector('.ql-toolbar');\n\t\tif (element) {\n\t\t\telement.removeEventListener('mousedown', this.disableEvent);\n\t\t}\n\n\t}\n\n\trender() {\n\t\tconst { meta } = this.props;\n\n\t\tconst formats = [\n\t\t\t'header',\n\t\t\t'bold', 'italic', 'underline', 'strike', 'blockquote', 'style',\n\t\t\t'list', /*'bullet',*/ 'color', 'background', /* 'indent', */\n\t\t\t'link', 'image', 'video',\n\t\t\t'formula',\n\t\t];\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.label ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t {\n\t\t\t\t\t\tlet newValue = editor.getHTML();\n\n\t\t\t\t\t\t// Seems like QuillDeltaToHtmlConverter double encodes the html, so decoding value\n\t\t\t\t\t\t// This cause some maxDepth issues with the editor and causes the page become white or unresponsive\n\t\t\t\t\t\t// newValue = this.decodeHtmlEntities(newValue);\n\t\t\t\t\t\tconst matches = newValue.match(//g);\n\n\t\t\t\t\t\tif (matches != null) {\n\t\t\t\t\t\t\tmatches.map(match => {\n\t\t\t\t\t\t\t\tlet result = match;\n\t\t\t\t\t\t\t\tresult = result.replace('

', ' ');\n\t\t\t\t\t\t\t\tresult = result.replace('

', '');\n\t\t\t\t\t\t\t\tresult = result.replace(' ', ' ');\n\t\t\t\t\t\t\t\tnewValue = newValue.replace(match, result);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.quill != null) {\n\t\t\t\t\t\t\tconst quill = this.quill.getEditor();\n\t\t\t\t\t\t\tconst imgs = quill.root.querySelectorAll(\"img\");\n\t\t\t\t\t\t\tif (imgs.length > 0) {\n\t\t\t\t\t\t\t\timgs.forEach((img) => {\n\t\t\t\t\t\t\t\t\t// always sets max-width of the image to 100% of the space\n\t\t\t\t\t\t\t\t\timg.style.maxWidth = \"100%\";\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.props.input != null) {\n\t\t\t\t\t\t\tthis.props.input.onChange(newValue);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.props.onChange != null) {\n\t\t\t\t\t\t\tthis.props.onChange(newValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonBlur={(range, source, quill) => {\n\t\t\t\t\t\tif (this.props.input) {\n\t\t\t\t\t\t\tthis.props.input.onBlur(quill.getHTML());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.props.onBlur != null) {\n\t\t\t\t\t\t\tthis.props.onBlur(quill.getHTML());\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\n\t\t\t\t{meta != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{meta.touched && ((meta.error &&\n\t\t\t\t\t\t\t{meta.error}) || (meta.warning &&\n\t\t\t\t\t\t\t\t{meta.warning}))}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\tdecodeHtmlEntities = (text) => {\n\t\tconst textArea = document.createElement('textarea');\n\t\ttextArea.innerHTML = text;\n\t\treturn textArea.value;\n\t}\n\n\timageHandler = () => {\n\t\tconst quill = this.quill.getEditor();\n\t\tconst range = quill.getSelection();\n\n\t\tswal.fire({\n\t\t\ttitle: this.props.translate('embed-image'),\n\t\t\ttext: this.props.translate('enter-url'),\n\t\t\tinput: 'text',\n\t\t\tinputPlaceHolder: this.props.translate('enter-url'),\n\t\t\tconfirmButtonText: this.props.translate('embed'),\n\t\t\tfocusConfirm: false,\n\t\t})\n\t\t\t.then(result => {\n\t\t\t\tif (result.value != null || result.value != '') {\n\t\t\t\t\tquill.insertEmbed(range.index, 'image', result.value);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tvideoHandler = () => {\n\t\tconst quill = this.quill.getEditor();\n\t\tconst range = quill.getSelection();\n\n\t\t// We need to figure out how to generate an embed link for all types of videos\n\t\t// Its easy to do with youtube but unsure about vimeo etc.\n\t}\n\n\turlHandler = (promptRange) => {\n\t\tconst quill = this.quill.getEditor();\n\n\t\tif (promptRange) {\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('embed-content'),\n\t\t\t\ttext: this.props.translate('enter-url'),\n\t\t\t\tinput: 'text',\n\t\t\t\tconfirmButtonText: this.props.translate('embed'),\n\t\t\t\tfocusConfirm: false,\n\t\t\t})\n\t\t\t\t.then(result => {\n\t\t\t\t\tif (result.value != null && result.value != '') {\n\t\t\t\t\t\tlet url = result.value;\n\n\t\t\t\t\t\t// Add https if the url is missing a protocol\n\t\t\t\t\t\tif (url.indexOf('mailto:') == -1 &&\n\t\t\t\t\t\t\turl.indexOf('tel:') == -1 &&\n\t\t\t\t\t\t\turl.indexOf('ftp:') == -1) {\n\t\t\t\t\t\t\tif (!url.match(/^[a-zA-Z]+:\\/\\//)) {\n\t\t\t\t\t\t\t\turl = 'https://' + url;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquill.format('link', url);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tquill.format('link', false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t}\n}\n\nexport default connect(mapStateToProps)(Editor);","import React, { Component } from 'react';\n\nimport ReactQuill from 'react-quill-new';\nimport { QuillDeltaToHtmlConverter } from 'quill-delta-to-html';\n\nclass QuillEditor extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet placeHolderText = '';\n\t\tif (this.props.placeholder) {\n\t\t\tplaceHolderText = this.props.placeholder;\n\t\t}\n\n\t\tthis.state = {\n\t\t\tplaceHolderText,\n\t\t\ttext: this.props.text ? this.props.text : '',\n\t\t};\n\t}\n\n\thandleChange = (value) => {\n\t\tthis.setState({ text: value });\n\t\tthis.props.onChange(value);\n\t}\n\n\tUNSAFE_componentWillReceiveProps(nextProps) {\n\t\tif (this.state.text == '' && nextProps.text != '') {\n\t\t\tthis.setState({ text: nextProps.text });\n\t\t}\n\t}\n\n\trender() {\n\t\t// let modules = {\n\t\t// \ttoolbar: [\n\t\t// \t\t[{ 'header': [2, 3, false] }],\n\t\t// \t\t['bold', 'italic', 'underline','strike', 'blockquote'],\n\t\t// \t\t[{'list': 'ordered'}, {'list': 'bullet'}],\n\t\t// \t\t['link', 'video'],\n\t\t// \t\t['clean']\n\t\t// \t]\n\t\t// }\n\n\t\tconst modules = {\n\t\t\ttoolbar: {\n\t\t\t\tcontainer: [\n\t\t\t\t\t[{ header: [2, 3, false] }],\n\t\t\t\t\t['bold', 'italic', 'underline', 'strike', 'blockquote'],\n\t\t\t\t\t[{ list: 'ordered' }],\n\t\t\t\t\t['link', 'image', 'video'],\n\t\t\t\t\t['clean'],\n\t\t\t\t],\n\t\t\t\thandlers: {\n\t\t\t\t\timage: this.imageHandler,\n\t\t\t\t},\n\t\t\t},\n\t\t\tkeyboard: {\n bindings: {\n 'list autofill': {\n prefix: /^\\s*()$/\n }\n }\n },\n\t\t};\n\n\t\tconst formats = [\n\t\t\t'header',\n\t\t\t'bold', 'italic', 'underline', 'strike', 'blockquote',\n\t\t\t'list', /* 'bullet', 'indent', */\n\t\t\t'link', 'image', 'video',\n\t\t];\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.label ? : ''}\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n\tdecodeHtmlEntities = (text) => {\n\t\tconst textArea = document.createElement('textarea');\n\t\ttextArea.innerHTML = text;\n\t\treturn textArea.value;\n\t}\n\n\timageHandler = () => {\n\t\tconst quill = this.refs.quill.getEditor();\n\t\tconst range = quill.getSelection();\n\t\tconst value = prompt('Image URL');\n\t\tquill.insertEmbed(range.index, 'image', value);\n\t}\n}\n\nexport default QuillEditor;\n","import React, { useEffect, useRef } from 'react';\n\nconst FlexibleTextArea = (props) => {\n\tconst textField = useRef(null);\n\tconst maxHeight = props.maximumHeight ?? 109;\n\n\tconst _calculateSize = () => {\n\t\tif (textField?.current != null) {\n\t\t\t/**\n\t\t\t * @type {HTMLTextAreaElement} element\n\t\t\t */\n\t\t\tconst element = textField.current;\n\t\t\tif (props.autoGrow) {\n\t\t\t\telement.style.height = 'auto';\n\t\t\t\telement.style.height = element.scrollHeight + 2 + 'px';\n\t\t\t\telement.style.overflow = parseInt(element.style.height, 10) < maxHeight ? 'hidden' : 'auto';\n\t\t\t} else {\n\t\t\t\tlet rows = element.textContent.split('\\n').length - 1;\n\t\t\t\tif (rows < 0) {\n\t\t\t\t\trows = 0;\n\t\t\t\t}\n\t\t\t\telement.style.height = 63 + (23 * rows) + \"px\";\n\t\t\t}\n\t\t}\n\t}\n\n\tconst _onBlur = () => {\n\t\tif (textField?.current != null) {\n\t\t\tconst element = textField.current;\n\t\t\telement.classList.remove('focus');\n\t\t}\n\n\t\t_calculateSize();\n\n\t\t// Animation timing\n\t\tsetTimeout(() => _calculateSize(), 150);\n\t}\n\n\tconst _onFocus = () => {\n\t\tif (textField?.current != null) {\n\t\t\tconst element = textField.current;\n\t\t\telement.classList.add('focus');\n\t\t}\n\n\t\t_calculateSize();\n\n\t\t// Animation timing\n\t\tsetTimeout(() => _calculateSize(), 150);\n\t}\n\n\tuseEffect(() => {\n\t\t_calculateSize();\n\t}, [props.children]);\n\n\tlet elementProps = { ...props };\n\n\tdelete elementProps.style;\n\tdelete elementProps.children;\n\tdelete elementProps.input;\n\tdelete elementProps.meta;\n\tdelete elementProps.autoGrow;\n\tdelete elementProps.maximumHeight;\n\n\treturn (\n\t\t\n\t\t\t{props.children}\n\t\t\n\t);\n};\n\nexport default FlexibleTextArea;\n","import React, { Component } from 'react';\n\nimport img from 'assets/img/spinner.png';\n\nclass Spinner extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\tgetContainerClassName = () => {\n\t\tconst { center, right, small } = this.props;\n\t\tlet classNames = 'spinner-container';\n\n\t\tif (center) {\n\t\t\tclassNames += ' center';\n\t\t}\n\n\t\tif (right) {\n\t\t\tclassNames += ' right';\n\t\t}\n\n\t\tif (small) {\n\t\t\tclassNames += ' small';\n\t\t}\n\n\t\treturn classNames;\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default Spinner;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Spinner from '../../Elements/Spinner';\nimport { Icon } from '@haldor/ui';\nimport './Search.scss';\n\n\nclass Search extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet value = '';\n\t\tif (props.input != null && props.input.value != null) {\n\t\t\tvalue = props.input.value;\n\t\t}\n\n\t\tthis.state = {\n\t\t\tvalue,\n\t\t};\n\t\t\n\t\tthis.timeout = null;\n\t\tthis.autoSearchLimit = 200;\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.autofocus == true) {\n\t\t\tif (this.refs['input'] != null) {\n\t\t\t\tthis.refs['input'].focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tisValid = () => {\n\t\tif (this.state.value.length > 0) {\n\t\t\tif (this.state.value.trim().length == 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tthrottle = (func, immediate) => {\n\t\treturn (...args) => {\n\t\t\tvar later = function () {\n\t\t\t\tthis.timeout = null;\n\t\t\t\tif (!immediate) func.apply(this, args);\n\t\t\t};\n\n\t\t\tvar callNow = immediate && !this.timeout;\n\t\t\tclearTimeout(this.timeout);\n\t\t\tthis.timeout = setTimeout(later, this.autoSearchLimit);\n\t\t\tif (callNow) func.apply(this, args);\n\t\t};\n\t}\n\n\tonSubmit = () => {\n\t\tconst { input, onSubmit } = this.props;\n\t\tconst value = this.getValue();\n\n\t\tif (!this.props.allowEmpty && value.query == '') {\n\t\t\t// Dont submit empty strings\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.props.lengthLimit != null) {\n\t\t\tif (value.query.length < this.props.lengthLimit) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (input != null && input.onSubmit != null) {\n\t\t\tinput.onSubmit(value);\n\t\t}\n\n\t\tif (onSubmit != null) {\n\t\t\tonSubmit(value);\n\t\t}\n\n\t\tif (this.props.clearOnSubmit) {\n\t\t\tthis.setState({ value: '' });\n\t\t}\n\t}\n\n\tgetValue = () => {\n\t\tlet type = 'search';\n\t\tlet query = this.state.value;\n\t\tlet modifier = null;\n\n\t\tif (this.state.value.charAt(0) == '@') {\n\t\t\ttype = 'picker';\n\t\t\tmodifier = '@';\n\t\t\tquery = this.state.value.substr(1);\n\t\t}\n\n\t\tif (this.state.value.charAt(0) == '#') {\n\t\t\ttype = 'picker';\n\t\t\tmodifier = '#';\n\t\t\tquery = this.state.value.substr(1);\n\t\t}\n\n\t\tif (this.state.value.charAt(0) == '!') {\n\t\t\ttype = 'picker';\n\t\t\tmodifier = '!';\n\t\t\tquery = this.state.value.substr(1);\n\t\t}\n\n\t\treturn {\n\t\t\ttype,\n\t\t\tmodifier,\n\t\t\tquery,\n\t\t};\n\t}\n\n\tonValueChange = (event) => {\n\t\tconst { input, onChange } = this.props;\n\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(event.target.value)\n\t\t}\n\t\t\n\t\tthis.setState({ value: event.target.value }, () => {\n\t\t\tif (!this.isValid()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.getValue().type == 'picker') {\n\t\t\t\tlet onSubmit = this.throttle(this.onSubmit);\n\t\t\t\tonSubmit();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.props.autoSearch) {\n\t\t\t\tlet onSubmit = this.throttle(this.onSubmit);\n\t\t\t\tonSubmit();\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\n\t\tif (input != null && input.onChange != null) {\n\t\t\tinput.onChange(event.target.value);\n\t\t}\n\n\t\tif (onChange != null) {\n\t\t\tonChange(event.target.value);\n\t\t}\n\t}\n\n\tonKeyDown = (event) => {\n\t\tif (event.keyCode == 13) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.onSubmit(this.state.value);\n\t\t}\n\t}\n\n\tonIconClick = () => {\n\t\tthis.refs['input'].focus();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.loading ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{this.props.children}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nSearch.defaultProps = {\n\tautoSearch: false,\n\tallowEmpty: false,\n\tclearOnSubmit: false,\n\tlengthLimit: null,\n};\n\nSearch.propTypes = {\n\tautoSearch: PropTypes.bool,\n\tallowEmpty: PropTypes.bool,\n\tclearOnSubmit: PropTypes.bool,\n\tlengthLimit: PropTypes.number,\n};\n\nexport default Search;\n","export const FIELD_TEXT = 'FIELDS_INPUT_TEXT';\nexport const FIELD_TEXTAREA = 'FIELDS_INPUT_TEXTAREA';\nexport const FIELD_TITLE = 'FIELDS_ELEMENT_TITLE';\nexport const FIELD_DESCRIPTION = 'FIELDS_ELEMENT_DESCRIPTION';\n","import React from 'react';\nimport { Field as FormField } from 'react-final-form';\n\nimport {\n\tFIELD_DESCRIPTION,\n\tFIELD_TEXT,\n\tFIELD_TEXTAREA,\n\tFIELD_TITLE,\n} from 'constants/fields';\n\nimport { Editor } from 'UI/Inputs';\nimport { Icon } from '@haldor/ui';\n\nimport './Field.scss';\n\nconst Field = (props) => {\n\n\tconst getFieldProps = () => {\n\t\tswitch (props.type) {\n\t\t\tcase FIELD_TEXT:\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: 'input',\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tname: props.name,\n\t\t\t\t\tplaceholder: props.placeholder,\n\t\t\t\t\tdisabled: props.disabled != null ? props.disabled : false,\n\t\t\t\t\tonBlur: props.onBlur != null ? props.onBlur : null\n\t\t\t\t};\n\n\t\t\tcase FIELD_TEXTAREA:\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: Editor,\n\t\t\t\t\tname: props.name,\n\t\t\t\t\tplaceholder: props.placeholder,\n\t\t\t\t\tdisabled: props.disabled != null ? props.disabled : false,\n\t\t\t\t\tonBlur: props.onBlur != null ? props.onBlur : null\n\t\t\t\t};\n\n\t\t\tdefault:\n\t\t\t\treturn {};\n\t\t}\n\t}\n\n\treturn (\n\t\t
\n\t\t\t{props.type == FIELD_TITLE ?\n\t\t\t\t
\n\t\t\t\t\t{props.onLabelClick != null ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{props.value}\n\t\t\t\t
\n\t\t\t\t: null}\n\n\t\t\t{props.type == FIELD_DESCRIPTION ?\n\t\t\t\t
{props.value}
\n\t\t\t\t: null}\n\n\t\t\t{props.type == FIELD_TEXT || props.type == FIELD_TEXTAREA ?\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t: null}\n\t\t
\n\t);\n\n}\n\nexport default Field;\n","import React, { useState, useEffect } from 'react';\nimport { getCountryCallingCode } from 'libphonenumber-js';\nimport { Icon } from '@haldor/ui';\n\nimport './_phoneInput.scss';\n\nconst PhoneInput = ({ placeholder, disabled, input, meta, countryCode }) => {\n\tlet defaultValue = input?.value ?? '';\n\tif (defaultValue.length > 0) {\n\t\tdefaultValue = defaultValue.replace('+', '');\n\t}\n\n\tconst [value, setValue] = useState(defaultValue);\n\n\tuseEffect(() => {\n\t\tif (input != null && input.onChange != null) {\n\t\t\tinput.onChange(value);\n\t\t}\n\t}, [value])\n\n\tconst onInputFocus = () => {\n\t\tif (value == '') {\n\t\t\tif (countryCode != null) {\n\t\t\t\tsetValue(getCountryCallingCode(countryCode));\n\t\t\t} else {\n\t\t\t\tsetValue('46');\n\t\t\t}\n\t\t}\n\t}\n\n\tconst clearInput = () => {\n\t\tsetValue('');\n\t}\n\n\treturn
\n\t\t
\n\t\t\t+\n\t\t\t setValue(event.target.value)}\n\t\t\t\tonFocus={onInputFocus}\n\t\t\t/>\n\n\t\t\t{value != '' ?\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t: null}\n\t\t
\n\n\t\t{meta.touched && ((meta.error &&\n\t\t\t{meta.error}) || (meta.warning &&\n\t\t\t\t{meta.warning}))\n\t\t}\n\t
\n\n}\n\nexport default PhoneInput;","/* Import inputs */\nimport TimePicker from './time_picker';\nimport Editor from './editor';\nimport QuillEditor from './QuillEditor';\nimport FlexibleTextArea from './FlexibleTextArea';\nimport Search from './Search/index';\nimport Field from './Field';\nimport PhoneInput from './Phone';\n\nexport {\n\tTimePicker,\n\tEditor,\n\tQuillEditor,\n\tFlexibleTextArea,\n\tSearch,\n\tField,\n\tPhoneInput,\n};\n","import React, { Component } from 'react';\n\nimport Plus from 'UI/IconsSrc/plus';\nimport Minus from 'UI/IconsSrc/minus';\n\nclass Expandable extends Component {\n\tstatic defaultProps = {\n\t\ttitle: 'Visa mer',\n\t\tchildren: '',\n\t\tcenterContent: false,\n\t\tignorePropsUpdate: false,\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\topen: props.open || false,\n\t\t};\n\t}\n\n\tUNSAFE_componentWillReceiveProps(nextProps) {\n\t\tif (nextProps && nextProps.open != null) {\n\t\t\tif (this.props.ignorePropsUpdate) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (nextProps.open != this.state.open) {\n\t\t\t\tthis.toggleOpen(nextProps.open);\n\t\t\t}\n\t\t}\n\t}\n\n\tonPress = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onClick && typeof this.props.onClick == 'function') {\n\t\t\tthis.props.onClick(this.toggleOpen);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.toggleOpen();\n\t};\n\n\tonPlusPress = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onPlus && typeof this.props.onPlus == 'function') {\n\t\t\tthis.props.onPlus(this.toggleOpen);\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tif (this.props.onClick && typeof this.props.onClick == 'function') {\n\t\t\t\tthis.onPress(event);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tthis.toggleOpen();\n\t};\n\n\ttoggleOpen = (isOpen) => {\n\t\tif (typeof isOpen != 'undefined' && isOpen != null) {\n\t\t\tthis.setState({ open: isOpen });\n\t\t} else {\n\t\t\tthis.setState({ open: !this.state.open });\n\t\t}\n\n\t\tif (this.props.onChange && typeof this.props.onChange == 'function') {\n\t\t\tthis.props.onChange(isOpen ? isOpen : !this.state.open);\n\t\t}\n\t};\n\n\tgetContentClassNames = () => {\n\t\tlet className = 'expandable-content';\n\t\tconst { open } = this.state;\n\t\tconst { centerContent } = this.props;\n\t\tconst { whiteBackground } = this.props;\n\n\t\tif (open) {\n\t\t\tclassName += ' open';\n\t\t}\n\n\t\tif (centerContent) {\n\t\t\tclassName += ' centerContent';\n\t\t}\n\n\t\tif (whiteBackground) {\n\t\t\tclassName += ' expandable-white-bg';\n\t\t}\n\n\t\treturn className;\n\t};\n\n\tgetHeaderClassNames = () => {\n\t\tlet className = 'expandable-header';\n\t\tconst { open } = this.state;\n\t\tconst { color } = this.props;\n\n\t\tif (open) {\n\t\t\tclassName += ' open';\n\t\t}\n\n\t\tif (color) {\n\t\t\tclassName += ' has-color';\n\t\t}\n\n\t\treturn className;\n\t};\n\n\trender() {\n\t\tconst { children, title, color, html, headerStyles, contentStyles, contentStylesClosed } =\n\t\t\tthis.props;\n\n\t\tconst { open } = this.state;\n\t\tconst style = typeof color !== 'undefined' ? { borderLeftColor: color } : {};\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.index ? {this.props.index}  : null}\n\n\t\t\t\t\t\n\t\t\t\t\t\t{title}\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{open ? : }\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t{html != null ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.overrideOpen != null && this.props.overrideOpen && open\n\t\t\t\t\t\t\t? children\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t{this.props.overrideOpen == null ? children : null}\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default Expandable;\n","import React, { Component } from 'react';\nimport api from 'lib/api';\nimport getEnvironment from 'lib/env';\nimport { getToken, http, loginRequest } from 'lib/msal';\n\nclass FileItem extends Component {\n\tstatic defaultProps = {\n\t\telement: 'img',\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.image = null;\n\t}\n\n\t_setImage = (element) => (this.image = element);\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.file != null) {\n\t\t\tif (this.image == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.props.file.type.indexOf('image') > -1) {\n\t\t\t\tif (!this.props.file.url) {\n\t\t\t\t\tapi.getFile(this.props.file.id).then((response) => {\n\t\t\t\t\t\tconst urlCreator = window.URL || window.webkitURL;\n\t\t\t\t\t\tconst imageSRC = urlCreator.createObjectURL(response.data);\n\t\t\t\t\t\tif (this?.props?.element == 'div') {\n\t\t\t\t\t\t\tif (this.image) {\n\t\t\t\t\t\t\t\tthis.image.style.backgroundImage = 'url(' + imageSRC + ')';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.image.src = imageSRC;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this?.props?.element == 'div') {\n\t\t\t\t\t\tif (this.image) {\n\t\t\t\t\t\t\tthis.image.style.backgroundImage = 'url(' + this.props.file.url + ')';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.image.src = this.props.file.url;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!this.props.file.url) {\n\t\t\t\t\tlet request = loginRequest;\n\t\t\t\t\trequest.scopes = [...getEnvironment().scopes, ...request.scopes];\n\n\t\t\t\t\tgetToken(request).then((response) => {\n\t\t\t\t\t\tthis.image.href = `${http.defaults.baseURL}/fileItems/${this.props.file.id}?token=${response.accessToken}`;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.image.href = this.props.file.url;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\trender() {\n\t\tlet eProps = { ...this.props };\n\t\tdelete eProps.id;\n\t\tdelete eProps.element;\n\t\tdelete eProps.file;\n\n\t\tif (this.props.file == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.props.file.type == null || this.props.file.id == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.props.element == 'div') {\n\t\t\treturn
;\n\t\t}\n\n\t\tif (this.props.file.type.indexOf('image') == -1) {\n\t\t\treturn ;\n\t\t}\n\n\t\treturn ;\n\t}\n}\n\nexport default FileItem;\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport FileItem from 'components/FileItem';\n\nclass Block extends Component {\n\trenderContent = () => {\n\t\tconst { children, headerContent, content, time, footerContent, image } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{headerContent ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{headerContent}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{image != null ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{time ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{time}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{content ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{content}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{footerContent ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{footerContent}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{children ?\n\t\t\t\t\tchildren\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t)\n\t}\n\n\trender() {\n\t\tconst { link } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{ link != null ?\n\t\t\t\t\t\n\t\t\t\t\t\t{this.renderContent()}\n\t\t\t\t\t\n\t\t\t\t\t:\n\t\t\t\t\tthis.renderContent()\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport const BlockWrapper = (props) => {\n\tlet columns = false;\n\n\tif (props.columns) {\n\t\tcolumns = props.columns;\n\t} else if (props.cols) {\n\t\tcolumns = props.cols;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t{ props.children ?\n\t\t\t\tprops.children\n\t\t\t\t: null}\n\t\t
\n\t);\n}\n\nexport const BlockHeader = (props) => {\n\treturn (\n\t\t
\n\t\t\t{ props.children ?\n\t\t\t\t

{props.children}

\n\t\t\t\t: null}\n\t\t
\n\t);\n}\n\nexport const BlockContent = (props) => {\n\treturn (\n\t\t
\n\t\t\t{ props.children ?\n\t\t\t\tprops.children\n\t\t\t\t: null}\n\t\t
\n\t);\n}\n\nexport const BlockFooter = (props) => {\n\treturn (\n\t\t
\n\t\t\t{ props.children ?\n\t\t\t\tprops.children\n\t\t\t\t: null}\n\t\t
\n\t);\n}\n\nexport const BlockTime = (props) => {\n\treturn (\n\t\t
\n\t\t\t{ props.children ?\n\t\t\t\tprops.children\n\t\t\t\t: null}\n\t\t
\n\t);\n}\n\nexport default Block;\n","import React, { Component } from 'react';\n\nimport { Document } from '../Icons';\nimport { Checkbox } from '@haldor/ui';\n\nimport './Style.scss';\n\nclass FileList extends Component {\n\tonFolderClick = ( folder ) => {\n\t\tif ( this.props.onFolderClick ) {\n\t\t\tthis.props.onFolderClick( folder );\n\t\t}\n\t}\n\n\tonFileClick = ( file ) => {\n\t\tif ( this.props.onFileClick ) {\n\t\t\tthis.props.onFileClick( file );\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { files, selectedFiles } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{ this.props.files.map( file => {\n\t\t\t\t\tif ( file.folder ) {\n\t\t\t\t\t\treturn
{ this.onFolderClick( file ) } }>\n\t\t\t\t\t\t\t{ file.name }\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst isSelected = this.props.selectedFiles.find( function( selF ) {\n\t\t\t\t\t\t\treturn selF.id == file.id;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst selected = isSelected != null;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t
{ e.preventDefault(); this.onFileClick(file); }}>\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{ file.name }\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\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}) }\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default FileList;\n","import React, { Component } from 'react';\nimport Block, { BlockContent, BlockFooter } from 'UI/Elements/Block';\n\nimport './Style.scss';\n\nclass List extends Component {\n\trender() {\n\t\tconst { children, title, footerContent } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{ title ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

{ title }

\n\t\t\t\t\t\t
\n\t\t\t\t\t : null }\n\n\t\t\t\t\t{ children ? children : null }\n\n\t\t\t\t\t\n\t\t\t\t\t\t{ footerContent ? footerContent : null }\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default List;\n","import React, { Component } from 'react';\n\nimport './DataList.scss';\n\nimport { Checkbox } from '@haldor/ui';\n\n// Need to work on naming for the component\nclass DataList extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet available = [];\n\t\tlet active = null;\n\t\tconst preferred = localStorage.getItem('haldor-datalist-mode');\n\n\t\tif (props.renderRow != null) {\n\t\t\tavailable.push('table');\n\t\t}\n\n\t\tif (props.renderCard != null) {\n\t\t\tavailable.push('card');\n\t\t}\n\n\t\tif (preferred != null && available.indexOf(preferred) > -1) {\n\t\t\tactive = preferred;\n\t\t} else {\n\t\t\tactive = available[0];\n\t\t}\n\t\t\n\n\t\tthis.state = {\n\t\t\tactive,\n\t\t\tcolumns: [],\n\t\t\tavailable,\n\t\t};\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.updateColumns(this.props);\n\t\t\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tthis.updateColumns(nextProps);\n\t}\n\n\tupdateColumns = (props) => {\n\t\tif (props.data != null && props.data.length > 0) {\n\t\t\tlet columns = [];\n\n\t\t\tif (props.renderRow != null) {\n\t\t\t\tprops.data.forEach((item, index) => {\n\t\t\t\t\tconst row = props.renderRow(item, index);\n\n\t\t\t\t\tif (row != null && row.props.children != null) {\n\t\t\t\t\t\tlet children = [];\n\n\t\t\t\t\t\t// Make sure we keep the children var array\n\t\t\t\t\t\t// row.props.children can be both object and array\n\t\t\t\t\t\tif (Array.isArray(row.props.children)) {\n\t\t\t\t\t\t\tchildren = row.props.children;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchildren = [row.props.children];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchildren.forEach(rowChild => {\n\t\t\t\t\t\t\tif (rowChild != null && rowChild.props != null && rowChild.props.title != null) {\n\t\t\t\t\t\t\t\tif (columns.indexOf(rowChild.props.title) == -1) {\n\t\t\t\t\t\t\t\t\tcolumns.push(rowChild.props.title);\n\t\t\t\t\t\t\t\t}\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});\n\t\t\t}\n\n\t\t\tthis.setState({ columns });\n\t\t}\n\t}\n\n\tonSelectType = (type) => {\n\t\tlocalStorage.setItem('haldor-datalist-mode', type);\n\t\tthis.setState({ active: type });\n\t}\n\n\trenderTable = () => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.state.columns.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.state.columns.map((column, index) => (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.toggleAllEntries != null && index == 0 ?\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t: column}\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: null}\n\n\t\t\t\t{this.props.data.map((item, index) => {\n\t\t\t\t\treturn this.props.renderRow(item, index);\n\t\t\t\t})}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderCards = () => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.data.map((item, index) => {\n\t\t\t\t\treturn this.props.renderCard(item, index);\n\t\t\t\t})}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderMain = () => {\n\t\tif (this.props.data.length == 0 && this.props.emptyData != null) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t{this.props.emptyData()}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{ this.state.active == 'table' ?\n\t\t\t\t\tthis.renderTable()\n\t\t\t\t\t: null}\n\n\t\t\t\t{ this.state.active == 'card' ?\n\t\t\t\t\tthis.renderCards()\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trender() {\n\t\tif (this.props.data == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.title ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{this.props.title}

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.actions != null ?\n\t\t\t\t\t\t\tthis.props.actions()\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{ /* this.state.available.length > 1 ? this.state.available.map(type => {\n\t\t\t\t\t\t\tlet className = 'button button-action';\n\t\t\t\t\t\t\tif (type == this.state.active) {\n\t\t\t\t\t\t\t\tclassName += ' active';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn
{ this.onSelectType(type) }}>\n\t\t\t\t\t\t\t\t{type == 'card' ?\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t: type == 'table' ?\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}) : null */ }\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t{this.renderMain()}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nexport default DataList;\n","import { QrCodeScannerOutlined } from '@mui/icons-material';\nimport { Tooltip } from '@mui/material';\nimport React, { Component } from 'react';\n\nclass ColorLabel extends Component {\n\trender() {\n\t\tconst { color, tooltip, content } = this.props;\n\n\t\tlet dotProps = Object.assign({}, this.props);\n\t\tdelete dotProps.color;\n\t\tdelete dotProps.tooltip;\n\t\tdelete dotProps.content;\n\t\tdelete dotProps.children;\n\n\t\treturn
\n\t\t\t\n\t\t\t\t\n\n\t\t\t\n\t\t\t\t{content ? content : tooltip}\n\t\t\t\n\t\t
\n\n\t}\n}\n\nexport default ColorLabel;\n","import React, { Component } from 'react';\n\nimport './Style.scss';\n\nclass ColorLabelContainer extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tcollapse: false,\n\t\t}\n\n\t\tthis.container = null;\n\t\tthis.contentWidth = null;\n\t}\n\n\tsetContainer = (element) => {\n\t\tthis.container = element;\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.calculateCollapse();\n\t\tthis.onResize();\n\n\t\twindow.addEventListener('resize', this.onResize);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tlet prevChildren = [];\n\t\tlet currentChildren = [];\n\t\tif (prevProps != null && prevProps.children != null && typeof prevProps.children == 'object') {\n\t\t\tprevChildren = prevProps.children;\n\t\t}\n\t\tif (this.props != null && this.props.children != null && typeof this.props.children == 'object') {\n\t\t\tcurrentChildren = prevProps.children;\n\t\t}\n\n\t\tif (prevChildren.length != currentChildren.length) {\n\t\t\tthis.calculateCollapse();\n\t\t\tthis.onResize();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\twindow.removeEventListener('resize', this.onResize);\n\t}\n\n\tonResize = () => {\n\t\tif (this.container == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst containerWidth = this.container.clientWidth;\n\n\t\tif (this.contentWidth == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (containerWidth < this.contentWidth) {\n\t\t\tif (this.state.collapse == false) {\n\t\t\t\tthis.setState({ collapse: true });\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.state.collapse == true) {\n\t\t\t\tthis.setState({ collapse: false });\n\t\t\t}\n\t\t}\n\t}\n\n\tcalculateCollapse = () => {\n\t\t// Issue where the container is no longer rendered on screen but the calculateCollapse still runs\n\t\t// and refs['container'] == undefined\n\t\tif (this.container != null) {\n\t\t\tlet contentWidth = 0;\n\n\t\t\tconst dots = [... this.container.querySelectorAll('.dot')];\n\t\t\tdots.forEach(dot => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\t// Add extra 10 px for margin\n\t\t\t\t\tcontentWidth = contentWidth + dot.clientWidth + 25;\n\t\t\t\t} else {\n\t\t\t\t\tcontentWidth = contentWidth + dot.clientWidth;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentWidth = contentWidth;\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { children } = this.props;\n\t\tconst { collapse } = this.state;\n\n\t\tconst props = Object.assign({}, this.props);\n\t\tdelete props.collapse;\n\t\tdelete props.inline;\n\t\tdelete props.test;\n\n\t\treturn (\n\t\t\t\n\n\t\t\t\t{children}\n\n\t\t\t\t{!this.props.inline ?\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default ColorLabelContainer;\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport Swipe from 'swipejs';\n\nclass ReactSwipe extends Component {\n\tstatic propTypes = {\n\t\tswipeOptions: PropTypes.shape({\n\t\t\tstartSlide: PropTypes.number,\n\t\t\tspeed: PropTypes.number,\n\t\t\tauto: PropTypes.number,\n\t\t\tcontinuous: PropTypes.bool,\n\t\t\tdisableScroll: PropTypes.bool,\n\t\t\tstopPropagation: PropTypes.bool,\n\t\t\tdraggable: PropTypes.bool,\n\t\t\tswiping: PropTypes.func,\n\t\t\tcallback: PropTypes.func,\n\t\t\ttransitionEnd: PropTypes.func\n\t\t}),\n\t\tstyle: PropTypes.shape({\n\t\t\tcontainer: PropTypes.object,\n\t\t\twrapper: PropTypes.object,\n\t\t\tchild: PropTypes.object\n\t\t}),\n\t\tid: PropTypes.string,\n\t\tclassName: PropTypes.string,\n\t\tchildCount: PropTypes.number\n\t};\n\n\tstatic defaultProps = {\n\t\tswipeOptions: {},\n\t\tstyle: {\n\t\t\tcontainer: {\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tvisibility: 'hidden',\n\t\t\t\tposition: 'relative',\n\t\t\t\theight: '100%',\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tposition: 'relative',\n\t\t\t\theight: '100%',\n\t\t\t\tminHeight: '40vh',\n\t\t\t},\n\t\t\tchild: {\n\t\t\t\tfloat: 'left',\n\t\t\t\twidth: '100%',\n\t\t\t\tposition: 'relative',\n\t\t\t\ttransitionProperty: 'transform'\n\t\t\t},\n\t\t},\n\t\tclassName: '',\n\t\tchildCount: 0\n\t};\n\n\tcomponentDidMount() {\n\t\tthis.swipe = Swipe(this.containerEl, this.props.swipeOptions);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tconst { childCount, swipeOptions } = this.props;\n\t\tconst shouldUpdateSwipeInstance = prevProps.childCount !== childCount || (prevProps.swipeOptions != swipeOptions);\n\n\t\tif (shouldUpdateSwipeInstance) {\n\t\t\tthis.swipe.kill();\n\t\t\tthis.swipe = Swipe(this.containerEl, this.props.swipeOptions);\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.swipe.kill();\n\t\tthis.swipe = void 0;\n\t}\n\n\tnext() {\n\t\tthis.swipe.next();\n\t}\n\n\tprev() {\n\t\tthis.swipe.prev();\n\t}\n\n\tslide(...args) {\n\t\tthis.swipe.slide(...args);\n\t}\n\n\tgetPos() {\n\t\treturn this.swipe.getPos();\n\t}\n\n\tgetNumSlides() {\n\t\treturn this.swipe.getNumSlides();\n\t}\n\n\trender() {\n\t\tconst { id, className, style, children } = this.props;\n\n\t\treturn (\n\t\t\t (this.containerEl = el) }\n\t\t\t\tclassName={ `react-swipe-container ${className}` }\n\t\t\t\tstyle={ style.container }\n\t\t\t>\n\t\t\t\t
\n\t\t\t\t\t{ React.Children.map( children, child => {\n\t\t\t\t\t\tif ( ! child ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst childStyle = child.props.style ? { ...style.child, ...child.props.style } : style.child;\n\n\t\t\t\t\t\treturn React.cloneElement(child, { style: childStyle });\n\t\t\t\t\t}) }\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default ReactSwipe;\n","import React from 'react';\n\nimport './Skeleton.scss';\n\nconst Skeleton = (props) => {\n\treturn(\n\t\t
\n\t);\n}\n\nexport default Skeleton;\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Arrow_Down } from 'UI/Icons';\nimport './Dropdown.scss';\n\n\nclass DropdownMenu extends Component {\n\n\t/* Setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\topen: false,\n\t\t};\n\n\t\tthis.event = null;\n\t\tthis.id = 'dropdown-' + Math.floor(Math.random() * 100);\n\t}\n\n\t/* Component lifecycle methods */\n\tcomponentDidMount = () => {\n\t\tdocument.querySelector('body').addEventListener('click', this.onBodyClick);\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tdocument.querySelector('body').removeEventListener('click', this.onBodyClick);\n\t}\n\n\tonChange = () => {\n\t\t// Every time we update open\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(this.state.open);\n\t\t}\n\t}\n\n\t/* User events */\n\tonClick = (event) => {\n\t\tthis.setState({ open: !this.state.open }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonBodyClick = (event) => {\n\t\tconst classList = event.target.classList;\n\t\tconst parentClassList = event.target.parentElement.classList;\n\n\t\tlet closest = event.target.closest('.dropdown');\n\t\tif (closest != null && closest.id != this.id) {\n\t\t\tthis.setState({ open: false }, () => {\n\t\t\t\tthis.onChange();\n\t\t\t});\n\t\t\treturn event;\n\t\t}\n\n\t\tif (closest != null && closest.id == this.id) {\n\t\t\treturn event;\n\t\t}\n\n\t\tif (classList.contains('dropdown') || classList.contains('drop-down') || classList.contains('drop-down-icon')) {\n\t\t\treturn event;\n\t\t}\n\n\t\tif (parentClassList.contains('dropdown') || parentClassList.contains('drop-down') || parentClassList.contains('drop-down-icon')) {\n\t\t\treturn event;\n\t\t}\n\n\t\tif (this.state.open) {\n\t\t\tthis.setState({ open: false }, () => {\n\t\t\t\tthis.onChange();\n\t\t\t});\n\t\t}\n\n\t\treturn event;\n\t}\n\n\tmenuContainerClick = (event) => {\n\t\tthis.setState({ open: !this.state.open }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\n\t/* Render methods */\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.icon}\n\n\t\t\t\t\t\t{this.props.badge ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.badge}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.text != null ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.text}\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t{this.props.menuTitle != null ?\n\t\t\t\t\t\t

{this.props.menuTitle}

\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n}\n\nexport const DropdownItem = (props) => {\n\tif (props.divider) {\n\t\treturn
\n\t}\n\n\tif (props.target != null && props.target != '') {\n\t\treturn (\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport default DropdownMenu;\n","import React, { Component } from 'react';\nimport { Icon } from '@haldor/ui';\n\nimport './Collapsible.scss';\n\nclass Collapsible extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet open = false;\n\t\tif (props.open != null) {\n\t\t\topen = props.open;\n\t\t} else {\n\t\t\tif (props.defaultOpen != null) {\n\t\t\t\topen = props.defaultOpen;\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet className = null;\n\t\tif (props.className != null) {\n\t\t\tclassName = props.className;\n\t\t}\n\n\t\tthis.state = {\n\t\t\topen,\n\t\t\tclassName,\n\t\t};\n\n\t\tthis.content = null;\n\t\tthis.container = null;\n\t\tthis.animationLength = 270;\n\t}\n\n\t_setContent = (element) => this.content = element;\n\t_setContainer = (element) => this.container = element;\n\n\t/* Lifecycle methods */\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.open != null) {\n\t\t\tif (nextProps.open != this.state.open) {\n\t\t\t\tthis.toggle();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.open == true || this.props.defaultOpen == true) {\n\t\t\tthis.container.style.height = 'auto';\n\t\t\tthis.container.style.overflow = 'visible';\n\t\t}\n\t}\n\n\t/* Events */\n\ttoggle = (event) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tthis.setState({ open: !this.state.open }, () => {\n\t\t\tif (this.state.open) {\n\t\t\t\tthis.container.style.height = this.content.clientHeight + 'px';\n\n\t\t\t\t// Animation timing: Fire after CSS transition is completed\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.container.style.height = 'auto';\n\t\t\t\t\tthis.container.style.overflow = 'visible';\n\t\t\t\t}, this.animationLength);\n\t\t\t} else {\n\t\t\t\tthis.container.style.height = this.content.clientHeight + 'px';\n\t\t\t\tthis.container.style.overflow = 'hidden';\n\n\t\t\t\t// Set height 0 to animate collapsing\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.container.style.height = '0px';\n\t\t\t\t}, 35);\n\t\t\t}\n\n\t\t\tif (this.props.onChange != null) {\n\t\t\t\tthis.props.onChange(this.state.open);\n\t\t\t}\n\t\t});\n\t}\n\n\t/* Render methods */\n\trender() {\n\t\tconst { open } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.trigger != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{typeof this.props.trigger === 'function' ?\n\t\t\t\t\t\t\t\t\tthis.props.trigger(open)\n\t\t\t\t\t\t\t\t\t: this.props.trigger}\n\n\t\t\t\t\t\t\t\t{this.props.badge != null ?\n\t\t\t\t\t\t\t\t\t{this.props.badge}\n\t\t\t\t\t\t\t\t\t: null}\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: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default Collapsible;\n","import React, { Component } from 'react';\n\nimport './Person.scss';\n\nclass Person extends Component {\n\n\t/* Class setup */\n\tstatic defaultProps = {\n\t\tperson: {\n\t\t\tfirstName: '',\n\t\t\tlastName: '',\n\t\t\temail: '',\n\t\t\tid: '',\n\t\t},\n\t\tshowName: true,\n\t\tshowAvatar: true,\n\t\tsize: 'sm',\n\t\tshowEmail: false,\n\t};\n\n\t/* Utils */\n\tgetName = () => {\n\t\tvar name = '';\n\n\t\tif (this.props.person != null && this.props.person.firstName != null) {\n\t\t\tname = this.props.person.firstName;\n\t\t}\n\n\t\tif (this.props.person != null && this.props.person.lastName != null) {\n\t\t\tname = name.length > 0 ? name + ' ' + this.props.person.lastName : this.props.person.lastName;\n\t\t}\n\n\t\treturn name;\n\t}\n\n\tgetInitials = () => {\n\t\tvar name = this.getName();\n\n\t\tif (name != null && name.length > 0) {\n\t\t\tvar nameSplit = name.split(' ');\n\n\t\t\tif (nameSplit.length > 1)\n\t\t\t\treturn nameSplit[0].charAt(0).toUpperCase() + nameSplit[nameSplit.length - 1].charAt(0).toUpperCase();\n\n\t\t\tif (nameSplit.length == 1)\n\t\t\t\treturn nameSplit[0].charAt(0).toUpperCase();\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\t/* Events */\n\t// Empty\n\n\t/* Render methods */\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.getInitials()}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.getName()}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.showEmail && this.props.person.email ? this.props.person.email : \"\"}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t{this.props.children ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nexport default Person;\n","import Spinner from './Elements/Spinner';\nimport Expandable from './Elements/Expandable';\nimport Block from './Elements/Block';\nimport FileList from './FileList/index';\nimport List from './Elements/List/index';\nimport DataList from './Elements/DataList';\nimport ColorLabel from './Elements/ColorLabel/ColorLabel';\nimport ColorLabelContainer from './Elements/ColorLabel/ColorLabelContainer';\nimport Swipe from './Elements/Swipe';\nimport Skeleton from './Elements/Skeleton';\nimport DropdownMenu, { DropdownItem } from './Elements/Dropdown';\nimport Collapsible from './Elements/Collapsible';\nimport Person from './Elements/Person';\n\nexport {\n\tSpinner,\n\tExpandable,\n\tBlock,\n\tFileList,\n\tList,\n\tDataList,\n\tColorLabel,\n\tColorLabelContainer,\n\tSwipe,\n\tSkeleton,\n\tDropdownMenu,\n\tDropdownItem,\n\tCollapsible,\n\tPerson,\n};\n","import React, { useMemo } from 'react';\nimport { useTranslate } from 'lib/translate';\nimport { capitalize } from 'helpers/content';\n\nimport { Editor } from \"UI/Inputs\";\nimport { Collapsible } from 'UI';\nimport { Icon } from '@haldor/ui';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\n\nconst AssessmentFeedbackField = (props) => {\n\tconst translate = useTranslate();\n\tconst { resource } = props;\n\n\tconst initialValue = useMemo(() => {\n\t\tif (props.meta != null && props.meta?.initial != null) {\n\t\t\treturn JSON.parse(JSON.stringify(props.meta?.initial));\n\t\t}\n\n\t\treturn null;\n\t}, []);\n\n\t/**\n\t * @param {number} index\n\t */\n\tconst _getFieldInitialValue = (index) => {\n\t\tif (initialValue == null || initialValue.length == 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn initialValue[index];\n\t}\n\n\t/**\n\t * @param {number} index\n\t * @param {string} text\n\t */\n\tconst _onValueTextChange = (index, text) => {\n\t\tlet value = [...props.input.value];\n\t\tvalue[index].text = text;\n\t\tprops.input.onChange(value);\n\t}\n\n\t/**\n\t * @param {string} permission\n\t */\n\tconst renderPermission = (permission, value) => {\n\t\tlet selected = false;\n\t\tif (!value.isPrivate && resource != null) {\n\t\t\tselected = resource.permissions?.find((element) =>\n\t\t\t\telement.target == permission && element.referenceType == 'ASSESSMENTFEEDBACK'\n\t\t\t) != null;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{selected ?\n\t\t\t\t\t\n\t\t\t\t\t: }\n\n\t\t\t\t{translate(capitalize(permission))}\n\t\t\t
\n\t\t);\n\t}\n\n\t/**\n\t * @returns {array}\n\t */\n\tconst getValues = () => {\n\t\tconst { value } = props.input;\n\n\t\tif (resource == null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (value == null || value == '') {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t/**\n\t * @param {object} value\n\t * @param {number} index\n\t */\n\tconst getValueTrigger = (value, index) => {\n\t\treturn
\n\t\t\t
\n\t\t\t\t{value.isPrivate ?\n\t\t\t\t\ttranslate('Personal note')\n\t\t\t\t\t: translate('Feedback')}\n\t\t\t
\n\n\t\t\t{props.assessmentType == ASSESSMENT_TYPES.TEACHER || props.assessmentType == null ?\n\t\t\t\t
\n\t\t\t\t\t{renderPermission('STUDENT', value)}\n\t\t\t\t\t{renderPermission('GUARDIAN', value)}\n\t\t\t\t
\n\t\t\t\t: null}\n\t\t
\n\t}\n\n\n\tconst values = getValues();\n\n\tif (values.length == 0) {\n\t\treturn null;\n\t}\n\n\treturn
\n\t\t{values.map((value, index) => {\n\t\t\tif (resource.id != value.assessmentBlockPartId) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn \n\t\t\t\t
\n\t\t\t\t\t _onValueTextChange(index, text)}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t
\n\t\t})}\n\t
\n\n}\n\nexport default AssessmentFeedbackField;","import React from 'react';\nimport { useTranslate } from 'lib/translate';\nimport { Form, Field, FormSpy } from 'react-final-form';\nimport { capitalize } from 'helpers/content';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\nimport SimpleSelect from 'components/Inputs/SimpleSelect';\nimport AssessmentDetailField from 'components/Inputs/AssessmentDetailField';\nimport AssessmentFeedbackField from 'components/Inputs/AssessmentFeedbackField';\nimport { Button, Checkbox, Expandable, Icon } from '@haldor/ui';\nimport { ColorLabel, ColorLabelContainer } from 'UI';\nimport api from 'lib/api';\n\nimport './_assessmentForm.scss';\n\nconst AssessmentForm = (props) => {\n\tconst translate = useTranslate();\n\tif (props.blocks == null) {\n\t\treturn null;\n\t}\n\n\tconst getInitialValues = () => {\n\t\tlet initialValues = {};\n\n\t\tif (props.initialValues != null) {\n\t\t\tinitialValues = JSON.parse(JSON.stringify(props.initialValues));\n\t\t}\n\n\t\tif (initialValues.assessmentFeedbacks == null) {\n\t\t\tinitialValues.assessmentFeedbacks = [];\n\t\t}\n\n\t\tprops.blocks.forEach((block) => {\n\t\t\tif (block == null || block.resources == null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tblock.resources.forEach((resource) => {\n\t\t\t\tconst foundFeedback = initialValues.assessmentFeedbacks.find((value) =>\n\t\t\t\t\tvalue.assessmentBlockPartId == resource.id && value.isPrivate == false\n\t\t\t\t);\n\n\t\t\t\tconst foundNote = initialValues.assessmentFeedbacks.find((value) =>\n\t\t\t\t\tvalue.assessmentBlockPartId == resource.id && value.isPrivate == true\n\t\t\t\t);\n\n\t\t\t\tif (foundFeedback == null) {\n\t\t\t\t\tinitialValues.assessmentFeedbacks.push({\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\tassessmentBlockPartId: resource.id,\n\t\t\t\t\t\tisPrivate: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (foundNote == null && (props.assessmentType == ASSESSMENT_TYPES.TEACHER || props.assessmentType == null)) {\n\t\t\t\t\tinitialValues.assessmentFeedbacks.push({\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\tassessmentBlockPartId: resource.id,\n\t\t\t\t\t\tisPrivate: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Private assessmentFeedbacks should be after non private\n\t\t\t\tinitialValues.assessmentFeedbacks.sort((a) => a.isPrivate ? 1 : -1);\n\t\t\t});\n\t\t});\n\n\t\treturn initialValues;\n\t}\n\n\tconst onSubmit = (values, form) => new Promise((resolve) => {\n\t\tvalues = JSON.parse(JSON.stringify(values));\n\t\tvalues.referenceId = props.referenceId;\n\t\tvalues.referenceType = props.referenceType;\n\t\tvalues.assessorType = props.assessmentType;\n\n\t\tif (values.assessmentFeedbacks != null) {\n\t\t\tvalues.assessmentFeedbacks = values.assessmentFeedbacks.filter((feedback) =>\n\t\t\t\tfeedback.text != ''\n\t\t\t);\n\t\t}\n\n\t\tif (props.onSubmit != null) {\n\t\t\tprops.onSubmit(values).then(() => {\n\t\t\t\tresolve(values);\n\t\t\t\tsetTimeout(form.reset, 0);\n\t\t\t\tform.restart();\n\t\t\t});\n\t\t} else {\n\t\t\tresolve(values);\n\t\t}\n\t});\n\n\tconst _getResourceTitle = (resource, courses) => {\n\t\tlet text = null;\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\ttext = resource.value.year != null ? `${resource.value.title} ${resource.value.year}` : resource.value.title;\n\t\t}\n\n\t\tif (resource.referenceType == 'assessmentGoal') {\n\t\t\ttext = translate('Goal');\n\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t{text}\n\t\t\t\t\t{courses.length > 0 ?\n\t\t\t\t\t\tcourses.map(course => {\n\t\t\t\t\t\t\tlet title = course.value.year != null ? `${course.value.title} ${course.value.year}` : course.value.title;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{text}\n\n\t\t\t\t{resource != null && resource.referenceType != 'assessmentonlyfeedback' && props.assessmentType == ASSESSMENT_TYPES.TEACHER &&
\n\t\t\t\t\t{renderPermission('STUDENT', resource.permissions)}\n\t\t\t\t\t{renderPermission('GUARDIAN', resource.permissions)}\n\t\t\t\t
}\n\t\t\t
\n\t\t);\n\t}\n\n\tconst _getResourceColor = (resource) => {\n\t\tif (resource.referenceType == 'assessmentGoal') {\n\t\t\treturn '#0f78da';\n\t\t}\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\treturn resource.value.colorCode;\n\t\t}\n\n\t\treturn '#ccc';\n\t}\n\n\t/**\n\t * @param {string} target\n\t * @param {array} permissions\n\t */\n\tconst renderPermission = (target, permissions) => {\n\t\tconst active = permissions.find((perm) =>\n\t\t\tperm.target == target && perm.referenceType == 'ASSESSMENTBLOCKPART'\n\t\t) != null;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{translate(capitalize(target))}\n\t\t\t
\n\t\t);\n\t}\n\n\tconst renderResource = (resource, index, form, courses = []) => {\n\t\tlet matrix;\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\tmatrix = resource.value?.details?.find((detail) =>\n\t\t\t\tdetail.matrixID == resource.referenceId\n\t\t\t)?.matrix;\n\n\t\t\tif (matrix == null || matrix._ParagraphSet == null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{resource.referenceType == 'matrix' &&\n\t\t\t\t\tmatrix._ParagraphSet.map((paragraph) => {\n\t\t\t\t\t\treturn paragraph.rows.map((row) => {\n\t\t\t\t\t\t\tvar assessmentBlockPartRow = resource.assessmentBlockPartRows.find((selectedRow) => selectedRow.referenceId == row.id);\n\t\t\t\t\t\t\tif (assessmentBlockPartRow != null) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t})}\n\n\t\t\t\t{resource.referenceType == 'assessmentGoal' &&\n\t\t\t\t\tresource.assessmentBlockPartRows.map((row) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tconst normalizeHtmlString = (html) => {\n\t\treturn html\n\t\t\t.replace(//g, ' ')\n\t\t\t.replace(/<[^>]*>/g, '')\n\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t.trim();\n\t}\n\n\tconst areValuesEqual = (arr1, arr2, field) => {\n\t\tif ((arr1 == null && arr2 == null) || (arr1?.length == 0 && arr2?.length == 0) || (arr1 == null && arr2?.length == 0)\n\t\t) return true;\n\t\telse if (arr1 == null && arr2 != null || (arr1 != null && arr1.length !== arr2.length)\n\t\t) return false;\n\n\t\treturn arr1.every((obj1, index) => {\n\t\t\tlet obj2 = arr2.find(obj => obj.id === obj1.id);\n\n\t\t\tif (obj2?.id == null) {\n\t\t\t\tobj2 = arr2[index];\n\t\t\t}\n\n\t\t\treturn obj2 && obj1[field] === obj2[field];\n\t\t});\n\t};\n\n\tconst areFeedbackEqual = (arr1, arr2, field) => {\n\t\tif ((arr1 == null && arr2 == null) || (arr1?.length == 0 && arr2?.length == 0) || (arr1 == null && arr2?.length == 0)\n\t\t) return true;\n\n\t\treturn arr1.every((obj1, index) => {\n\t\t\tlet obj2 = arr2.find(obj => obj.id === obj1.id);\n\n\t\t\tif (obj2?.id == null) {\n\t\t\t\tobj2 = arr2[index];\n\t\t\t}\n\t\t\tif (obj1.text == '' && obj2 == null || obj1.text == '' && obj2.text == '


') return true;\n\t\t\telse {\n\t\t\t\tif (normalizeHtmlString(obj1[field]) === normalizeHtmlString(obj2[field])) return true;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst cellValuesEqual = (arr1, arr2) => areValuesEqual(\n\t\tarr1 ?? null,\n\t\tarr2 ?? null,\n\t\t'cellId'\n\t);\n\n\tconst feedbackValuesEqual = (arr1, arr2) => areFeedbackEqual(\n\t\tarr1 ?? null,\n\t\tarr2 ?? null,\n\t\t'text'\n\t);\n\n\tconst { blocks, unsavedValues, items, activeStudentId, referenceType } = props;\n\n\tconst handleFormChange = (formState) => {\n\n\t\tlet referenceId = items?.[0]?.id;\n\t\tlet studentId = items?.[0]?.students?.[0]?.userId ?? null;\n\t\tif (studentId == null && activeStudentId != null) {\n\t\t\tstudentId = activeStudentId;\n\t\t}\n\n\t\tlet initialFeedback = getInitialValues().assessmentFeedbacks ? getInitialValues().assessmentFeedbacks : formState.values.assessmentFeedbacks;\n\t\tlet initialDetails = getInitialValues().assessmentDetails ? getInitialValues().assessmentDetails : formState.values.assessmentDetails;\n\n\t\tif (formState?.values != null && props.updateUnsavedValues != null) {\n\t\t\tif (referenceType === \"TeamsAssignment\" && ((!getInitialValues().studentId) || (activeStudentId === getInitialValues().studentId))) {\n\t\t\t\tif ((formState.modified.assessmentFeedbacks == true || formState.modified.assessmentDetails == true) && // Form modified and unsaved values not yet set\n\t\t\t\t\t(\n\t\t\t\t\t\t(props.unsavedValues == null || (formState.modified.assessmentFeedbacks == true && !feedbackValuesEqual(props.unsavedValues.assessmentFeedbacks, formState.values.assessmentFeedbacks))) ||\n\t\t\t\t\t\t(props.unsavedValues == null || (formState.modified.assessmentDetails == true && !cellValuesEqual(props.unsavedValues.assessmentDetails, formState.values.assessmentDetails)))\n\t\t\t\t\t)) {\n\t\t\t\t\tprops.updateUnsavedValues(formState.values, studentId, referenceId);\n\t\t\t\t} else if ((formState.modified.assessmentFeedbacks == false && formState.modified.assessmentDetails == false) && ( // Form not modified but unsaved values exists that are not equal\n\t\t\t\t\t(props.unsavedValues != null && feedbackValuesEqual(props.unsavedValues.assessmentFeedbacks, formState.values.assessmentFeedbacks)) ||\n\t\t\t\t\t(props.unsavedValues != null && cellValuesEqual(props.unsavedValues.assessmentDetails, formState.values.assessmentDetails)))\n\t\t\t\t) {\n\t\t\t\t\tprops.updateUnsavedValues(null);\n\t\t\t\t} else if (props.unsavedValues != null && !formState.modified.assessmentFeedbacks && !formState.modified.assessmentDetails // New form, (modified not yet set), but values exists in unsaved values\n\t\t\t\t\t&& (feedbackValuesEqual(props.unsavedValues.assessmentFeedbacks, getInitialValues().assessmentFeedbacks))\n\t\t\t\t\t&& ((!getInitialValues().assessmentDetails && !props.unsavedValues.assessmentDetails) || (getInitialValues().assessmentDetails && cellValuesEqual(props.unsavedValues.assessmentDetails, initialDetails)))) {\n\t\t\t\t\tprops.updateUnsavedValues(null);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (referenceType === \"AssignmentTask\" && ((!getInitialValues().referenceId) || (referenceId === getInitialValues().referenceId))) { // If no initial reference (no assessment) or assessment reference is equal to task\n\t\t\t\tif ((formState.modified.assessmentFeedbacks == true || formState.modified.assessmentDetails == true) && // Form modified and unsaved values not yet set\n\t\t\t\t\t(\n\t\t\t\t\t\t(props.unsavedValues == null || (formState.modified.assessmentFeedbacks == true && !feedbackValuesEqual(props.unsavedValues.assessmentFeedbacks, formState.values.assessmentFeedbacks))) ||\n\t\t\t\t\t\t(props.unsavedValues == null || (formState.modified.assessmentDetails == true && !cellValuesEqual(props.unsavedValues.assessmentDetails, formState.values.assessmentDetails)))\n\t\t\t\t\t)) {\n\t\t\t\t\tprops.updateUnsavedValues(formState.values, studentId, referenceId);\n\t\t\t\t} else if ((formState.modified.assessmentFeedbacks == false && formState.modified.assessmentDetails == false) && ( // Form not modified but unsaved values exists that are not equal\n\t\t\t\t\t(props.unsavedValues != null && feedbackValuesEqual(props.unsavedValues.assessmentFeedbacks, formState.values.assessmentFeedbacks)) ||\n\t\t\t\t\t(props.unsavedValues != null && cellValuesEqual(props.unsavedValues.assessmentDetails, formState.values.assessmentDetails)))\n\t\t\t\t) {\n\t\t\t\t\tprops.updateUnsavedValues(null);\n\t\t\t\t} else if (props.unsavedValues != null && !formState.modified.assessmentFeedbacks && !formState.modified.assessmentDetails // New form, (modified not yet set), but values exists in unsaved values\n\t\t\t\t\t&& (feedbackValuesEqual(props.unsavedValues.assessmentFeedbacks, getInitialValues().assessmentFeedbacks))\n\t\t\t\t\t&& ((!getInitialValues().assessmentDetails && !props.unsavedValues.assessmentDetails) || (getInitialValues().assessmentDetails && cellValuesEqual(props.unsavedValues.assessmentDetails, initialDetails)))) {\n\t\t\t\t\tprops.updateUnsavedValues(null);\n\t\t\t\t}\n\t\t\t} else if (props.unsavedValues != null) {\n\t\t\t\tprops.updateUnsavedValues(null);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (\n\t\t
\n\t\t\t {\n\t\t\t\t\t\tif (props.initialValues == null || props.initialValues.status != 'ASSESSMENT_PUBLISHED') {\n\t\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'ASSESSMENT_COMPLETED');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsetStatusPublished: (args, state, utils) => {\n\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'ASSESSMENT_PUBLISHED');\n\t\t\t\t\t},\n\t\t\t\t\tsetStatusStarted: (args, state, utils) => {\n\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'ASSESSMENT_STARTED');\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tkeepDirtyOnReinitialize\n\t\t\t\trender={({ handleSubmit, submitting, form }) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t handleFormChange(formState)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{submitting ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t{props.items != null && props.showStudents ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{props.items.map((item) => {\n\t\t\t\t\t\t\t\t\t\tif (item.firstname == null) {\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tlet name = item.firstname;\n\t\t\t\t\t\t\t\t\t\tif (item.lastname != null) {\n\t\t\t\t\t\t\t\t\t\t\tname += ' ' + item.lastname;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t{blocks\n\t\t\t\t\t\t\t\t.sort((a, b) => a.sortorder - b.sortorder)\n\t\t\t\t\t\t\t\t.map((block) => {\n\t\t\t\t\t\t\t\t\tconst goals = [...block.resources].filter((resource) => {\n\t\t\t\t\t\t\t\t\t\treturn resource.referenceType == 'assessmentGoal'\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tconst courses = [...block.resources].filter((resource) => {\n\t\t\t\t\t\t\t\t\t\treturn resource.referenceType == 'matrix'\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tconst onlyFeedbacks = [...block.resources].filter((resource) => {\n\t\t\t\t\t\t\t\t\t\treturn resource.referenceType == 'assessmentonlyfeedback'\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (block.assessmentType == ASSESSMENT_TYPES.TEACHER) {\n\t\t\t\t\t\t\t\t\t\tconst foundIndex = blocks.sort((a, b) => a.sortorder - b.sortorder).findIndex((b) => b.id == block.id);\n\t\t\t\t\t\t\t\t\t\tblock.title = translate('Teacher assessment') + ' ' + (foundIndex + 1);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{goals.map((resource, index) => renderResource(resource, index, form, courses))}\n\t\t\t\t\t\t\t\t\t\t\t{courses.map((resource, index) => renderResource(resource, index, form))}\n\t\t\t\t\t\t\t\t\t\t\t{onlyFeedbacks.map((resource, index) => renderResource(resource, index, form))}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{props.initialValues == null || props.initialValues?.status != 'ASSESSMENT_PUBLISHED' ?\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusCompleted();\n\t\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tstyle={{ marginBottom: '20px' }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{translate('Save assessment')}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusPublished();\n\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tstyle={{ marginBottom: '20px' }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{translate('Save and publish assessment')}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{props.initialValues == null || props.initialValues?.status != 'ASSESSMENT_PUBLISHED' ?\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusStarted();\n\t\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ marginBottom: '20px' }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{translate('Save draft')}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t{props.onClose != null ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\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}}\n\t\t\t/>\n\t\t
\n\t);\n\n}\n\nAssessmentForm.defaultProps = {\n\tshowStudents: true,\n\tassessmentType: \"Teacher\",\n};\n\nexport default AssessmentForm;","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Spinner } from 'UI';\nimport { Icon, Button } from '@haldor/ui';\nimport './Styles.scss';\n\nclass WopiFrame extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tfullscreen: false,\n\t\t};\n\n\t\tthis.container = null;\n\t\tthis.trigger = null;\n\t\tthis.iframe = null;\n\t}\n\n\t_setContainer = (element) => this.container = element;\n\t_setTrigger = (element) => this.trigger = element;\n\t_setIframe = (element) => this.iframe = element;\n\n\tcomponentWillUnmount = () => {\n\t\twindow.removeEventListener('resize', this.calculateIframeHeight);\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.calculateIframeHeight();\n\n\t\twindow.addEventListener('resize', this.calculateIframeHeight);\n\t}\n\n\tcalculateIframeHeight = () => {\n\t\tif (this.state.fullscreen) {\n\t\t\tif (this.iframe != null) {\n\t\t\t\tconst triggerHeight = this.trigger.scrollHeight;\n\t\t\t\tthis.iframe.style.height = `calc(${window.innerHeight}px - ${triggerHeight}px)`;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.iframe != null) {\n\t\t\tlet height = 0;\n\t\t\tconst body = document.querySelector('body');\n\t\t\tconst footer = body.querySelector('.site-footer');\n\t\t\tconst header = body.querySelector('.teams-header');\n\t\t\tconst desktopHeader = body.querySelector('.desktop-header-spacing');\n\n\t\t\theight = window.innerHeight;\n\n\t\t\tif (footer != null) {\n\t\t\t\theight = height - footer.scrollHeight\n\t\t\t}\n\n\t\t\tif (header != null) {\n\t\t\t\theight = height - header.scrollHeight;\n\t\t\t}\n\n\t\t\tif (desktopHeader != null) {\n\t\t\t\theight = height - desktopHeader.scrollHeight;\n\t\t\t}\n\n\t\t\tif (window.innerHeight < 800) {\n\t\t\t\theight = window.innerHeight;\n\t\t\t}\n\n\t\t\tif (window.innerHeight < 450) {\n\t\t\t\theight = 450;\n\t\t\t}\n\n\t\t\tthis.iframe.style.height = height + 'px';\n\t\t}\n\t}\n\n\tonFullscreenTrigger = async (event) => {\n\t\tevent.preventDefault();\n\n\t\tawait this.setState({ fullscreen: !this.state.fullscreen });\n\n\t\tthis.toggleFullscreen();\n\t}\n\n\ttoggleFullscreen = () => {\n\t\tconst body = document.body;\n\n\t\tif (this.state.fullscreen) {\n\t\t\tthis.container.style.position = 'fixed';\n\t\t\tthis.container.style.top = '0';\n\t\t\tthis.container.style.left = '0';\n\t\t\tthis.container.style.height = '100%';\n\t\t\tthis.container.style.width = '100%';\n\t\t\tthis.container.style.zIndex = '9999999999999999999';\n\t\t\tthis.container.style.background = 'white';\n\n\t\t\tif (this.iframe != null) {\n\t\t\t\tconst triggerHeight = this.trigger.scrollHeight;\n\t\t\t\tthis.iframe.style.height = `calc(${window.innerHeight}px - ${triggerHeight}px)`;\n\t\t\t}\n\n\t\t\tlet menu = body.querySelector('.c--sider');\n\t\t\tif (menu != null) {\n\t\t\t\tmenu.style.display = 'none';\n\t\t\t}\n\n\t\t\tlet header = body.querySelector('.desktop-header');\n\t\t\tif (header != null) {\n\t\t\t\theader.style.display = 'none';\n\t\t\t}\n\n\t\t\tbody.style.overflow = 'hidden';\n\t\t} else {\n\t\t\tlet menu = body.querySelector('.c--sider');\n\t\t\tif (menu != null) {\n\t\t\t\tmenu.style.display = 'block';\n\t\t\t}\n\n\t\t\tlet header = body.querySelector('.desktop-header');\n\t\t\tif (header != null) {\n\t\t\t\theader.style.display = 'flex';\n\t\t\t}\n\n\t\t\tthis.container.style = {};\n\t\t\tthis.calculateIframeHeight();\n\t\t\tbody.style.overflow = 'initial';\n\t\t}\n\t}\n\n\trender() {\n\t\tvar selectedFiles = this.props.folderFiles.filter(ss => { return ss.webUrlEditMode == this.props.activeFile || ss.webUrlViewMode === this.props.activeFile });\n\n\t\tif (selectedFiles && selectedFiles.length > 0) {\n\t\t\tvar webURL = selectedFiles[0].webUrl;\n\t\t}\n\n\t\tconst iframe = `\n\t\t\t\n\t\t`;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.state.fullscreen ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t{this.props.translate('fullscreen')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.activeFile && this.props.activeFile.length > 2001 ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t:\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\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
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tfolderFiles: state.assignments.folderFiles,\n\t};\n}\n\nexport default connect(mapStateToProps)(WopiFrame);\n","import { appInsights } from 'lib/appInsights';\n\nexport const trackNoGroups = (userId) => {\n\tvar localStorageSchool = localStorage.getItem(\"hal.school\" + userId);\n\tlet message = 'Groups is empty';\n\n\tlet properties = {\n\t\t'user': userId,\n\t\t'currentSchool': localStorageSchool,\n\t};\n\n\tappInsights.trackTrace({ message: message, severityLevel: 2 }, properties);\n}\n\nexport const trackImmersiveReaderError = (error, userId) => {\n\tvar localStorageSchool = localStorage.getItem(\"hal.school\" + userId);\n\tlet message = 'ImmersiveReaderError';\n\n\tlet properties = {\n\t\t'user': userId,\n\t\t'currentSchool': localStorageSchool,\n\t\t'error': error,\n\t}\n\n\tappInsights.trackTrace({ message: message, severityLevel: 2 }, properties);\n}\n","import React from 'react';\nimport { Flex, TooltipMenu, Icon } from '@haldor/ui';\nimport DateTime from '_class/DateTime';\n\nconst Message = (props) => {\n\tlet className = 'conversation message';\n\tlet timestampClass = 'timestamp';\n\n\tif (props.me) {\n\t\tclassName += ' me';\n\t\ttimestampClass += ' right';\n\t}\n\n\tif (!props.me) {\n\t\ttimestampClass += ' left';\n\t}\n\n\tif (props.narrow) {\n\t\tclassName += ' narrow';\n\t}\n\n\tif (props.multipleDown) {\n\t\tclassName += ' no-radius-bottom';\n\t}\n\n\tif (props.multipleUp) {\n\t\tclassName += ' no-radius-top';\n\t}\n\n\treturn (
\n\t\t\n\t\t\t
\n\t\t\t\t{props.flagged != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{props.flagged}\n\t\t\t\t\t
\n\t\t\t\t\t:\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t{props.new && !props.me ?\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{props.actions != null && props.actions.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{props.actions.map((action, index) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t\t\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: null}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t{props.sender != null ?\n\t\t\t\tprops.sender + ' • '\n\t\t\t\t: null}\n\n\t\t\t{props.user != null ?\n\t\t\t\tprops.user.firstName + ' ' + props.user.lastName + ' • '\n\t\t\t\t: null}\n\n\t\t\t{new DateTime(props.time).getTimeStampHours()}\n\t\t
\n\t
\n\t);\n}\n\nexport default Message;\n","import { flagMessage } from 'actions/conversation';\nimport { getReaderParameters } from 'actions/user';\nimport { trackImmersiveReaderError } from 'helpers/insights';\nimport moment from 'moment';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport swal from 'sweetalert2';\nimport { Spinner } from 'UI';\nimport DateTime from '_class/DateTime';\nimport Message from './Partials/Message';\n\nconst ImmersiveReader = require('@microsoft/immersive-reader-sdk');\n\nclass ConversationMessages extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloadingMore: false,\n\t\t\tloading: true,\n\t\t};\n\n\t\tthis.container = null;\n\t\tthis.event = null;\n\t\tthis.scrollLimit = 35;\n\t\tthis.timeout = null;\n\n\t}\n\n\tsetContainer = (element) => {\n\t\tthis.container = element;\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentWillUnmount = () => {\n\t\tthis.container.removeEventListener('scroll', this.onScroll);\n\t\tImmersiveReader.close();\n\t}\n\n\tcomponentDidMount = () => {\n\t\t// Get messages (page 1)\n\t\tconst { conversation } = this.props;\n\n\t\tif (this.container != null) {\n\t\t\tthis.container.scrollTop = this.container.scrollHeight;\n\t\t\tthis.container.addEventListener('scroll', this.onScroll);\n\t\t}\n\t}\n\n\tcomponentDidUpdate = (prevProps, prevState) => {\n\t\tif (prevState != this.state) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.container.scrollTop = this.container.scrollHeight;\n\t}\n\n\t/* Helper methods */\n\tthrottle = (func, immediate) => {\n\t\treturn (...args) => {\n\t\t\tvar later = function () {\n\t\t\t\tthis.timeout = null;\n\t\t\t\tif (!immediate) func.apply(this, args);\n\t\t\t};\n\n\t\t\tvar callNow = immediate && !this.timeout;\n\t\t\tclearTimeout(this.timeout);\n\t\t\tthis.timeout = setTimeout(later, this.scrollLimit);\n\t\t\tif (callNow) func.apply(this, args);\n\t\t};\n\t}\n\n\tloadMore = () => {\n\t\tlet onScrollComplete = this.throttle(() => {\n\t\t\tif (!this.state.loadingMore) {\n\t\t\t\tthis.setState({ loadingMore: true });\n\t\t\t\tconsole.log('load next page');\n\t\t\t}\n\t\t});\n\n\t\tonScrollComplete();\n\t}\n\n\tgetUserById = (id) => {\n\t\tif (this.props.conversation != null) {\n\t\t\tlet membership = this.props.conversation.memberships.find(membership => {\n\t\t\t\treturn membership.membershipID == id;\n\t\t\t});\n\n\t\t\tif (membership != null) {\n\t\t\t\treturn {\n\t\t\t\t\tid: membership.membershipID,\n\t\t\t\t\t...membership.user,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\trunImmersiveReader = async (message) => {\n\t\tconst { user, translate } = this.props;\n\t\tconst localLanguage = localStorage.getItem('language');\n\n\t\tconst creator = this.getUserById(message.creator);\n\t\tlet name = '';\n\t\tconst time = new DateTime(message.created).getLongDateWithTime();\n\n\t\tif (message.senderId != null && message.senderType == 'SECTION') {\n\t\t\tconst owner_section = this.props.conversation.memberships.find(m => m.membershipID == message.senderId);\n\t\t\tif (owner_section != null) {\n\t\t\t\tname = owner_section.section?.title;\n\t\t\t}\n\t\t} else {\n\t\t\tname = creator.firstName + ' ' + creator.lastName;\n\t\t}\n\n\t\tconst data = {\n\t\t\ttitle: name,\n\t\t\tchunks: [\n\t\t\t\t{\n\t\t\t\t\tcontent: name + ', ' + time + '

',\n\t\t\t\t\tmimeType: 'text/html',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcontent: message.text,\n\t\t\t\t\tmimeType: 'text/html',\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tawait this.props.getReaderParameters();\n\t\tconst { reader } = this.props;\n\n\t\tif (reader == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tImmersiveReader.launchAsync(reader.token, reader.subdomain, data, {\n\t\t\tuiLang: localLanguage, // Set immersive reader UI language to selected lang in Haldor Edu\n\t\t\tuiZIndex: 9147483,\n\t\t}).catch((error) => {\n\t\t\tconsole.error('error', error);\n\t\t\ttrackImmersiveReaderError(error, user.id);\n\t\t});\n\t}\n\n\t/* Events */\n\tgetMessages = () => {\n\n\t}\n\n\tonScroll = (event) => {\n\t\tif (this.container.scrollTop < 10) {\n\t\t\tthis.loadMore();\n\t\t}\n\t}\n\n\treportMessage = (message) => {\n\t\tconst { translate } = this.props;\n\n\t\tswal.fire({\n\t\t\ttitle: translate('Report message as inappropriate'),\n\t\t\ttext: translate('Why do you want to report this message?'),\n\t\t\tinput: 'text',\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: translate('Cancel'),\n\t\t\tconfirmButtonText: translate('Report message'),\n\t\t}).then(response => {\n\t\t\tif (response.value != null) {\n\t\t\t\tthis.props.flagMessage(message.id, response.value).then(() => {\n\t\t\t\t\tswal.fire({\n\t\t\t\t\t\ttitle: translate('The message has been reported'),\n\t\t\t\t\t\ttext: translate('The message will be hidden while waiting for an administrator to manage the report.'),\n\t\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\t\tconfirmButtonText: 'Okay',\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/* Render methods */\n\trenderMessage = (message, index) => {\n\t\tconst { user } = this.props;\n\t\tlet me = false;\n\t\tlet narrow = false;\n\t\tlet up = false;\n\t\tlet down = false;\n\t\tlet newMessage = false;\n\t\tlet actions = [];\n\t\tlet flagged = null;\n\n\t\tif (message.creator == user.id) {\n\t\t\tme = true;\n\n\t\t\tif (message.flagID != null) {\n\t\t\t\tflagged = this.props.translate('Message is reported as inappropriate.');\n\t\t\t}\n\t\t} else {\n\t\t\tif (message.flagID == null) {\n\t\t\t\tactions.push({\n\t\t\t\t\tlabel: this.props.translate('Report message'),\n\t\t\t\t\tonClick: () => this.reportMessage(message),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tflagged = this.props.translate('Message is reported as inappropriate.');\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.services.immersiveReaderConversations) {\n\t\t\tactions.push({\n\t\t\t\tlabel: this.props.translate('immersive-reader'),\n\t\t\t\tonClick: () => this.runImmersiveReader(message),\n\t\t\t});\n\t\t}\n\n\t\tif (moment(message.created) > moment(this.props.conversation.lastRead) && !me) {\n\t\t\tnewMessage = true;\n\t\t}\n\n\t\tlet lastMessage = this.props.conversation.messages[index - 1];\n\t\tif (lastMessage != null && lastMessage.creator == message.creator) {\n\t\t\tnarrow = true;\n\t\t\tup = true;\n\t\t}\n\n\t\tlet sender = '';\n\t\tlet creator = this.getUserById(message.creator);\n\t\tlet nextMessage = this.props.conversation.messages[index + 1];\n\t\tif (nextMessage != null) {\n\t\t\tif (nextMessage.creator == message.creator) {\n\t\t\t\tdown = true;\n\t\t\t}\n\t\t}\n\n\t\tif (message.senderId != null && message.senderType == 'SECTION') {\n\t\t\tconst owner_section = this.props.conversation.memberships.find(m => m.membershipID == message.senderId);\n\t\t\tif (owner_section != null) {\n\t\t\t\tsender = owner_section.section?.title;\n\t\t\t}\n\t\t} else {\n\t\t\tsender = creator.firstName + ' ' + creator.lastName;\n\t\t}\n\n\t\treturn \n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.conversation != null ?\n\t\t\t\t\t\tthis.props.conversation.messages.map(this.renderMessage)\n\t\t\t\t\t\t:\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t\tservices: state.Services.availableServices,\n\t\tmessages: state.Conversation.messages,\n\t\treader: state.user.reader,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tflagMessage,\n\tgetReaderParameters,\n})(ConversationMessages);\n","import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport sniffer from 'sniffer';\nimport { Icon, translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Field, Form, reduxForm } from 'redux-form';\nimport { Spinner } from 'UI';\nimport { Flex, Button } from '@haldor/ui';\nimport { FlexibleTextArea } from 'UI/Inputs';\n\nclass MessageForm extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.input = null;\n\n\t\tthis.state = {\n\t\t\thideInput: false,\n\t\t}\n\t}\n\n\t/* Utils */\n\t_setInput = (element) => {\n\t\tthis.input = element;\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentDidMount = () => {\n\t\tif (this.input != null && !sniffer.isDevice) {\n\t\t\tReactDOM.findDOMNode(this.input).focus();\n\t\t}\n\t}\n\n\t/* Events */\n\tsubmit = (values) => {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tawait this.setState({ hideInput: true });\n\n\t\t\tconst { conversation } = this.props;\n\t\t\tlet data = { ...values };\n\n\t\t\tdata.text = values.text + '';\n\n\t\t\tif (conversation != null) {\n\t\t\t\tdata.conversationID = conversation.id;\n\t\t\t}\n\n\t\t\tdata.parentId = null;\n\t\t\tdata.text = data.text.replace(/\\n/g, \"
\");\n\n\t\t\tawait this.setState({ hideInput: false });\n\n\t\t\tif (this.props.onSubmit) {\n\t\t\t\tthis.props.onSubmit(data).then(() => {\n\t\t\t\t\tresolve(1);\n\t\t\t\t\tthis.props.reset();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.setState({ hideInput: false });\n\t\t\t\t\tresolve(1);\n\t\t\t\t\tthis.props.reset();\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t});\n\t}\n\n\trequired = (value) => {\n\t\tif (typeof (value) !== 'undefined' && value !== '') {\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('write-message');\n\t}\n\n\trender() {\n\t\tconst { handleSubmit, submitting, valid } = this.props;\n\t\tlet placeHolderText = this.props.translate('write-message');\n\t\tif (this.props.conversation != null) {\n\t\t\tif (this.props.conversation.status.toUpperCase() == \"ARCHIVED\") {\n\t\t\t\tplaceHolderText = this.props.translate('conversation-archived');\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{!this.state.hideInput ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(reduxForm({\n\tform: 'MessageForm',\n\tdestroyOnUnmount: true,\n})(MessageForm));\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport Modal from 'react-modal';\nimport { connect } from 'react-redux';\nimport swal from 'sweetalert2';\nimport { Close } from 'UI/Icons';\n\n\nconst customStyles = {\n\toverlay: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.35)',\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tzIndex: '2147483',\n\t},\n\n\tcontent: {\n\t\tbackgroundColor: 'transparent',\n\t\tborder: '0',\n\t\tposition: 'absolute',\n\t\ttop: '0',\n\t\tleft: '0',\n\t\tright: '0',\n\t\tpadding: '0',\n\t\tminHeight: '100%',\n\t\toverflow: 'auto',\n\t\tzIndex: '2147483',\n\t\tWebkitOverflowScrolling: 'touch',\n\t},\n};\n\nModal.setAppElement('#root')\n\nclass ModalObject extends Component {\n\tonModalClick = (e) => {\n\t\te.stopPropagation();\n\t};\n\n\tshouldClose = () => {\n\t\tif (this.props.isOpen && !this.props.overridePrompt) {\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\t\ttext: this.props.translate('close-form-prompt'),\n\t\t\t\tshowCancelButton: true,\n\t\t\t\tcancelButtonText: this.props.translate('No'),\n\t\t\t\tconfirmButtonText: this.props.translate('Yes'),\n\t\t\t}).then(result => {\n\t\t\t\tif (result.value != null) {\n\t\t\t\t\tif (this.props.onClose != null && typeof this.props.onClose == 'function') {\n\t\t\t\t\t\tthis.props.onClose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.props.onClose != null && typeof this.props.onClose == 'function') {\n\t\t\t\tthis.props.onClose();\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t document.querySelector('#modals')}\n\t\t\t\tisOpen={this.props.isOpen}\n\t\t\t\tonRequestClose={this.shouldClose}\n\t\t\t\tcontentLabel=\"\"\n\t\t\t\tstyle={{ ...customStyles, ...this.props.style }}\n\t\t\t>\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{this.props.title}

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{this.props.onClose != null ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
{this.props.children}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t}\n}\n\nexport default connect(mapStateToProps)(ModalObject);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { translate } from '@haldor/ui';\n\nimport {\n\tcreateConversation,\n\tgetConversation,\n\tgetConversationsByReference,\n\tsubmitMessage,\n} from 'actions/conversation';\n\nimport ConversationMessages from 'containers/Conversation/Display/ConversationMessages';\nimport MessageForm from 'containers/Conversation/Form/MessageForm';\nimport Modal from 'containers/Modals/Modal';\n\nimport { Spinner } from 'UI';\n\nclass Message extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloading: true,\n\t\t\topen: '',\n\t\t};\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentDidMount = () => {\n\t\t// Get conversations\n\t\tif (this.props.assignment != null) {\n\t\t\tconst { assignment } = this.props;\n\t\t\tthis.props.getConversationsByReference(assignment.id, 'ASSIGNMENT').then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.plan != null) {\n\t\t\tconst { plan } = this.props;\n\t\t\tthis.props.getConversationsByReference(plan.id, 'PLAN').then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.meetingInstance != null) {\n\t\t\tconst { meetingInstance } = this.props;\n\t\t\tthis.props.getConversationsByReference(meetingInstance.id, 'MEETING_INSTANCE').then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t\t}\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.activeUser == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (nextProps.activeUser != this.props.activeUser) {\n\t\t\tlet user = nextProps.activeUser;\n\n\t\t\tif (user.id == null) {\n\t\t\t\tuser.id = user.userId;\n\t\t\t}\n\n\t\t\tlet conversation = this.getConversationForUser(user);\n\n\t\t\tif (conversation != null && conversation.id != 0) {\n\t\t\t\tthis.setState({ loading: true });\n\t\t\t\tthis.props.getConversation(conversation.id).then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Helper methods */\n\tgetCreatorId = () => {\n\t\tlet creator = null;\n\n\t\tif (this.props.assignment != null) {\n\t\t\tif (this.props.assignment.id == parseInt(this.props.assignment.id, 10)) {\n\t\t\t\tcreator = this.props.assignment.creator;\n\t\t\t} else {\n\t\t\t\tcreator = this.props.assignment.createdBy.user.id;\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.plan != null) {\n\t\t\tcreator = this.props.plan.creator;\n\t\t}\n\n\t\tif (this.props.meetingInstance != null) {\n\t\t\tcreator = this.props.meetingInstance.creator;\n\t\t}\n\n\t\treturn creator;\n\t}\n\n\tbuildReference = () => {\n\t\tlet references = [];\n\t\tlet reference = {};\n\n\t\tif (this.props.assignment != null) {\n\t\t\treference.referenceId = this.props.assignment.id;\n\t\t\treference.referenceType = 'ASSIGNMENT';\n\t\t}\n\n\t\tif (this.props.plan != null) {\n\t\t\treference.referenceId = this.props.plan.id;\n\t\t\treference.referenceType = 'PLAN';\n\t\t}\n\n\t\tif (this.props.meetingInstance != null) {\n\t\t\treference.referenceId = this.props.meetingInstance.id;\n\t\t\treference.referenceType = 'MEETING_INSTANCE';\n\t\t}\n\n\t\tif (this.props.studentId != null && this.props.activeUser.userType == \"GUARDIAN\") {\n\t\t\tlet studentReference = {};\n\t\t\tstudentReference.referenceId = this.props.studentId;\n\t\t\tstudentReference.referenceType = 'STUDENT';\n\t\t\treferences.push(studentReference);\n\t\t}\n\n\t\treferences.push(reference);\n\t\treturn references;\n\t}\n\n\tbuildMemberships = (user) => {\n\t\tlet memberships = [];\n\n\t\tmemberships.push({\n\t\t\tmembershipID: user.id,\n\t\t\tmembershipType: user.userType == \"GUARDIAN\" ? 'GUARDIAN' : 'USER',\n\t\t\tpermission: 'W',\n\t\t});\n\n\t\tmemberships.push({\n\t\t\tmembershipID: this.props.user.id,\n\t\t\tmembershipType: 'USER',\n\t\t\tpermission: 'O',\n\t\t\tuser: this.props.user,\n\t\t});\n\n\t\treturn memberships;\n\t}\n\n\tgetConversationForUser = (user) => {\n\t\tconst { conversations } = this.props;\n\n\t\tif (conversations != null) {\n\t\t\tlet found = conversations.find(conversation => {\n\t\t\t\tlet userType = 'USER'\n\t\t\t\tif (user.userType == \"GUARDIAN\") {\n\t\t\t\t\tuserType = 'GUARDIAN';\n\t\t\t\t}\n\t\t\t\tlet membership = conversation.memberships.find(member => {\n\t\t\t\t\treturn member.membershipType == userType && member.membershipID == user.id;\n\t\t\t\t});\n\n\t\t\t\treturn membership != null;\n\t\t\t});\n\n\t\t\treturn found;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMembership = (conversation, userid) => {\n\t\tlet membership = conversation.memberships.find(member => {\n\t\t\treturn member.membershipType == 'USER' && member.membershipID == userid;\n\t\t});\n\n\t\tif (membership != null) {\n\t\t\treturn membership;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/* Events */\n\tonCreate = (values, student) => {\n\t\treturn new Promise(resolve => {\n\t\t\tvalues.creator = this.props.user.id;\n\t\t\tvalues.senderId = values.creator;\n\t\t\tvalues.senderType = 'USER';\n\t\t\tdelete values.conversationID;\n\n\t\t\tlet conversation = {\n\t\t\t\tmessages: [values],\n\t\t\t\tmemberships: this.buildMemberships(student),\n\t\t\t\trelationships: this.buildReference(),\n\t\t\t\ttitle: '',\n\t\t\t\tstatus: 'ACTIVE',\n\t\t\t};\n\n\t\t\tthis.props.createConversation(conversation)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.props.getConversation(this.props.new);\n\t\t\t\t\tthis.componentDidMount();\n\t\t\t\t\tresolve(1);\n\t\t\t\t});\n\t\t})\n\t}\n\n\tsubmitMessage = (values) => {\n\t\treturn new Promise(resolve => {\n\t\t\tconst { user } = this.props;\n\n\t\t\tvalues.creator = user.id;\n\t\t\tvalues.senderId = values.creator;\n\t\t\tvalues.senderType = 'USER';\n\n\t\t\tthis.props.submitMessage(values).then(() => {\n\t\t\t\tthis.setState({});\n\t\t\t\tresolve(1);\n\t\t\t});\n\t\t});\n\t}\n\n\tonModalClose = () => {\n\t\tif (this.props.onClose) {\n\t\t\tthis.props.onClose();\n\t\t}\n\t}\n\n\t/* Render methods */\n\trenderConversation = () => {\n\t\tlet conversation = null;\n\t\tlet created = true;\n\t\tlet user = this.props.activeUser;\n\t\tlet trigger = this.props.activeUser.firstName + ' ' + this.props.activeUser.lastName;\n\t\tlet disabled = false;\n\n\t\tif (user.id == null) {\n\t\t\tuser.id = user.userId;\n\t\t}\n\n\t\tif (user != null) {\n\t\t\tconversation = this.getConversationForUser(user);\n\t\t\tif (conversation != null && conversation.status.toUpperCase() == 'ARCHIVED') {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\tif (conversation != null && conversation.status.toUpperCase() == 'ARCHIVED') {\n\t\t\tdisabled = true;\n\t\t}\n\n\t\tif (conversation == null) {\n\t\t\ttrigger = this.props.translate('send-a-message');\n\t\t\tcreated = false;\n\t\t\tconversation = { id: 0 };\n\t\t}\n\n\t\treturn
\n\t\t\t{created ?\n\t\t\t\t\n\t\t\t\t:\n\t\t\t\t
\n\t\t\t}\n\n\t\t\t{created ?\n\t\t\t\t\n\t\t\t\t:\n\t\t\t\t this.onCreate(values, user)}\n\t\t\t\t/>\n\t\t\t}\n\t\t
\n\t}\n\n\trenderContent = () => {\n\t\tif (this.state.loading) {\n\t\t\treturn \n\t\t}\n\n\t\treturn this.renderConversation();\n\t}\n\n\trender() {\n\t\tif (this.props.activeUser == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet title = null;\n\t\tif (this.props.plan != null) {\n\t\t\ttitle = this.props.activeUser.firstname + ' ' + this.props.activeUser.lastname;\n\t\t} else {\n\t\t\ttitle = this.props.activeUser.firstName + ' ' + this.props.activeUser.lastName;\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{this.renderContent()}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t\tconversations: state.Conversation.referenceConversations,\n\t\tactive: state.Conversation.conversation,\n\t\tnew: state.Conversation.new,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetConversationsByReference,\n\tcreateConversation,\n\tsubmitMessage,\n\tgetConversation,\n})(Message);\n","import React, { useState, useEffect, useRef } from 'react';\nimport \"./_displayName.scss\";\nimport { Tooltip } from '@mui/material';\n\nconst DisplayName = ({\n\tfirstName,\n\tlastName,\n\temail,\n\tdata,\n\tshowEmail,\n\tdisplayAvatar,\n\tdynamicStringWidth,\n\tsplitFirstName,\n\tsameName,\n\ttooltipTile\n}) => {\n\tuseEffect(() => {\n\t\tif (firstName == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lastName) {\n\t\t\tsetUserName(`${firstName} ${lastName}`);\n\t\t} else {\n\t\t\tsetUserName(firstName);\n\t\t}\n\t}, [firstName, lastName]);\n\n\tuseEffect(() => {\n\t\tif (!showEmail) {\n\t\t\tsetDisplayString(`${userName} (${email})`);\n\t\t} else {\n\t\t\tsetDisplayString(`(${email})`);\n\t\t}\n\t}, [email]);\n\n\tconst [userName, setUserName] = useState(lastName ? `${firstName} ${lastName}` : firstName);\n\tconst [displayString, setDisplayString] = useState(!showEmail ? `${userName} (${email})` : `(${email})`);\n\tconst dynamicStringRef = useRef(null);\n\n\t// Checks if there is another student with the same name and triggers css animation to alternate between name/email\n\t// Alot of different checks depending on view this component is rendered in\n\tlet hasSameName = false;\n\n\tif (sameName) {\n\t\thasSameName = sameName;\n\t}\n\n\tif (data != null && !showEmail) {\n\t\ttry {\n\t\t\tif (lastName != null) {\n\t\t\t\thasSameName = data.filter(x =>\n\t\t\t\t\tx.firstName === firstName && x.lastName === lastName\n\t\t\t\t).length > 1;\n\n\t\t\t\tif (!hasSameName) {\n\t\t\t\t\thasSameName = data.filter(x =>\n\t\t\t\t\t\tx.firstname === firstName && x.lastname === lastName\n\t\t\t\t\t).length > 1;\n\t\t\t\t}\n\t\t\t} else if (splitFirstName) {\n\t\t\t\tconst [firstname, lastname] = firstName.split(\" \");\n\t\t\t\thasSameName = data.filter(x =>\n\t\t\t\t\tx.firstName === firstname && x.lastName === lastname\n\t\t\t\t).length > 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\thasSameName = data.filter(x =>\n\t\t\t\t\tx.groupName === firstName).length > 1;\n\n\t\t\t\tif (!hasSameName) {\n\t\t\t\t\thasSameName = data.filter(x =>\n\t\t\t\t\t\tx.referenceTitle === firstName).length > 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t}\n\n\tif (dynamicStringWidth && email) {\n\t\t// Update string initially and on resize\n\t\tuseEffect(() => {\n\t\t\tconst updateString = () => {\n\t\t\t\tconst container = dynamicStringRef.current;\n\t\t\t\tconst containerWidth = container.offsetWidth;\n\t\t\t\tconst textWidth = getTextWidth(displayString);\n\n\t\t\t\tif (textWidth > containerWidth) {\n\t\t\t\t\t// String is longer than container width\n\t\t\t\t\tlet endIndex = binarySearchForFit(displayString, containerWidth);\n\t\t\t\t\tsetDisplayString(displayString.slice(0, endIndex) + '...)');\n\t\t\t\t} else {\n\t\t\t\t\t// String fits within container width\n\t\t\t\t\tsetDisplayString(displayString);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst handleResize = () => {\n\t\t\t\tconst container = dynamicStringRef.current;\n\t\t\t\tconst containerWidth = container.offsetWidth;\n\t\t\t\tconst string = (!showEmail ? `${userName} (${email})` : `(${email})`);\n\t\t\t\tconst textWidth = getTextWidth(string);\n\n\t\t\t\tif (textWidth > containerWidth) {\n\t\t\t\t\t// String is longer than container width\n\t\t\t\t\tlet endIndex = binarySearchForFit(string, containerWidth);\n\t\t\t\t\tsetDisplayString(string.slice(0, endIndex) + '...)');\n\t\t\t\t} else {\n\t\t\t\t\t// String fits within container width\n\t\t\t\t\tsetDisplayString(string);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tupdateString();\n\t\t\twindow.addEventListener('resize', handleResize);\n\n\t\t\t// Cleanup event listener on component unmount\n\t\t\treturn () => window.removeEventListener('resize', handleResize);\n\t\t}, [displayString]);\n\n\t\t// Function to calculate text width\n\t\tconst getTextWidth = (text) => {\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tconst context = canvas.getContext('2d');\n\t\t\tcontext.font = getComputedStyle(dynamicStringRef.current).font;\n\t\t\treturn context.measureText(text).width;\n\t\t};\n\n\t\t// Function for binary search to find substring that fits within container width\n\t\tconst binarySearchForFit = (text, targetWidth) => {\n\t\t\tlet start = 0;\n\t\t\tlet end = text.length - 1;\n\t\t\twhile (start <= end) {\n\t\t\t\tconst mid = Math.floor((start + end) / 2);\n\t\t\t\tconst midWidth = getTextWidth(text.slice(0, mid + 1));\n\t\t\t\tif (midWidth <= targetWidth) {\n\t\t\t\t\tstart = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\tend = mid - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn start;\n\t\t};\n\t}\n\n\t// Changes class in span only to match size for layout\n\tlet isNameLonger = false;\n\tif (email && userName && hasSameName) {\n\t\tisNameLonger = email.length < userName.length;\n\t}\n\n\t// Takes the first letter of the firstname and lastname to the avatar\n\tconst getInitials = () => {\n\t\tlet name = userName;\n\n\t\tif (name != null && name.length > 0) {\n\t\t\tlet nameSplit = name.split(' ');\n\n\t\t\tif (nameSplit.length > 1)\n\t\t\t\treturn nameSplit[0].charAt(0).toUpperCase() + nameSplit[nameSplit.length - 1].charAt(0).toUpperCase();\n\n\t\t\tif (nameSplit.length == 1)\n\t\t\t\treturn nameSplit[0].charAt(0).toUpperCase();\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{displayAvatar ? getInitials() : \"\"}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\t{hasSameName && !dynamicStringWidth && email ?\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{email}\n\t\t\t\t\t\t\t\t{userName}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t: dynamicStringWidth && hasSameName ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{displayString}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t: showEmail && email && dynamicStringWidth ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{userName}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{displayString}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t: !hasSameName || !email && !dynamicStringWidth ?\n\t\t\t\t\t\t\t\t\t\t{userName}\n\n\t\t\t\t\t\t\t\t\t\t: \"\"}\n\n\t\t\t\t\t\t{showEmail && email && !dynamicStringWidth ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{email}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t: \"\"}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n}\n\nexport default DisplayName;\n","import React, { Component } from 'react';\nimport { Button, translate, Icon } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport Moment from 'moment';\nimport swal from 'sweetalert2';\nimport api from 'lib/api';\nimport sniffer from 'sniffer';\nimport Select from 'react-select';\nimport { FormPrompt } from 'components/Inputs/FormPrompt';\nimport { addError } from 'actions';\nimport { createAssessments, updateAssessment, getAssignmentAssessment } from 'actions/assessments';\nimport { deleteAssignmentUserDocument, getFolderFiles, getTaskDetails } from 'actions/assignments';\nimport { getBlocksByReference, clearBlocksOnReference } from 'actions/blocks';\nimport { getSection } from 'actions/sections';\nimport { getStudentAssessment, getStudentAssessments } from 'actions/studentassessments';\nimport SimpleSelect from 'components/Inputs/SimpleSelect';\nimport AssessmentForm from 'containers/Forms/AssessmentForm';\nimport WopiFrame from 'containers/WopiFrame/WopiFrame';\nimport Message from 'containers/SinglePages/Partials/Message';\nimport jwtDecode from 'jwt-decode';\nimport { Spinner } from 'UI';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\nimport DisplayName from '../DisplayName';\n\nclass AttachedUserDocuments extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tselectedDocument: undefined,\n\t\t\tselectedVideo: undefined,\n\t\t\tselectedAudio: undefined,\n\t\t\tselectedImage: undefined,\n\t\t\tassignmentAttachementLoading: false,\n\t\t\tassignmentLoading: false,\n\t\t\tactiveTask: [],\n\t\t\tisTeamsDesktop: false,\n\t\t\tactiveTaskLoading: false,\n\t\t\tassessmentSubmitting: false,\n\t\t\tsidebar: true,\n\t\t\tsidebarWide: false,\n\t\t\tconversation: false,\n\t\t\tunsavedValues: null,\n\t\t};\n\n\t\tthis.clickChildSubmit = null;\n\t}\n\n\tinIframe() {\n\t\ttry {\n\t\t\treturn window.self !== window.top || window.navigator.userAgent.indexOf('TeamsMobile') > -1;\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.props.clearBlocksOnReference();\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tthis.loadInit(this.props.taskId);\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (window.location.hash == '#assessment') {\n\t\t\tthis.setState({ sidebarWide: true });\n\t\t}\n\n\t\twindow.addEventListener('hashchange', () => {\n\t\t\tthis.setState({ sidebarWide: window.location.hash == '#assessment' });\n\t\t});\n\n\t\tif (this.props.blocks == null || this.props.blocks.referenceId != this.props.assignmentId || this.props.blocks.referenceType.toLowerCase() !== 'assignment') {\n\t\t\tthis.props.getBlocksByReference(this.props.assignmentId, 'ASSIGNMENT');\n\t\t}\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (this.props.documentRefresh !== nextProps.documentRefresh) {\n\t\t\tthis.loadInit(nextProps.taskId);\n\t\t}\n\t}\n\n\tloadInit = (taskId) => {\n\t\tthis.loadUserAssignmentAttachedDocument(taskId);\n\t\tthis.loadActiveAssignment();\n\t\tthis.checkTeamsDesktop();\n\t}\n\n\tloadUserAssignmentAttachedDocument = (taskId) => {\n\t\tthis.setState({\n\t\t\tassignmentAttachementLoading: true,\n\t\t\tactiveTaskLoading: true,\n\t\t\tselectedDocument: '',\n\t\t\tselectedVideo: '',\n\t\t\tselectedImage: '',\n\t\t\tselectedAudio: '',\n\t\t});\n\n\t\tthis.props.assignment.tasks.forEach(t => t.selected = false);\n\n\t\tthis.props.getFolderFiles(this.props.assignmentId, taskId).then(() => {\n\n\t\t\tthis.setState({ assignmentAttachementLoading: false });\n\t\t\tlet officeFile = this.props.folderFiles.length > 0 && this.props.folderFiles.filter(f => f.webUrlViewMode !== '')[0];\n\t\t\tlet mp4File = this.props.folderFiles.length > 0 && this.props.folderFiles.filter(f => /.mp4$/.test(f.webUrl))[0];\n\t\t\tlet m4aFile = this.props.folderFiles.length > 0 && this.props.folderFiles.filter(f => /.m4a$/.test(f.webUrl))[0];\n\t\t\tlet imageFile = this.props.folderFiles.length > 0 && this.props.folderFiles.filter(f => /(.png|.jpg|.gif|.jpeg)$/.test(f.webUrl))[0];\n\n\t\t\tif (officeFile) {\n\t\t\t\tthis.setState({ selectedDocument: officeFile.webUrlViewMode });\n\t\t\t} else if (mp4File) {\n\t\t\t\tthis.setState({ selectedVideo: mp4File.webUrl });\n\t\t\t} else if (imageFile) {\n\t\t\t\tthis.setState({ selectedImage: imageFile.webUrl });\n\t\t\t} else if (m4aFile) {\n\t\t\t\tthis.setState({ selectedAudio: m4aFile.webUrl });\n\t\t\t}\n\t\t});\n\t}\n\n\tloadActiveAssignment = () => {\n\t\tthis.setState({ assignmentLoading: true });\n\n\t\tthis.props.getTaskDetails(this.props.assignmentId).then(async () => {\n\t\t\tlet tasks = this.props.assignment.tasks.filter(t => t.id == this.props.taskId);\n\t\t\ttasks[0].selected = true;\n\n\t\t\tawait this.setState({ activeTask: tasks, activeTaskLoading: false });\n\n\t\t\tif (this.props.assignment.assessmentType == 'BUDDY' || this.props.assignment.assessmentType == 'SELF') {\n\t\t\t\tawait this.props.getStudentAssessments(this.props.assignmentId);\n\t\t\t}\n\n\t\t\tthis.setState({ assignmentLoading: false });\n\t\t});\n\n\t\tthis.props.getAssignmentAssessment(this.props.assignmentId);\n\t}\n\n\tcheckTeamsDesktop = () => {\n\t\tthis.setState({ isTeamsDesktop: navigator.userAgent.match(/Teams/i) });\n\t}\n\n\tselectedDocument = (fileUrl) => {\n\t\tthis.setState({ selectedDocument: fileUrl });\n\t\tthis.setState({ selectedVideo: '' });\n\t\tthis.setState({ selectedImage: '' });\n\t\tthis.setState({ selectedAudio: '' });\n\t}\n\n\tselectedVideo = (fileUrl) => {\n\t\tthis.setState({ selectedDocument: '' });\n\t\tthis.setState({ selectedVideo: fileUrl });\n\t\tthis.setState({ selectedImage: '' });\n\t\tthis.setState({ selectedAudio: '' });\n\t}\n\n\tselectedImage = (fileUrl) => {\n\t\tthis.setState({ selectedDocument: '' });\n\t\tthis.setState({ selectedVideo: '' });\n\t\tthis.setState({ selectedImage: fileUrl });\n\t\tthis.setState({ selectedAudio: '' });\n\t}\n\n\tselectedAudio = (fileUrl) => {\n\t\tthis.setState({ selectedDocument: '' });\n\t\tthis.setState({ selectedVideo: '' });\n\t\tthis.setState({ selectedImage: '' });\n\t\tthis.setState({ selectedAudio: fileUrl });\n\t}\n\n\tremoveDocument = (fileName) => {\n\t\tswal.fire({\n\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\ttext: this.props.translate('are-you-sure-you-want-to-delete'),\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: this.props.translate('No'),\n\t\t\tconfirmButtonText: this.props.translate('Yes'),\n\t\t}).then((result) => {\n\t\t\tif (result.value != null) {\n\t\t\t\tthis.setState({ assignmentAttachementLoading: true });\n\n\t\t\t\tthis.props.deleteAssignmentUserDocument(this.props.assignmentId, fileName).then(() => {\n\t\t\t\t\tthis.loadUserAssignmentAttachedDocument(this.props.taskId);\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\t}\n\n\ttoggleSidebar = () => {\n\t\tthis.setState({ sidebar: !this.state.sidebar });\n\t}\n\n\ttoggleConversation = () => {\n\t\tthis.setState({ conversation: !this.state.conversation });\n\t}\n\n\ttoggleIcon(flip) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tonStatusSelect = (item, value) => {\n\t\tif (!this.isTaskAssessable()) {\n\t\t\tapi.put(\"assignments/Student/Status?assignmentTaskId=\" + item.id + \"&status=\" + value.value).then(() => {\n\t\t\t\tthis.props.addError(this.props.translate('changes-saved'), 'info');\n\n\t\t\t\titem.status = value.value;\n\t\t\t\tthis.loadInit(this.props.taskId);\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tapi.put(\"assignments/Student/Status?assignmentTaskId=\" + item.id + \"&status=\" + value.value).then(() => {\n\t\t\tthis.props.addError(this.props.translate('changes-saved'), 'info');\n\t\t\titem.status = value.value;\n\t\t});\n\t}\n\n\tisTaskAssessable = () => {\n\t\treturn (\n\t\t\tthis.props.assignmentTask.status === 'ASSIGNMENT_TASK_SUBMITTED' ||\n\t\t\tthis.props.assignmentTask.status === 'ASSIGNMENT_TASK_NOT_COMPLETE' ||\n\t\t\tthis.props.assignmentTask.status === 'ASSIGNMENT_TASK_CAN_DEVELOP'\n\t\t);\n\t}\n\n\tassessmentSubmitting = (submitting) => {\n\t\tthis.setState({ assessmentSubmitting: submitting });\n\t}\n\n\tonAssessmentSubmit = (values) => {\n\n\t\treturn new Promise((resolve) => {\n\t\t\tconst { assignmentTask } = this.props;\n\t\t\tif (values.id != null) {\n\t\t\t\tconst existing = this.props.assessments.find((assessment) => assessment.id == values.id);\n\t\t\t\tthis.props.updateAssessment(values, existing).then(async () => {\n\t\t\t\t\tawait this.props.getAssignmentAssessment(this.props.assignmentId);\n\t\t\t\t\tthis.props.addError(this.props.translate('changes-saved'), 'info');\n\t\t\t\t\tthis.setState({ unsavedValues: null });\n\t\t\t\t\tresolve(1);\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet data = {\n\t\t\t\t...values,\n\t\t\t\tassignmentId: this.props.assignment.id,\n\t\t\t\treferenceId: assignmentTask.id,\n\t\t\t\tstudentId: assignmentTask.assignedTo,\n\t\t\t};\n\n\t\t\tthis.props.createAssessments([data]).then(async () => {\n\t\t\t\tawait this.props.getAssignmentAssessment(this.props.assignmentId);\n\t\t\t\tthis.props.addError(this.props.translate('changes-saved'), 'info');\n\t\t\t\tthis.setState({ unsavedValues: null });\n\t\t\t\tresolve(1);\n\t\t\t});\n\t\t});\n\t}\n\n\tgoPrevious = () => {\n\t\tif (!this.props.previousEnable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isTaskAssessable()) {\n\t\t\tthis.props.goPrevious();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state.unsavedValues != null) {\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\t\ttext: this.props.translate(\"There are changes that haven't been saved. Are you sure you want to leave the page\"),\n\t\t\t\tshowCancelButton: true,\n\t\t\t\tcancelButtonText: this.props.translate('No'),\n\t\t\t\tconfirmButtonText: this.props.translate('Yes'),\n\t\t\t}).then((result) => {\n\t\t\t\tif (result.value != null) {\n\t\t\t\t\tthis.setState({ unsavedValues: null });\n\n\t\t\t\t\tif (this.clickChildSubmit != null) {\n\t\t\t\t\t\tthis.clickChildSubmit().then(() => {\n\t\t\t\t\t\t\tthis.props.goPrevious();\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.props.goPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.clickChildSubmit != null) {\n\t\t\t\tthis.clickChildSubmit().then(() => {\n\t\t\t\t\tthis.props.goPrevious();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.props.goPrevious();\n\t\t\t}\n\t\t}\n\t}\n\n\tgoNext = () => {\n\t\tif (!this.props.nextEnable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isTaskAssessable()) {\n\t\t\tthis.props.goNext();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state.unsavedValues != null) {\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\t\ttext: this.props.translate(\"There are changes that haven't been saved. Are you sure you want to leave the page\"),\n\t\t\t\tshowCancelButton: true,\n\t\t\t\tcancelButtonText: this.props.translate('No'),\n\t\t\t\tconfirmButtonText: this.props.translate('Yes'),\n\t\t\t}).then((result) => {\n\t\t\t\tif (result.value != null) {\n\t\t\t\t\tthis.setState({ unsavedValues: null });\n\n\t\t\t\t\tif (this.clickChildSubmit != null) {\n\t\t\t\t\t\tthis.clickChildSubmit().then(() => {\n\t\t\t\t\t\t\tthis.props.goNext();\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.props.goNext();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\tif (this.clickChildSubmit != null) {\n\t\t\t\tthis.clickChildSubmit().then(() => {\n\t\t\t\t\tthis.props.goNext();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.props.goNext();\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateUnsavedValues = (newValue, studentId, referenceId) => {\n\t\tif (\n\t\t\tnewValue == null ||\n\t\t\tstudentId !== this.props.assignmentTask?.students[0]?.userId ||\n\t\t\treferenceId !== this.props.assignmentTask?.id\n\t\t) {\n\t\t\tthis.setState({ unsavedValues: null });\n\t\t} else {\n\t\t\tthis.setState((prevState) => ({\n\t\t\t\tunsavedValues: {\n\t\t\t\t\t...newValue,\n\t\t\t\t\tstudentId: studentId,\n\t\t\t\t\treferenceId: referenceId\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t};\n\n\n\trenderAssess = () => {\n\t\tlet conversation = null;\n\t\tif (this.props.conversations != null) {\n\t\t\tconversation = this.props.conversations.find((conv) => {\n\t\t\t\treturn conv.memberships.find((member) => {\n\t\t\t\t\treturn member.membershipID == this.props.assignmentTask.students[0].userId;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tconst student = this.props.assignmentTask.students[0];\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.toggleIcon(false)}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{student ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\tthis.props.assignmentTask.groupName\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{this.state.assessmentSubmitting ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{conversation != null &&\n\t\t\t\t\t\t\t\t\t\tconversation.unreadMessages > 0 ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{conversation.unreadMessages}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.toggleIcon(true)}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t{this.renderStatus()}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderNoDocuments = () => {\n\t\treturn
\n\t\t\t{this.props.translate('no-files-found')}\n\t\t
;\n\t}\n\n\tgetParameterByName(name, url) {\n\t\tif (!url) url = window.location.href;\n\t\tname = name.replace(/[\\[\\]]/g, '\\\\$&');\n\t\tvar regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n\t\t\tresults = regex.exec(url);\n\t\tif (!results) return null;\n\t\tif (!results[2]) return '';\n\t\treturn decodeURIComponent(results[2].replace(/\\+/g, ' '));\n\t}\n\n\tonClickDocumentFunc = (file) => {\n\t\tlet notOfficeFile = file.webUrlViewMode === '';\n\t\tlet mp4File = notOfficeFile && /.mp4$/.test(file.webUrl);\n\t\tlet imageFile = notOfficeFile && /(.png|.jpg|.gif|.jpeg)$/.test(file.webUrl);\n\t\tlet m4aFile = notOfficeFile && /.m4a$/.test(file.webUrl);\n\t\tconst url = file.webUrlViewMode.replace('#', '?');\n\t\tconst token = jwtDecode(decodeURI(this.getParameterByName('access_token', url)));\n\n\t\tif (Moment.unix(token.exp).utc().isBefore(Moment())) {\n\t\t\tthis.setState({\n\t\t\t\tassignmentAttachementLoading: true,\n\t\t\t\tselectedDocument: '',\n\t\t\t\tselectedVideo: '',\n\t\t\t\tselectedImage: '',\n\t\t\t\tselectedAudio: '',\n\t\t\t});\n\n\t\t\tthis.props.assignment.tasks.forEach(t => t.selected = false);\n\n\t\t\tthis.props.getFolderFiles(this.props.assignmentId, this.props.taskId).then(() => {\n\t\t\t\tthis.setState({ assignmentAttachementLoading: false });\n\n\t\t\t\tlet newFile = this.props.folderFiles.find(newFile => {\n\t\t\t\t\treturn newFile.eTag == file.eTag;\n\t\t\t\t});\n\n\t\t\t\tif (newFile != null) {\n\t\t\t\t\tif (!notOfficeFile) {\n\t\t\t\t\t\tthis.selectedDocument(newFile.webUrlViewMode)\n\t\t\t\t\t} else if (mp4File) {\n\t\t\t\t\t\tthis.selectedVideo(newFile.webUrl)\n\t\t\t\t\t} else if (imageFile) {\n\t\t\t\t\t\tthis.selectedImage(newFile.webUrl)\n\t\t\t\t\t} else if (m4aFile) {\n\t\t\t\t\t\tthis.selectedAudio(newFile.webUrl)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (!notOfficeFile) {\n\t\t\t\tthis.selectedDocument(file.webUrlViewMode)\n\t\t\t} else if (mp4File) {\n\t\t\t\tthis.selectedVideo(file.webUrl)\n\t\t\t} else if (imageFile) {\n\t\t\t\tthis.selectedImage(file.webUrl)\n\t\t\t} else if (m4aFile) {\n\t\t\t\tthis.selectedAudio(file.webUrl)\n\t\t\t}\n\t\t}\n\t}\n\n\trenderWopiFrame = () => {\n\t\tconst { selectedDocument } = this.state;\n\n\t\tif (this.props.folderFiles.length <= 0) {\n\t\t\treturn
\n\t\t\t\t{this.props.translate('No files to view.')}\n\t\t\t
;\n\t\t}\n\n\t\tif (sniffer.isDevice && this.inIframe()) {\n\t\t\treturn
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\t{this.props.translate(\"We’re sorry but we can’t display the file in Haldor at the moment. But you can open it by clicking “Open file in workspace”.\")}\n\t\t\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{selectedDocument ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderMp4Frame = () => {\n\t\tconst { selectedVideo } = this.state;\n\n\t\tif (this.props.folderFiles.length <= 0) {\n\t\t\treturn
\n\t\t\t\tNo files to play.\n\t\t\t
;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{selectedVideo ?\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('Your browser does not support the video tag.')}\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderM4aFrame = () => {\n\t\tconst { selectedAudio } = this.state;\n\n\t\tif (this.props.folderFiles.length <= 0) {\n\t\t\treturn
\n\t\t\t\tNo files to play.\n\t\t\t
;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{selectedAudio ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderImageFrame = () => {\n\t\tconst { selectedImage } = this.state;\n\n\t\tif (this.props.folderFiles.length <= 0) {\n\t\t\treturn
\n\t\t\t\t{this.props.translate('No images to view.')}\n\t\t\t
;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{selectedImage ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderView = () => {\n\t\tconst {\n\t\t\tselectedDocument,\n\t\t\tselectedVideo,\n\t\t\tselectedImage,\n\t\t\tselectedAudio\n\t\t} = this.state;\n\n\t\tif (selectedDocument) {\n\t\t\treturn this.renderWopiFrame();\n\t\t}\n\n\t\tif (selectedVideo) {\n\t\t\treturn this.renderMp4Frame();\n\t\t}\n\n\t\tif (selectedImage) {\n\t\t\treturn this.renderImageFrame();\n\t\t}\n\n\t\tif (selectedAudio) {\n\t\t\treturn this.renderM4aFrame();\n\t\t}\n\n\t\treturn null;\n\t}\n\n\trenderStatus = () => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t
\n\t\t)\n\t}\n\n\trender() {\n\t\tconst { assignmentAttachementLoading, activeTaskLoading, sidebarWide, sidebar, unsavedValues } = this.state;\n\t\tconst { IsTeacher, IsSubmitted, assignmentTask } = this.props;\n\n\t\tlet activeConversation = null;\n\t\tif (this.state.conversation) {\n\t\t\tactiveConversation = this.props.assignmentTask.students[0];\n\t\t}\n\n\t\tlet assessmentBlocks = null;\n\t\tlet assessment = null;\n\t\tlet seperatedAssessments = {\n\t\t\tpeerAssessments: [],\n\t\t\tteacherAssessments: [],\n\t\t\tselfAssessments: []\n\t\t}\n\n\t\tif (this.props.blocks != null) {\n\t\t\tassessmentBlocks = [...this.props.blocks].filter((block) =>\n\t\t\t\tblock.type == 'Haldor.Blocks.AssessmentBlock' && block.resources.length > 0\n\t\t\t);\n\t\t\tseperatedAssessments.peerAssessments = assessmentBlocks.filter((block) =>\n\t\t\t\tblock.assessmentType == ASSESSMENT_TYPES.PEER && block.resources.length > 0\n\t\t\t)?.sort((a, b) => a.title.localeCompare(b.title));\n\n\t\t\tseperatedAssessments.teacherAssessments = assessmentBlocks.filter((block) =>\n\t\t\t\t(block.assessmentType == ASSESSMENT_TYPES.TEACHER || block.assessmentType == null) && block.resources.length > 0\n\t\t\t).sort((a, b) => a.title.localeCompare(b.title));\n\n\t\t\tseperatedAssessments.selfAssessments = assessmentBlocks.filter((block) =>\n\t\t\t\tblock.assessmentType == ASSESSMENT_TYPES.SELF && block.resources.length > 0\n\t\t\t).sort((a, b) => a.title.localeCompare(b.title));\n\t\t}\n\n\t\tif (this.props.assessments != null) {\n\t\t\tassessment = this.props.assessments.find((assessment) =>\n\t\t\t\tassessment.referenceId == this.props.assignmentTask.id && assessment.assessorType == ASSESSMENT_TYPES.TEACHER\n\t\t\t);\n\t\t}\n\n\t\tif (this.state.assignmentLoading) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\tlet selectedFile = this.props.folderFiles.find((file) => {\n\t\t\tlet notOfficeFile = file.webUrlViewMode === '';\n\t\t\tlet mp4File = notOfficeFile && /.mp4$/.test(file.webUrl);\n\t\t\tlet imageFile = notOfficeFile && /(.png|.jpg|.gif|.jpeg)$/.test(file.webUrl);\n\t\t\tlet m4aFile = notOfficeFile && /.m4a$/.test(file.webUrl);\n\t\t\treturn !notOfficeFile && this.state.selectedDocument === file.webUrlViewMode ? file\n\t\t\t\t: mp4File && this.state.selectedVideo === file.webUrl ? file\n\t\t\t\t\t: imageFile && this.state.selectedImage === file.webUrl ? file\n\t\t\t\t\t\t: m4aFile && this.state.selectedAudio === file.webUrl ? file\n\t\t\t\t\t\t\t: null;\n\t\t});\n\n\t\tconst fileOptions = this.props.folderFiles.map((file) => ({\n\t\t\tvalue: file,\n\t\t\tlabel: file.name,\n\t\t}));\n\n\t\tif (!this.isTaskAssessable() && unsavedValues != null) {\n\t\t\tthis.setState({ unsavedValues: null });\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{unsavedValues != null && IsTeacher ? (\n\t\t\t\t\t\n\t\t\t\t) : null}\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{!assignmentAttachementLoading && this.props.folderFiles.length <= 0 ?\n\t\t\t\t\t\tthis.renderNoDocuments()\n\t\t\t\t\t\t: !assignmentAttachementLoading && selectedFile ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t this.onClickDocumentFunc(eventTarget.value)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"simple-select\"\n\t\t\t\t\t\t\t\t\t\tplaceholder={selectedFile.name != null ? selectedFile.name : ''}\n\t\t\t\t\t\t\t\t\t\tcomponents={{ IndicatorSeparator: () => null }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{(!IsSubmitted || IsTeacher) && selectedFile.webUrlViewMode !== ''\n\t\t\t\t\t\t\t\t\t\t&& selectedFile && (selectedFile.webUrlViewMode && selectedFile.webUrlViewMode.length < 2047 || selectedFile.webUrlEditMode\n\t\t\t\t\t\t\t\t\t\t\t&& selectedFile.webUrlEditMode.length < 2047) ?\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t{!IsTeacher && !IsSubmitted ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t { this.removeDocument(selectedFile.name) }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Remove')}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{assignmentAttachementLoading ? : this.renderView()}\n\t\t\t\t
\n\n\t\t\t\t{sidebar && IsTeacher ?\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('fold-up')} \n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{IsTeacher ? this.renderAssess() : null}\n\n\t\t\t\t\t\t{IsTeacher && !activeTaskLoading ?\n\t\t\t\t\t\t\tthis.isTaskAssessable() ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.props.translate(\"Student-has-not-submitted-assignment\")}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\t\t\t\t\t: IsTeacher ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('fold-out')} \n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tfolderFiles: state.assignments.folderFiles,\n\t\tassignment: state.assignments.active_assignment,\n\t\tcurrentUser: state.user.currentUser,\n\t\tsections: state.sections.educationGroups,\n\t\tassessments: state.assessments.assessments,\n\t\tconversations: state.Conversation.referenceConversations,\n\t\tblocks: state.Blocks.reference,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetFolderFiles,\n\tdeleteAssignmentUserDocument,\n\tgetTaskDetails,\n\tgetSection,\n\tgetStudentAssessments,\n\tgetStudentAssessment,\n\tgetAssignmentAssessment,\n\taddError,\n\tcreateAssessments,\n\tupdateAssessment,\n\tgetBlocksByReference,\n\tclearBlocksOnReference,\n})(AttachedUserDocuments);\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\n\nimport { getTaskDetails } from 'actions/assignments';\nimport { setPageTitle } from 'actions/header';\n\nimport AttachedUserDocuments from 'components/Presentation/Documents/AttachedUserDocuments';\n\nimport { Spinner } from 'UI';\nimport { Link } from 'react-router-dom';\nimport { getRootUrl } from 'helpers/url';\n\nclass UserDocuments extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tdocumentRefresh: 0,\n\t\t\tassignmentLoading: false,\n\t\t\tactiveAssignmentTaskId: null,\n\t\t\tassignmentTasks: null,\n\t\t\tassignmentTask: null,\n\t\t\tassignmentTaskIndexes: null\n\t\t};\n\n\t\tthis.goNext = this.goNext.bind(this);\n\t\tthis.goPrevious = this.goPrevious.bind(this);\n\t}\n\n\n\n\tcomponentDidMount() {\n\t\tthis.loadAssignment();\n\t}\n\n\tloadAssignment() {\n\t\tthis.setState({ assignmentLoading: true });\n\t\tconst that = this;\n\n\t\tthis.props.getTaskDetails(this.props.match.params.assignmentId)\n\t\t\t.then(() => {\n\t\t\t\tthis.props.setPageTitle(this.props.assignment.title);\n\t\t\t\tif (this.props.assignment.groupEnabled) {\n\t\t\t\t\tthat.setState({\n\t\t\t\t\t\tassignmentTasks: that.props.assignment.tasks.sort((a, b) =>\n\t\t\t\t\t\t\ta.groupName.split(' ').pop()\n\t\t\t\t\t\t\t\t.localeCompare(b.groupName.split(' ').pop())\n\t\t\t\t\t\t)\n\t\t\t\t\t}, () => {\n\t\t\t\t\t\tthat.setActiveTaskId(that.props.match.params.taskId);\n\t\t\t\t\t\tthat.setTaskIndexes();\n\t\t\t\t\t\tthat.setState({ assignmentLoading: false });\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthat.setState({\n\t\t\t\t\t\tassignmentTasks: that.props.assignment.tasks.sort((a, b) =>\n\t\t\t\t\t\t\t(a.students[0].lastName || \"\").localeCompare(b.students[0].lastName || \"\"))\n\t\t\t\t\t}, () => {\n\t\t\t\t\t\tthat.setActiveTaskId(that.props.match.params.taskId);\n\t\t\t\t\t\tthat.setTaskIndexes();\n\t\t\t\t\t\tthat.setState({ assignmentLoading: false });\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tsetActiveTaskId(taskId) {\n\t\tthis.setState({ activeAssignmentTaskId: taskId });\n\t\tthis.setActiveTask(taskId);\n\t}\n\n\tsetActiveTask(taskId) {\n\t\tconst { assignmentTasks } = this.state;\n\n\t\tconst task = assignmentTasks.filter(t => t.id == taskId)[0];\n\n\t\tthis.setState({ assignmentTask: task });\n\t}\n\n\tsetTaskIndexes() {\n\t\tconst { assignmentTasks } = this.state;\n\t\tlet taskIndexes = {};\n\n\t\tassignmentTasks.forEach((element, index) => {\n\t\t\ttaskIndexes[element.id] = index;\n\t\t});\n\n\t\tthis.setState({ assignmentTaskIndexes: taskIndexes });\n\t}\n\n\trefreshDocuments = () => {\n\t\tlet documentRefresh = this.state.documentRefresh;\n\t\tdocumentRefresh++;\n\n\t\tthis.setState({ documentRefresh });\n\t}\n\n\tgoNext() {\n\t\tconst {\n\t\t\tassignmentTasks,\n\t\t\tassignmentTaskIndexes,\n\t\t\tactiveAssignmentTaskId,\n\t\t} = this.state;\n\n\t\tlet index = assignmentTaskIndexes[activeAssignmentTaskId];\n\n\t\tindex++;\n\n\t\tif (index > (assignmentTasks.length - 1)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet output = Object.entries(assignmentTaskIndexes).map(([key, value]) => ({ key, value }));\n\n\t\tlet nextActiveAssignmentTaskId = output.filter(t => t.value === index)[0].key;\n\n\t\tthis.setActiveTaskId(nextActiveAssignmentTaskId);\n\t\tthis.refreshDocuments();\n\t}\n\n\tgoPrevious() {\n\t\tconst {\n\t\t\tassignmentTaskIndexes,\n\t\t\tactiveAssignmentTaskId\n\t\t} = this.state;\n\n\t\tlet index = assignmentTaskIndexes[activeAssignmentTaskId];\n\n\t\tindex--;\n\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet output = Object.entries(assignmentTaskIndexes).map(([key, value]) => ({ key, value }));\n\n\t\tlet nextActiveAssignmentTaskId = output.filter(t => t.value === index)[0].key;\n\n\t\tthis.setActiveTaskId(nextActiveAssignmentTaskId);\n\t\tthis.refreshDocuments();\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tdocumentRefresh,\n\t\t\tassignmentTask,\n\t\t\tassignmentTasks,\n\t\t\tassignmentTaskIndexes,\n\t\t\tactiveAssignmentTaskId,\n\t\t} = this.state;\n\n\t\tif (this.state.assignmentLoading || !assignmentTask) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\tconst nextEnable = assignmentTasks.length > 1 &&\n\t\t\tassignmentTaskIndexes[activeAssignmentTaskId] != (assignmentTasks.length - 1);\n\n\t\tconst previousEnable = assignmentTasks.length > 1 &&\n\t\t\tassignmentTaskIndexes[activeAssignmentTaskId] != 0;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.assignment != null && this.props.assignment.id > 0 ?
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('Go to assignment')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
: null}\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tassignment: state.assignments.active_assignment,\n\t\ttranslate: translate(state.Languages.translations),\n\t}\n}\n\nexport default connect(mapStateToProps, {\n\tgetTaskDetails,\n\tsetPageTitle,\n})(UserDocuments);\n","import React, { Component } from 'react';\nimport msal from 'lib/msal';\n\nimport { clearLocalStorage } from 'helpers/localstorage';\n\nexport default class Logout extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tconst foundAdalinStorage = this.allStorage().findIndex(item => {\n\t\t\treturn item.indexOf('adal') > -1;\n\t\t});\n\n\t\tif (foundAdalinStorage > -1) {\n\t\t\tclearLocalStorage();\n\t\t\tmsal.logoutRedirect();\n\t\t} else {\n\t\t\tmsal.logoutRedirect();\n\t\t}\n\t}\n\n\tallStorage = () => {\n\t\tvar archive = [],\n\t\t\tkeys = Object.keys(localStorage),\n\t\t\ti = 0, key;\n\n\t\tfor (; key = keys[i]; i++) {\n\t\t\tarchive.push(key + '=' + localStorage.getItem(key));\n\t\t}\n\n\t\treturn archive;\n\t}\n\n\trender() {\n\t\treturn null;\n\t}\n\n}\n","\n\nvar store = require('../');\nimport { appInsights } from 'lib/appInsights';\n\nvar fetchSchool = function (activeSchool, currentUser) {\n\tvar localStorageSchool = localStorage.getItem(\"hal.school\" + currentUser.userId);\n\n\tlet foundSchool = null;\n\tif (currentUser.schools != null && localStorageSchool != null) {\n\t\tfoundSchool = currentUser.schools.find(school => {\n\t\t\treturn school.id == localStorageSchool;\n\t\t});\n\n\t\tif (foundSchool == null) {\n\t\t\tconst properties = {\n\t\t\t\t'localStorageSchool': localStorageSchool,\n\t\t\t\t'url': window.location.pathname,\n\t\t\t};\n\n\t\t\tappInsights.trackTrace({ message: 'Wrong school in localstorage', severityLevel: 2 }, properties);\n\t\t}\n\t}\n\n\tif (localStorageSchool == null) {\n\t\tlocalStorage.setItem(\"hal.school\" + currentUser.userId, currentUser.schools[0].id);\n\n\t\tconst newAction = { type: \"SET_SCHOOL\", payload: currentUser.schools[0].id };\n\t\tstore.default.dispatch(newAction);\n\t} else {\n\t\tif (foundSchool != null) {\n\t\t\tconst newAction = { type: \"SET_SCHOOL\", payload: localStorageSchool };\n\t\t\tstore.default.dispatch(newAction);\n\t\t} else {\n\t\t\tif (window.location.pathname == '/') {\n\t\t\t\tlocalStorage.setItem(\"hal.school\" + currentUser.userId, currentUser.schools[0].id);\n\t\t\t\tconst newAction = { type: \"SET_SCHOOL\", payload: currentUser.schools[0].id };\n\t\t\t\tstore.default.dispatch(newAction);\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar setLocalStorage = function (currentUser) {\n\tvar localStorageSchool = localStorage.getItem(\"hal.school\" + currentUser.userId);\n\n\tif (localStorageSchool == null) {\n\t\tlocalStorage.setItem(\"hal.school\" + currentUser.userId, currentUser.schools[0].id);\n\t}\n}\n\nvar setSchoolOnUser = function (currentUser, schoolId) {\n\tlocalStorage.setItem(\"hal.school\" + currentUser.userId, schoolId);\n}\n\nvar getSchoolForUser = function (currentUser) {\n\treturn localStorage.getItem(\"hal.school\" + currentUser.userId);\n}\n\nexport default {\n\tfetchSchool,\n\tsetLocalStorage,\n\tsetSchoolOnUser,\n\tgetSchoolForUser,\n};\n","import { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { getUserUnreadNotifications } from 'actions/notifications';\nimport moment from 'moment';\n\nconst NotificationProvider = () => {\n\tconst dispatch = useDispatch();\n\n\tlet isFocused = false;\n\tconst onFocusFunction = () => {\n\t\t// do whatever when focus is gained\n\t\tisFocused = true;\n\t};\n\n\tconst onBlurFunction = () => {\n\t\t// do whatever when focus is lost\n\t\tisFocused = false;\n\t};\n\n\tuseEffect(() => {\n\t\tfunction fetchCount() {\n\t\t\tif (isFocused) {\n\t\t\t\tconsole.log('Fetch Count', moment().format('hh:mm:ss'))\n\t\t\t\tdispatch(getUserUnreadNotifications());\n\t\t\t}\n\t\t};\n\n\t\tonFocusFunction();\n\n\t\t// Commented out due to issues in planning form when reinitialized\n\t\t// const interval = setInterval(() => fetchCount(), 45 * 1000);\n\t\tdocument.addEventListener('route_change', fetchCount);\n\t\tfetchCount();\n\n\t\twindow.addEventListener(\"focus\", onFocusFunction);\n\t\twindow.addEventListener(\"blur\", onBlurFunction);\n\n\t\treturn () => {\n\t\t\t// Clean up events\n\t\t\t//clearInterval(interval);\n\t\t\tdocument.removeEventListener('route_change', fetchCount);\n\t\t\twindow.removeEventListener(\"focus\", onFocusFunction);\n\t\t\twindow.removeEventListener(\"blur\", onBlurFunction);\n\t\t};\n\t}, []);\n\n\treturn null;\n};\n\nexport default NotificationProvider;\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport sniffer from 'sniffer';\nimport getEnvironment from 'lib/env';\nimport project from '../../../package.json';\n\nclass Footer extends Component {\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{sniffer.isDesktop || sniffer.isTablet ?\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHaldor - {moment().format('YYYY')}\n\n\t\t\t\t\t\t\t{getEnvironment().type == 'production' || getEnvironment().type == 'staging' ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tRelease {project.version}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tSession ID: {localStorage.getItem('hsid')}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{getEnvironment().type == 'dev' || getEnvironment().type == 'test' ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tRelease {project.version} Development Preview\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nexport default Footer;\n","import React, { Component } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslate } from 'lib/translate';\n\nclass Expire extends Component {\n\tstatic defaultProps = {\n\t\tdelay: 9000,\n\t}\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tvisible: true,\n\t\t};\n\n\t\tthis._timer = null;\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.setTimer();\n\t}\n\n\tsetTimer = () => {\n\t\t// clear any existing timer\n\t\tif (this._timer != null) {\n\t\t\tclearTimeout(this._timer);\n\t\t}\n\n\t\t// set visible and create timeout on this._timer\n\t\tthis.setState({ visible: true }, () => {\n\t\t\tthis._timer = setTimeout(() => {\n\t\t\t\tthis.setState({ visible: false });\n\t\t\t\tthis._timer = null;\n\n\t\t\t\tif (this.props.onExpire) {\n\t\t\t\t\tthis.props.onExpire();\n\t\t\t\t}\n\t\t\t}, this.props.delay);\n\t\t});\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tclearTimeout(this._timer);\n\t}\n\n\trender = () => (\n\t\tthis.state.visible ?\n\t\t\t
\n\t\t\t\t{this.props.children}\n\t\t\t
\n\t\t\t: null\n\t)\n}\n\nconst Error = () => {\n\tconst translate = useTranslate();\n\tconst errors = useSelector(state => state.errors);\n\n\tconst renderError = (error, i) => {\n\t\tif (error.viewed == true) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t error.viewed = true}\n\t\t\t\ttype={error.type ? error.type : 'warning'}\n\t\t\t>\n\t\t\t\t
\n\t\t\t\t\t{error.msg != null ?\n\t\t\t\t\t\terror.msg\n\t\t\t\t\t\t: error.translateMsg != null ?\n\t\t\t\t\t\t\ttranslate(error.translateMsg)\n\t\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t
\n\t\t\t{errors.map(renderError)}\n\t\t
\n\t);\n}\n\nexport default Error;\n","import { getActiveLanguage, setActiveLanguage } from '@haldor/ui';\n\n\nexport const languages = () => {\n\tconst languages = [\n\t\t{\n\t\t\tsvg_src: '/dist/svg/se.svg',\n\t\t\tlabel: 'Svenska',\n\t\t\tlcid: 'sv-SE',\n\t\t},\n\t\t{\n\t\t\tsvg_src: '/dist/svg/gb.svg',\n\t\t\tlabel: 'English',\n\t\t\tlcid: 'en-US',\n\t\t},\n\t\t{\n\t\t\tsvg_src: '/dist/svg/no.svg',\n\t\t\tlabel: 'Norsk',\n\t\t\tlcid: 'nb-NO',\n\t\t},\n\t\t{\n\t\t\tsvg_src: '/dist/svg/dk.svg',\n\t\t\tlabel: 'Dansk',\n\t\t\tlcid: 'da-DK',\n\t\t},\n\t\t{\n\t\t\tsvg_src: '/dist/svg/uk.svg',\n\t\t\tlabel: 'Український',\n\t\t\tlcid: 'uk',\n\t\t},\n\t];\n\n\treturn languages;\n}\n\n\nexport const getLanguage = () => {\n\tconst languagesArray = languages();\n\tlet activeLanguage = languagesArray.find(x => x.lcid.toLowerCase() == getActiveLanguage().toLowerCase());\n\n\treturn activeLanguage;\n};\n\n\nexport const setLanguage = (lcid, user, history) => {\n\tsetActiveLanguage(lcid);\n\t\n\tif (user != null) {\n\t\tuser.lcid = lcid;\n\t}\n\tif (history != null){\n\t\thistory.push('/language');\n\t}\n}","import React, { Component } from 'react';\nimport { withRouter, Link } from 'react-router-dom';\nimport { connect } from 'react-redux';\n\nimport { setActiveSchool } from 'actions/user';\n\nimport { Icon, Menu, translate } from '@haldor/ui';\nimport { languages, getLanguage, setLanguage } from './LanguageManager';\nimport './index.scss';\nimport { isMicrosoftTeams } from 'helpers/teams';\n\nclass AppMenu extends Component {\n\tswitchSchool = (school, userId) => {\n\t\tlocalStorage.setItem('hal.school' + userId, school);\n\n\t\tthis.props.setActiveSchool(school);\n\t\tthis.props.history.push('/switch');\n\t};\n\n\tgetBadgeForSchool = (school) => {\n\t\tif (this.props.userUnread == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.props.userUnread.reduce((value, item) => {\n\t\t\tif ((item.schoolId == 0 || item.schoolId == school.id) && item.type == 'CONVERSATION') {\n\t\t\t\tif (value == null)\n\t\t\t\t\tvalue = 0;\n\n\t\t\t\treturn value += item.unread;\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}, null);\n\t};\n\n\tgetBadgeForItem = (item) => {\n\t\tif (this.props.userUnread == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { activeSchool } = this.props;\n\n\t\tif (item.url == 'select-school') {\n\t\t\treturn this.props.userUnread.reduce((value, item) => {\n\t\t\t\tif (item.schoolId == activeSchool || item.type != 'CONVERSATION') {\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\tif (value == null)\n\t\t\t\t\tvalue = 0;\n\n\n\t\t\t\treturn value += item.unread;\n\t\t\t}, null);\n\t\t}\n\n\t\tif (item.url == '/conversations') {\n\t\t\treturn this.props.userUnread.reduce((value, item) => {\n\t\t\t\tif ((item.schoolId == 0 || item.schoolId == activeSchool) && item.type == 'CONVERSATION') {\n\t\t\t\t\tif (value == null) {\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value += item.unread;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}, null);\n\t\t}\n\n\t\tif (item.url == '/notifications') {\n\t\t\treturn this.props.userUnread.reduce((value, item) => {\n\t\t\t\tif ((item.schoolId == 0 || item.schoolId == activeSchool) && item.type == 'NOT') {\n\t\t\t\t\tif (value == null) {\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value += item.unread;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}, null);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tgetUserMenu = () => {\n\t\tlet userMenu = [];\n\t\tuserMenu.push({\n\t\t\tonClick: () => this.props.history.push(\"/logout\"),\n\t\t\tonKeyDown: (event) => { event.key == \"Enter\" ? event.target.click() : null },\n\t\t\tlabel: (
{this.props.translate('Sign out')}
),\n\t\t});\n\n\t\treturn userMenu;\n\t};\n\n\tgetLanguageMenu = () => {\n\t\tlet languageMenu = [];\n\n\t\tlanguages().forEach((language) => {\n\t\t\tlanguageMenu.push({\n\t\t\t\tonKeyDown: (event) => { event.key == \"Enter\" ? event.target.click() : null },\n\t\t\t\tonClick: () => setLanguage(language.lcid, this.props.user, this.props.history),\n\t\t\t\tlabel: this.props.user.lcid.toLowerCase() == language.lcid.toLowerCase() ?\n\t\t\t\t\t(
\n\t\t\t\t\t\t{language.label} {language.label}\n\t\t\t\t\t\t\n\t\t\t\t\t
)\n\t\t\t\t\t: ({language.label} {language.label}),\n\n\t\t\t});\n\t\t});\n\n\t\treturn languageMenu;\n\t};\n\n\trender() {\n\t\tconst { activeSchool, user, translate } = this.props;\n\n\t\tlet userMenu = this.getUserMenu();\n\t\tlet languageMenu = this.getLanguageMenu();\n\t\tlet displayActiveLanguage = getLanguage();\n\t\tlet userSchools = [...this.props.user.schools];\n\t\tuserSchools = userSchools.sort((a, b) => {\n\t\t\treturn a.title.localeCompare(b.title);\n\t\t});\n\n\t\tlet categories = [];\n\t\tlet schools = [];\n\t\tlet schoolName = '';\n\n\t\tuserSchools.forEach((school) => {\n\t\t\tconst badge = this.getBadgeForSchool(school) != null ? (\n\t\t\t\t\n\t\t\t\t\t{this.getBadgeForSchool(school)}\n\t\t\t\t\n\t\t\t) : null;\n\n\t\t\tconst title = (\n\t\t\t\t\n\t\t\t\t\t{school.id != activeSchool ? badge : null}\n\t\t\t\t\t{school.id == activeSchool ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\t\t\t\t\t{school.title}\n\t\t\t\t\n\t\t\t);\n\n\t\t\tif (school.id == activeSchool) {\n\t\t\t\tschoolName = school.title;\n\t\t\t}\n\n\t\t\tschools.push({\n\t\t\t\tlabel: title,\n\t\t\t\tonClick: () => this.switchSchool(school.id, user.id),\n\t\t\t\tonKeyDown: (event) => { event.key == \"Enter\" ? event.target.click() : null }\n\t\t\t});\n\t\t});\n\n\t\tif (this.props.items != null) {\n\t\t\tthis.props.items.forEach((item) => {\n\t\t\t\tif (item.parentId != null && item.parentId != '') {\n\t\t\t\t\tif (categories.indexOf(item.parentId) == -1) {\n\t\t\t\t\t\tcategories.push(item.parentId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet items = [];\n\t\tif (this.props.items != null) {\n\t\t\titems = [...this.props.items];\n\t\t\titems.sort((a, b) => a.index - b.index);\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\texact\n\t\t\t\t\t/>\n\n\t\t\t\t\t event.key == \"Enter\" ? event.target.click() : null}\n\t\t\t\t\t\tlabel={translate('Select-school')}\n\t\t\t\t\t\ticon={\"chevron}\n\t\t\t\t\t\titems={schools}\n\t\t\t\t\t\tbadge={this.getBadgeForItem({\n\t\t\t\t\t\t\turl: 'select-school',\n\t\t\t\t\t\t})}\n\t\t\t\t\t/>\n\t\t\t\t
\n\n\t\t\t\t{this.props.items != null ?\n\t\t\t\t\tthis.props.items.map((item, index) => {\n\t\t\t\t\t\tif (item.parentId != null && item.parentId != '') {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.type == 'EXTERNAL') {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.text === 'NAV_HOME') {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbadge={this.getBadgeForItem(item)}\n\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}) : null}\n\n\t\t\t\t{categories.map((category) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\t\t\tif (item.parentId != null && item.parentId == category) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\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})}\n\n\t\t\t\t{this.props.items != null ?\n\t\t\t\t\tthis.props.items.map((item, index) => {\n\t\t\t\t\t\tif (item.parentId != null && item.parentId != '') {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.type != 'EXTERNAL') {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet label = item.text;\n\t\t\t\t\t\tif (label.indexOf('nav_') > -1) {\n\t\t\t\t\t\t\tlabel = translate(item.text.toLowerCase());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttarget='_blank'\n\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}) : null}\n\n\t\t\t\t{!isMicrosoftTeams() ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t event.key == \"Enter\" ? event.target.click() : null}\n\t\t\t\t\t\t\tlabel={this.props.user.firstName + ' ' + this.props.user.lastName}\n\t\t\t\t\t\t\ticon={person}\n\t\t\t\t\t\t\titems={userMenu}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t) : null}\n\t\t\t\t{displayActiveLanguage != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t event.key == \"Enter\" ? event.target.click() : null}\n\t\t\t\t\t\t\tlabel={displayActiveLanguage.label}\n\t\t\t\t\t\t\ticon={{displayActiveLanguage.label}}\n\t\t\t\t\t\t\titems={languageMenu}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\ttenant: state.user.tenant,\n\t\tuser: state.user.currentUser,\n\t\tactiveSchool: state.user.activeSchool,\n\t\tlocation: document.location.pathname,\n\t\titems: state.Menu.items,\n\t\tuserUnread: state.Notifications.userUnread,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tsetActiveSchool,\n})(AppMenu));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter, Link } from 'react-router-dom';\nimport { TooltipMenu, Icon, Button, translate } from '@haldor/ui';\nimport { Skeleton } from 'UI';\nimport { Search as SearchInput } from 'UI/Inputs';\nimport { onRouteBack } from 'actions/header';\nimport { isMicrosoftTeams } from 'helpers/teams';\n\nclass Header extends Component {\n\tgoBack = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.settings.history.length > 1) {\n\t\t\tconst newRoute = this.props.settings.history[1];\n\t\t\tthis.props.onRouteBack();\n\t\t\tthis.props.history.push(newRoute);\n\t\t} else {\n\t\t\twindow.history.go(-1);\n\t\t}\n\t}\n\n\tonSearch = (search) => {\n\t\tthis.props.history.push('/search?q=' + search.query);\n\t}\n\n\trenderAction = (action, index) => {\n\t\tswitch (action.type) {\n\t\t\tcase 'button':\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tcase 'dropDown':\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{action.icon != null ? : null}\n\n\t\t\t\t\t\t\t\t{action.value}\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\t{action.subButtons ?\n\t\t\t\t\t\t\taction.subButtons.map((subAction, index) => (\n\t\t\t\t\t\t\t\t subAction.onClick(true)}\n\t\t\t\t\t\t\t\t\tkey={'subAction-' + index}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{subAction.value}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tcase 'icon':\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { translate } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.settings.backButton ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{this.props.title != null ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.title}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\n\t\t\t\t\t{isMicrosoftTeams() ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{this.props.settings.actions != null ?\n\t\t\t\t\t\t\t\t\tthis.props.settings.actions.map(this.renderAction)\n\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttitle: state.Header.title,\n\t\tsettings: state.Header,\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tonRouteBack,\n})(Header));\n","import React, { Component } from 'react';\nimport { withRouter, NavLink } from 'react-router-dom';\nimport { connect } from 'react-redux';\n\nimport { setActiveSchool } from 'actions/user';\n\nimport { Icon, ActionSheet, TooltipMenu, translate } from '@haldor/ui';\nimport * as microsoftTeams from \"@microsoft/teams-js\";\n\nimport './_device.scss';\nimport { languages, getLanguage, setLanguage } from '../Menu/LanguageManager';\n\nclass DeviceHeader extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tlanguageMenuOpen: false,\n\t\t\tconfirmLogOutOpen: false,\n\t\t};\n\t}\n\n\tisIndex = () => {\n\t\treturn window.location.pathname == '/';\n\t}\n\n\tgoBack = (event) => {\n\t\tevent.preventDefault();\n\t\twindow.history.go(-1);\n\t}\n\n\tgetBadgeForSchool = (school) => {\n\t\tconst { activeSchool } = this.props;\n\n\t\tif (this.props.userUnread == null || school.id == activeSchool) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.props.userUnread.reduce((value, item) => {\n\t\t\tif ((item.schoolId == 0 || item.schoolId == school.id) && item.type == 'CONVERSATION') {\n\t\t\t\tif (value == null)\n\t\t\t\t\tvalue = 0;\n\n\t\t\t\treturn value += item.unread;\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}, null);\n\t};\n\n\tgetBadgeForItem = () => {\n\t\tif (this.props.userUnread == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { activeSchool } = this.props;\n\n\t\treturn this.props.userUnread.reduce((value, item) => {\n\t\t\tif (item.schoolId == activeSchool && item.type != 'CONVERSATION') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (value == null)\n\t\t\t\tvalue = 0;\n\n\t\t\treturn value += item.unread;\n\t\t}, null);\n\t};\n\n\tselectSchool = () => {\n\t\tconst { user } = this.props;\n\n\t\tconst schools = user.schools.map((school) => ({\n\t\t\tlabel: (\n\t\t\t\t
\n\t\t\t\t\t{this.getBadgeForSchool(school) != null ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.getBadgeForSchool(school)}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{school.title}\n\t\t\t\t
\n\t\t\t),\n\t\t\tvalue: school.id,\n\t\t}));\n\n\t\tActionSheet.prompt({\n\t\t\titems: schools,\n\t\t}).then((school) => {\n\t\t\tlocalStorage.setItem(\"hal.school\" + user.id, school);\n\t\t\tthis.props.setActiveSchool(school);\n\n\t\t\tthis.props.history.push(\"/switch\");\n\t\t}).catch(() => null);\n\t};\n\n\trenderAction = (action) => {\n\t\tif (action.type == 'dropDown')\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t{action.subButtons ?\n\t\t\t\t\t\taction.subButtons.map((subAction, index) => (\n\t\t\t\t\t\t\t subAction.onClick(true)}\n\t\t\t\t\t\t\t\tkey={'subAction-' + index}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{subAction.value}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t);\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{action.icon != null ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{action.value}\n\t\t\t\n\t\t);\n\t}\n\n\tconfirmLogOut = () => {\n\t\tlet menuItems = [];\n\t\tconst { translate } = this.props;\n\t\tthis.setState({confirmLogOutOpen: true})\n\n\t\tconst items = [\n\t\t\t{\n\t\t\t\tlabel: translate('Yes'),\n\t\t\t\tlink: '/logout',\n\t\t\t\tbackground: \"#73d266\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: translate('No'),\n\t\t\t\tlink: '#',\n\t\t\t\tbackground: \"#E6E6E6\",\n\t\t\t},\n\t\t];\n\n\t\titems.forEach(item => {\n\t\t\tmenuItems.push({\n\t\t\t\tlabel: item.label == translate(\"Yes\") ?\n\t\t\t\t(
\n\t\t\t\t\t

{translate('verify_logout')}

\n\t\t\t\t\t\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\n\t\t\t\t
)\n\t\t\t\t: (),\n\t\t\t});\n\t\t});\n\n\t\tActionSheet.prompt({\n\t\t\titems: menuItems,\n\t\t}).then(selection => {\n\t\t}, () => {\n\t\t\t// This method only runs if user closes the prompt without pressing an option\n\t\t\tif (this.state.confirmLogOutOpen) {\n\t\t\t\tthis.openDeviceMenu();\n\t\t\t\tthis.scrollToItem('logout-confirm');;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tselectLanguage = () => {\n\t\tlet languageMenu = [];\n\t\tconst user = this.props.user;\n\t\tthis.setState({languageMenuOpen: true});\n\n\t\tlanguages().forEach((language) => {\n\t\t\tlanguageMenu.push({\n\t\t\t\tlabel: user.lcid.toLowerCase() == language.lcid.toLowerCase() ?\n\t\t\t\t\t(
\n\t\t\t\t\t\t{language.label} {language.label}\n\t\t\t\t\t\t\n\t\t\t\t\t
)\n\t\t\t\t\t: ( setLanguage(language.lcid, user)} style={{ display: \"flex\", alignItems: \"center\" }}>{language.label} {language.label}),\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tActionSheet.prompt({\n\t\t\titems: languageMenu,\n\t\t}).then(selection => {\n\t\t\tif (this.state.languageMenuOpen) {\n\t\t\t\tthis.openDeviceMenu();\n\t\t\t\tthis.scrollToItem('languages-dropdown');\n\t\t\t}\n\t\t}, () => {\n\t\t\t// This method only runs if user closes the prompt without pressing an option\n\t\t\tif (this.state.languageMenuOpen) {\n\t\t\t\tthis.openDeviceMenu();\n\t\t\t\tthis.scrollToItem('languages-dropdown');\n\t\t\t}\n\t\t});\n\t}\n\n\tinIframe() {\n\t\ttry {\n\t\t\treturn window.self !== window.top || window.navigator.userAgent.indexOf('TeamsMobile') > -1;\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tscrollToItem = (itemId) => {\n\t\tconst item = document.getElementById(itemId);\n\t\tif (item) {\n\t\t item.scrollIntoView({ block: 'start', behavior: 'instant'});\n\t\t}\n\t};\n\n\thandleClick = (url, e) => {\n\t\te.preventDefault(); // Prevent default link behavior\n\n\t\tif (this.inIframe()) {\n\t\t\tmicrosoftTeams.getContext((context) => {\n\t\t\t\tif (context.hostClientType === \"ios\" || context.hostClientType === \"android\") {\n\t\t\t\t\t// Use Teams SDK to open the link within Teams mobile app\n\t\t\t\t\tmicrosoftTeams.executeDeepLink(url);\n\t\t\t\t} else {\n\t\t\t\t\t// Fallback for web and desktop, open in new tab\n\t\t\t\t\twindow.open(url, '_blank');\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Fallback for web and desktop, open in new tab\n\t\t\twindow.open(url, '_blank');\n\t\t}\n\t}\n\n\topenDeviceMenu = () => {\n\t\tlet renderedCategories = new Set();\n\t\tlet menuItems = [];\n\t\tlet displayActiveLanguage = getLanguage();\n\t\tthis.setState({languageMenuOpen: false, confirmLogOutOpen: false});\n\n\t\tif (this.props.items.length > 0) {\n\t\t\tthis.props.items.map((item, index) => {\n\t\t\t\tlet categoryDiv = null;\n\n\t\t\t\tif (item.type == 'EXTERNAL') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Check if the category has not been rendered yet\n\t\t\t\tif (item.parentId != null && !renderedCategories.has(item.parentId)) {\n\t\t\t\t\trenderedCategories.add(item.parentId); // Mark this category as rendered\n\t\t\t\t\tcategoryDiv = (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate(item.parentId.toLowerCase())}\n\t\t\t\t\t\t
\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet elementDiv = (
\n\t\t\t\t\t{categoryDiv}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{this.props.translate(item.text.toLowerCase())}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
)\n\n\t\t\t\tmenuItems.push({\n\t\t\t\t\tlabel: elementDiv,\n\t\t\t\t\tvalue: item\n\t\t\t\t});\n\t\t\t});\n\n\n\t\t\tthis.props.items.map((item, index) => {\n\t\t\t\tif (item.parentId != null && item.parentId != '') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (item.type != 'EXTERNAL') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tlet label = item.text;\n\t\t\t\tif (label.indexOf('nav_') > -1) {\n\t\t\t\t\tlabel = this.props.translate(item.text.toLowerCase());\n\t\t\t\t}\n\n\t\t\t\tlet elementDiv = ()\n\n\t\t\t\tmenuItems.push({\n\t\t\t\t\tlabel: elementDiv,\n\t\t\t\t});\n\t\t\t})\n\n\t\t\tlet languagesDiv = ()\n\n\t\t\t{displayActiveLanguage != null ?\n\t\t\tmenuItems.push({\n\t\t\t\tlabel: languagesDiv,\n\t\t\t}) : null}\n\n\t\t\tlet logoutDiv = ()\n\n\t\t\t{this.props.user != null ?\n\t\t\t\tmenuItems.push({\n\t\t\t\tlabel: logoutDiv,\n\t\t\t}) : null}\n\t\t}\n\n\t\tActionSheet.prompt({\n\t\t\titems: menuItems,\n\t\t}).then(item => {\n\t\t\tif (this.inIframe() && item.type === 'EXTERNAL') {\n\t\t\t\tmicrosoftTeams.getContext((context) => {\n\t\t\t\t\tif (context.hostClientType === \"ios\" || context.hostClientType === \"android\") {\n\t\t\t\t\t\t// Use Teams SDK to open the link within Teams mobile app\n\t\t\t\t\t\tmicrosoftTeams.executeDeepLink(item.url);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Fallback for web and desktop, open in new tab\n\t\t\t\t\t\tthis.props.history.push(item.url);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Fallback for web and desktop, open in new tab\n\t\t\t\tthis.props.history.push(item.url);\n\t\t\t}\n\t\t}, () => {\n\t\t\t// This method only runs if user closes the prompt without pressing an option\n\t\t\t// This method is also optional\n\t\t});\n\t}\n\n\trender() {\n\t\tconst school = this.props.user.schools.find(school => {\n\t\t\treturn school.id === this.props.activeSchool;\n\t\t});\n\n\t\tconst actionTrigger = (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\n\t\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.settings.backButton ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t: \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{this.isIndex() ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.getBadgeForItem() != null ?\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{this.getBadgeForItem()}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t{school.title}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: this.props.title}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{this.props.actions != null && this.props.actions.length > 0 ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.actions.map(this.renderAction)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t:\n\t\t\t\t\t\t\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
\n\t\t\t
\n\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tactions: state.Header.actions,\n\t\ttitle: state.Header.title,\n\t\tsettings: state.Header,\n\t\tactiveSchool: state.user.activeSchool,\n\t\tuser: state.user.currentUser,\n\t\titems: state.Menu.items,\n\t\tuserUnread: state.Notifications.userUnread,\n\t}\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tsetActiveSchool,\n})(DeviceHeader));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter, Link } from 'react-router-dom';\nimport { getRootUrl } from 'helpers/url';\nimport { Search as SearchInput } from 'UI/Inputs';\nimport { Icon, Button, TooltipMenu, translate } from '@haldor/ui';\n\nimport './_web.scss';\n\nclass DesktopHeader extends Component {\n\n\tonSearch = (search) => {\n\t\tthis.props.history.push('/search?q=' + search.query);\n\t};\n\n\trenderAction = (action, index) => {\n\t\tswitch (action.type) {\n\t\t\tcase 'button':\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{action.icon != null ? : null}\n\n\t\t\t\t\t\t{action.value}\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tcase 'dropDown':\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t{action.icon != null ? : null}\n\n\t\t\t\t\t\t\t\t{action.value}\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\t{action.subButtons ?\n\t\t\t\t\t\t\taction.subButtons.map((subAction, index) => (\n\t\t\t\t\t\t\t\t subAction.onClick(true)}\n\t\t\t\t\t\t\t\t\tkey={'subAction-' + index}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{subAction.value}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tcase 'icon':\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{action.icon != null ? : null}\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\trender() {\n\t\tconst { translate } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{this.props.actions != null ? this.props.actions.map(this.renderAction) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tactions: state.Header.actions,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps)(DesktopHeader));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport * as microsoftTeams from '@microsoft/teams-js';\nimport { appInsights } from 'lib/appInsights';\n\nimport msal, { getUser, loginRequest, clearInteractionProgress } from 'lib/msal';\n\nimport { Button, Block, translate } from '@haldor/ui';\n\nclass InteractionRequired extends Component {\n\n\tcomponentDidMount = () => {\n\t\tconst user = getUser();\n\t\tappInsights.trackTrace({ message: \"EDU012 - Token error (invalid_grant or interaction_required)\" }, {\n\t\t\terror: this.props.error,\n\t\t});\n\t}\n\n\tinIframe() {\n\t\ttry {\n\t\t\treturn window.self !== window.top || window.navigator.userAgent.indexOf('TeamsMobile') > -1;\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\trunLogin = () => {\n\t\tlet request = loginRequest;\n\t\tif (this.props.error != null) {\n\t\t\tif (this.props.error.claims != null) {\n\t\t\t\trequest.claims = this.props.error.claims;\n\t\t\t}\n\n\t\t\tappInsights.trackTrace({ message: 'EDU018 | Check claims on InteractionRequired page' }, {\n\t\t\t\terror: this.props.error,\n\t\t\t});\n\t\t}\n\n\t\tif (microsoftTeams.app.isInitialized()) {\n\t\t\tlet url = '/Auth'\n\t\t\tif (this.props.error != null) {\n\t\t\t\tif (this.props.error.claims != null) {\n\t\t\t\t\turl += `?claims=${encodeURI(this.props.error.claims)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmicrosoftTeams.authentication.authenticate({\n\t\t\t\turl: url,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tappInsights.trackTrace({ message: 'EDU018a | MSTeams authenticate successCallback' }, {\n\t\t\t\t\t\tresponse: response,\n\t\t\t\t\t});\n\t\t\t\t\tthis.props.history.replace('/');\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tappInsights.trackTrace({ message: 'EDU018b | MSTeams authenticate failureCallback' }, {\n\t\t\t\t\t\terror: error,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t} else {\n\t\t\tclearInteractionProgress();\n\t\t\tmsal.loginRedirect(request);\n\t\t}\n\t}\n\n\trenderInformation = () => {\n\t\tif (this.props.error != null) {\n\t\t\tif (this.props.error.errorCode != null && this.props.error.errorCode == 'interaction_required') {\n\t\t\t\treturn
\n\t\t\t\t\t

{this.props.translate('Sorry for bothering you')}

\n\n\t\t\t\t\t

\n\t\t\t\t\t\t{this.props.translate('Something went wrong and you need to sign in again.')}\n\t\t\t\t\t

\n\n\t\t\t\t\t{getUser() != null ?\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\t{this.props.translate('Currently logged in as')} {getUser().name}\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getUser().username}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t

\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t}\n\t\t}\n\n\t\treturn
\n\t\t\t

{this.props.translate('you-are-almost-ready')}

\n\n\t\t\t

\n\t\t\t\t{this.props.translate('consent-first-person-in-tenant-message')}\n\t\t\t

\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t

\n\t\t\t\t{this.props.translate('consent-if-you-are-not-an-administrator-message')}\n\t\t\t

\n\n\t\t\t{getUser() != null ?\n\t\t\t\t

\n\t\t\t\t\t{this.props.translate('Currently logged in as')} {getUser().name}\n\n\t\t\t\t\t

\n\t\t\t\t\t\t{getUser().username}\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t

\n\t\t\t\t: null}\n\t\t
\n\t}\n\n\trender() {\n\t\tif (window.location.pathname == '/tab-configure' || window.location.pathname == '/course-plan-configure') {\n\t\t\treturn this.renderInformation();\n\t\t}\n\n\t\treturn
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{this.renderInformation()}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t}\n}\n\nexport default withRouter(connect(mapStateToProps)(InteractionRequired));","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { getUser } from 'lib/msal';\nimport { appInsights } from 'lib/appInsights';\nimport { Link } from 'react-router-dom';\n\nimport { getRootUrl } from 'helpers/url';\n\nimport { Button, Block, translate } from '@haldor/ui';\n\nclass RequiredDataError extends Component {\n\n\tcomponentDidMount = () => {\n\t\tconst user = getUser();\n\t\tappInsights.trackTrace({ message: \"EDU013 - API error\" }, {\n\t\t\terror: this.props.error?.data,\n\t\t});\n\t}\n\n\t/*\n\tgenerateStringFromObject = (target, data) => {\n\t\tif (target == null) {\n\t\t\ttarget = [];\n\t\t}\n\n\t\tObject.keys(data).forEach(key => {\n\t\t\tif (typeof data[key] == 'object' && data[key] != null) {\n\t\t\t\tlet arrayData = key + ': (object)\\n';\n\t\t\t\tObject.keys(data[key]).forEach(objectKey => {\n\t\t\t\t\tarrayData += ' ' + objectKey + ': ' + data[key][objectKey] + '\\n';\n\t\t\t\t});\n\n\t\t\t\ttarget.push(arrayData);\n\t\t\t} else {\n\t\t\t\ttarget.push(key + ': ' + data[key] + '\\n');\n\t\t\t}\n\t\t});\n\n\t\treturn target;\n\t}\n\n\tgenerateFile = () => {\n\t\tif (this.props.error == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst user = getUser();\n\n\t\tconsole.log('error from props', this.props.error, user)\n\n\t\tlet data = [];\n\n\t\t// Add request data to file\n\t\tdata.push('## Request\\n\\n');\n\t\tdata.push('Status: ' + this.props.error.status + '\\n');\n\t\tdata.push('StatusText: ' + this.props.error.statusText + '\\n');\n\n\t\tif (this.props.error.config != null) {\n\t\t\tdata.push('BaseUrl: ' + this.props.error.config.baseURL + '\\n');\n\t\t\tdata.push('Url: ' + this.props.error.config.url + '\\n');\n\t\t}\n\n\t\t// Add request headers\n\t\tdata.push('\\n\\n## Request headers\\n\\n');\n\t\tif (this.props.error.config != null && this.props.error.config.headers != null) {\n\t\t\tdata = this.generateStringFromObject(data, this.props.error.config.headers);\n\t\t}\n\n\t\t// Add error data to file\n\t\tdata.push('\\n\\n## Response data\\n\\n');\n\t\tif (this.props.error.data != null) {\n\t\t\tdata = this.generateStringFromObject(data, this.props.error.data);\n\t\t}\n\n\t\tdata.push('\\n\\n## User data\\n\\n');\n\t\tif (user != null) {\n\t\t\tdata = this.generateStringFromObject(data, user);\n\t\t} else {\n\t\t\tdata.push('User is null!\\n');\n\t\t}\n\n\t\tlet blob = new Blob(data, {\n\t\t\ttype: \"text/plain;charset=utf-8\",\n\t\t});\n\n\t\tlet textFile = null;\n\n\t\tif (textFile != null) {\n\t\t\twindow.URL.revokeObjectURL(textFile);\n\t\t}\n\n\t\ttextFile = window.URL.createObjectURL(blob);\n\t\tthis.link.href = textFile;\n\t}\n\t*/\n\n\trenderInformation = () => {\n\t\treturn
\n\t\t\t

{this.props.translate('something-went-wrong')}

\n\n\t\t\t

\n\t\t\t\t{this.props.translate('It seems like something went wrong while we were trying to load data. Try reloading.') + ' '}\n\t\t\t\t{this.props.translate('If this does not work, contact your teacher, administrator or Haldor. Haldor can be reached via our Support.')}\n\t\t\t

\n\n\t\t\t

\n\t\t\t\t{this.props.translate('Please leave this session ID in the support ticket: ')} {localStorage.getItem('hsid')}\n\t\t\t

\n\n\t\t\t\n\t\t\t\t{this.props.translate('Submit support ticket')}\n\t\t\t\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t{this.props.translate('log-out')}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t}\n\n\trender() {\n\t\tif (window.location.pathname == '/tab-configure' || window.location.pathname == '/course-plan-configure') {\n\t\t\treturn this.renderInformation();\n\t\t}\n\n\t\treturn
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{this.renderInformation()}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t}\n}\n\nexport default connect(mapStateToProps)(RequiredDataError);","import { lang } from 'moment';\nimport React, { useEffect } from 'react';\n\nfunction ZendeskWidget({ language }) {\n\tlet widgetLang = \"en-gb\";\n\n\tif (language == 'sv-SE' || language == 'sv-FI')\n\t\twidgetLang = 'sv';\n\tif (language == 'nb-NO' || language == 'nn-NO')\n\t\twidgetLang = 'no';\n\n\tzE('webWidget', 'setLocale', widgetLang);\n\n\treturn null;\n}\n\nexport default ZendeskWidget;\n\n","import React, { useState, useEffect, useRef } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport ModalObject from \"containers/Modals/Modal\";\nimport Bowser from 'bowser';\nimport \"./_reportModal.scss\";\n\n\nconst ReportModal = (props) => {\t\n\tconst { activeSchool, user, translate, sessionId, pageId } = props;\n\tconst [copyConfirmText, setCopyConfirmText] = useState(translate(\"Copy Text\"));\n\tconst [isEnterPressed, setIsEnterPressed] = useState(false);\n\tconst tooltipRef = useRef(null);\n\tconst reportTitle = translate(\"Report bugs to support contact\");\n\tconst informationBody = translate(\"Send an email to your school's Haldor support contact. Please describe your problem in as much detail as possible. To facilitate the handling of your case, it is important that you include the information below:\");\n\n\n\tuseEffect(() => {\t\n\t\t// changes reportmodals layout to custom style when mounted\n\t\tsetTimeout(() => {\n\t\t\tconst thisModalContainer = document.querySelector('.report-modal-container');\n\n\t\t\tif (thisModalContainer){\n\t\t\t\tconst closestModalOverlay = thisModalContainer.closest('.modal-overlay');\n\t\t\t\tif (closestModalOverlay && !closestModalOverlay.classList.contains('.report-modal-container')){\n\t\t\t\t\tclosestModalOverlay.classList.add(\"modal-overlay-report\");\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}, 1);\n\t\n\t\treturn () => {\n\t\t\t// Optional cleanup logic can be added here\n\t\t};\n\t}, []);\n\t\n\tconst getCurrentBrowser = () => {\n\t\tconst browser = Bowser.getParser(window.navigator.userAgent);\n\t\tconst browserName = browser.getBrowserName() || \"unknown\";\n\t\tconst version = browser.getBrowser().version || \"unknown\";\n\t\tconst deviceType = browser.getPlatformType() || \"unknown\";\n\t\t\n\t\treturn (browserName + \", version: \" + version + \", device: \" + deviceType);\n\t};\n\n\tconst getTimeStamp = () => {\n\t\tconst now = new Date(); \n\t\tconst date = now.toISOString().substring(0, 10);\n\t\tconst hours = String(now.getHours()).padStart(2, '0');\n\t\tconst minutes = String(now.getMinutes()).padStart(2, '0');\n\n\t\treturn `${date}, kl. ${hours}:${minutes}`;\n\t};\n\n\tconst getUserRoles = () => {\n\t\tlet userRoles = \"\";\n\t\tlet activeSchoolInfo = user.schools.filter(s => s.id == activeSchool);\n\t\tif (activeSchoolInfo [0].userRoles.length > 0){\n\t\t\tactiveSchoolInfo [0].userRoles.forEach(role =>{\n\t\t\t\tuserRoles += role + \", \";\n\t\t\t});\n\t\t}\n\t\treturn userRoles;\n\t};\n\t\t\n\tconst reportInformationToCopy = (\n\t\t`${translate(\"Describe the problem\")}: \\n\\n\\n\\n\\n` +\n\t\t`\\nUser Email: ` + user.email +\n\t\t`\\nUser ID: ` + user.id +\n\t\t`\\nSchool ID: ` + activeSchool +\n\t\t`\\nRoles in School: ` + getUserRoles() +\n\t\t`\\nPage ID: ` + pageId +\n\t\t`\\nTimeStamp: ` + getTimeStamp() +\n\t\t`\\nSession ID: ` + sessionId +\n\t\t`\\nBrowser: `+ getCurrentBrowser()\n\t);\n\n\tconst handleCopyClick = async () => {\t\t\n\t\ttry {\n\t\t\tconst {current: tooltip} = tooltipRef;\n\t\t\tconst windowWidth = window.innerWidth;\n\t\t\tawait navigator.clipboard.writeText(reportInformationToCopy);\n\t\t\t// Text copied successfully\n\t\t\tsetCopyConfirmText(translate(\"The text was copied\"));\n\t\t\tif(windowWidth < 768){\n\t\t\t\ttooltip.style.display = \"block\";\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(windowWidth < 768){\n\t\t\t\t\ttooltip.style.display = \"none\";\n\t\t\t\t}\n\t\t\t\tsetCopyConfirmText(translate(\"Copy Text\"));\n\t\t\t}, 3000);\n\t\t} catch (error) {\n\t\t\t// Something went wrong\n\t\t\tconsole.error('Unable to copy text: ', error);\n\t\t}\n\t};\n\n\tconst handleCopyKeyDown = (event) => {\n\t\tif (event.key === 'Enter') {\n\t\t setIsEnterPressed(true);\n\t\t handleCopyClick();\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tsetIsEnterPressed(false);\n\t\t}, 3000);\n\t};\n\n\tconst openMailKlientWithInformation = () => {\n\t\tconst mailSubject = translate('Problems in Haldor');\n\n\t\treturn window.open(`mailto:?subject=${encodeURIComponent(mailSubject)}&body=${encodeURIComponent(reportInformationToCopy)}`)\n\t};\n\n\treturn (\n\t\t document.querySelector('#modals')}\n\t\t\tisOpen={props.isOpen}\n\t\t\tonClose={props.onClose}\n\t\t\tonRequestClose={props.onClose}\n\t\t\ttitle={reportTitle}\n\t\t\t>\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
{informationBody}
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

User Email: {user.email}

\n\t\t\t\t\t\t\t\t

User ID: {user.id}

\n\t\t\t\t\t\t\t\t

School ID: {activeSchool}

\n\t\t\t\t\t\t\t\t

Roles in School: {getUserRoles()}

\n\t\t\t\t\t\t\t\t

Page ID: {pageId}

\n\t\t\t\t\t\t\t\t

TimeStamp: {getTimeStamp()}

\n\t\t\t\t\t\t\t\t

Session ID: {sessionId}

\n\t\t\t\t\t\t\t\t

Browser: {getCurrentBrowser()}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\t\t\t\n\t\t\n\t);\n}\n\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t\tactiveSchool: state.user.activeSchool,\n\t\tsessionId: localStorage.getItem('hsid'),\n\t\tpageId : window.location.href,\n\t}\n}\nexport default connect(mapStateToProps)(ReportModal);\n","import React, { useState, useEffect, useRef } from 'react';\nimport ReportModal from 'components/Support/ReportModal';\nimport \"./_supportLauncher.scss\";\n\nconst SupportLauncher = (props) => {\n\tconst [isModalOpen, setIsModalOpen] = useState(false);\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\n\tconst supportButtonRef = useRef(null);\n\tconst supportMenuRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tconst handleOutsideClick = (event) => {\n\t\t\tif (\n\t\t\t\tsupportButtonRef.current &&\n\t\t\t\t!supportButtonRef.current.contains(event.target) \n\t\t\t) {\n\t\t\t\tsetIsMenuOpen(false);\t\n\t\t\t}\n\t\t};\n\t\tdocument.body.addEventListener(\"click\", handleOutsideClick);\n\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener(\"click\", handleOutsideClick);\n\t\t};\n\t}, []);\n\n\n\t//shows zendeskWidget when \"help center\" button clicked\n\tconst handleHelpButtonClick = () => {\n\t\tif (typeof zE !== 'undefined') {\n\t\t zE('webWidget', 'show');\n\t\t zE('webWidget', 'open');\n\t\t}\n\n\t\tsetIsMenuOpen(false);\t\t\n\t};\n\n\t//hides zendeskWidget on close\n\tzE('webWidget:on', 'close', () => {\n\t\tzE('webWidget', 'hide');\n\t\t\t\t\t\t\n\t\tsetIsMenuOpen(false);\t\n\t});\n\t\n\tconst toggleModal = () => {\n\t\tsetIsModalOpen((prev) => !prev);\n\t\tsetIsMenuOpen(false);\t\n\t};\n\n\tconst toggleMenu = () => {\n\t\tsetIsMenuOpen((prev) => !prev);\t\n\t};\n\n\treturn (\n\t
\n\t\t\n\t\t{isMenuOpen ?\n\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t: null}\n\t\t{isModalOpen && toggleModal()}/>}\n\t
\n\t);\n }\n\nexport default SupportLauncher;\n\n","import { getRootUrl } from 'helpers/url';\nimport React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\n\nexport default class Card extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tcolor: this.props.hasOwnProperty('color') ? this.props.color : '',\n\t\t\ttype: this.props.hasOwnProperty('type') ? this.props.type : 'standard',\n\t\t};\n\t}\n\n\toutput = () => {\n\t\tconst { target, type, url } = this.props;\n\n\t\tconst isExternal = !!(target && target.indexOf('http') > -1);\n\t\tconst isInternal = !!(target && !isExternal);\n\n\t\tif (isExternal) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t);\n\t\t} else if (isInternal) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\tif (this.props.onClick != null && target == null) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\t// console.warn('Deprecation warning: Missing target attribute for card. Please use an internal or external link in prop target.');\n\t\t// TODO: Remove the type checks below and make sure all cards have a\n\t\t// target attribute. Target will work with both external and internal\n\t\t// links and figures out how to handle them (based on http or not in url).\n\n\t\tif (this.props.type === 'task') {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t);\n\t\t} else if (this.props.type === 'planning') {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t);\n\t\t} else if (this.props.type === 'news') {\n\t\t\treturn this.props.item.id != 0 ?\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t\t:\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t;\n\t\t} else if (this.props.type === 'preschooldocument') {\n\t\t\treturn this.props.item.id != 0 ?\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t\t:\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t;\n\t\t} else if (this.props.type === 'schedule') {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.children}\n\t\t\t
\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.output()}\n\t\t\t
\n\t\t);\n\t}\n}\n\n/**\n* Cards container\n* Displays cards in multiple columns based on screen width.\n* @export CardsContainer\n*/\nexport const CardsContainer = ({ children }) => (\n\t
\n\t\t{children}\n\t
\n);\n\n/**\n* Card title\n*/\nexport const CardTitle = ({ children }) => (\n\t
\n\t\t{children}\n\t
\n);\n\n/**\n* Card subtitle\n*/\nexport const CardSubtitle = ({ children }) => (\n\t
\n\t\t{children}\n\t
\n);\n\n/**\n* Card description\n*/\nexport const CardDescription = ({ children }) => (\n\t
\n\t\t{children}\n\t
\n);\n\n/**\n* Card footer\n*/\nexport const CardFooter = ({ children }) => (\n\t
\n\t\t{children}\n\t
\n);\n","import React from 'react';\nimport Card, { CardDescription, CardsContainer, CardSubtitle, CardTitle } from './Card';\n\nfunction renderCards(count) {\n\tconst cards = [];\n\tfor (let i = 0; i < count; i++) {\n\t\tcards.push(\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn {cards};\n}\n\nconst loadingCards = ({ count = 3 }) =>
{renderCards(count)}
;\n\nexport default loadingCards;\n","import React, { Component } from 'react';\nimport DateTime from '_class/DateTime';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { Link } from 'react-router-dom';\n\nimport { searchGroups, clearSearch } from 'actions/search';\nimport { getGroupAbsenceForToday, getMentorGroups, getArchievedMentorGroups } from 'actions/sections';\nimport { setPageTitle } from 'actions/header';\n\nimport LoadingCards from 'components/Cards/LoadingCard';\n\nimport { Expandable } from 'UI';\nimport { Search as SearchInput } from 'UI/Inputs';\nimport { Card, Icon, Flex } from '@haldor/ui';\nimport { getDescription } from 'helpers/content';\n\nclass MentorGroups extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\texpand: false,\n\t\t\tisLoadingSections: false,\n\t\t};\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.props.setPageTitle(this.props.translate('mentor-header-overview'));\n\n\t\tif (this.props.mentorGroups == null || this.props.mentorGroups.length == 0) {\n\t\t\tthis.setState({ isLoadingSections: true });\n\t\t\tthis.props.getMentorGroups().then(() => {\n\t\t\t\tif (this.props.mentorGroups != null && this.props.mentorGroups.length > 0) {\n\t\t\t\t\tthis.props.mentorGroups.forEach((group) => {\n\t\t\t\t\t\tif (group.absences == null && group.currentUserRole == 'OWNER') {\n\t\t\t\t\t\t\tthis.props.getGroupAbsenceForToday(group.id, encodeURIComponent(moment().format()), encodeURIComponent(moment().add(1, 'd').format()));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.mentorArchivedGroups == null || this.props.mentorArchivedGroups.length == 0) {\n\t\t\tthis.props.getArchievedMentorGroups().then(() => {\n\t\t\t\tthis.setState({ isLoadingSections: false });\n\t\t\t});\n\t\t}\n\t}\n\n\ttoggleExpand = () => this.setState({ expand: !this.state.expand });\n\n\trenderFoldButton = () => {\n\t\treturn \n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{this.state.expand ?\n\t\t\t\t\tthis.props.translate('Hide description')\n\t\t\t\t\t:\n\t\t\t\t\tthis.props.translate('Show description')\n\t\t\t\t}\n\t\t\t
\n\t\t
\n\t}\n\n\tonSearch = async (values) => {\n\t\tif (values.query == null || values.query == '') {\n\t\t\tthis.props.clearSearch();\n\t\t\treturn true;\n\t\t}\n\n\t\tif (values.query.length < 3) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.setState({ loading: true });\n\t\tconst filter = 'LINKED;MENTOR_GROUP';\n\t\tawait this.props.searchGroups({\n\t\t\tquery: values.query,\n\t\t\tfilter: filter,\n\t\t});\n\n\t\tthis.setState({ loading: false });\n\t}\n\n\trenderGroup = (group, index) => {\n\t\tlet foundInvalid = [];\n\t\tlet foundValid = [];\n\n\t\tif (group.absences != null && group.absences.length > 0) {\n\t\t\tgroup.absences.forEach((absence) => {\n\t\t\t\tlet inInvalid = foundInvalid.find(student => {\n\t\t\t\t\treturn student.userId == absence.user.userId;\n\t\t\t\t});\n\n\t\t\t\tif (absence.type == 'INVALID_ABSENCE' || absence.type == 'INVALID_LATE') {\n\t\t\t\t\tif (inInvalid == null) {\n\t\t\t\t\t\tfoundInvalid.push(absence.user);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tgroup.absences.forEach((absence) => {\n\t\t\t\tlet inInvalid = foundInvalid.find(student => {\n\t\t\t\t\treturn student.userId == absence.user.userId;\n\t\t\t\t});\n\n\t\t\t\tlet inValid = foundValid.find(student => {\n\t\t\t\t\treturn student.userId == absence.user.userId;\n\t\t\t\t});\n\n\t\t\t\tif (absence.type == 'VALID_ABSENCE' || absence.type == 'VALID_LATE') {\n\t\t\t\t\tif (inInvalid == null && inValid == null) {\n\t\t\t\t\t\tfoundValid.push(absence.user);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tlet cardTitle = (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{group.title}\n\t\t\t\t\n\n\t\t\t\t{foundInvalid.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{foundInvalid.length + ' ' + this.props.translate('Invalid absent').toLowerCase()}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{foundValid.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{foundValid.length + ' ' + this.props.translate('valid-absent').toLowerCase()}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\n\t\treturn \n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.cutDescription(group.description)}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{group.events != null ?\n\t\t\t\t\t\t\t\tgroup.events.map((event, index) => {\n\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\t
{new DateTime(event.created).getDateStamp()}
\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{event.createdBy.firstName + ' ' + event.createdBy.lastName + ' ' + this.props.translate(event.event)}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{group.archived ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('Archived')}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{group.currentUserRole == 'OWNER' ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('Owner')}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t:\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('Member')}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t}\n\n\trenderFilters = () => {\n\t\treturn
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t}\n\n\tGroupList = () => {\n\t\tif (this.props.searchResults != null && this.props.searchResults.length > 0) {\n\t\t\tvar anyMentorGroups = this.props.searchResults.filter(function (group) {\n\t\t\t\treturn group.type == 'MENTOR_GROUP';\n\t\t\t});\n\t\t\tif (anyMentorGroups.length > 0) {\n\t\t\t\treturn
\n\t\t\t\t\t{anyMentorGroups.map(this.renderGroup)}\n\t\t\t\t
\n\t\t\t}\n\t\t}\n\n\t\tlet groups = JSON.parse(JSON.stringify(this.props.mentorGroups));\n\n\t\tif (groups != null) {\n\t\t\tgroups = groups.filter(group =>\n\t\t\t\tgroup.currentUserRole == 'OWNER'\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t{groups.map(this.renderGroup)}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\t}\n\n\tArchivedGroupList = () => {\n\t\tlet groups = JSON.parse(JSON.stringify(this.props.mentorArchivedGroups));\n\n\t\tif (groups != null) {\n\t\t\tgroups = groups.filter(group =>\n\t\t\t\tgroup.currentUserRole == 'OWNER'\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t{groups.map(this.renderGroup)}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\t}\n\n\tnoGroupsFound = () => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t{this.props.translate('no-sections-found')}\n\t\t\t\t

\n\t\t\t
\n\t\t);\n\t}\n\n\tcutDescription = (description) => {\n\t\tif (description == null) {\n\t\t\treturn '';\n\t\t}\n\n\t\tlet strippedDescription = getDescription(description).replace(/(<([^>]+)>)/ig, '');\n\t\tif (strippedDescription.length > 99) {\n\t\t\treturn strippedDescription.slice(0, 100) + '…';\n\t\t}\n\n\t\treturn strippedDescription;\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.renderFilters()}\n\t\t\t\t{this.renderFoldButton()}\n\n\t\t\t\t{this.GroupList()}\n\n\t\t\t\t{this.props.mentorArchivedGroups.length > 0 ?\n\t\t\t\t\tthis.ArchivedGroupList()\n\t\t\t\t\t: null}\n\n\t\t\t\t{this.state.isLoadingSections ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{!this.state.isLoadingSections && this.props.mentorGroups != null && this.props.mentorGroups.length == 0 ?\n\t\t\t\t\tthis.noGroupsFound()\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tmentorGroups: state.sections.mentorGroups,\n\t\tmentorArchivedGroups: state.sections.mentorArchievedGroups,\n\t\tcurrentUser: state.user.currentUser,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tsearchResults: state.Search.groups,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetMentorGroups,\n\tgetArchievedMentorGroups,\n\tgetGroupAbsenceForToday,\n\tsetPageTitle,\n\tsearchGroups,\n\tclearSearch,\n})(MentorGroups);","export const ASSIGNMENT_TAB = 'ASSIGNMENT_TAB';\nexport const PLANNING_TAB = 'PLANNING_TAB';\nexport const ASSESSMENT_TAB = 'ASSESSMENT_TAB';\nexport const ATTENDANCE_TAB = 'ATTENDANCE_TAB';\nexport const COURSE_PLANNING_TAB = 'COURSE_PLANNING_TAB';\nexport const HALDOR_EDUCATION_TAB = 'HALDOR_EDUCATION_TAB';\n\nexport const getTeamsTab = () => {\n\tif (window.location.pathname.indexOf('assignments-tab') > -1) {\n\t\treturn ASSIGNMENT_TAB;\n\t} else if (window.location.pathname.indexOf('planning-tab') > -1) {\n\t\treturn PLANNING_TAB;\n\t} else if (window.location.pathname.indexOf('assessments-tab') > -1) {\n\t\treturn ASSESSMENT_TAB;\n\t} else if (window.location.pathname.indexOf('attendance-tab') > -1) {\n\t\treturn ATTENDANCE_TAB;\n\t} else if (window.location.pathname.indexOf('haldor-tab') > -1) {\n\t\treturn COURSE_PLANNING_TAB;\n\t} else {\n\t\treturn HALDOR_EDUCATION_TAB;\n\t}\n};\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\nimport { ASSESSMENT_TAB, ASSIGNMENT_TAB, PLANNING_TAB } from 'constants/teamsTabs';\n\nimport { getTenant } from 'actions/user';\nimport { clearAssignmentsFromStore, clearAssignmentEventPaginationFromStore } from 'actions/assignments';\nimport { clearBlockTypes } from 'actions/blocks';\nimport { clearCoursesFromStore } from 'actions/courses';\nimport { clearDocumentsFromStore } from 'actions/documents';\nimport { clearNotificationsFromStore } from 'actions/notifications';\nimport { clearPlansFromStore } from 'actions/plans';\nimport { getMenuItems } from 'actions/menu';\nimport { clearPostsFromStore } from 'actions/posts';\nimport { clearNotReportedSchedulePositions, clearScheduleFromStore } from 'actions/schedule';\nimport { getSchoolServices } from 'actions/schools';\nimport { clearSectionsFromStore, getEducationGroups } from 'actions/sections';\nimport { clearSearch } from 'actions/search';\nimport { ClearAllFilter } from 'actions/ScheduleFilter';\nimport { clearPlanFilterObjects } from 'helpers/localstorage';\n\nimport { Spinner } from 'UI';\n\nclass SchoolSwitch extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\tcomponentDidMount() {\n\t\treloadSchoolProps(this.props);\n\n\t\tthis.props.getSchoolServices(this.props.activeSchool).then(() => {\n\t\t\tif (this.props.activeTab != null) {\n\t\t\t\tif (this.props.activeTab == ASSIGNMENT_TAB) {\n\t\t\t\t\tthis.props.history.push('/assignments-tab');\n\t\t\t\t} else if (this.props.activeTab == PLANNING_TAB) {\n\t\t\t\t\tthis.props.history.push('/planning-tab');\n\t\t\t\t} else if (this.props.activeTab == ASSESSMENT_TAB) {\n\t\t\t\t\tthis.props.history.push('/assessments-tab');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.props.history.push('/');\n\t\t\t}\n\t\t});\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport function reloadSchoolProps(props) {\n\tprops.clearSearch();\n\tprops.clearBlockTypes();\n\tprops.clearAssignmentsFromStore();\n\tprops.clearAssignmentEventPaginationFromStore();\n\tprops.clearPlansFromStore();\n\tclearPlanFilterObjects();\n\tprops.clearSectionsFromStore();\n\tprops.clearDocumentsFromStore();\n\tprops.clearPostsFromStore();\n\tprops.clearScheduleFromStore();\n\tprops.clearCoursesFromStore();\n\tprops.clearNotificationsFromStore();\n\tprops.clearNotReportedSchedulePositions();\n\tprops.getEducationGroups();\n\tprops.getMenuItems();\n\tprops.getTenant();\n\tprops.ClearAllFilter();\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tactiveTab: state.user.activeTab,\n\t\tactiveSchool: state.user.activeSchool,\n\t};\n}\n\nexport var reloadSchoolActions = {\n\tclearAssignmentsFromStore,\n\tclearAssignmentEventPaginationFromStore,\n\tclearBlockTypes,\n\tclearPlansFromStore,\n\tclearSectionsFromStore,\n\tclearDocumentsFromStore,\n\tclearPostsFromStore,\n\tclearScheduleFromStore,\n\tclearCoursesFromStore,\n\tclearNotificationsFromStore,\n\tclearNotReportedSchedulePositions,\n\tgetEducationGroups,\n\tgetMenuItems,\n\tclearSearch,\n\tgetTenant,\n\tgetSchoolServices,\n\tClearAllFilter,\n};\n\nexport default withRouter(\n\tconnect(mapStateToProps, reloadSchoolActions)(SchoolSwitch)\n);\n","class PermissionManager {\n\tconstructor() { }\n\n\tgetPermissionTypes = () => {\n\t\treturn {\n\t\t\tSEARCH_READ_SCHOOL: 'SEARCH_READ_SCHOOL',\n\t\t\tASSESSMENTS_READ_SCHOOL: 'ASSESSMENTS_READ_SCHOOL',\n\t\t\tSCHEDULE_READ_SCHOOL: 'SCHEDULE_READ_SCHOOL',\n\t\t\tATTENDANCE_READ_SCHOOL: 'ATTENDANCE_READ_SCHOOL',\n\t\t\tVERDICT_READ_SCHOOL: 'VERDICT_READ_SCHOOL',\n\t\t\tADDITIONAL_ADJUSTMENTS_READ: 'ADDITIONAL_ADJUSTMENTS_READ',\n\t\t\tMEETINGS_READ_SCHOOL: 'MEETINGS_READ_SCHOOL',\n\t\t\tFILES_READ_SCHOOL: 'FILES_READ_SCHOOL',\n\t\t\tPLANNING_READ_SCHOOL: 'PLANNING_READ_SCHOOL',\n\t\t\tSECTIONS_READ_SCHOOL: 'SECTIONS_READ_SCHOOL',\n\t\t\tGUARDIANS_READ_SCHOOL: 'GUARDIANS_READ_SCHOOL',\n\t\t\tASSIGNMENT_READ_SCHOOL: 'ASSIGNMENT_READ_SCHOOL'\n\t\t};\n\t};\n}\n\nexport default PermissionManager;","import Moment from 'moment';\n\nimport schoolHelper from 'helpers/schoolHandling';\nconst getSchoolForUser = schoolHelper.getSchoolForUser;\n\nimport {\n\tROLE_TEACHER,\n\tROLE_MENTOR,\n\tROLE_ADMINISTRATOR,\n\tROLE_COURSE_ADMIN,\n\tROLE_STUDENT,\n\tROLE_STANDARD_CURRICULUM_ADMIN,\n\tROLE_SYSADMIN,\n\tROLE_SPECIAL_PEDAGOGUE\n} from 'constants/roles';\n\nexport const havingPermission = (user, permission) => {\n\tif (user == null)\n\t\treturn false;\n\n\tif (Array.isArray(user.roles) && user.roles.length > 0) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tlet allAccessRights = user.roles.flatMap(userRole => (userRole.role != null\n\t\t\t&& userRole.referenceType.toUpperCase() == 'SCHOOL'\n\t\t\t&& userRole.referenceId == school) ? userRole.role.accessRights.flatMap(accessRight => accessRight.permission) : []);\n\n\t\tlet distinctAccessRights = [...new Set(allAccessRights)];\n\t\treturn distinctAccessRights.some(accessRight => accessRight.toUpperCase() === permission.toUpperCase());\n\t}\n}\n\nexport const isUserPedagogue = (user) => {\n\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar pedagogue = user.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == ROLE_SPECIAL_PEDAGOGUE &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (pedagogue != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const isUserTeacher = (user) => {\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar teacher = user.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == ROLE_TEACHER &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (teacher != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const isUserAdministrator = (user) => {\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar admin = user.roles.find(role =>\n\t\t\t\t(role.roleId.toUpperCase() == ROLE_ADMINISTRATOR ||\n\t\t\t\t\trole.roleId.toUpperCase() == ROLE_SYSADMIN) &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (admin != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const isUserCourseAdministrator = (user) => {\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar admin = user.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == ROLE_COURSE_ADMIN &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (admin != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const isUserCurriculumAdmin = (user) => {\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar admin = user.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == ROLE_STANDARD_CURRICULUM_ADMIN &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (admin != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const isUserMentor = (user) => {\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar mentor = user.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == ROLE_MENTOR &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (mentor != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const isUserStudent = (user) => {\n\tif (user != null) {\n\t\tconst school = getSchoolForUser(user);\n\n\t\tif (user.roles != null && user.roles.length > 0) {\n\t\t\tvar student = user.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == ROLE_STUDENT &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (student != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nexport const getUserAssessmentDates = () => {\n\tconst startDateLocalStorage = localStorage.getItem('assessment-start-date');\n\tconst endDateLocalStorage = localStorage.getItem('assessment-end-date');\n\n\tlet dates = {\n\t\tstart: Moment().month(7).date(1).format('YYYY-MM-DD'),\n\t\tend: Moment().format('YYYY-MM-DD'),\n\t};\n\n\tif (Moment().month() < 7) {\n\t\tdates.start = Moment().subtract(1, 'years').month(7).date(1).format('YYYY-MM-DD');\n\t}\n\n\tif (startDateLocalStorage != null) {\n\t\tdates.start = Moment(startDateLocalStorage).format('YYYY-MM-DD');\n\t}\n\n\tif (endDateLocalStorage != null) {\n\t\tdates.end = Moment(endDateLocalStorage).format('YYYY-MM-DD');\n\t}\n\n\tif (dates.end < dates.start) {\n\t\tdates.start = dates.end;\n\t}\n\n\treturn dates;\n}\n\nexport const isUserAuthoritative = (user) => {\n\treturn user.authoritative;\n}","import React from 'react';\nimport DataObject from './index.js';\nimport PermissionManager from './PermissionManager.js';\n\nimport schoolHelper from 'helpers/schoolHandling';\n\nimport {\n\tisUserTeacher,\n\tisUserAdministrator,\n\tisUserCourseAdministrator,\n\tisUserMentor,\n\tisUserStudent,\n\tisUserCurriculumAdmin,\n\tisUserAuthoritative,\n\tisUserPedagogue,\n\thavingPermission\n} from 'helpers/user';\n\nclass User extends DataObject {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.permissionManager = new PermissionManager();\n\t\tthis.permissionTypes = this.permissionManager.getPermissionTypes();\n\t}\n\n\tgetUserId = () => {\n\t\tif (this.data != null) {\n\t\t\treturn this.data.userId;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetName = () => {\n\t\tif (this.data != null) {\n\t\t\treturn this.data.firstName + ' ' + this.data.lastName;\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tisTeacher = () => {\n\t\treturn isUserTeacher(this.data);\n\t}\n\n\tisAdministrator = () => {\n\t\treturn isUserAdministrator(this.data);\n\t}\n\n\tisCourseAdministrator = () => {\n\t\treturn isUserCourseAdministrator(this.data);\n\t}\n\n\tisUserCurriculumAdmin = () => {\n\t\treturn isUserCurriculumAdmin(this.data);\n\t}\n\n\tisMentor = () => {\n\t\treturn isUserMentor(this.data);\n\t}\n\n\tisStudent = () => {\n\t\treturn isUserStudent(this.data);\n\t}\n\n\tisAuthoritative = () => {\n\t\treturn isUserAuthoritative(this.data);\n\t}\n\n\tisPedagogue = () => {\n\t\treturn isUserPedagogue(this.data);\n\t}\n\n\thavingPermission = (permissionType) => {\n\t\tif (!this.permissionTypes[permissionType]) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn havingPermission(this.data, permissionType);\n\t}\n\n\tisSchoolLeader = () => {\n\t\tif (this.data == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst school = schoolHelper.getSchoolForUser(this.data);\n\t\tif (this.data.roles != null && this.data.roles.length > 0) {\n\t\t\tconst role = this.data.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == 'SCHOOL_LEADER' &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (role != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisOperationManager = () => {\n\t\tif (this.data == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.data.userRoles != null && this.data.userRoles.length > 0) {\n\t\t\tconst role = this.data.userRoles.find(role =>\n\t\t\t\trole.toUpperCase() == 'OPERATION_MANAGER'\n\t\t\t);\n\n\t\t\tif (role != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSMSAdmin = () => {\n\t\tif (this.data == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst school = schoolHelper.getSchoolForUser(this.data);\n\t\tif (this.data.roles != null && this.data.roles.length > 0) {\n\t\t\tconst role = this.data.roles.find(role =>\n\t\t\t\trole.roleId.toUpperCase() == 'SMS_ADMIN' &&\n\t\t\t\trole.referenceType.toUpperCase() == 'SCHOOL' &&\n\t\t\t\trole.referenceId == school\n\t\t\t);\n\n\t\t\tif (role != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tgetActiveSchool = () => {\n\t\tif (this.data == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst schoolId = schoolHelper.getSchoolForUser(this.data);\n\n\t\tif (schoolId != null) {\n\t\t\tconst school = this.data.schools.find(school =>\n\t\t\t\tschool.id == schoolId\n\t\t\t);\n\n\t\t\tif (school != null) {\n\t\t\t\treturn school;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nexport default User;\n","import Moment from 'moment';\nimport React, { Component } from 'react';\nimport DatePicker from 'react-datepicker';\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\nimport sv from 'date-fns/locale/sv';\nimport no from 'date-fns/locale/nb';\nimport en from 'date-fns/locale/en-US';\nimport da from 'date-fns/locale/da';\nimport uk from 'date-fns/locale/uk';\nimport { getActiveLanguage, translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { TimePicker } from 'UI/Inputs';\n\nclass DatePickerFromTo extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tMoment.locale(getActiveLanguage());\n\t\tregisterLocale('en-US', en);\n\t\tregisterLocale('sv-SE', sv);\n\t\tregisterLocale('nb-NO', no);\n\t\tregisterLocale('da-DK', da);\n\t\tregisterLocale('uk', uk);\n\t\tsetDefaultLocale('en-US');\n\n\t\tif (props.values != null && props.type == \"assignment\") {\n\t\t\tthis.state = {\n\t\t\t\ttimeStart: props.values.startDate != null && !this.props.cloneView ? Moment.utc(props.values.startDate).local() : Moment(),\n\t\t\t\ttimeEnd: props.values.dueDate != null && !this.props.cloneView ? Moment.utc(props.values.dueDate).local()\n\t\t\t\t\t: this.props.values.startDate && !this.props.cloneView ? Moment.utc(props.values.startDate).local().add(7, 'days') : Moment().add(7, 'days'),\n\t\t\t\tdtPickerStartDate: props.values.startDate != null && !this.props.cloneView ? Moment.utc(props.values.startDate).local() : Moment(),\n\t\t\t\tdtPickerDueDate: props.values.dueDate != null && !this.props.cloneView ? Moment.utc(props.values.dueDate).local()\n\t\t\t\t\t: this.props.values.startDate && !this.props.cloneView ? Moment.utc(props.values.startDate).local().add(7, 'days') : Moment().add(7, 'days'),\n\t\t\t\tupdated: false\n\t\t\t};\n\t\t} else if (props.values != null && props.type == \"plan\") {\n\t\t\tthis.state = {\n\t\t\t\ttimeStart: props.values.timeStart != null && !this.props.cloneView ? Moment.utc(props.values.timeStart).local() : Moment(),\n\t\t\t\ttimeEnd: props.values.timeEnd != null && !this.props.cloneView ? Moment.utc(props.values.timeEnd).local() : Moment().add(7, 'days'),\n\t\t\t\tdtPickerStartDate: props.values.timeStart != null && !this.props.cloneView ? Moment.utc(props.values.timeStart).local() : Moment(),\n\t\t\t\tdtPickerDueDate: props.values.timeEnd != null && !this.props.cloneView ? Moment.utc(props.values.timeEnd).local() : Moment().add(7, 'days'),\n\t\t\t\tupdated: false\n\t\t\t};\n\t\t} else if (props.values != null && props.values.start != null && props.values.end != null) {\n\t\t\tthis.state = {\n\t\t\t\ttimeStart: props.values.start != null ? Moment.utc(props.values.start).local() : Moment(),\n\t\t\t\ttimeEnd: props.values.end != null ? Moment.utc(props.values.end).local() : Moment().add(7, 'days'),\n\t\t\t\tdtPickerStartDate: props.values.start != null ? Moment.utc(props.values.start).local() : Moment(),\n\t\t\t\tdtPickerDueDate: props.values.end != null ? Moment.utc(props.values.end).local() : Moment().add(7, 'days'),\n\t\t\t\tupdated: false\n\t\t\t};\n\t\t} else if (props.values != null && props.type == \"timeblocks\") {\n\t\t\tthis.state = {\n\t\t\t\ttimeStart: props.values.startTime != null ? Moment.utc(props.values.startTime).local() : Moment(),\n\t\t\t\ttimeEnd: props.values.endTime != null ? Moment.utc(props.values.endTime).local() : Moment().add(7, 'days'),\n\t\t\t\tdtPickerStartDate: props.values.startTime != null ? Moment.utc(props.values.startTime).local() : Moment(),\n\t\t\t\tdtPickerDueDate: props.values.endTime != null ? Moment.utc(props.values.endTime).local() : Moment().add(7, 'days'),\n\t\t\t\tupdated: false\n\t\t\t};\n\t\t} else if (props.values == null && props.type == \"timeblocks\") {\n\t\t\tthis.state = {\n\t\t\t\ttimeStart: Moment(),\n\t\t\t\ttimeEnd: Moment(),\n\t\t\t\tdtPickerStartDate: Moment(),\n\t\t\t\tdtPickerDueDate: Moment(),\n\t\t\t\tupdated: false\n\t\t\t};\n\t\t} else {\n\t\t\tthis.state = {\n\t\t\t\ttimeStart: Moment(),\n\t\t\t\ttimeEnd: Moment().add(7, 'days'),\n\t\t\t\tdtPickerStartDate: Moment(),\n\t\t\t\tdtPickerDueDate: Moment().add(7, 'days'),\n\t\t\t\tupdated: false\n\t\t\t};\n\t\t}\n\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.values != null) {\n\t\t\tif (nextProps.type == \"assignment\") {\n\t\t\t\tif (nextProps.values == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState({\n\t\t\t\t\ttimeStart: Moment.utc(nextProps.values.startDate).local(),\n\t\t\t\t\ttimeEnd: Moment.utc(nextProps.values.dueDate).local(),\n\t\t\t\t\tdtPickerStartDate: Moment.utc(nextProps.values.startDate).local(),\n\t\t\t\t\tdtPickerDueDate: Moment.utc(nextProps.values.dueDate).local(),\n\t\t\t\t\tupdated: true\n\t\t\t\t});\n\t\t\t} else if (nextProps.type == \"plan\") {\n\t\t\t\tif (nextProps.values == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState({\n\t\t\t\t\ttimeStart: nextProps.values.timeStart ? Moment.utc(nextProps.values.timeStart).local() : Moment(),\n\t\t\t\t\ttimeEnd: nextProps.values.timeEnd ? Moment.utc(nextProps.values.timeEnd).local() : Moment().add(7, 'days'),\n\t\t\t\t\tdtPickerStartDate: nextProps.values.timeStart ? Moment.utc(nextProps.values.timeStart).local() : Moment(),\n\t\t\t\t\tdtPickerDueDate: nextProps.values.timeEnd ? Moment.utc(nextProps.values.timeEnd).local() : Moment().add(7, 'days'),\n\t\t\t\t\tupdated: true\n\t\t\t\t});\n\t\t\t} else if (nextProps.type == \"timeblocks\") {\n\t\t\t\tthis.setState({\n\t\t\t\t\ttimeStart: nextProps.values.startTime != null ? Moment.utc(nextProps.values.startTime).local() : Moment(),\n\t\t\t\t\ttimeEnd: nextProps.values.endTime != null ? Moment.utc(nextProps.values.endTime).local() : Moment().add(7, 'days'),\n\t\t\t\t\tdtPickerStartDate: nextProps.values.startTime != null ? Moment.utc(nextProps.values.startTime).local() : Moment(),\n\t\t\t\t\tdtPickerDueDate: nextProps.values.endTime != null ? Moment.utc(nextProps.values.endTime).local() : Moment().add(7, 'days'),\n\t\t\t\t\tupdated: false\n\t\t\t\t});\n\t\t\t} else if (nextProps.values.start != null && nextProps.values.end != null) {\n\t\t\t\tthis.setState({\n\t\t\t\t\ttimeStart: Moment.utc(nextProps.values.start).local(),\n\t\t\t\t\ttimeEnd: Moment.utc(nextProps.values.end).local(),\n\t\t\t\t\tdtPickerStartDate: Moment.utc(nextProps.values.start).local(),\n\t\t\t\t\tdtPickerDueDate: Moment.utc(nextProps.values.end).local(),\n\t\t\t\t\tupdated: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.onChange();\n\t}\n\n\tonStartChange = (date) => {\n\t\tif (date == null) return null;\n\t\tlet { dtPickerStartDate, timeStart, dtPickerDueDate, timeEnd } = this.state;\n\t\tdtPickerStartDate = date;\n\t\ttimeStart = date;\n\n\t\tvar dueDate = Moment(date);\n\t\tdate = Moment(date);\n\t\tif (date.diff(dtPickerDueDate) > 0) {\n\t\t\tdtPickerDueDate = Moment(date);\n\t\t\ttimeEnd = Moment(date);\n\t\t}\n\n\t\tif (this.props.type == \"timeblocks\") {\n\t\t\tif (!date.isSame(timeEnd, 'day')) {\n\t\t\t\tdtPickerDueDate = Moment(date);\n\t\t\t\ttimeEnd = Moment(date);\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ dtPickerDueDate, timeEnd, dtPickerStartDate, timeStart }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonEndChange = (date) => {\n\t\tif (date == null) return null;\n\t\tlet { dtPickerDueDate, timeEnd, dtPickerStartDate, timeStart } = this.state;\n\t\tdtPickerDueDate = date;\n\t\ttimeEnd = date;\n\n\t\tif (this.props.type == \"timeblocks\") {\n\t\t\tif (!date.isSame(timeStart, 'day')) {\n\t\t\t\tdtPickerStartDate = Moment(date);\n\t\t\t\ttimeStart = Moment(date);\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ dtPickerDueDate, timeEnd, dtPickerStartDate, timeStart }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonStartTimeChange = (time) => {\n\t\tlet { dtPickerStartDate, timeStart } = this.state;\n\t\tdtPickerStartDate = Moment(time);\n\t\ttimeStart = Moment(time);\n\n\t\tthis.setState({ dtPickerStartDate, timeStart }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonEndTimeChange = (time) => {\n\t\tlet { dtPickerDueDate, timeEnd } = this.state;\n\t\tdtPickerDueDate = Moment(time);\n\t\ttimeEnd = Moment(time);\n\n\t\tthis.setState({ dtPickerDueDate, timeEnd }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonChange = () => {\n\t\tif (this.props.onChange) {\n\t\t\tconst dates = {\n\t\t\t\tstart: this.state.timeStart,\n\t\t\t\tend: this.state.timeEnd,\n\t\t\t};\n\n\t\t\tthis.props.onChange(dates);\n\t\t}\n\t}\n\n\tgetDateFormat = () => {\n\t\tlet format = Moment.localeData(getActiveLanguage()).longDateFormat(\"L\");\n\t\tlet newFormat = format.replace(\"YYYY\", \"yyyy\");\n\t\tlet days = newFormat.replace(\"DD\", \"dd\");\n\t\treturn days;\n\t};\n\n\tnormalizeLocale = (locale) => {\n\t\tconst [language, region] = locale.split('-');\n\n\t\tif (language.toUpperCase() == \"UK\") {\n\t\t\treturn `uk`;\n\t\t}\n\t\treturn `${language}-${region.toUpperCase()}`;\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.timePicker ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t:\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\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
\n\n\t\t\t\t
\n\t\t\t\t\t{this.props.timePicker ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{!this.props.hideEndDate ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t:\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{!this.props.hideEndDate ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tlanguages: state.Languages.languages\n\t};\n}\n\nexport default connect(mapStateToProps)(DatePickerFromTo);\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\nimport Moment from 'moment';\nimport { connect } from 'react-redux';\nimport { Field, change, reduxForm, formValueSelector } from 'redux-form';\nimport { getUserAbsence } from 'actions/user';\n\nimport User from \"_class/User\";\n\nimport DatePickerFromTo from '../Partials/DatePickerFromTo';\n\nimport { Expandable, Spinner } from 'UI';\nimport { Button, Radio, Icon, translate, getActiveLanguage } from '@haldor/ui';\n\nimport './_ReportAbsence.scss';\n\nclass ReportAbsenceForm extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tMoment.locale(getActiveLanguage());\n\n\t\tthis.state = {\n\t\t\tid: null,\n\t\t\torigin: null,\n\t\t\ttype: null,\n\t\t\tloading: true,\n\t\t\ttimeValid: false,\n\t\t\tshowError: false,\n\t\t\ttimeStart: Moment().format(),\n\t\t\ttimeEnd: Moment().format(),\n\t\t\tsubmitResult: \"\",\n\t\t};\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.user != null) {\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tconst start = Moment().subtract(1, 'weeks').second(0).format('YYYY-MM-DD');\n\t\t\tconst end = Moment().add(3, 'weeks').add(1, 'day').second(0).format('YYYY-MM-DD');\n\n\t\t\tthis.props.getUserAbsence(this.props.user.userId, start, end).then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t\tthis.validateTime();\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.absence != null) {\n\t\t\tthis.selectAbsence(this.props.absence);\n\t\t}\n\t}\n\n\tvalidateTime = () => {\n\t\tif (Moment(this.state.timeStart).format('HH:mm:ss') === Moment(this.state.timeEnd).format('HH:mm:ss')) {\n\t\t\tthis.setState({ showError: false, timeValid: false });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.state.timeEnd > this.state.timeStart) {\n\t\t\tif (this.state.timeValid == true) {\n\t\t\t\t// No need to update state to its current value\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.setState({ timeValid: true });\n\t\t} else {\n\t\t\tif (this.state.timeValid == false) {\n\t\t\t\t// No need to update state to its current value\n\n\t\t\t\tthis.setState({ showError: true })\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.setState({ timeValid: false, showError: true });\n\t\t}\n\t}\n\n\tvalidatePeriod = (value) => {\n\t\tif (value == null || value == '') {\n\t\t\treturn this.props.translate('Required');\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tonTimeChange = async (time) => {\n\t\tif (this.props.entireDay == 'yes') {\n\t\t\tawait this.setState({\n\t\t\t\ttimeStart: Moment(time.start).set({ 'minute': 0, 'hour': 0, 'second': 0 }).format(),\n\t\t\t\ttimeEnd: Moment(time.end).set({ 'minute': 59, 'hour': 23, 'second': 0 }).format(),\n\t\t\t});\n\t\t} else {\n\t\t\tawait this.setState({\n\t\t\t\ttimeStart: Moment(time.start).second(0).format(),\n\t\t\t\ttimeEnd: Moment(time.start).set({ 'minute': time.end.minute(), 'hour': time.end.hour(), 'second': 0 }).format(),\n\t\t\t});\n\t\t}\n\n\t\tthis.validateTime();\n\t}\n\n\tonCancel = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onModalClose) {\n\t\t\tthis.props.onModalClose();\n\t\t}\n\t}\n\n\tonDelete = (event) => {\n\t\tevent.preventDefault();\n\n\t\tthis.props.onDelete(this.state.id);\n\t}\n\n\tonEntireDay = async () => {\n\t\tlet start = Moment(this.state.timeStart);\n\t\tlet end = Moment(this.state.timeEnd);\n\n\t\tstart = start.set({ 'minute': 0, 'hour': 0, 'second': 0 });\n\t\tend = end.set({ 'minute': 59, 'hour': 23, 'second': 0 });\n\n\t\tawait this.setState({ timeStart: start.format(), timeEnd: end.format() });\n\t\tthis.validateTime();\n\t}\n\n\tonPartOfDay = async () => {\n\t\tawait this.setState({ timeStart: Moment().format(), timeEnd: Moment().format() });\n\t\tthis.validateTime();\n\t}\n\n\tsubmit = (values) => {\n\t\tconst user = new User(this.props.currentUser);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvalues.startTime = Moment.utc(this.state.timeStart).format();\n\t\t\tvalues.endTime = Moment.utc(this.state.timeEnd).format();\n\t\t\tvalues.user = this.props.user;\n\t\t\tvalues.type = this.state.type;\n\n\t\t\tvalues.period = this.props.entireDay == 'yes';\n\n\t\t\tif (this.state.id != null) {\n\t\t\t\tvalues.id = this.state.id;\n\n\t\t\t\tif (values.validAbsence == 'yes' && values.type.indexOf('INVALID') == 0) {\n\t\t\t\t\tvalues.type = values.type.replace('INVALID', 'VALID');\n\t\t\t\t}\n\n\t\t\t\tif (values.validAbsence == 'no' && values.type.indexOf('VALID') == 0) {\n\t\t\t\t\tvalues.type = values.type.replace('VALID', 'INVALID');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvalues.type = values.validAbsence == 'yes' ? 'VALID_ABSENCE' : 'INVALID_ABSENCE';\n\n\t\t\t\tif (user.isStudent()) {\n\t\t\t\t\tvalues.type = 'VALID_ABSENCE';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.props.onSubmit) {\n\t\t\t\tthis.props.onSubmit(values).then(() => {\n\t\t\t\t\tresolve(1);\n\n\t\t\t\t\tthis.setState({ submitResult: this.props.submitResult });\n\n\t\t\t\t\tif (this.props.submitResult != 'error') {\n\t\t\t\t\t\tlet absenceObject = this.props.userAbsence.find(function (absence) {\n\t\t\t\t\t\t\treturn values.id == absence.id;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (absenceObject != null) {\n\t\t\t\t\t\t\tabsenceObject.startTime = this.state.timeStart;\n\t\t\t\t\t\t\tabsenceObject.endTime = this.state.timeEnd;\n\t\t\t\t\t\t\tabsenceObject.type = values.type;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.props.onModalClose) {\n\t\t\t\t\t\t\tthis.props.onModalClose();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}).catch((error) => {\n\t\t\t\t\tthis.setState({ submitResult: 'error' });\n\t\t\t\t\treject(0);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve(1);\n\t\t\t}\n\t\t});\n\t}\n\n\tselectAbsence = (absence) => {\n\t\tif (this.state.id == absence.id) {\n\t\t\tthis.props.dispatch(change(FORM_NAME, 'entireDay', ''));\n\t\t\tthis.props.dispatch(change(FORM_NAME, 'validAbsence', ''));\n\n\t\t\tthis.setState({\n\t\t\t\tid: null,\n\t\t\t\torigin: null,\n\t\t\t\ttimeStart: Moment().format(),\n\t\t\t\ttimeEnd: Moment().format(),\n\t\t\t\ttype: null,\n\t\t\t}, () => {\n\t\t\t\tthis.validateTime();\n\t\t\t});\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (absence.period) {\n\t\t\tthis.props.dispatch(change(FORM_NAME, 'entireDay', 'yes'));\n\t\t} else {\n\t\t\tthis.props.dispatch(change(FORM_NAME, 'entireDay', 'no'));\n\t\t}\n\n\t\tthis.props.dispatch(change(FORM_NAME, 'validAbsence', absence.type.indexOf('VALID') == 0 ? 'yes' : 'no'));\n\n\t\tconst user = new User(this.props.currentUser);\n\t\tconst isStudent = user.isStudent();\n\n\t\tif (isStudent && user.isAuthoritative) {\n\t\t\tif (absence.reportedBy.userId == this.props.currentUser.id) {\n\t\t\t\tconst start = Moment.utc(absence.startTime).local();\n\t\t\t\tconst end = Moment.utc(absence.endTime).local();\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tid: absence.id,\n\t\t\t\t\torigin: absence.origin,\n\t\t\t\t\ttimeStart: start.format(),\n\t\t\t\t\ttimeEnd: end.format(),\n\t\t\t\t\ttype: absence.type,\n\t\t\t\t}, () => {\n\t\t\t\t\tthis.validateTime();\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tconst start = Moment.utc(absence.startTime).local();\n\t\t\tconst end = Moment.utc(absence.endTime).local();\n\n\t\t\tthis.setState({\n\t\t\t\tid: absence.id,\n\t\t\t\torigin: absence.origin,\n\t\t\t\ttimeStart: start.format(),\n\t\t\t\ttimeEnd: end.format(),\n\t\t\t\ttype: absence.type,\n\t\t\t}, () => {\n\t\t\t\tthis.validateTime();\n\t\t\t});\n\t\t}\n\t}\n\n\tclickAbsence = (absence) => {\n\t\tthis.selectAbsence(absence)\n\t}\n\n\trender() {\n\t\tconst { handleSubmit, submitting, translate, valid, userAbsence } = this.props;\n\t\tlet title = translate('registered-absence');\n\t\tconst disabled = this.state.origin == 'ATTENDANCE';\n\t\tif (userAbsence != null && userAbsence.length > 0) {\n\t\t\ttitle = title + ' (' + userAbsence.length + ')';\n\t\t}\n\n\t\tconst user = new User(this.props.currentUser);\n\t\tconst isStudent = user.isStudent();\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{submitting ?\n\t\t\t\t\t
\n\t\t\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{this.state.submitResult == 'error' ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{!isStudent ?\n\t\t\t\t\t\t\tthis.props.translate('something-went-wrong-create-absence') :\n\t\t\t\t\t\t\tthis.props.translate('something-went-wrong-create-absence-student')\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{ /* Only show other absence objects if no absence is sent to the form */}\n\t\t\t\t{this.props.absence == null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{Moment().subtract(1, 'weeks').format('D MMMM')} - {Moment().add(3, 'weeks').format('D MMMM')}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{this.state.loading ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\tuserAbsence != null && userAbsence.length > 0 ?\n\t\t\t\t\t\t\t\t\tuserAbsence.map((absence) => {\n\t\t\t\t\t\t\t\t\t\tlet styles = {\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\t\t\t\t\tpadding: '1rem',\n\t\t\t\t\t\t\t\t\t\t\tmargin: '0.55rem 0',\n\t\t\t\t\t\t\t\t\t\t\tmarginRight: '1.25rem',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'inline-block',\n\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid transparent',\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'white',\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\tif (absence.id == this.state.id) {\n\t\t\t\t\t\t\t\t\t\t\tstyles.border = '1px solid var(--color--blue)';\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn
this.clickAbsence(absence)}>\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{absence.origin == 'ATTENDANCE' ?\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.translate('Reported lesson')\n\t\t\t\t\t\t\t\t\t\t\t\t\t: this.props.translate('Reported absence')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('start') + ': ' +\n\t\t\t\t\t\t\t\t\t\t\t\tMoment.utc(absence.startTime).local().format('Do MMMM YYYY - HH:mm')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('end') + ': ' +\n\t\t\t\t\t\t\t\t\t\t\t\tMoment.utc(absence.endTime).local().format('Do MMMM YYYY - HH:mm')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t{translate('no-absence-reported-error')}\n\t\t\t\t\t\t\t\t\t

\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: null}\n\n\t\t\t\t
\n\t\t\t\t\t{!isStudent ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{disabled && !isStudent && this.props.user != null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t${translate('student card')}\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{this.state.origin == null || this.state.origin != \"ATTENDANCE\" ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t
\n\n\t\t\t\t\t{!this.state.timeValid && this.state.showError ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{translate('endTime-appears-before-startTime')}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.state.id != null ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nconst FORM_NAME = 'ReportAbsence';\nconst getFormValue = formValueSelector(FORM_NAME);\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuserAbsence: state.user.absence,\n\t\tcurrentUser: state.user.currentUser,\n\t\tsubmitResult: state.Absence.submitResult,\n\t\tlanguages: state.Languages.languages,\n\t\tentireDay: getFormValue(state, 'entireDay'),\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetUserAbsence,\n})(reduxForm({\n\tform: FORM_NAME,\n\tdestroyOnUnmount: true,\n})(ReportAbsenceForm));","import React from 'react';\n\nconst SectionTitle = (props) => (\n\t
\n\t\t{props.children}\n\t
\n);\n\nexport default SectionTitle;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nclass Redirect extends Component {\n\tcomponentDidMount() {\n\t\tthis.props.history.push(this.props.to);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withRouter(Redirect);","\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport Moment from 'moment';\n\nimport { ROLE_ADMINISTRATOR } from 'constants/roles';\n\nimport { deleteAbsence, submitAbsence, updateAbsence } from 'actions/absence';\nimport { getSchoolAbsence, getSchoolDetails, getSchoolStudents } from 'actions/schools';\nimport { searchUser } from 'actions/user';\nimport { setPageTitle } from 'actions/header';\n\nimport DatePicker from 'react-datepicker';\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\nimport sv from 'date-fns/locale/sv';\nimport no from 'date-fns/locale/nb';\nimport en from 'date-fns/locale/en-US';\nimport da from 'date-fns/locale/da';\nimport uk from 'date-fns/locale/uk';\nimport ReportAbsenceForm from 'containers/Forms/Absence/ReportAbsence';\nimport Modal from 'containers/Modals/Modal';\nimport Card, { CardsContainer, CardTitle } from 'components/Cards/Card';\nimport SectionTitle from 'components/Presentation/SectionTitle';\nimport Redirect from 'components/Redirect/Redirect';\n\nimport { Spinner } from 'UI';\nimport { Button, getActiveLanguage } from '@haldor/ui';\n\nclass AbsenceOverview extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tregisterLocale('en-US', en);\n\t\tregisterLocale('sv-SE', sv);\n\t\tregisterLocale('nb-NO', no);\n\t\tregisterLocale('da-DK', da);\n\t\tregisterLocale('uk', uk);\n\t\tsetDefaultLocale('en-US');\n\n\t\tthis.state = {\n\t\t\tabsenceModal: false,\n\t\t\tsubmitting: false,\n\t\t\tdate: Moment(),\n\t\t\tsearchDate: Moment(),\n\t\t\tschoolId: null,\n\t\t\tselectedUser: null,\n\t\t\tsearchString: '',\n\t\t\tsearching: false,\n\t\t\tsearchedOnce: false,\n\t\t\tadmin: null,\n\t\t\tloading: true,\n\t\t};\n\t}\n\n\tonDateChange = (date) => {\n\t\tthis.setState({ date: Moment(date) });\n\t}\n\n\tonSubmit = () => {\n\t\tthis.setState({ submitting: true, searchDate: this.state.date });\n\n\t\tthis.props.getSchoolAbsence(this.props.activeSchoolId, encodeURIComponent(this.state.date.format()))\n\t\t\t.then(() => {\n\t\t\t\tthis.setState({ submitting: false });\n\t\t\t});\n\t}\n\n\tonSearch = (event) => {\n\t\tevent.preventDefault();\n\t\tconst { searchString } = this.state;\n\n\t\tif (searchString.length < 3) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.setState({ searching: true });\n\t\tthis.props.searchUser(searchString).then(() => {\n\t\t\tthis.setState({ searching: false, searchedOnce: true });\n\t\t});\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tthis.props.setPageTitle(this.props.translate('absence-today'));\n\t}\n\n\tcomponentDidMount() {\n\t\tconst school = this.props.user.schools.find(school => {\n\t\t\treturn school.id == this.props.activeSchoolId;\n\t\t});\n\n\t\tif (school != null) {\n\t\t\tlet isAdmin = school.userRoles.find(role => {\n\t\t\t\treturn role.toUpperCase() == ROLE_ADMINISTRATOR;\n\t\t\t});\n\n\t\t\tthis.setState({ admin: isAdmin != null });\n\n\t\t\tif (isAdmin != null) {\n\t\t\t\tthis.props.getSchoolDetails(school.id);\n\t\t\t\tthis.props.getSchoolStudents(school.id);\n\t\t\t\tthis.props.getSchoolAbsence(school.id, encodeURIComponent(this.state.date.format())).then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tUNSAFE_componentWillReceiveProps(nextProps) {\n\t\tif (this.props.activeSchoolId == null && nextProps.activeSchoolId != null) {\n\t\t\tconst schoolId = nextProps.activeSchoolId;\n\n\t\t\tthis.setState({ loading: true });\n\t\t\tnextProps.getSchoolDetails(schoolId);\n\t\t\tnextProps.getSchoolStudents(schoolId);\n\t\t\tnextProps.getSchoolAbsence(schoolId, encodeURIComponent(this.state.date.format())).then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t\t}\n\t}\n\n\tonAbsenceSubmit = (values) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet data = [values];\n\n\t\t\tif (values.id != null) {\n\t\t\t\tthis.props.updateAbsence(data).then(() => {\n\t\t\t\t\tresolve(1);\n\t\t\t\t\tthis.onSubmit();\n\t\t\t\t}).catch(() => {\n\t\t\t\t\treject(0);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.props.submitAbsence(data).then(() => {\n\t\t\t\t\tresolve(1);\n\t\t\t\t\tthis.onSubmit();\n\t\t\t\t}).catch(() => {\n\t\t\t\t\treject(0);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonUserClick = (user, absence) => {\n\t\tif (absence != null) {\n\t\t\tthis.setState({\n\t\t\t\tabsenceModal: true,\n\t\t\t\tselectedUser: user,\n\t\t\t\tselectedAbsence: absence,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.setState({\n\t\t\t\tabsenceModal: true,\n\t\t\t\tselectedUser: user,\n\t\t\t\tselectedAbsence: null,\n\t\t\t});\n\t\t}\n\t}\n\n\tcloseModal = () => {\n\t\tthis.setState({\n\t\t\tabsenceModal: !this.state.absenceModal,\n\t\t\tselectedUser: null,\n\t\t\tselectedAbsence: null,\n\t\t});\n\t}\n\n\tonDelete = (id) => {\n\t\tthis.props.deleteAbsence(id).then(() => {\n\t\t\tthis.closeModal();\n\t\t})\n\t}\n\n\tgetDateFormat = () => {\n\t\tlet format = Moment.localeData(getActiveLanguage()).longDateFormat(\"L\");\n\t\tlet newFormat = format.replace(\"YYYY\", \"yyyy\");\n\t\tlet days = newFormat.replace(\"DD\", \"dd\");\n\t\treturn days;\n\t};\n\n\tnormalizeLocale = (locale) => {\n\t\tconst [language, region] = locale.split('-');\n\n\t\tif (language.toUpperCase() == \"UK\"){\n\t\t\treturn `uk`;\n\t\t}\n\t\treturn `${language}-${region.toUpperCase()}`;\n\t};\n\n\trender() {\n\t\tconst { translate, students } = this.props;\n\t\tconst { selectedUser, selectedAbsence } = this.state;\n\n\t\tif (this.props.user == null || this.state.admin == null) {\n\t\t\treturn \n\t\t}\n\n\t\tif (this.state.admin != null && !this.state.admin) {\n\t\t\treturn \n\t\t}\n\n\t\tlet modalTitle = translate('register-absence');\n\t\tif (selectedUser != null) {\n\t\t\tmodalTitle = translate('manage-absence-for') + ' ' + selectedUser.firstName + ' ' + selectedUser.lastName;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{translate('view-absence-for')}

\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{this.state.loading ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: this.props.reportedAbsence != null ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.props.reportedAbsence.length > 0 ? this.props.reportedAbsence.map(absence => {\n\t\t\t\t\t\t\t\t\t\treturn this.onUserClick(absence.user, absence)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{absence.user.email}\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t{absence.user.firstName} {absence.user.lastName}\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate(absence.type)}\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{absence.period ? Moment.utc(absence.startTime).local().format('Do MMMM YYYY') : Moment.utc(absence.startTime).local().format('Do MMMM YYYY - HH:mm')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{absence.period ? Moment.utc(absence.endTime).local().format('Do MMMM YYYY') : Moment.utc(absence.endTime).local().format('Do MMMM YYYY - HH:mm')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}) :
\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('no-results')}\n\t\t\t\t\t\t\t\t\t
}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('report-absence-for-student')}\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t this.setState({ searchString: e.target.value })}\n\t\t\t\t\t\t\t\t\tplaceholder={translate('search') + '...'}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.state.searching ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t: this.props.searchResults != null && this.props.searchResults.length > 0 ?\n\t\t\t\t\t\t\t\t\tthis.props.searchResults.map((student) => (\n\t\t\t\t\t\t\t\t\t\t this.onUserClick(student)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{student.email}\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{student.firstName} {student.lastName}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t)) :\n\t\t\t\t\t\t\t\t\tthis.state.searchedOnce ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('no-results')}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tactiveSchoolId: state.user.activeSchool,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tschool: state.School.active,\n\t\tuser: state.user.currentUser,\n\t\tstudents: state.School.students,\n\t\tsearchResults: state.user.searchResults,\n\t\treportedAbsence: state.School.absence,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetSchoolStudents,\n\tgetSchoolAbsence,\n\tgetSchoolDetails,\n\tsubmitAbsence,\n\tupdateAbsence,\n\tsearchUser,\n\tdeleteAbsence,\n\tsetPageTitle,\n})(AbsenceOverview);\n","import { getNotReportedSchedulePositions } from 'actions/schedule';\nimport Card, { CardsContainer, CardTitle } from 'components/Cards/Card';\nimport Redirect from 'components/Redirect/Redirect';\nimport { ROLE_ADMINISTRATOR, ROLE_TEACHER } from 'constants/roles';\nimport { getRootUrl } from 'helpers/url';\nimport Moment from 'moment';\nimport React, { Component } from 'react';\nimport DatePicker from 'react-datepicker';\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\nimport sv from 'date-fns/locale/sv';\nimport no from 'date-fns/locale/nb';\nimport en from 'date-fns/locale/en-US';\nimport da from 'date-fns/locale/da';\nimport uk from 'date-fns/locale/uk';\nimport { translate, getActiveLanguage } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Spinner } from 'UI';\nimport { Button } from '@haldor/ui';\nimport DateTime from '_class/DateTime';\nimport { setPageTitle } from 'actions/header';\n\nclass AttendanceOverview extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tMoment.locale(getActiveLanguage());\n\n\t\tregisterLocale('en-US', en);\n\t\tregisterLocale('sv-SE', sv);\n\t\tregisterLocale('nb-NO', no);\n\t\tregisterLocale('da-DK', da);\n\t\tregisterLocale('uk', uk);\n\t\tsetDefaultLocale('en-US');\n\n\t\tlet start = Moment().subtract(1, 'days');\n\t\tlet end = Moment();\n\n\t\tlet startDateLocalStorage = localStorage.getItem('attendance-start-date');\n\t\tlet endDateLocalStorage = localStorage.getItem('attendance-end-date');\n\n\t\tif (!Moment(startDateLocalStorage).isValid()) {\n\t\t\tstartDateLocalStorage = null;\n\t\t}\n\n\t\tif (!Moment(endDateLocalStorage).isValid()) {\n\t\t\tendDateLocalStorage = null;\n\t\t}\n\n\t\tif (startDateLocalStorage != null && endDateLocalStorage != null) {\n\t\t\tstart = Moment(startDateLocalStorage);\n\t\t\tend = Moment(endDateLocalStorage);\n\t\t}\n\n\t\tthis.state = {\n\t\t\tloading: true,\n\t\t\tstartDate: start,\n\t\t\tendDate: end,\n\t\t\tallowed: null,\n\t\t\tadmin: false,\n\t\t\tfilter: '',\n\t\t};\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tthis.props.setPageTitle(this.props.translate('not-reported-lessons'));\n\t}\n\n\tcomponentDidMount = () => {\n\t\tconst school = this.props.user.schools.find(school => {\n\t\t\treturn school.id == this.props.activeSchool;\n\t\t});\n\n\t\tif (school != null) {\n\t\t\tlet isTeacher = school.userRoles.find(role => {\n\t\t\t\treturn role.toUpperCase() == ROLE_TEACHER;\n\t\t\t});\n\n\t\t\tlet isAdmin = school.userRoles.find(role => {\n\t\t\t\treturn role.toUpperCase() == ROLE_ADMINISTRATOR;\n\t\t\t});\n\n\t\t\tthis.setState({ allowed: isTeacher != null || isAdmin != null });\n\t\t\tthis.setState({ admin: isAdmin != null });\n\n\t\t\tlet role = isAdmin != null ? ROLE_ADMINISTRATOR : ROLE_TEACHER;\n\t\t\tthis.props.getNotReportedSchedulePositions(role, this.state.startDate.format('YYYY-MM-DD'), this.state.endDate.format('YYYY-MM-DD'))\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\tonStartDateChange = (startDate) => {\n\t\tif (startDate == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.setState({ startDate: Moment(startDate), endDate: Moment(startDate).add(6, 'days') });\n\n\t\tlocalStorage.setItem(\"attendance-start-date\", new DateTime(startDate).getDateStamp());\n\t\tlocalStorage.setItem(\"attendance-end-date\", new DateTime(Moment(startDate).add(6, 'days')).getDateStamp());\n\t}\n\n\tonEndDateChange = (endDate) => {\n\t\tif (endDate == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.setState({ endDate: Moment(endDate), startDate: Moment(endDate).subtract(6, 'days') });\n\n\t\tlocalStorage.setItem(\"attendance-start-date\", new DateTime(Moment(endDate).subtract(6, 'days')).getDateStamp());\n\t\tlocalStorage.setItem(\"attendance-end-date\", new DateTime(endDate).getDateStamp());\n\t}\n\n\tonFilterChange = (event) => {\n\t\tevent.preventDefault();\n\n\t\tconst filter = event.target.value;\n\t\tthis.setState({ filter });\n\t}\n\n\tonDateFilterChange = () => {\n\t\tthis.setState({ loading: true });\n\t\tlet role = this.state.admin ? ROLE_ADMINISTRATOR : ROLE_TEACHER;\n\n\t\tthis.props.getNotReportedSchedulePositions(role, this.state.startDate.format('YYYY-MM-DD'), this.state.endDate.format('YYYY-MM-DD'))\n\t\t\t.then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t}\n\n\tgetDateFormat = () => {\n\t\tlet format = Moment.localeData(getActiveLanguage()).longDateFormat(\"L\");\n\t\tlet newFormat = format.replace(\"YYYY\", \"yyyy\");\n\t\tlet days = newFormat.replace(\"DD\", \"dd\");\n\t\treturn days;\n\t};\n\n\tnormalizeLocale = (locale) => {\n\t\tconst [language, region] = locale.split('-');\n\n\t\tif (language.toUpperCase() == \"UK\"){\n\t\t\treturn `uk`;\n\t\t}\n\t\treturn `${language}-${region.toUpperCase()}`;\n\t};\n\n\trender() {\n\t\tif (this.state.loading || this.state.allowed == null) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\tif (this.state.allowed != null && !this.state.allowed) {\n\t\t\treturn \n\t\t}\n\n\t\tlet languages = ['sv', 'en', 'no', 'da', 'uk'];\n\t\tconst sections = [];\n\t\tif (this.props.schedulePositions != null) {\n\t\t\tthis.props.schedulePositions.forEach(position => {\n\t\t\t\tif (sections.indexOf(position.section.title) == -1 && position.section.title !== null) {\n\t\t\t\t\tsections.push(position.section.title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet schedulePositions = this.props.schedulePositions;\n\t\tif (this.state.filter != '') {\n\t\t\tschedulePositions = schedulePositions.filter(position => {\n\t\t\t\treturn position.section.title == this.state.filter;\n\t\t\t});\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{this.props.translate('select-date')}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{this.props.translate('section')}

\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t{schedulePositions.map((position) => {\n\t\t\t\t\t\tif (position.activityMemberships.length > 0 || position.section.id > 0) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{position.section.title}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{new DateTime(position.startTime).getLongDateWithTime()}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t{position.title}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t})}\n\n\t\t\t\t\t{schedulePositions.length == 0 ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('no-results')}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tactiveSchool: state.user.activeSchool,\n\t\tuser: state.user.currentUser,\n\t\tschedulePositions: state.schedule.schedulePositions,\n\t\tlanguages: state.Languages.languages,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetNotReportedSchedulePositions,\n\tsetPageTitle,\n})(AttendanceOverview);\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Person, Skeleton } from 'UI';\n\nimport { User } from 'UI/Icons';\nimport { Icon } from '@haldor/ui';\n\nclass ConversationHeader extends Component {\n\n\trenderMeta = () => {\n\t\tconst { conversation } = this.props;\n\n\t\treturn conversation.relationships.map((relationship, i) => {\n\t\t\tif (relationship.reference != null) {\n\t\t\t\tif (relationship.referenceType == 'ASSIGNMENT') {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {relationship.reference.title}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\tif (relationship.referenceType == 'PLAN') {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {relationship.reference.title}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\tif (relationship.referenceType == 'SECTION') {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {relationship.reference.title}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\tif (relationship.referenceType == 'STUDENT') {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {relationship.reference.firstName} {relationship.reference.lastName}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\tif (relationship.referenceType == 'MEETING_INSTANCE') {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {relationship.reference.title}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t});\n\t}\n\n\trender() {\n\t\tconst { conversation } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{conversation != null && conversation.relationships.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.renderMeta()}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t};\n}\n\nexport default connect(mapStateToProps)(ConversationHeader);\n","export const getConversationParticipants = (conversation, user) => {\n\tif (conversation == null) {\n\t\treturn null;\n\t}\n\n\tlet users = [];\n\tconversation.memberships.forEach(membership => {\n\t\tif (user != null && user.id == membership.membershipID) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (membership.membershipType.indexOf('SECTION') > -1) {\n\t\t\tusers.push({\n\t\t\t\tid: membership.membershipID,\n\t\t\t\tmembershipType: membership.membershipType,\n\t\t\t\t...membership.section,\n\t\t\t});\n\t\t} else {\n\t\t\tusers.push({\n\t\t\t\tid: membership.membershipID,\n\t\t\t\tmembershipType: membership.membershipType,\n\t\t\t\t...membership.user,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn users;\n}\n","import { createConversation, getConversation, resetConversation, submitMessage } from 'actions/conversation';\nimport React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport MessageForm from '../Form/MessageForm';\nimport ConversationHeader from './ConversationHeader';\nimport ConversationMessages from './ConversationMessages';\nimport { setPageTitle } from 'actions/header';\nimport { getConversationParticipants } from '../Helpers';\nimport User from '_class/User';\n\nclass ConversationPage extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloading: true,\n\t\t};\n\t}\n\n\t/* Lifecycle methods */\n\tUNSAFE_componentWillMount = () => {\n\t\tconst { id } = this.props.match.params;\n\n\t\tif (id != 'new') {\n\t\t\tthis.props.getConversation(id)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setTitle();\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t} else {\n\t\t\tif (this.props.staged == null) {\n\t\t\t\tthis.props.history.replace(`/conversations/`);\n\t\t\t}\n\n\t\t\tthis.setTitle();\n\t\t}\n\n\t\twindow.addEventListener('resize', this.onResize);\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tconst { id } = nextProps.match.params;\n\n\t\tif (id != this.props.match.params.id && this.state.loading == false) {\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tthis.props.getConversation(id)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setTitle();\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\tsetTitle = () => {\n\t\tconst { user } = this.props;\n\t\tconst { id } = this.props.match.params;\n\t\tlet members = null;\n\n\t\tif (id != 'new') {\n\t\t\tmembers = getConversationParticipants(this.props.conversation, user);\n\t\t} else {\n\t\t\tmembers = getConversationParticipants(this.props.staged, user);\n\t\t}\n\n\t\tif (members == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet title = '';\n\t\tmembers.forEach((member, index) => {\n\t\t\tif (member != null) {\n\t\t\t\tif (index > 0) {\n\t\t\t\t\ttitle += ', ';\n\t\t\t\t}\n\n\t\t\t\tif (member.membershipType == 'SECTION_OWNERS') {\n\t\t\t\t\ttitle += member.title + \" (\" + this.props.translate('Staff') + \")\";\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (member.membershipType == 'GUARDIAN') {\n\t\t\t\t\tif (member.userId || (member?.linkGuardianStudents && member.linkGuardianStudents.length > 0 && member.studentId)) {\n\t\t\t\t\t\tif (member.userId) {\n\t\t\t\t\t\t\tmember.lastName = (member.lastName != null ? member.lastName : '') + ' (' + this.props.translate('Guardian') + ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst linkGuardianStudent = member.linkGuardianStudents.find(link => link.studentId === member.studentId);\n\t\t\t\t\t\t\tif (linkGuardianStudent) {\n\t\t\t\t\t\t\t\tmember.lastName = (member.lastName != null ? member.lastName : '') + ' (' + this.props.translate('Guardian') + ')';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tmember.lastName = ' (' + this.props.translate('inactive') + ' ' + this.props.translate('guardian') + ')';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmember.lastName = ' (' + this.props.translate('inactive') + ' ' + this.props.translate('guardian') + ')';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttitle += member?.firstName === undefined ? member.lastName : member.firstName + ' ' + member.lastName;\n\t\t\t}\n\t\t});\n\n\t\tthis.props.setPageTitle(title);\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\twindow.removeEventListener('resize', this.onResize);\n\t\tthis.props.resetConversation();\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.onResize();\n\t}\n\n\t/* Events */\n\tsubmitMessage = (values) => {\n\t\tif (this.props.conversation != null) {\n\t\t\tlet lastMessage = this.props.conversation.messages[this.props.conversation.messages.length - 1];\n\t\t\tif (lastMessage == null) {\n\t\t\t\tvalues.parentId = null;\n\t\t\t} else {\n\t\t\t\tvalues.parentId = lastMessage.id;\n\t\t\t}\n\t\t} else {\n\t\t\tvalues.parentId = null;\n\t\t}\n\n\t\treturn new Promise(resolve => {\n\t\t\tlet conversation = this.props.conversation;\n\n\t\t\tif (this.props.match.params.id == 'new') {\n\t\t\t\tconversation = this.props.staged;\n\t\t\t}\n\n\t\t\tlet user = new User(this.props.user);\n\n\t\t\tvalues.creator = user.getUserId();\n\n\t\t\tif (user.isTeacher() || user.isMentor()) {\n\t\t\t\tlet owner_section = conversation.memberships.find(m => m.membershipType == 'SECTION_OWNERS');\n\n\t\t\t\tif (owner_section != null) {\n\t\t\t\t\tvalues.senderId = owner_section.section.id;\n\t\t\t\t\tvalues.senderType = 'SECTION';\n\t\t\t\t} else {\n\t\t\t\t\tvalues.senderId = values.creator;\n\t\t\t\t\tvalues.senderType = 'USER';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvalues.senderId = values.creator;\n\t\t\t\tvalues.senderType = 'USER';\n\t\t\t}\n\n\t\t\tif (this.props.match.params.id == 'new') {\n\t\t\t\t// Send message with a conversation object\n\t\t\t\tlet conversation = this.props.staged;\n\t\t\t\tconversation.messages = [values];\n\n\t\t\t\tdelete values.conversationID;\n\n\t\t\t\tthis.setState({ loading: true });\n\t\t\t\tthis.props.createConversation(conversation)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tthis.props.history.replace(`/conversations/${this.props.new}`);\n\t\t\t\t\t\tthis.props.getConversation(this.props.new).then(() => {\n\t\t\t\t\t\t\tthis.setTitle();\n\t\t\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.props.submitMessage(values).then(() => {\n\t\t\t\t\tthis.setState({});\n\t\t\t\t\tresolve(1);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonResize = () => {\n\t\tconst messages = document.querySelector('.conversation--wrapper');\n\n\t\tif (messages != null) {\n\t\t\tlet height = 0;\n\n\t\t\tconst body = document.querySelector('body');\n\t\t\tconst footer = body.querySelector('.site-footer');\n\t\t\tconst header = body.querySelector('.teams-header');\n\t\t\tconst desktopHeader = body.querySelector('.desktop-header-spacing');\n\t\t\tconst deviceMenu = body.querySelector('.footer-menu-bar-container');\n\t\t\tconst deviceHeader = body.querySelector('.device-menu');\n\n\t\t\theight = window.innerHeight;\n\n\t\t\tif (footer != null) {\n\t\t\t\theight = height - footer.scrollHeight\n\t\t\t}\n\n\t\t\tif (header != null) {\n\t\t\t\theight = height - header.scrollHeight;\n\t\t\t}\n\n\t\t\tif (desktopHeader != null) {\n\t\t\t\theight = height - desktopHeader.scrollHeight;\n\t\t\t}\n\n\t\t\tif (deviceMenu != null) {\n\t\t\t\theight = height - deviceMenu.scrollHeight - 15;\n\t\t\t}\n\n\t\t\tif (deviceHeader != null) {\n\t\t\t\theight = height - deviceHeader.scrollHeight;\n\t\t\t}\n\n\t\t\tmessages.style.height = height - 25 + 'px';\n\t\t}\n\t}\n\n\t/* Render methods */\n\trender() {\n\t\tlet conversation = this.props.conversation;\n\t\tlet disabled = false;\n\n\t\tif (this.props.match.params.id == 'new') {\n\t\t\tconversation = this.props.staged;\n\t\t}\n\n\t\tif (conversation != null) {\n\t\t\tdisabled = conversation.status == 'ARCHIVED' || conversation.disabled === true ? true : false;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t\tconversation: state.Conversation.conversation,\n\t\tstaged: state.Conversation.staged,\n\t\tnew: state.Conversation.new,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tgetConversation,\n\tsubmitMessage,\n\tcreateConversation,\n\tresetConversation,\n\tsetPageTitle,\n})(ConversationPage));\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Field, Form, reduxForm } from 'redux-form';\nimport { Spinner } from 'UI';\nimport { Flex, Button, Icon, TooltipMenu, Skeleton } from '@haldor/ui';\nimport swal from 'sweetalert2';\nimport { eLoggingSeverity } from '@microsoft/applicationinsights-web';\n\nclass GuardianDetailsForm extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet noStudent = false;\n\t\tif (this.props.noStudent != null) {\n\t\t\tnoStudent = true;\n\t\t}\n\t\tlet active = false;\n\t\tif (this.props.currentGuardian.linkGuardianStudents && this.props.currentGuardian.linkGuardianStudents.length > 0\n\t\t\t&& this.props.currentStudent && this.props.currentStudent.userId != \"\") {\n\t\t\tconst linkGuardianStudent = this.props.currentGuardian.linkGuardianStudents.find(link => link.studentId === this.props.currentStudent.userId);\n\t\t\tif (linkGuardianStudent) {\n\t\t\t\tactive = linkGuardianStudent.active;\n\t\t\t}\n\t\t}\n\t\tif (this.props.currentGuardian.id != \"\") {\n\t\t\tthis.state = {\n\t\t\t\tactive: active,\n\t\t\t\tcurrentGuardian: this.props.currentGuardian,\n\t\t\t\tloading: false,\n\t\t\t\tnoStudent: noStudent,\n\t\t\t\teditForm: true\n\t\t\t}\n\t\t} else {\n\t\t\tthis.state = {\n\t\t\t\tactive: active,\n\t\t\t\tcurrentGuardian: this.props.currentGuardian,\n\t\t\t\tloading: false,\n\t\t\t\tnoStudent: noStudent,\n\t\t\t\teditForm: false\n\t\t\t}\n\t\t}\n\t}\n\n\tsubmit = (values) => {\n\t\tif (values.mail != null) {\n\t\t\tvalues.mail = values.mail.trim();\n\t\t}\n\n\t\tconst { currentGuardian } = this.props;\n\n\t\tif (currentGuardian.id != \"\" && currentGuardian.mail != null && currentGuardian.mail != '') {\n\t\t\tif (currentGuardian.mail.toLowerCase() != values.mail.toLowerCase()) {\n\t\t\t\tswal.fire({\n\t\t\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\t\t\ttext: this.props.translate('changing-email-will-also-affect-userlogin'),\n\t\t\t\t\tshowCancelButton: true,\n\t\t\t\t\tfocusConfirm: false,\n\t\t\t\t\tcancelButtonText: this.props.translate('No'),\n\t\t\t\t\tconfirmButtonText: this.props.translate('Yes'),\n\t\t\t\t}).then(result => {\n\t\t\t\t\tif (result.value == null) {\n\t\t\t\t\t\tvalues.mail = this.props.currentGuardian.mail;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.setState({ loading: true });\n\t\t\t\t\tthis.props.onModalSave(values);\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ loading: true });\n\t\tthis.props.onModalSave(values);\n\t}\n\n\tonCancel = () => {\n\t\tlet currentGuardian = this.state.currentGuardian;\n\t\tcurrentGuardian.active = this.state.active;\n\t\tif (this.props.currentGuardian.linkGuardianStudents && this.props.currentGuardian.linkGuardianStudents.length > 0\n\t\t\t&& this.props.currentStudent && this.props.currentStudent.userId != \"\") {\n\t\t\tconst linkGuardianStudent = this.props.currentGuardian.linkGuardianStudents.find(link => link.studentId === this.props.currentStudent.userId);\n\t\t\tif (linkGuardianStudent) {\n\t\t\t\tcurrentGuardian.active = linkGuardianStudent.active;\n\t\t\t}\n\t\t}\n\t\tthis.setState({ currentGuardian: currentGuardian });\n\t\tthis.props.cancelModal();\n\t}\n\n\tchangeGuardianPermissionLevel = (status) => {\n\t\tlet currentGuardian = this.state.currentGuardian;\n\t\tcurrentGuardian.active = status;\n\t\tcurrentGuardian.linkGuardianStudents[0].active = status;\n\t\tthis.setState({ currentGuardian: currentGuardian });\n\t}\n\n\tonMailChanged = (email) => {\n\t\tthis.props.onMailChanged(email);\n\t}\n\n\tmailRequired = (value) => {\n\t\tconst re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\t\tif (re.test(String(value).toLowerCase())) {\n\t\t\tif (typeof (value) !== 'undefined' && value !== '') {\n\t\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t\t// Rule: Not undefined and not an empty string\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t\treturn this.props.translate('field-needs-input');\n\t}\n\n\trender() {\n\t\tconst { handleSubmit, submitting, valid, goal, initialValues } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{!this.state.loading ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.state.editForm == false ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t this.onMailChanged(event.target.value)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{this.props.errorMessage != null ?

{this.props.errorMessage}

: null}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{!this.props.searchingGuardian ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t{this.state.editForm == true ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{!this.props.searchingGuardian ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{this.state.editForm == true && !this.state.noStudent ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t{this.props.translate('active')}
\n\t\t\t\t\t\t\t\t\t\t\t:
{this.props.translate('inactive')}
}\n\t\t\t\t\t\t\t\t\t\tid=\"studentPermissionsTooltip\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t { e.preventDefault(); this.changeGuardianPermissionLevel(!initialValues.linkGuardianStudents[0].active) }}>\n\t\t\t\t\t\t\t\t\t\t\t{this.state.currentGuardian.linkGuardianStudents[0].active ? this.props.translate('inactive') : this.props.translate('active')}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\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:\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t
\n\t\t)\n\t}\n}\n\nfunction mapStateToProps(state, ownProps) {\n\treturn {\n\t\tinitialValues: ownProps.currentGuardian,\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(reduxForm({\n\tform: 'GuardianDetailForm',\n\tdestroyOnUnmount: true,\n})(GuardianDetailsForm));\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\n\nclass RowItem extends Component {\n\n\trender() {\n\t\tlet props = { ...this.props };\n\t\tdelete props.children;\n\t\tdelete props.target;\n\n\t\tif (this.props.target != null) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.children}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nexport const RowCell = (props) => {\n\tlet className = 'cell';\n\tif (props.grow) {\n\t\tclassName += ' grow';\n\t}\n\n\tif (props.shrink) {\n\t\tclassName += ' shrink';\n\t}\n\n\tlet elementProps = { ...props };\n\tdelete elementProps.grow;\n\tdelete elementProps.shrink;\n\tdelete elementProps.children;\n\tdelete elementProps.title;\n\n\treturn (\n\t\t
\n\t\t\t{props.children}\n\t\t
\n\t);\n};\n\nexport default RowItem;\n","import React, { Component } from \"react\";\nimport { translate } from '@haldor/ui';\nimport { connect } from \"react-redux\";\nimport { withRouter, Link } from 'react-router-dom';\nimport Moment from \"moment\";\nimport swal from 'sweetalert2';\n\nimport User from '_class/User';\n\nimport { getGuardianById, setGuardian, deleteStudentGuardian } from \"actions/user\";\nimport { getSchoolGuardians } from \"actions/schools\";\nimport { setPageTitle } from \"actions/header\";\nimport { getActiveSchool } from 'helpers/localstorage';\n\nimport GuardianDetailsForm from '../Forms/GuardianDetailsForm';\nimport Modal from 'containers/Modals/Modal';\n\nimport { Block as ContentBlock, Flex, Skeleton, TooltipMenu, Button, getActiveLanguage } from '@haldor/ui';\nimport { Spinner, DataList } from 'UI';\nimport RowItem, { RowCell } from 'UI/Elements/List/RowItem';\nimport Block, { BlockHeader, BlockContent, BlockWrapper } from \"UI/Elements/Block\";\n\nclass Guardian extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props)\n\n\t\tMoment.locale(getActiveLanguage());\n\n\t\tthis.state = {\n\t\t\tloading: true,\n\t\t\tmodal: false,\n\t\t\tloadingGuardians: true,\n\t\t\tguardian: null,\n\t\t\tguardians: null\n\t\t}\n\t}\n\n\tfetchGuardianData = (userId) => {\n\t\tif (userId) {\n\t\t\tthis.props.getGuardianById(userId).then(() => {\n\t\t\t\tlet guardian = this.props.currentGuardian;\n\t\t\t\tthis.props.setPageTitle(guardian.firstName + ' ' + (guardian.lastName != null ? guardian.lastName : ''));\n\t\t\t\tthis.setState({ loading: false, loadingGuardians: false, guardian: guardian, guardians: null });\n\t\t\t});\n\t\t} else {\n\t\t\tconst school = getActiveSchool(this.props.currentUser.id);\n\t\t\tthis.props.getSchoolGuardians(school).then(() => {\n\t\t\t\tthis.props.setPageTitle(this.props.translate('Guardians'));\n\t\t\t\tlet guardians = this.props.guardians;\n\t\t\t\tthis.setState({ loading: false, loadingGuardians: false, guardian: null, guardians: guardians });\n\t\t\t})\n\t\t}\n\t}\n\n\tcomponentDidUpdate = (prevProps) => {\n\t\tif (this.props.match.params.userId !== prevProps.match.params.userId) {\n\t\t\tthis.fetchGuardianData(this.props.match.params.userId);\n\t\t}\n\t};\n\n\tcomponentDidMount = () => {\n\t\tlet userId = null;\n\t\tif (this.props.match.params != null && this.props.match.params.userId != null) {\n\t\t\tuserId = this.props.match.params.userId;\n\t\t}\n\n\t\tthis.fetchGuardianData(userId);\n\t}\n\n\ttoggleModal = () => {\n\t\tthis.setState({ modal: !this.state.modal });\n\t}\n\n\tonGuardianUpdate = guardian => {\n\t\tif (guardian.id != \"\") {\n\t\t\tthis.props.setGuardian(guardian.id, guardian).then(() => {\n\t\t\t\tthis.setState({ guardian: guardian });\n\t\t\t\tthis.toggleModal();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.props.getUserGuardianByEmail(guardian.mail).then(() => {\n\t\t\t\tif (this.props.guardianByMail == null) {\n\t\t\t\t\tthis.props.addUserGuardian(this.props.user, guardian).then(() => {\n\t\t\t\t\t\tthis.toggleModal();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tonMailChanged = (email) => {\n\t\tconst re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\t\tif (re.test(String(email).toLowerCase())) {\n\t\t\tthis.props.getUserGuardianByEmail(email).then(() => {\n\t\t\t\tif (this.props.guardianByMail != null && this.props.guardianByMail.mail == email) {\n\t\t\t\t\tlet guardian = this.props.guardianByMail;\n\t\t\t\t\tguardian.id = \"\";\n\t\t\t\t\tthis.toggleModal();\n\t\t\t\t\tthis.toggleModal(\"guardian\", guardian);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tonGuardianDelete = guardian => {\n\t\tswal.fire({\n\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: this.props.translate('Cancel'),\n\t\t\tconfirmButtonText: this.props.translate('Delete'),\n\t\t}).then(response => {\n\t\t\tif (response.value != null) {\n\t\t\t\tthis.props.deleteStudentGuardian(this.props.user, guardian.id, true).then(() => {\n\t\t\t\t\tthis.setState({ guardian: null });\n\t\t\t\t\tthis.props.history.push('/guardian');\n\t\t\t\t\tthis.toggleModal();\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\t}\n\n\trenderGuardian = (guardian) => {\n\t\treturn \n\t\t\t\n\t\t\t\t{guardian.firstName + \" \" + (guardian.lastName != null ? guardian.lastName : '')}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{guardian.mail}\n\t\t\t\n\t\t\n\t}\n\n\trender() {\n\t\tconst { translate } = this.props;\n\t\tconst user = new User(this.props.currentUser);\n\t\tconst triggerButton = (\n\t\t\t\n\t\t);\n\n\t\tif (this.state.loading) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\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
\n\t\t\t)\n\t\t}\n\n\t\treturn (\n\t\t\tthis.state.guardian != null ?\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{user.isAdministrator() && !this.state.guardian.synced ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t this.toggleModal(\"guardian\", this.state.guardian)}>\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('Edit')}\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t this.onGuardianDelete(this.state.guardian)}>\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('Delete')}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{this.state.guardian.phone != null ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{translate('phone')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.state.guardian.phone}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t{this.state.guardian.mail != null ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{translate('e-mail')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.state.guardian.mail}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{this.state.guardian.street != null && this.state.guardian.postal != null ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{translate('address')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.state.guardian.street}
\n\t\t\t\t\t\t\t\t\t\t\t{this.state.guardian.postal}, {this.state.guardian.city}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{translate('show-all-guardians')}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t:\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{user.isAdministrator() || user.isMentor() ?\n\t\t\t\t\t\t\t (a.lastName || \"\").localeCompare(b.lastName || \"\"))}\n\t\t\t\t\t\t\t\trenderRow={this.renderGuardian}\n\t\t\t\t\t\t\t\temptyData={this.state.loadingGuardians ? () => (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : () => (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{translate('no-results')}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tlanguages: state.Languages.languages,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tcurrentUser: state.user.currentUser,\n\t\tcurrentGuardian: state.user.guardian,\n\t\tguardians: state.School.guardians,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tsetPageTitle,\n\tgetGuardianById,\n\tsetGuardian,\n\tgetSchoolGuardians,\n\tdeleteStudentGuardian,\n})(Guardian));","import React, { Component } from 'react';\nimport { Icon, translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Form, Field } from 'react-final-form';\n\nimport { getUserGuardian } from 'actions/conversation';\nimport { clearSearchResults, searchSchoolUsers } from 'actions/search';\nimport { getSection, getEducationGroups, getMentorGroups } from 'actions/sections';\n\nimport User from '_class/User';\n\nimport { DataList, Spinner, Expandable } from 'UI';\nimport { Search } from 'UI/Inputs';\nimport { Checkbox, Button, Radio } from '@haldor/ui';\nimport Guardian from 'containers/Guardian/Guardian';\n\nimport \"./SelectRecipient.scss\";\nimport { getActiveSchool } from 'helpers/localstorage';\nimport DisplayName from 'components/Presentation/DisplayName';\n\nclass SelectRecipientForm extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tgroup: null,\n\t\t\tsearching: false,\n\t\t\thasMadeQuery: false,\n\t\t\tloadingGuardians: false,\n\t\t\tselectedContact: null,\n\t\t\tselectedGuardians: [],\n\t\t\tselectedPeople: [],\n\t\t\tsections: [],\n\t\t};\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentWillUnmount = () => {\n\t\tthis.props.clearSearchResults();\n\t}\n\n\tcomponentDidMount = () => {\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (user.isMentor() || user.isTeacher()) {\n\t\t\tthis.props.getEducationGroups();\n\t\t\tthis.props.getMentorGroups();\n\t\t}\n\t}\n\n\t/* Events */\n\tsubmit = (values) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tvalues.memberships = this.getConversationMembers(values);\n\t\t\tvalues.relationships = this.getConversationRelationships(values);\n\n\t\t\tif (this.props.onSubmit) {\n\t\t\t\tthis.props.onSubmit(values).then(() => {\n\t\t\t\t\tresolve(1);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tresolve(1);\n\t\t\t}\n\t\t})\n\t}\n\n\tonGroupExpand = (group, toggle) => {\n\t\tlet foundInState = this.state.sections.findIndex(section => section.id == group.id);\n\n\t\tif (foundInState < 0) {\n\t\t\tthis.props.getSection(group.id).then(() => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tsections: [...this.state.sections, this.props.group]\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\ttoggle();\n\t}\n\n\tgetConversationRelationships = (values) => {\n\t\tlet relationships = [];\n\n\t\tif (this.state.selectedGuardians.length == 0) {\n\t\t\treturn relationships;\n\t\t}\n\n\t\tthis.state.selectedGuardians.forEach(guardian => {\n\t\t\tthis.props.guardians.forEach(studentGuardian => {\n\t\t\t\tif (studentGuardian.guardians == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet foundInGuardians = studentGuardian.guardians.find(gar => {\n\t\t\t\t\treturn gar.id == guardian.id && studentGuardian.userId == guardian.studentId;\n\t\t\t\t});\n\n\t\t\t\tif (foundInGuardians != null) {\n\t\t\t\t\tconst foundInRelationships = relationships.find(relationship => {\n\t\t\t\t\t\treturn relationship.referenceType == 'STUDENT' && relationship.referenceId == studentGuardian.userId;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (foundInRelationships == null) {\n\t\t\t\t\t\trelationships.push({\n\t\t\t\t\t\t\treferenceId: studentGuardian.userId,\n\t\t\t\t\t\t\treferenceType: 'STUDENT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn relationships;\n\t}\n\n\tgetConversationMembers = (values) => {\n\t\tlet members = [];\n\n\t\tif (this.state.selectedGuardians.length > 0) {\n\t\t\tthis.state.selectedGuardians.forEach(guardian => {\n\t\t\t\tmembers.push({\n\t\t\t\t\tmembershipID: guardian.id,\n\t\t\t\t\tmembershipType: 'GUARDIAN',\n\t\t\t\t\tpermission: 'W',\n\t\t\t\t\tuser: guardian,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tif (this.state.selectedPeople.length > 0) {\n\t\t\tthis.state.selectedPeople.forEach(student => {\n\t\t\t\tmembers.push({\n\t\t\t\t\tmembershipID: student.userId,\n\t\t\t\t\tmembershipType: 'USER',\n\t\t\t\t\tpermission: 'W',\n\t\t\t\t\tuser: student,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tif (values.senderId != null) {\n\t\t\tif (values.senderId != this.props.currentUser.id) {\n\t\t\t\tlet mentorGroups = this.props.mentorGroups?.filter(ss => { return !ss.archived && ss.userRole == \"OWNER\" }) ?? [];\n\t\t\t\tlet educationGroups = this.props.educationGroups?.filter(ss => { return !ss.archived && ss.userRole == \"OWNER\" }) ?? [];\n\n\t\t\t\tlet section = mentorGroups.find(section => section.id == values.senderId) ?? educationGroups.find(section => section.id == values.senderId);\n\n\t\t\t\tif (section != null) {\n\t\t\t\t\tmembers.push({\n\t\t\t\t\t\tmembershipID: values.senderId,\n\t\t\t\t\t\tmembershipType: 'SECTION_OWNERS',\n\t\t\t\t\t\tpermission: 'O',\n\t\t\t\t\t\tsection: section,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmembers.push({\n\t\t\t\t\tmembershipID: values.senderId,\n\t\t\t\t\tmembershipType: 'USER',\n\t\t\t\t\tpermission: 'O',\n\t\t\t\t\tuser: this.props.currentUser,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn members;\n\t}\n\n\tonContactSelect = (contact) => {\n\t\tconst selected = this.state.selectedPeople.find(person => person.userId == contact.userId);\n\n\t\tif (selected == null) {\n\t\t\tlet selectedPeople = this.state.selectedPeople;\n\t\t\tselectedPeople.push(contact);\n\n\t\t\tthis.setState({ selectedPeople });\n\t\t} else {\n\t\t\tthis.setState({\n\t\t\t\tselectedPeople: [...this.state.selectedPeople].filter(person =>\n\t\t\t\t\tperson.userId != contact.userId\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\t}\n\n\tonContactToggle = (contact, open) => {\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (open) {\n\t\t\tif ((user.isMentor() || user.isTeacher()) && contact.userType.toLowerCase() == 'student') {\n\t\t\t\tcontact.loadingGuardians = true;\n\t\t\t\tthis.setState({ selectedContact: contact.userId, selectedGuardians: [], selectedPeople: [] });\n\n\t\t\t\tthis.props.getUserGuardian(contact.userId).then(() => {\n\t\t\t\t\tcontact.loadingGuardians = false;\n\t\t\t\t\tthis.setState({});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.setState({ selectedContact: contact.userId, selectedGuardians: [], selectedPeople: [] });\n\t\t\t}\n\t\t}\n\t}\n\n\tonSearch = (query) => {\n\t\tthis.setState({ searching: true, selectedGuardians: [], selectedPeople: [], selected: null, });\n\n\t\tthis.props.searchSchoolUsers(query.query, 'student,teacher,mentor', '').then(() => {\n\t\t\tthis.setState({ searching: false, hasMadeQuery: true });\n\t\t});\n\t}\n\n\tonGuardianChange = (checked, guardian, studentId) => {\n\n\t\tlet { selectedGuardians } = this.state;\n\n\t\tlet found = selectedGuardians.findIndex(selected => {\n\t\t\treturn selected.id == guardian.id && selected.studentId == studentId;\n\t\t});\n\n\t\tif (found == -1) {\n\t\t\tselectedGuardians.push(guardian);\n\t\t} else {\n\t\t\tselectedGuardians.splice(found, 1);\n\t\t}\n\n\t\tthis.setState({ selectedGuardians });\n\t}\n\n\t/* Render methods */\n\trenderStudentGuardian = (guardian, studentId) => {\n\t\tguardian.studentId = studentId;\n\t\tlet selected = this.state.selectedGuardians.find(selectedGuardian => selectedGuardian.id == guardian.id && selectedGuardian.studentId == studentId);\n\t\tselected = selected != null;\n\n\t\treturn
\n\t\t\t this.onGuardianChange(c, guardian, studentId)}\n\t\t\t/>\n\t\t
\n\t}\n\n\tonContactSelected = (value) => {\n\t\tthis.setState({ selectedContact: value, selectedGuardians: [], selectedPeople: [] });\n\t\treturn;\n\t}\n\n\tselectAllUserGuardians = (isActive, guardians, studentId) => {\n\t\tif (this.state.selectedGuardians.length < guardians.length)\n\t\t\tthis.setState({ selectedGuardians: [] })\n\n\t\tguardians.forEach(element => {\n\t\t\tthis.onGuardianChange(isActive, element, studentId);\n\t\t});\n\t}\n\n\trenderContact = (contact) => {\n\t\tlet selected = this.state.selectedPeople.find(student => student.userId == contact.userId);\n\t\tlet userGuardians = null;\n\t\tlet allSelected = true;\n\t\tselected = selected != null;\n\n\t\tif (this.props.guardians != null) {\n\t\t\tuserGuardians = this.props.guardians.find(userGuardian => {\n\t\t\t\treturn userGuardian.userId == contact.userId;\n\t\t\t});\n\n\t\t\tif (userGuardians != null)\n\t\t\t\tallSelected = this.state.selectedGuardians.length == userGuardians.guardians.length;\n\t\t}\n\t\tlet result = this.props.teachers.concat(this.props.students);\n\t\tif (result != null && result.length > 0) {\n\t\t\tconst allowedUserTypes = new Set(['teacher', 'student', 'staff', 'mentor']);\n\n\t\t\tresult = Object.values(result.reduce((acc, item) => {\n\t\t\t\tif (allowedUserTypes.has(item.userType.toLowerCase())) {\n\t\t\t\t\tacc[item.userId] = item;\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {}));\n\t\t}\n\t\tlet contactName = (contact.firstName || contact.lastName) ?\n\t\t\t\n\t\t\t: contact.email;\n\t\treturn (\n\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t this.onContactSelect(contact)}>\n\t\t\t\t\t\t{contact?.userType.toLowerCase() == 'student' ? this.props.translate('student') : this.props.translate('staff')}\n\t\t\t\t\t\n\t\t\t\t
)}\n\t\t\t\tonChange={(open) => this.onContactToggle(contact, open)}\n\t\t\t\topen={contact.userId == this.state.selectedContact}\n\t\t\t>\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t this.onContactSelect(contact)}\n\t\t\t\t\t\t\tlabel={contactName}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\n\t\t\t\t\t{contact.userType.toLowerCase() == 'student' ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{contact.loadingGuardians == true ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t: userGuardians != null && userGuardians.guardians != null && userGuardians.guardians.length > 0 ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Guardian')}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t { this.selectAllUserGuardians(c, userGuardians.guardians, contact.userId); }}\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={this.props.translate('select-all')}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={allSelected}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t{userGuardians.guardians.map(guardian => this.renderStudentGuardian(guardian, contact.userId))}\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('If a guardian\\'s name appears more than once, it\\'s because the user has multiple accounts. Therefore, check for all duplicates when selecting recipients.')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\trenderNoResults = () => {\n\t\tif (this.state.hasMadeQuery) {\n\t\t\tlet noSearchHits = false;\n\t\t\tif (this.props.teachers.length == 0 && this.props.students.length == 0) {\n\t\t\t\tnoSearchHits = true;\n\t\t\t}\n\t\t\tif (noSearchHits) {\n\t\t\t\treturn (\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.translate('no-results')}\n\t\t\t\t\t
\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\trenderGroupTitle(section, type = 'mentor') {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
{section.title}
\n\t\t\t\t
\n\t\t\t\t\t{this.props.translate(section.type.toUpperCase())}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n\trenderGroup = (section) => {\n\t\tlet groupData = null;\n\t\tif (this.state.sections.length > 0) {\n\t\t\tgroupData = this.state.sections.find(s => s.id == section.id);\n\t\t}\n\n\t\treturn
\n\t\t\t\n\n\t\t\t false}\n\t\t\t\tonPlus={(toggle) => this.onGroupExpand(section, toggle)}\n\t\t\t>\n\t\t\t\t{this.props.translate('Owners')}\n\n\t\t\t\t{groupData != null ?\n\t\t\t\t\t
    \n\t\t\t\t\t\t{groupData.owners.map((owner) => {\n\t\t\t\t\t\t\treturn
  • \n\t\t\t\t\t\t\t\t{owner.firstName} {owner.lastName}\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: }\n\t\t\t\n\t\t
\n\t}\n\n\trender() {\n\t\tconst user = new User(this.props.currentUser);\n\t\tlet disableSubmit = false;\n\t\tlet senderId = this.props.currentUser.userId;\n\n\t\tlet mentorGroups = this.props.mentorGroups?.filter(ss => { return !ss.archived && ss.userRole == \"OWNER\" }) ?? [];\n\t\tlet educationGroups = this.props.educationGroups?.filter(ss => { return !ss.archived && ss.userRole == \"OWNER\" }) ?? [];\n\n\t\tif (this.state.selectedGuardians.length == 0 && this.state.selectedPeople.length == 0) {\n\t\t\tdisableSubmit = true;\n\t\t}\n\n\t\tlet result = this.props.teachers.concat(this.props.students);\n\t\tif (result != null && result.length > 0) {\n\t\t\tconst allowedUserTypes = new Set(['teacher', 'student', 'staff', 'mentor']);\n\n\t\t\tresult = Object.values(result.reduce((acc, item) => {\n\t\t\t\tif (allowedUserTypes.has(item.userType.toLowerCase())) {\n\t\t\t\t\tacc[item.userId] = item;\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {}));\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t {\n\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t{result != null && result.length != 0 ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: this.renderNoResults()}\n\n\t\t\t\t\t\t\t{(user.isMentor() || user.isTeacher()) && !disableSubmit ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t{mentorGroups != null ? mentorGroups.map((section) => {\n\t\t\t\t\t\t\t\t\t\treturn this.renderGroup(section);\n\t\t\t\t\t\t\t\t\t}) : null}\n\n\t\t\t\t\t\t\t\t\t{educationGroups != null ? educationGroups.map((section) => {\n\t\t\t\t\t\t\t\t\t\treturn this.renderGroup(section);\n\t\t\t\t\t\t\t\t\t}) : null}\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('If you select a group as the sender, all owners of the group will be able to read and write in the conversation.')}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\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/>\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tcurrentUser: state.user.currentUser,\n\t\tcontacts: state.Conversation.contacts,\n\t\tgroup: state.sections.activeSection,\n\t\tstudents: state.Search.students,\n\t\tteachers: state.Search.teachers,\n\t\tguardians: state.Conversation.guardians,\n\t\teducationGroups: state.sections.educationGroups,\n\t\tmentorGroups: state.sections.mentorGroups\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tsearchSchoolUsers,\n\tgetUserGuardian,\n\tclearSearchResults,\n\tgetEducationGroups,\n\tgetMentorGroups,\n\tgetSection,\n})(SelectRecipientForm);\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { Field, Form } from 'react-final-form';\nimport api from 'lib/api';\nimport { addError } from 'actions';\n\nimport { Button, translate, Checkbox, Spinner } from '@haldor/ui';\n\nimport { getNotificationSettings } from 'actions/notifications';\nimport { getUserNotificationSettings } from 'actions/user';\n\nclass NotificationOptionForm extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloading: false,\n\t\t\toptionsModalVisible: false,\n\t\t\tuniqueNotificationSettingsObjects: null\n\t\t};\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.values != null && this.props.values.length > 0) {\n\n\t\t\tlet uniqueNotificationSettingsObjects = this.props.values.reduce((accumulator, current) => {\n\t\t\t\tif (!accumulator.find(item => item.notificationSettings.id === current.notificationSettings.id)) {\n\t\t\t\t\taccumulator.push(current);\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [])\n\t\t\t\t.map(item => item.notificationSettings)\n\t\t\t\t.sort((a, b) => a.id - b.id);;\n\n\t\t\tthis.setState({ uniqueNotificationSettingsObjects: uniqueNotificationSettingsObjects });\n\t\t}\n\t}\n\n\tonSubmit = (values) => new Promise((resolve) => {\n\t\tlet data = [];\n\t\tthis.setState({ loading: true });\n\n\t\tthis.state.uniqueNotificationSettingsObjects?.forEach((setting) => {\n\n\t\t\tconst notificationSpaces = setting.notificationSpace.split(',');\n\t\t\tnotificationSpaces?.forEach((space) => {\n\t\t\t\tconst userSetting = values.settings?.find((s) =>\n\t\t\t\t\ts.notificationSettingId == setting.id && s.notificationSpace == space.trim()\n\t\t\t\t);\n\n\t\t\t\tif (userSetting != null) {\n\t\t\t\t\tdata.push(userSetting);\n\t\t\t\t} else {\n\t\t\t\t\tconst object = {\n\t\t\t\t\t\tnotificationSettingId: setting.id,\n\t\t\t\t\t\tnotificationSpace: space.trim(),\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t};\n\n\t\t\t\t\tdata.push(object);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tapi.post('notifications/userNotificationSettings', data).then(() => {\n\t\t\tthis.props.getUserNotificationSettings().then(() => {\n\t\t\t\tthis.props.addError(this.props.translate('changes-saved'), 'info');\n\n\t\t\t\tif (this.props.onSubmit != null) {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t\tthis.props.onSubmit();\n\t\t\t\t}\n\n\t\t\t\tif (this.props.onAbort != null) {\n\t\t\t\t\tthis.props.onAbort();\n\t\t\t\t}\n\t\t\t});\n\t\t}).catch(() => {\n\t\t\tthis.props.addError(this.props.translate('Something went wrong while saving the options'), 'error');\n\t\t\tthis.setState({ loading: false });\n\t\t});\n\t});\n\n\trenderField = (field) => {\n\t\tlet value = false;\n\t\tif (field.input.value != '') {\n\t\t\tvalue = field.input.value.find((s) =>\n\t\t\t\ts.notificationSettingId == field.setting.id && s.notificationSpace.includes(field.space) && s.enabled == true\n\t\t\t) != null;\n\t\t}\n\n\t\treturn (\n\t\t\t {\n\t\t\t\t\tlet values = [];\n\t\t\t\t\tif (field.input.value != '') {\n\t\t\t\t\t\tvalues = field.input.value;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet userSetting = values?.find((s) =>\n\t\t\t\t\t\ts.notificationSettingId == field.setting.id && s.notificationSpace == field.space\n\t\t\t\t\t);\n\n\t\t\t\t\tif (userSetting) {\n\t\t\t\t\t\tuserSetting.enabled = checked;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar object = {\n\t\t\t\t\t\t\tnotificationSettingId: field.setting.id,\n\t\t\t\t\t\t\tnotificationSpace: field.space,\n\t\t\t\t\t\t\tenabled: checked,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvalues.push(object);\n\t\t\t\t\t}\n\n\t\t\t\t\tfield.input.onChange(values);\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\tlet notice = this.props.translate('notice-notificationsettings');\n\t\tif (notice == 'notice-notificationsettings') {\n\t\t\tnotice = '';\n\t\t}\n\n\t\tlet uniqueNotificationSettingsObjects = this.props.values.reduce((accumulator, current) => {\n\t\t\tif (!accumulator.find(item => item.notificationSettings.id === current.notificationSettings.id)) {\n\t\t\t\taccumulator.push(current);\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, []).map(item => item.notificationSettings);\n\n\t\tif (this.state.loading) {\n\t\t\treturn (
\n\t\t\t\t\n\t\t\t
)\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{submitting ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{uniqueNotificationSettingsObjects?.map((setting) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Teams')}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate(setting.text)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{setting.notificationSpace.includes('Teams') ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\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
\n\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nconst mapStateToProps = state => ({\n\ttranslate: translate(state.Languages.translations),\n\tnotificationSettings: state.Notifications.notificationSettings,\n});\n\nexport default withRouter(connect(mapStateToProps, {\n\tgetNotificationSettings,\n\tgetUserNotificationSettings,\n\taddError\n})(NotificationOptionForm));\n","import { Flex } from '@haldor/ui';\nimport {\n\tarchiveConversation,\n\tclearSearch,\n\tgetArchivedConversations,\n\tgetConversations,\n\tsearchConversation,\n\tupdateSearchedConversations,\n\tstageConversation\n} from 'actions/conversation';\nimport { getUserNotificationSettings, getMySections } from 'actions/user';\nimport Redirect from 'components/Redirect/Redirect';\nimport Modal from 'containers/Modals/Modal';\nimport Moment from 'moment';\nimport React, { Component } from 'react';\nimport { Link, withRouter } from 'react-router-dom';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport swal from 'sweetalert2';\nimport { Collapsible, Person } from 'UI';\nimport { Search } from 'UI/Inputs';\nimport { Icon, Button } from '@haldor/ui';\nimport LoadingCards from 'components/Cards/LoadingCard';\nimport User from '_class/User';\nimport '../Conversation.scss';\nimport SelectRecipientForm from '../Form/SelectRecipient';\nimport { getConversationParticipants } from '../Helpers';\nimport { setPageTitle, setPageActions } from 'actions/header';\nimport NotificationOptionForm from 'containers/Forms/NotificationOptionForm';\n\n\nclass ConversationsPage extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tmodal: false,\n\t\t\tsearching: false,\n\t\t\tsearchView: false,\n\t\t\tloading: false,\n\t\t\tloadingArchievedConversation: false,\n\t\t\toptionsModalVisible: false,\n\t\t\tuser: new User(this.props.user)\n\t\t};\n\t}\n\n\t/* Lifecycle events */\n\tUNSAFE_componentWillMount = async () => {\n\t\tthis.setState({ loading: true })\n\t\tthis.props.getConversations().then(() => {\n\t\t\tthis.setState({ loading: false })\n\t\t});\n\n\t\tthis.props.setPageTitle(this.props.translate('messages'));\n\n\t\tlet headerButtons = [];\n\n\t\tif (this.state.user.isMentor() || this.state.user.isTeacher() || this.state.user.isStudent()) {\n\t\t\theaderButtons.push({\n\t\t\t\tvalue: this.props.translate('Write new'),\n\t\t\t\tonClick: this.toggleModal,\n\t\t\t\ttype: 'button',\n\t\t\t\ticon: 'plus',\n\t\t\t});\n\t\t}\n\n\t\tif (this.state.user.isMentor() || this.state.user.isTeacher()) {\n\t\t\tawait this.props.getUserNotificationSettings();\n\n\t\t\tif (this.props.userNotificationSettings != null && this.props.userNotificationSettings.length > 0) {\n\t\t\t\theaderButtons.push({\n\t\t\t\t\tvalue: this.props.translate('Options'),\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tonClick: this.toggleOptionModal,\n\t\t\t\t\ticon: 'cog_bw',\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.mySections == null){\n\t\t\tawait this.props.getMySections();\n\t\t}\n\n\t\tthis.props.setPageActions(headerButtons);\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tthis.props.clearSearch();\n\t}\n\n\ttoggleOptionModal = () => {\n\t\tthis.setState({ optionsModalVisible: !this.state.optionsModalVisible });\n\t}\n\n\n\tcloseOptionsModal = () => {\n\t\tthis.setState({ optionsModalVisible: false });\n\t}\n\n\t/* Events */\n\ttoggleModal = () => {\n\t\tthis.setState({ modal: !this.state.modal });\n\t}\n\n\tonSelectRecipients = (values) => {\n\t\treturn new Promise(() => {\n\t\t\t// Create conversation API request hereee\n\t\t\tlet conversation = {\n\t\t\t\ttitle: '',\n\t\t\t\tstatus: 'ACTIVE',\n\t\t\t\tmemberships: values.memberships,\n\t\t\t\tmessages: [],\n\t\t\t\trelationships: values.relationships,\n\t\t\t\tid: 'new',\n\t\t\t};\n\n\t\t\tthis.props.stageConversation(conversation)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setState({ modal: false });\n\t\t\t\t\tthis.props.history.push(`/conversations/new`);\n\t\t\t\t});\n\t\t});\n\t}\n\n\tonSearch = (query) => {\n\t\tif (query.query.length == 0) {\n\t\t\tthis.props.clearSearch();\n\t\t\tthis.setState({ searchView: false });\n\t\t\tthis.props.setPageTitle(this.props.translate('conversations'));\n\t\t\treturn;\n\t\t}\n\n\t\tif (query.query.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState({ searching: true, searchView: true });\n\t\tthis.props.searchConversation(query.query).then(() => {\n\t\t\tthis.props.setPageTitle(this.props.translate('search-result'));\n\t\t\tthis.setState({ searching: false });\n\t\t});\n\t}\n\n\tarchiveConversation = (event, conversation) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif (conversation == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tswal.fire({\n\t\t\ttitle: this.props.translate('are-you-sure'),\n\t\t\ttext: this.props.translate('conversation-archive-message'),\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: this.props.translate('Cancel'),\n\t\t\tconfirmButtonText: this.props.translate('Remove'),\n\t\t}).then(response => {\n\t\t\tif (response.value != null) {\n\t\t\t\tthis.props.archiveConversation(conversation);\n\t\t\t\tif (this.props.results != null && this.props.results.length > 0){\n\t\t\t\t\tthis.props.updateSearchedConversations(this.props.results)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\n\t/* Render methods */\n\trenderConversation = (conversation, index) => {\n\t\tconst participants = getConversationParticipants(conversation, this.props.user);\n\t\tconst user = new User(this.props.user);\n\t\tlet message = null;\n\t\tlet timeOfLastMessage = null;\n\t\tif (conversation.messages.length > 0 && conversation.messages[conversation.messages.length - 1] != null) {\n\t\t\tlet lastMessage = conversation.messages[conversation.messages.length - 1];\n\t\t\ttimeOfLastMessage = lastMessage.created;\n\t\t\tif (lastMessage.flagID != null) {\n\t\t\t\tmessage = \n\t\t\t\t\t{this.props.translate('Message is reported as inappropriate.')}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tmessage = lastMessage.text.replace(/(<([^>]+)>)/ig, '');\n\t\t\t\tif (message.length > 155) {\n\t\t\t\t\tmessage = message.substring(0, 155) + '...';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet canEdit = false;\n\n\t\tif (this.props.mySections != null && this.props.mySections.length > 0 && !user.isStudent()){\n\t\t\tconst foundSection = participants.find(p=> p.membershipType == 'SECTION_OWNERS');\n\t\t\tif (foundSection != null)\n\t\t\t{\n\t\t\t\tconst isUserOwnerOfSection = this.props.mySections.filter(q => q.Id == foundSection.Id).length > 0;\n\t\t\t\tcanEdit = isUserOwnerOfSection;\n\t\t\t}\n\t\t\telse {\t\n\t\t\t\tconst findUserAsParticipant = conversation.memberships.find(m => m.membershipID == user.getUserId());\n\t\t\t\tif (findUserAsParticipant != null){\n\t\t\t\t\tconst userPermission = findUserAsParticipant.permission.toUpperCase() == 'O';\n\t\t\t\t\tcanEdit = userPermission;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn \n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{participants.map((participant, index) => {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (participant != null) {\n\t\t\t\t\t\t\tif (participant.membershipType == 'SECTION_OWNERS') {\n\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (participant.membershipType == 'GUARDIAN') {\n\t\t\t\t\t\t\t\tif (participant?.userId === undefined) {\n\t\t\t\t\t\t\t\t\tparticipant.lastName = ' (' + this.props.translate('inactive') + ' ' + this.props.translate('guardian') + ')';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tparticipant.lastName = (participant.lastName != null ? participant.lastName : '') + ' (' + this.props.translate('Guardian') + ')';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn \n\n\t\t\t\t\t\t}\n\t\t\t\t\t})}\n\t\t\t\t
\n\n\t\t\t\t{conversation.status.toUpperCase() == 'ACTIVE' && !user.isStudent() && canEdit ?\n\t\t\t\t\t
\n\t\t\t\t\t\t this.archiveConversation(e, conversation)}>\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: null}\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{conversation.unreadMessages > 0 ?\n\t\t\t\t\t\t{conversation.unreadMessages}\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{message != null ?\n\t\t\t\t\t\tmessage\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t\t{timeOfLastMessage != null ?\n\t\t\t\t\t
{Moment.utc(timeOfLastMessage).local().format('yyyy-MM-DD HH:mm')}
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t\n\t}\n\n\tasync toggleOpen() {\n\t\tif (this.props.archived == null) {\n\t\t\tthis.setState({ loadingArchievedConversation: true });\n\t\t\tawait this.props.getArchivedConversations();\n\t\t\tthis.setState({ loadingArchievedConversation: false });\n\t\t}\n\t}\n\n\trender() {\n\t\tif (!this.props.services.conversations) {\n\t\t\treturn \n\t\t}\n\n\t\tlet notificationSettings = [];\n\n\t\tif (this.props.userNotificationSettings != null && this.props.userNotificationSettings.length > 0) {\n\t\t\t// Filter the notification settings for \"NOTIFICATION_GUARDIANS_MESSAGE\"\n\t\t\tnotificationSettings = this.props.userNotificationSettings.filter((setting) => {\n\t\t\t\treturn setting.settingName === \"NOTIFICATION_GUARDIANS_MESSAGE\";\n\t\t\t}).map((setting) => {\n\t\t\t\t// Set 'enabled' to true if setting.id == 0, because by default it will send notification.\n\t\t\t\tsetting.enabled = setting.id === 0 ? true : setting.enabled;\n\t\t\t\treturn setting;\n\t\t\t});\n\t\t}\n\n\t\tlet conversations = null;\n\t\tlet archived = null;\n\n\t\tif (this.props.conversations != null && this.props.conversations.length > 0) {\n\t\t\tconversations = this.props.conversations.filter(conversation =>\n\t\t\t\tconversation.status != 'ARCHIVED'\n\t\t\t)\n\n\t\t\tarchived = this.props.conversations.filter(conversation =>\n\t\t\t\tconversation.status == 'ARCHIVED'\n\t\t\t)\n\t\t}\n\n\t\tif (archived != null && this.props.archived && this.props.archived.length > 0){\n\t\t\tarchived = this.props.archived.concat(archived);\t\t\n\t\t\tarchived.sort((a, b) => {\n\t\t\t\tconst dateB = b.edited ? new Date(b.edited).getTime() : (b.created ? new Date(b.created).getTime() : 0);\n\t\t\t\tconst dateA = a.edited ? new Date(a.edited).getTime() : (a.created ? new Date(a.created).getTime() : 0);\n\t\t\t\treturn dateB - dateA;\n\t\t\t });\n\n\t\t} else {\n\t\t\tarchived = this.props.archived;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.state.loading ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\tthis.props.results != null && this.state.searchView ?\n\t\t\t\t\t\t\t\t\tthis.props.results.map((conversation, index) => {\n\t\t\t\t\t\t\t\t\t\treturn this.renderConversation(conversation, index);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tconversations != null && conversations.length > 0 ?\n\t\t\t\t\t\t\t\t\t\tconversations.map((conversation, index) => {\n\t\t\t\t\t\t\t\t\t\t\treturn this.renderConversation(conversation, index);\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t this.toggleOpen()} trigger={this.props.translate('Removed')}>\n\t\t\t\t\t\t\t\t\t{this.state.loadingArchievedConversation ? : null}\n\n\t\t\t\t\t\t\t\t\t{!this.state.loadingArchievedConversation && archived != null && archived.length > 0 ?
\n\t\t\t\t\t\t\t\t\t\t{archived.map((conversation, index) => {\n\t\t\t\t\t\t\t\t\t\t\treturn this.renderConversation(conversation, index);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t
: null}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t\tmySections: state.user.mySections,\n\t\tconversations: state.Conversation.conversations,\n\t\tarchived: state.Conversation.archived,\n\t\tresults: state.Conversation.searchResults,\n\t\tservices: state.Services.availableServices,\n\t\tuserNotificationSettings: state.user.userNotificationSettings\n\t}\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tgetConversations,\n\tstageConversation,\n\tsearchConversation,\n\tclearSearch,\n\tarchiveConversation,\n\tgetArchivedConversations,\n\tupdateSearchedConversations,\n\tsetPageTitle,\n\tsetPageActions,\n\tgetMySections,\n\tgetUserNotificationSettings\n})(ConversationsPage));","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport DateTime from '_class/DateTime';\n\n\nclass Date extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\tcapitalizeFirstLetter(string) {\n\t\treturn string.charAt(0).toUpperCase() + string.slice(1);\n\t}\n\n\tformatDate() {\n\t\tlet dateTime = new DateTime(this.props.children);\n\n\t\treturn this.capitalizeFirstLetter(dateTime.getLongDate());\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\n\t};\n}\n\nexport default connect(mapStateToProps)(Date);\n","import { deleteFlaggedMessage, getFlaggedMessages, updateFlaggedMessage } from 'actions/conversation_admin';\nimport Date from 'components/Presentation/Date/Date';\nimport Moment from 'moment';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Spinner } from 'UI';\nimport { Button } from '@haldor/ui';\nimport Block, { BlockWrapper } from 'UI/Elements/Block';\nimport { setPageTitle } from 'actions/header';\n\nclass FlaggedConversations extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tloading: true\n\t\t};\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tthis.props.setPageTitle(this.props.translate('nav_flagged-messages'));\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getData();\n\t}\n\n\tgetData() {\n\t\tthis.setState({ loading: true });\n\t\tthis.props.getFlaggedMessages().then(() => {\n\t\t\tthis.setState({ loading: false });\n\t\t})\n\t}\n\n\tsoftDeleteMessage(flag) {\n\t\tthis.props.deleteFlaggedMessage(flag.id).then(() => {\n\t\t\tthis.getData();\n\t\t});\n\t}\n\n\tremoveFlag(flag) {\n\t\tflag.status = 'CLOSED'\n\t\tthis.props.updateFlaggedMessage(flag).then(() => {\n\t\t\tthis.getData();\n\t\t});\n\t}\n\n\theaderContent(flag) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.translate('reported-by')}: {flag.reporter.firstName + \" \" + flag.reporter.lastName}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{Moment(flag.created)}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n\n\tcontent(flag) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

{this.props.translate('reason')}

\n\t\t\t\t\t

{flag.reason}

\n\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('written-by')}: {flag.reporter.firstName + \" \" + flag.reporter.lastName}\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t

{this.props.translate('message')}

\n\n\t\t\t\t\t

{flag.message.text}

\n\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('written-by')}: {flag.sender.firstName + \" \" + flag.sender.lastName}\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n\n\tfooterContent(flag) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t
\n\t\t)\n\t}\n\n\trender() {\n\t\tif (this.state.loading) {\n\t\t\treturn \n\t\t}\n\n\t\tlet flagged = [];\n\n\t\tif (this.props.flagged != null && this.props.flagged.length > 0) {\n\t\t\tflagged = [...this.props.flagged];\n\t\t\tflagged.sort((a, b) => {\n\t\t\t\treturn a.id < b.id ? 1 : -1;\n\t\t\t});\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{flagged.map((flag) => {\n\t\t\t\t\t\treturn (\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\n\n\t\t\t\t{this.props.flagged.length == 0 ?\n\t\t\t\t\t
{this.props.translate('no-flagged-messages-found')}
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tflagged: state.ConversationAdmin.flagged,\n\t}\n}\n\nexport default connect(mapStateToProps, {\n\tgetFlaggedMessages,\n\tupdateFlaggedMessage,\n\tdeleteFlaggedMessage,\n\tsetPageTitle,\n})(FlaggedConversations);\n\n","import React, { Component } from 'react';\nimport Card, { CardFooter, CardTitle } from '../../Cards/Card';\n\nexport default class Course extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tcolor: this.props.course.hasOwnProperty('colorCode') ? this.props.course.colorCode : '',\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t{this.props.course.title}\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n","export const ASSESSMENT_MATRIX = 'ASSESSMENT_MATRIX';\nexport const DESCRIPTION_MATRIX = 'DESCRIPTION_MATRIX';","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Close, Minus } from 'UI/Icons';\nimport { FlexibleTextArea } from 'UI/Inputs';\n\nclass CustomCoreContent extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet init = {\n\t\t\tcoreContents: [],\n\t\t\tcontentRowCount: 0,\n\t\t\taspectCount: 0,\n\t\t\taspectRowCount: 0,\n\t\t};\n\n\t\tif (props.coreContents != null) {\n\t\t\tinit.coreContents = props.coreContents;\n\t\t\tinit.contentRowCount = props.coreContents.length;\n\t\t\tprops.coreContents.forEach(coreContent => {\n\t\t\t\tcoreContent.key = coreContent.id;\n\t\t\t\tif (coreContent.aspects != null && coreContent.aspects.length > 0) {\n\t\t\t\t\tinit.aspectCount += coreContent.aspects.length;\n\n\t\t\t\t\tcoreContent.aspects.map(aspect => {\n\t\t\t\t\t\taspect.key = aspect.id;\n\n\t\t\t\t\t\tif (aspect.aspectRows != null && aspect.aspectRows.length > 0) {\n\t\t\t\t\t\t\tinit.aspectRowCount = init.aspectRowCount + aspect.aspectRows.length;\n\n\t\t\t\t\t\t\taspect.aspectRows.map(aspectRow => {\n\t\t\t\t\t\t\t\taspectRow.key = aspectRow.id;\n\n\t\t\t\t\t\t\t\treturn aspectRow;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn aspect;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.state = init;\n\t}\n\n\tonChange = () => {\n\t\tif (this.props.onChange) {\n\t\t\tconst coreContents = this.state.coreContents;\n\n\t\t\t/*\n\t\t\tlet data = {\n\t\t\t\ttitle: coreContents.title,\n\t\t\t\tid: coreContents.id,\n\t\t\t\taspects: [],\n\t\t\t};\n\n\t\t\tcoreContents.aspects.map(aspect => {\n\t\t\t\tif (aspect.title != '') {\n\t\t\t\t\tlet newAspect = {\n\t\t\t\t\t\ttitle: aspect.title,\n\t\t\t\t\t\taspectRows: [],\n\t\t\t\t\t\tid: aspect.id,\n\t\t\t\t\t};\n\n\t\t\t\t\taspect.aspectRows.map(aspectRow => {\n\t\t\t\t\t\tif (aspectRow.text != '') {\n\t\t\t\t\t\t\tnewAspect.aspectRows.push(aspectRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tdata.aspects.push(newAspect);\n\n\t\t\t\t\treturn aspect;\n\t\t\t\t}\n\t\t\t});*/\n\t\t\tlet dataArray = [];\n\t\t\tcoreContents.map(coreContent => {\n\t\t\t\tlet data = {\n\t\t\t\t\ttitle: coreContent.title,\n\t\t\t\t\tid: coreContent.id,\n\t\t\t\t\taspects: [],\n\t\t\t\t};\n\t\t\t\tcoreContent.aspects.map(aspect => {\n\t\t\t\t\tif (aspect.title != '') {\n\t\t\t\t\t\tlet newAspect = {\n\t\t\t\t\t\t\ttitle: aspect.title,\n\t\t\t\t\t\t\taspectRows: [],\n\t\t\t\t\t\t\tid: aspect.id,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\taspect.aspectRows.map(aspectRow => {\n\t\t\t\t\t\t\tif (aspectRow.text != '') {\n\t\t\t\t\t\t\t\tnewAspect.aspectRows.push(aspectRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tdata.aspects.push(newAspect);\n\n\t\t\t\t\t\treturn aspect;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdataArray.push(data);\n\t\t\t});\n\n\t\t\tthis.props.onChange(dataArray);\n\t\t}\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tif (this.state.coreContents.length < 1) {\n\t\t\tthis.addCoreContent();\n\t\t}\n\t}\n\n\t/* Inset area */\n\taddCoreContent = (event) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tlet { coreContents, contentRowCount } = this.state;\n\n\t\tlet newObject = {\n\t\t\tkey: 'core-content-' + this.state.coreContents.length + ':' + contentRowCount,\n\t\t\ttitle: '',\n\t\t\taspects: [],\n\t\t};\n\n\t\tcoreContents.push(newObject);\n\t\tcontentRowCount++;\n\t\tthis.setState({ coreContents, contentRowCount }, () => {\n\t\t\tthis.addAspect(newObject);\n\t\t});\n\t}\n\n\taddAspect = (contentRow) => {\n\t\tlet { coreContents, aspectCount } = this.state;\n\n\t\tlet stateObject = coreContents.find(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tlet newAspect = {\n\t\t\tkey: contentRow.key + '-aspect-' + stateObject.aspects.length + ':' + aspectCount,\n\t\t\ttitle: '',\n\t\t\taspectRows: [],\n\t\t};\n\n\t\tstateObject.aspects.push(newAspect);\n\t\taspectCount++;\n\t\tthis.setState({ coreContents, aspectCount }, () => {\n\t\t\tthis.addAspectRow(newAspect, contentRow);\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\taddAspectRow = (aspect, contentRow) => {\n\t\tlet { coreContents, aspectRowCount } = this.state;\n\n\t\tlet stateObject = coreContents.find(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tlet aspectObject = stateObject.aspects.find(as => {\n\t\t\treturn as.key == aspect.key;\n\t\t});\n\n\t\tlet newAspectRow = {\n\t\t\tkey: aspect.key + '-aspectRow-' + aspect.aspectRows.length + ':' + aspectRowCount,\n\t\t\ttext: '',\n\t\t};\n\n\t\taspectObject.aspectRows.push(newAspectRow);\n\t\taspectRowCount++;\n\t\tthis.setState({ coreContents, aspectRowCount }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\t/* Text change area */\n\tonAspectTitleChange = (text, aspect, contentRow) => {\n\t\tlet { coreContents } = this.state;\n\n\t\tlet stateObject = coreContents.find(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tlet aspectObject = stateObject.aspects.find(as => {\n\t\t\treturn as.key == aspect.key;\n\t\t});\n\n\t\taspectObject.title = text;\n\t\tthis.setState({ coreContents }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonAspectRowTextChange = (text, aspectRow, aspect, contentRow) => {\n\t\tlet { coreContents } = this.state;\n\n\t\tlet stateObject = coreContents.find(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tlet aspectObject = stateObject.aspects.find(as => {\n\t\t\treturn as.key == aspect.key;\n\t\t});\n\n\t\tlet aspectRowObject = aspectObject.aspectRows.find(ar => {\n\t\t\treturn ar.key == aspectRow.key;\n\t\t});\n\n\t\taspectRowObject.text = text;\n\t\tthis.setState({ coreContents }, () => {\n\t\t\tlet aspectRowIndex = aspectObject.aspectRows.findIndex(ar => {\n\t\t\t\treturn ar.key == aspectRow.key;\n\t\t\t});\n\n\t\t\tif (aspectRowIndex + 1 == aspectObject.aspectRows.length) {\n\t\t\t\tif (aspectRowObject.text != '') {\n\t\t\t\t\tthis.addAspectRow(aspect, contentRow);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\t/* Delete area */\n\tonContentRowDelete = (contentRow) => {\n\t\tlet { coreContents } = this.state;\n\n\t\tlet contentRowIndex = coreContents.findIndex(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tcoreContents.splice(contentRowIndex, 1);\n\t\tthis.setState({ coreContents }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonAspectDelete = (aspect, contentRow) => {\n\t\tlet { coreContents } = this.state;\n\n\t\tlet stateObject = coreContents.find(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tlet aspectIndex = stateObject.aspects.findIndex(as => {\n\t\t\treturn as.key == aspect.key;\n\t\t});\n\n\t\tstateObject.aspects.splice(aspectIndex, 1);\n\t\tthis.setState({ coreContents }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonAspectRowDelete = (aspectRow, aspect, contentRow) => {\n\t\tlet { coreContents } = this.state;\n\n\t\tlet stateObject = coreContents.find(cc => {\n\t\t\treturn cc.key == contentRow.key;\n\t\t});\n\n\t\tlet aspectObject = stateObject.aspects.find(as => {\n\t\t\treturn as.key == aspect.key;\n\t\t});\n\n\t\tlet aspectRowIndex = aspectObject.aspectRows.findIndex(ar => {\n\t\t\treturn ar.key == aspectRow.key;\n\t\t});\n\n\t\taspectObject.aspectRows.splice(aspectRowIndex, 1);\n\t\tthis.setState({ coreContents }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\t/*\n\t\t
this.onContentRowDelete( contentRow ) } className=\"remove-button-container\">\n\t\t\t
\n\t\t\tTa bort sektion\n\t\t
\n\t*/\n\n\trender() {\n\t\tconst { coreContents } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{coreContents.map(contentRow => {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{contentRow.aspects.map((aspect, index) => {\n\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('core-section')} {index + 1}\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
this.onAspectDelete(aspect, contentRow)} className=\"remove-button-container\">\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('remove-core-section')}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tconst { value } = event.target;\n\t\t\t\t\t\t\t\t\t\t\tthis.onAspectTitleChange(value, aspect, contentRow)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('content')}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t{aspect.aspectRows.map(aspectRow => {\n\t\t\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst { value } = event.target;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.onAspectRowTextChange(value, aspectRow, aspect, contentRow);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.onAspectRowDelete(aspectRow, aspect, contentRow);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"tooltip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-tooltip={this.props.translate('remove-content')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"aspects-remove\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tthis.addAspectRow(aspect, contentRow);\n\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t+ {this.props.translate('add-content')}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.addAspect(contentRow);\n\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t+ {this.props.translate('add-core-section')}\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})}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(CustomCoreContent);\n","export const newGuid = () => `${Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1)}-${Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1)}`","import React, { Component } from \"react\";\nimport { translate } from '@haldor/ui';\nimport { connect } from \"react-redux\";\nimport { Close } from \"UI/Icons\";\nimport { FlexibleTextArea } from \"UI/Inputs\";\n\nclass MatrixGradeStep extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttext: props.blockStep.text\n\t\t};\n\t}\n\tonStepChange(text) {\n\t\tthis.setState({ text }, () => {\n\t\t\tthis.props.onStepUpdate({\n\t\t\t\tid: this.props.blockStep.id,\n\t\t\t\tkeyId: this.props.blockStep.keyId,\n\t\t\t\ttext: this.state.text\n\t\t\t});\n\t\t});\n\t}\n\tonStepDelete() {\n\t\tthis.props.onStepDelete({ id: this.props.blockStep.id });\n\t}\n\trender() {\n\t\tif (this.props.blockStep.gradeF == null) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\tthis.onStepChange(event.target.value)\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\n\t\t\t\t\t this.onStepDelete()}\n\t\t\t\t\t\tclassName=\"tooltip\"\n\t\t\t\t\t\tdata-tooltip={this.props.translate(\"delete-step\")}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\ttop: \"17px\",\n\t\t\t\t\t\t\tright: \"15px\",\n\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\theight: \"1em\"\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t
\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
\n\t\t\t);\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations)\n\t};\n}\n\nexport default connect(mapStateToProps, {})(MatrixGradeStep);\n","import { newGuid } from \"helpers/guid\";\nimport React, { Component } from \"react\";\nimport { translate } from '@haldor/ui';\nimport { connect } from \"react-redux\";\nimport { Minus } from \"UI/Icons\";\nimport { FlexibleTextArea } from \"UI/Inputs\";\nimport MatrixGradeStep from \"./MatrixGradeStep\";\n\nclass MatrixBlock extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tid: props.block.id != null ? props.block.id : newGuid(),\n\t\t\ttext: props.block.text != null ? props.block.text : \"\",\n\t\t\tcells: props.block.cells != null ? props.block.cells : []\n\t\t};\n\t}\n\tonStepAdd = event => {\n\t\tevent.preventDefault();\n\t\tlet cells = this.state.cells;\n\t\tvar id = newGuid();\n\t\tvar keyId = newGuid();\n\t\tcells.push({ id, keyId, text: \"\" });\n\t\tthis.setState({ cells }, () => {\n\t\t\tthis.sendToParagraph();\n\t\t});\n\t};\n\tonStepUpdate = blockStep => {\n\t\tlet cells = this.state.cells;\n\t\tlet step = cells.find(t => t.id == blockStep.id);\n\t\tstep.text = blockStep.text;\n\t\tthis.setState({ cells }, () => {\n\t\t\tthis.sendToParagraph();\n\t\t});\n\t};\n\tonStepDelete = blockStep => {\n\t\tlet cells = this.state.cells;\n\t\tcells = cells.filter(t => t.id != blockStep.id);\n\t\tthis.setState({ cells }, () => {\n\t\t\tthis.sendToParagraph();\n\t\t});\n\t};\n\tonChangeBlockTitle = text => {\n\t\tthis.setState({ text }, () => {\n\t\t\tthis.sendToParagraph();\n\t\t});\n\t};\n\tonBlockDelete = () => {\n\t\tthis.props.onBlockDelete({ id: this.props.block.id });\n\t};\n\tsendToParagraph = () => {\n\t\tthis.props.onBlockUpdate({\n\t\t\tid: this.props.block.id,\n\t\t\ttext: this.state.text,\n\t\t\tcells: this.state.cells\n\t\t});\n\t};\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tthis.onChangeBlockTitle(event.target.value)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.translate(\"delete-block\")}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{this.state.cells.map(blockStep => {\n\t\t\t\t\t\t\tvar key = blockStep.keyId\n\t\t\t\t\t\t\t\t? blockStep.keyId\n\t\t\t\t\t\t\t\t: blockStep.id;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}, this)}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate(\"add-step\")}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations)\n\t};\n}\n\nexport default connect(mapStateToProps, {})(MatrixBlock);\n","import { newGuid } from \"helpers/guid\";\nimport React, { Component } from \"react\";\nimport { translate } from '@haldor/ui';\nimport { connect } from \"react-redux\";\nimport { Minus } from \"UI/Icons\";\nimport { FlexibleTextArea } from \"UI/Inputs\";\nimport MatrixBlock from \"./MatrixBlock\";\n\nclass MatrixParagraph extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tid: props.paragraph.id != null ? props.paragraph.id : newGuid(),\n\t\t\ttitle: props.paragraph.title != null ? props.paragraph.title : \"\",\n\t\t\tsubtitle:\n\t\t\t\tprops.paragraph.subtitle != null\n\t\t\t\t\t? props.paragraph.subtitle\n\t\t\t\t\t: \"\",\n\t\t\tparagraphNr: props.paragraph.paragraphNr,\n\t\t\trows: props.paragraph.rows != null ? props.paragraph.rows : [],\n\t\t};\n\t\tthis.disableNotAchieved = props.disableNotAchieved;\n\t\tthis.hasTitle =\n\t\t\tprops.paragraph.title != null && props.paragraph.title != \"\";\n\t\tthis.hasSubtitle =\n\t\t\tprops.paragraph.subtitle != null && props.paragraph.subtitle != \"\";\n\t}\n\tcomponentDidMount = () => {\n\t\tif (!this.disableNotAchieved) {\n\t\t\tlet rows = this.state.rows;\n\t\t\trows.forEach((row) => {\n\t\t\t\tconst searchNotAchieved = row.cells.find((co) => {\n\t\t\t\t\treturn co.gradeF == true;\n\t\t\t\t});\n\n\t\t\t\tif (searchNotAchieved == null) {\n\t\t\t\t\tvar id = newGuid();\n\t\t\t\t\tvar stepId = newGuid();\n\t\t\t\t\tvar gradeF = {\n\t\t\t\t\t\tid: stepId,\n\t\t\t\t\t\ttext: this.props.translate(\"not-achieved\"),\n\t\t\t\t\t\tgradeF: true,\n\t\t\t\t\t};\n\n\t\t\t\t\trow.cells.unshift(gradeF);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.setState(rows),\n\t\t\t\t() => {\n\t\t\t\t\tthis.sendToForm();\n\t\t\t\t};\n\t\t}\n\t};\n\tonBlockAdd = (event) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tthis.props.onParagraphBlockAdd({\n\t\t\tid: this.props.paragraph.id,\n\t\t\ttitle: this.state.title,\n\t\t\tsubtitle: this.state.subtitle,\n\t\t\tparagraphNr: this.state.paragraphNr,\n\t\t\trows: this.state.rows,\n\t\t});\n\t};\n\tonBlockUpdate = (block) => {\n\t\tlet rows = this.state.rows;\n\t\tlet matrixBlock = rows.find((t) => t.id == block.id);\n\t\tmatrixBlock.text = block.text;\n\t\tmatrixBlock.cells = block.cells;\n\t\tthis.setState({ rows }, () => {\n\t\t\tthis.sendToForm();\n\t\t});\n\t};\n\tonBlockDelete = (block) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tlet rows = this.state.rows;\n\t\trows = rows.filter((t) => t.id != block.id);\n\n\t\tlet isEmpty = true;\n\t\tlet rowIndex = 0;\n\t\trows.forEach((Row) => {\n\t\t\tisEmpty = false;\n\t\t\trowIndex = rowIndex + 1;\n\t\t\tRow.sentenceNr = rowIndex;\n\t\t\treturn Row;\n\t\t});\n\t\tthis.setState({ rows }, () => {\n\t\t\tthis.sendToForm();\n\t\t});\n\t};\n\tonParagraphTitleAdd = (event) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tthis.hasTitle = true;\n\t\tthis.setState({});\n\t};\n\tonParagraphSubTitleAdd = (event) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tthis.hasSubtitle = true;\n\t\tthis.setState({});\n\t};\n\tonParagraphTitleChange = (text) => {\n\t\tlet title = text;\n\t\tthis.setState({ title }, () => {\n\t\t\tthis.sendToForm();\n\t\t});\n\t};\n\tonParagraphSubTitleChange = (text) => {\n\t\tlet subtitle = text;\n\t\tthis.setState({ subtitle }, () => {\n\t\t\tthis.sendToForm();\n\t\t});\n\t};\n\tonParagraphDelete = (event) => {\n\t\tthis.props.onParagraphDelete({\n\t\t\tid: this.props.paragraph.id,\n\t\t\ttitle: this.state.title,\n\t\t\tsubtitle: this.state.subtitle,\n\t\t\tparagraphNr: this.state.paragraphNr,\n\t\t\trows: this.state.rows,\n\t\t});\n\t};\n\tsendToForm = () => {\n\t\tthis.props.onParagraphUpdate({\n\t\t\tid: this.props.paragraph.id,\n\t\t\ttitle: this.state.title,\n\t\t\tsubtitle: this.state.subtitle,\n\t\t\tparagraphNr: this.state.paragraphNr,\n\t\t\trows: this.state.rows,\n\t\t});\n\t};\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{this.props.translate(\"core-section\")}{\" \"}\n\t\t\t\t\t{this.props.paragraph.paragraphNr}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{this.props.translate(\"delete-section\")}\n\t\t\t\t\n\t\t\t\t{this.hasTitle ? (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tthis.onParagraphTitleChange(\n\t\t\t\t\t\t\t\t\t\tevent.target.value\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\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) : (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t this.onParagraphTitleAdd(e)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t+ Lägg till {this.props.translate(\"heading\")}\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{this.hasSubtitle ? (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tthis.onParagraphSubTitleChange(\n\t\t\t\t\t\t\t\t\t\tevent.target.value\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\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) : (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t this.onParagraphSubTitleAdd(e)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t+ Lägg till {this.props.translate(\"subtitle\")}\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{this.state.rows.map((block, i) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tBlock {i + 1}\n\t\t\t\t\t\t\t\n\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})}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t this.onBlockAdd(event)}\n\t\t\t\t\t>\n\t\t\t\t\t\t+ {this.props.translate(\"add-block\")}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps, {})(MatrixParagraph);\n","import { addMatrix } from \"actions/matrix\";\nimport { ASSESSMENT_MATRIX } from \"constants/matrixTypes\";\nimport { allEntriesEqual } from \"helpers/array\";\nimport { newGuid } from \"helpers/guid\";\nimport React, { Component } from \"react\";\nimport { translate } from '@haldor/ui';\nimport { connect } from \"react-redux\";\nimport { Checkbox } from '@haldor/ui';\nimport MatrixParagraph from \"./MatrixParagraph\";\nimport { FlexibleTextArea } from \"UI/Inputs\";\nimport swal from \"sweetalert2\";\n\n/* Component for creating Matrixes **/\n\nclass MatrixForm extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tif (props.matrix == null) {\n\t\t\tthis.state = {\n\t\t\t\tid: newGuid(),\n\t\t\t\ttitle: \"\",\n\t\t\t\ttype: props.type,\n\t\t\t\tdisableNotAchieved: false,\n\t\t\t\tstepSize: 0\n\t\t\t};\n\t\t} else {\n\t\t\tthis.state = {\n\t\t\t\tid: props.matrix.id,\n\t\t\t\ttitle: props.matrix.title,\n\t\t\t\ttype: props.type,\n\t\t\t\tdisableNotAchieved: props.matrix.disableNotAchieved,\n\t\t\t\t_ParagraphSet: props.matrix._ParagraphSet,\n\t\t\t\tstepSize: 0\n\t\t\t};\n\t\t}\n\t\tif (this.state._ParagraphSet == null) {\n\t\t\tthis.state._ParagraphSet = [\n\t\t\t\t{\n\t\t\t\t\tid: newGuid(),\n\t\t\t\t\ttitle: \"\",\n\t\t\t\t\tsubtitle: \"\",\n\t\t\t\t\tparagraphNr: 1,\n\t\t\t\t\trows: []\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\tthis.editing = props.editView;\n\t\tthis.disableNotAchievedToggle = false;\n\t}\n\n\tonLevelChange = event => {\n\t\tlet stepSize = parseInt(event.target.value, 10);\n\t\tlet _ParagraphSet = this.state._ParagraphSet;\n\t\tif (stepSize > 0) {\n\t\t\tif (stepSize > this.state.stepSize) {\n\t\t\t\t_ParagraphSet.map((paragraph, i) => {\n\t\t\t\t\tlet rows = paragraph.rows;\n\t\t\t\t\trows.map((row, i) => {\n\t\t\t\t\t\tlet neededSteps =\n\t\t\t\t\t\t\tparseInt(stepSize, 10) - (row.cells.length - 1);\n\t\t\t\t\t\tfor (let i = 0; neededSteps > i; i++) {\n\t\t\t\t\t\t\trow.cells.push({\n\t\t\t\t\t\t\t\tid: newGuid(),\n\t\t\t\t\t\t\t\tkeyId: newGuid(),\n\t\t\t\t\t\t\t\ttext: \"\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn row;\n\t\t\t\t\t});\n\t\t\t\t\tparagraph.rows = rows;\n\t\t\t\t\treturn paragraph;\n\t\t\t\t});\n\t\t\t\tthis.setState({ stepSize, _ParagraphSet }, () => {\n\t\t\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet filledCell = null;\n\t\t\t\t_ParagraphSet.map((paragraph, i) => {\n\t\t\t\t\tlet rows = paragraph.rows;\n\t\t\t\t\trows.map((block, i) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tblock.cells != null &&\n\t\t\t\t\t\t\tblock.cells.length > stepSize &&\n\t\t\t\t\t\t\tfilledCell == null\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlet desiredSteps = stepSize;\n\t\t\t\t\t\t\tif (block.cells[0].gradeF) {\n\t\t\t\t\t\t\t\tdesiredSteps++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\ti = desiredSteps;\n\t\t\t\t\t\t\t\ti < block.cells.length;\n\t\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tif (block.cells[i].text != \"\") {\n\t\t\t\t\t\t\t\t\tfilledCell = true;\n\t\t\t\t\t\t\t\t}\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});\n\t\t\t\t// Cells has been edited, show prompt\n\t\t\t\tif (filledCell != null) {\n\t\t\t\t\tswal.fire({\n\t\t\t\t\t\ttitle: this.props.translate(\"warning\"),\n\t\t\t\t\t\ttext: this.props.translate(\n\t\t\t\t\t\t\t\"your-step-will-be-overwritten\"\n\t\t\t\t\t\t),\n\t\t\t\t\t\tshowCancelButton: true,\n\t\t\t\t\t\tcancelButtonText: this.props.translate(\"abort\"),\n\t\t\t\t\t\tconfirmButtonText: this.props.translate(\"proceed\"),\n\t\t\t\t\t\tfocusConfirm: false\n\t\t\t\t\t}).then(result => {\n\t\t\t\t\t\tif (result.value != null) {\n\t\t\t\t\t\t\t_ParagraphSet.map((paragraph, i) => {\n\t\t\t\t\t\t\t\tlet rows = paragraph.rows;\n\t\t\t\t\t\t\t\trows.map((block, i) => {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tblock.cells != null &&\n\t\t\t\t\t\t\t\t\t\tblock.cells.length > stepSize\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tlet desiredSteps = stepSize;\n\t\t\t\t\t\t\t\t\t\tif (block.cells[0].gradeF) {\n\t\t\t\t\t\t\t\t\t\t\tdesiredSteps++;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (block.cells.length < desiredSteps) {\n\t\t\t\t\t\t\t\t\t\t\tblock.cellscells.push({\n\t\t\t\t\t\t\t\t\t\t\t\tid: newGuid(),\n\t\t\t\t\t\t\t\t\t\t\t\tkeyId: newGuid(),\n\t\t\t\t\t\t\t\t\t\t\t\ttext: \"\"\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tblock.cells.length = desiredSteps;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis.setState({ stepSize, _ParagraphSet }, () => {\n\t\t\t\t\t\t\t\tthis.props.onMatrixFormUpdate(this.state);\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} else {\n\t\t\t\t\t_ParagraphSet.map((paragraph, i) => {\n\t\t\t\t\t\tlet rows = paragraph.rows;\n\t\t\t\t\t\trows.map((block, i) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tblock.cells != null &&\n\t\t\t\t\t\t\t\tblock.cells.length > stepSize\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tlet desiredSteps = stepSize;\n\t\t\t\t\t\t\t\tif (block.cells[0].gradeF) {\n\t\t\t\t\t\t\t\t\tdesiredSteps++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (block.cells.length < desiredSteps) {\n\t\t\t\t\t\t\t\t\tblock.cellscells.push({\n\t\t\t\t\t\t\t\t\t\tid: newGuid(),\n\t\t\t\t\t\t\t\t\t\tkeyId: newGuid(),\n\t\t\t\t\t\t\t\t\t\ttext: \"\"\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tblock.cells.length = desiredSteps;\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\tthis.setState({ stepSize, _ParagraphSet }, () => {\n\t\t\t\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tonMatrixTitleChange = (text) => {\n\t\tlet title = text;\n\t\tthis.setState({ title }, () => {\n\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t});\n\t};\n\n\ttoggleDisableNotAchieved = checked => {\n\t\tlet disableNotAchieved = this.state.disableNotAchieved;\n\t\tdisableNotAchieved = !checked;\n\t\tlet _ParagraphSet = this.state._ParagraphSet;\n\t\t_ParagraphSet.map((paragraph, i) => {\n\t\t\tlet rows = paragraph.rows;\n\t\t\tif (!checked) {\n\t\t\t\tif (rows.length > 0) {\n\t\t\t\t\trows.map(row => {\n\t\t\t\t\t\tlet fIndex = row.cells.findIndex(function (cell) {\n\t\t\t\t\t\t\treturn cell.gradeF == true;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (fIndex > -1) {\n\t\t\t\t\t\t\trow.cells.splice(fIndex, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn row;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (rows.length > 0) {\n\t\t\t\t\tvar gradeF = {\n\t\t\t\t\t\tid: newGuid(),\n\t\t\t\t\t\ttext: this.props.translate(\"not-achieved\"),\n\t\t\t\t\t\tgradeF: true\n\t\t\t\t\t};\n\n\t\t\t\t\trows.map(row => {\n\t\t\t\t\t\trow.cells.unshift(gradeF);\n\n\t\t\t\t\t\treturn row;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t_ParagraphSet[i].rows = rows;\n\t\t});\n\n\t\tthis.setState({ disableNotAchieved, _ParagraphSet }, () => {\n\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t});\n\t};\n\n\tonParagraphAdd = event => {\n\t\tevent.preventDefault();\n\t\tlet _ParagraphSet = this.state._ParagraphSet;\n\t\tlet paragraphNr = _ParagraphSet.length;\n\t\tlet row = {\n\t\t\tid: newGuid(),\n\t\t\tsentenceNr: 1,\n\t\t\tcells: []\n\t\t};\n\t\tif (!this.state.disableNotAchieved) {\n\t\t\trow.cells.push({\n\t\t\t\tid: newGuid(),\n\t\t\t\ttext: this.props.translate(\"not-achieved\"),\n\t\t\t\tgradeF: true\n\t\t\t});\n\t\t}\n\t\tif (this.state.stepSize > 0) {\n\t\t\tfor (let i = 0; this.state.stepSize > i; i++) {\n\t\t\t\trow.cells.push({\n\t\t\t\t\tid: newGuid(),\n\t\t\t\t\tkeyId: newGuid(),\n\t\t\t\t\ttext: \"\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tparagraphNr++;\n\t\t_ParagraphSet.push({\n\t\t\tid: newGuid(),\n\t\t\ttitle: \"\",\n\t\t\tsubtitle: \"\",\n\t\t\tparagraphNr: paragraphNr,\n\t\t\trows: [row]\n\t\t});\n\t\tthis.setState({ _ParagraphSet }, () => {\n\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t});\n\t};\n\n\tonParagraphUpdate = Paragraph => {\n\t\tlet _ParagraphSet = this.state._ParagraphSet;\n\t\tlet paragraph = _ParagraphSet.find(p => p.id == Paragraph.id);\n\t\tparagraph.title = Paragraph.title;\n\t\tparagraph.subtitle = Paragraph.subtitle;\n\t\tparagraph.rows = Paragraph.rows;\n\t\tparagraph.paragraphNr = Paragraph.paragraphNr;\n\t\tthis.setState({ paragraph }, () => {\n\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t});\n\t};\n\n\tonParagraphDelete = Paragraph => {\n\t\tlet _ParagraphSet = this.state._ParagraphSet;\n\t\t_ParagraphSet = _ParagraphSet.filter(p => p.id != Paragraph.id);\n\t\tlet paragraphIndex = 0;\n\t\t_ParagraphSet.forEach(paragraph => {\n\t\t\tparagraphIndex = paragraphIndex + 1;\n\t\t\tparagraph.paragraphNr = paragraphIndex;\n\t\t\treturn paragraph;\n\t\t});\n\t\tthis.setState({ _ParagraphSet }, () => {\n\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t});\n\t};\n\n\tonParagraphBlockAdd = Paragraph => {\n\t\tlet _ParagraphSet = this.state._ParagraphSet;\n\t\tlet paragraph = _ParagraphSet.find(p => p.id == Paragraph.id);\n\t\tparagraph.title = Paragraph.title;\n\t\tparagraph.subtitle = Paragraph.subtitle;\n\t\tparagraph.paragraphNr = Paragraph.paragraphNr;\n\t\tlet rows = paragraph.rows;\n\t\tlet cells = [];\n\t\tlet id = newGuid();\n\t\tif (!this.state.disableNotAchieved) {\n\t\t\tcells.push({\n\t\t\t\tid: newGuid(),\n\t\t\t\ttext: this.props.translate(\"not-achieved\"),\n\t\t\t\tgradeF: true\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0; this.state.stepSize > i; i++) {\n\t\t\t// Add empty step to the cells array\n\t\t\tcells.push({\n\t\t\t\tid: newGuid(),\n\t\t\t\tkeyId: newGuid(),\n\t\t\t\ttext: \"\"\n\t\t\t});\n\t\t}\n\n\t\tlet sentenceNr = 0;\n\t\tif (rows.length > 0) {\n\t\t\tsentenceNr = Math.max.apply(\n\t\t\t\tMath,\n\t\t\t\trows.map(function (o) {\n\t\t\t\t\treturn parseInt(o.sentenceNr, 10);\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t\tsentenceNr++;\n\t\trows.push({ id, text: \"\", cells, sentenceNr });\n\t\tparagraph.rows = rows;\n\n\t\tthis.setState({ paragraph }, () => {\n\t\t\tthis.props.onMatrixFormUpdate(this.state);\n\t\t});\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{!this.editing || this.disableNotAchievedToggle ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{!this.disableNotAchievedToggle ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) :\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tthis.onMatrixTitleChange(\n\t\t\t\t\t\t\t\t\t\tevent.target.value\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
}\n\n\t\t\t\t
\n\n\t\t\t\t{this.state._ParagraphSet.map((paragraph, i) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t})}\n\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t+ {this.props.translate(\"add-core-section\")}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state, ownProps) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations)\n\t};\n}\n\nexport default connect(mapStateToProps, { addMatrix })(MatrixForm);\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Form, Field } from 'react-final-form';\nimport api from 'lib/api';\nimport { debounce } from 'helpers/content';\n\nimport { getTenantSubjects, searchSubjects, createSubject } from 'actions/subjects';\nimport { addCourse, updateCourse, getCourseByCourseCode } from 'actions/courses';\nimport { getSectionByGraphId } from 'actions/sections';\nimport { getSchoolTypes } from 'actions/tenants'\n\nimport { ASSESSMENT_MATRIX } from 'constants/matrixTypes';\nimport { getRootUrl } from 'helpers/url';\n\nimport CustomCoreContent from 'containers/CoreContent/Custom';\nimport MatrixForm from 'containers/Matrix/Form/MatrixForm';\n\nimport Select from 'react-select/async';\nimport { Expandable, Spinner } from 'UI';\nimport { Editor } from 'UI/Inputs';\nimport { Icon, Button } from '@haldor/ui';\n\nlet lastValue = '';\nconst asyncValidate = async (courseCode, initialValues, meta) => {\n\treturn new Promise((resolve) => {\n\t\tif (courseCode != null && courseCode != '' && lastValue != courseCode) {\n\t\t\tapi.get(`courses/coursecode/${courseCode}`).then((payload) => {\n\t\t\t\tlastValue = courseCode;\n\t\t\t\tif (payload.data != null) {\n\t\t\t\t\tif (initialValues == null || initialValues.id != payload.data.id) {\n\t\t\t\t\t\tresolve('a-course-with-that-coursecode-already-exists');\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresolve(undefined);\n\t\t\t});\n\t\t} else {\n\t\t\t// Dont change field validation if nothing has changed\n\t\t\tresolve(meta.error);\n\t\t}\n\t});\n};\n\n/**\n * @param {object} values\n * @param {function} translate\n * @returns {object} errors\n */\nconst validate = (values, translate) => {\n\tlet errors = {};\n\n\tif (values.title == null || values.title == '') {\n\t\terrors.title = 'field-needs-input';\n\t}\n\n\tif (values.courseCode == null || values.courseCode == '') {\n\t\terrors.courseCode = 'field-needs-input';\n\t}\n\n\tlet purposeText = '';\n\tif (typeof values.purpose == 'string') {\n\t\tpurposeText = values.purpose.replace(/<(?:.|\\n)*?>/gm, '');\n\t}\n\n\tif (purposeText == '' || purposeText == null) {\n\t\terrors.purpose = translate('field-needs-input');\n\t}\n\n\treturn errors;\n};\n\nclass CourseForm extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet coreContent = null;\n\t\tlet matrix = null;\n\t\tlet selectedSubject = null;\n\t\tlet subjectTitle = null;\n\t\tlet subjectId = null;\n\t\tif (props.initialValues != null && props.initialValues.details != null) {\n\t\t\tif (props.initialValues.details.length > 0) {\n\t\t\t\tcoreContent = props.initialValues.details[0].coreContent;\n\t\t\t}\n\t\t\tif (props.initialValues.details[0]?.matrix != null) {\n\t\t\t\tmatrix = props.initialValues.details[0].matrix;\n\t\t\t}\n\n\t\t\tselectedSubject = {\n\t\t\t\tvalue: props.initialValues.subjectId,\n\t\t\t\tlabel: props.initialValues.subjectTitle,\n\t\t\t};\n\n\t\t\tsubjectTitle = props.initialValues.subjectTitle;\n\t\t\tsubjectId = props.initialValues.subjectId;\n\t\t}\n\n\t\tthis.state = {\n\t\t\tcourseCode: '',\n\t\t\tmatrix: matrix,\n\t\t\tcoreContent: coreContent,\n\t\t\tselectedSubject: selectedSubject,\n\t\t\tsubjectTitle: subjectTitle,\n\t\t\tsubjectCode: '',\n\t\t\tsubjectId: subjectId,\n\t\t\tsubjectError: null,\n\t\t\topen: false,\n\t\t};\n\n\t\tthis.onMatrixFormUpdate.bind(this);\n\t}\n\n\tsubmit = (values) => {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tconst { coreContent } = this.state;\n\t\t\tconst { currentUser, initialValues, translate } = this.props;\n\n\t\t\tvalues.typeOfSchooling = currentUser.schools.getActiveSchool(currentUser.userId).type;\n\n\t\t\tvar detail = {};\n\t\t\tdetail.purpose = values.purpose;\n\t\t\tdetail.matrix = this.state.matrix;\n\t\t\tdetail.coreContent = coreContent;\n\n\t\t\tif (values.details != null && values.details.length > 0) {\n\t\t\t\tdetail.id = values.details[0].id;\n\t\t\t}\n\n\t\t\tif (detail.matrix != null && detail.matrix._ParagraphSet != null) {\n\t\t\t\tdetail.matrix._ParagraphSet.forEach((paragraph) => {\n\t\t\t\t\tparagraph.rows.forEach((row) => {\n\t\t\t\t\t\tif (row.id != null && row.id.length != 36) {\n\t\t\t\t\t\t\trow.id = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\trow.cells = row.cells.filter((step) => {\n\t\t\t\t\t\t\treturn step.gradeF == null;\n\t\t\t\t\t\t});\n\t\t\t\t\t\trow.cells.forEach((cell) => {\n\t\t\t\t\t\t\tif (cell.id != null && cell.id.length != 36) {\n\t\t\t\t\t\t\t\tcell.id = null;\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\tif (paragraph.id != null && paragraph.id.length != 36) {\n\t\t\t\t\t\tparagraph.id = null;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tdetail.matrix.paragraphSet = JSON.stringify(detail.matrix._ParagraphSet);\n\n\t\t\t\tvar matrix = {\n\t\t\t\t\tTitle: detail.matrix.title,\n\t\t\t\t\tDisableNotAchieved: detail.matrix.disableNotAchieved,\n\t\t\t\t\tType: detail.matrix.type,\n\t\t\t\t\tParagraphSet: detail.matrix.paragraphSet,\n\t\t\t\t};\n\n\t\t\t\tif (values.details != null && values.details.length > 0) {\n\t\t\t\t\tdetail.matrixId = values.details[0].matrixID;\n\t\t\t\t\tmatrix.id = values.details[0].matrixID;\n\t\t\t\t}\n\n\t\t\t\tif (detail.matrixId == null) {\n\t\t\t\t\tdetail.matrixId = 0;\n\t\t\t\t}\n\n\t\t\t\tif (matrix.id == null) {\n\t\t\t\t\tmatrix.id = 0;\n\t\t\t\t}\n\n\t\t\t\tdetail.matrix = matrix;\n\t\t\t}\n\n\t\t\tvalues.details = [detail];\n\n\t\t\tlet gotError = false;\n\n\t\t\tif (this.state.subjectId == 'new') {\n\t\t\t\t// Create new subject\n\t\t\t\tawait this.props\n\t\t\t\t\t.createSubject({\n\t\t\t\t\t\ttitle: this.state.subjectTitle,\n\t\t\t\t\t\tsubjectCode: this.state.subjectCode,\n\t\t\t\t\t\ttypeOfSchooling: this.state.subjectSchoolType,\n\t\t\t\t\t\tshortSubjectCode: this.state.subjectCode,\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tgotError = true;\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tsubjectError: translate(\n\t\t\t\t\t\t\t\t'A subject with that subject code already exists on your tenant'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\tif (this.props.createdSubject != null) {\n\t\t\t\t\tvalues.subjectId = this.props.createdSubject.id;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvalues.subjectId = this.state.subjectId;\n\t\t\t}\n\n\t\t\tif (gotError) {\n\t\t\t\tresolve(0);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.props.editView == false) {\n\t\t\t\tthis.props.addCourse(values, (response) => {\n\n\t\t\t\t\t// If a group Id is sent to this component, add the curriculum to the group\n\t\t\t\t\tif (this.props.group != null) {\n\t\t\t\t\t\tlet group = this.props.group;\n\t\t\t\t\t\tgroup.courses.push({\n\t\t\t\t\t\t\tid: response.data\n\t\t\t\t\t\t})\n\t\t\t\t\t\t// Put is here since no action for this exists and I did not create one now either. Should be done!\n\t\t\t\t\t\tapi.put('sections', group).then(() => {\n\t\t\t\t\t\t\t// Get data again to get fresh data in store\n\t\t\t\t\t\t\tif (this.props.group.graphId != null) {\n\t\t\t\t\t\t\t\tthis.props.getSectionByGraphId(this.props.group.graphId, 'GRAPH_OBJECT;');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tresolve(response.data);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthis.props.history.push(`${getRootUrl()}Course/${response.data}`);\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvalues.id = initialValues.id;\n\t\t\t\tthis.props.updateCourse(values, (data) => {\n\t\t\t\t\t// Get data again to get fresh data in store\n\t\t\t\t\tif (this.props.group != null && this.props.group.graphId != null) {\n\t\t\t\t\t\tthis.props.getSectionByGraphId(this.props.group.graphId, 'GRAPH_OBJECT;');\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data);\n\t\t\t\t\tthis.props.onClose(true, true);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tonSubjectSearch = (title, callback) => {\n\t\tif (title != '') {\n\t\t\tvar searchValue = title.trim();\n\t\t\tsearchValue = searchValue.replace(/[^A-Za-z0-9åäöÅÄÖ ]/g, '');\n\t\t\tsearchValue = encodeURIComponent(searchValue);\n\n\t\t\tif (searchValue != null && searchValue != '') {\n\t\t\t\tif (searchValue.length < 3) {\n\t\t\t\t\tcallback([]);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.props.searchSubjects(searchValue).then(() => {\n\t\t\t\t\tlet options = [];\n\t\t\t\t\tif (this.props.subjectsSearchResults != null) {\n\t\t\t\t\t\tthis.props.subjectsSearchResults.forEach((subject) => {\n\t\t\t\t\t\t\toptions.push({\n\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\tsubject.title +\n\t\t\t\t\t\t\t\t\t` - ${subject.subjectCode} (${this.props.translate(\n\t\t\t\t\t\t\t\t\t\tsubject.typeOfSchooling\n\t\t\t\t\t\t\t\t\t)})`,\n\t\t\t\t\t\t\t\tvalue: subject.id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback(options);\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tcallback([]);\n\t\t\t}\n\t\t}\n\n\t\tcallback([]);\n\t};\n\n\tonSubjectChange = (option) => {\n\t\tif (option.value == 'new') {\n\t\t\tthis.setState({\n\t\t\t\tsubjectId: option.value,\n\t\t\t\tselectedSubject: option,\n\t\t\t\tsubjectTitle: '',\n\t\t\t\tsubjectCode: '',\n\t\t\t\tsubjectSchoolType: 'PRESCHOOL',\n\t\t\t\topen: true,\n\t\t\t});\n\t\t} else {\n\t\t\tlet subjects = [];\n\t\t\tif (this.props.subjectsSearchResults != null) {\n\t\t\t\tsubjects.push(...this.props.subjectsSearchResults);\n\t\t\t}\n\n\t\t\tif (this.props.tenantSubjects != null) {\n\t\t\t\tsubjects.push(...this.props.tenantSubjects);\n\t\t\t}\n\n\t\t\tlet subject = subjects.find((subject) => subject.id == option.value);\n\t\t\tif (subject != null) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tsubjectId: option.value,\n\t\t\t\t\tsubjectTitle:\n\t\t\t\t\t\tsubject.title +\n\t\t\t\t\t\t` - ${subject.subjectCode} (${this.props.translate(subject.typeOfSchooling)})`,\n\t\t\t\t\tsubjectCode: subject.subjectCode,\n\t\t\t\t\tsubjectSchoolType: subject.typeOfSchooling,\n\t\t\t\t\tselectedSubject: option,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tonMatrixFormUpdate = (form) => {\n\t\tlet matrix = Object.assign({}, form);\n\t\tthis.setState({ matrix });\n\t};\n\n\tonCoreContentChange = (content) => {\n\t\tthis.setState({ coreContent: content });\n\t};\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.initialValues !== null) {\n\t\t\tif (this.props.initialValues.details[0].matrix != null) {\n\t\t\t\tvar matrix = JSON.parse(JSON.stringify(this.props.initialValues.details[0].matrix));\n\t\t\t\tthis.setState({ matrix });\n\t\t\t}\n\t\t}\n\t\tthis.props.getSchoolTypes();\n\t\tthis.props.getTenantSubjects(this.props.tenant.tenantId);\n\t};\n\n\trenderCoreContent = () => {\n\t\tconst { coreContent } = this.state;\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n\trenderInput = ({\n\t\tinput,\n\t\tlabel,\n\t\ttype,\n\t\tplaceholder,\n\t\tmaxlength,\n\t\tmeta: { touched, error, warning, validating, pristine },\n\t}) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{pristine && validating ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t) : null}\n\n\t\t\t\t{touched &&\n\t\t\t\t\t((error && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate(error)}\n\t\t\t\t\t\t\n\t\t\t\t\t)) ||\n\t\t\t\t\t\t(warning && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate(warning)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)))}\n\t\t\t
\n\t\t);\n\t};\n\n\trender() {\n\t\tconst { initialValues, translate } = this.props;\n\t\tlet purpose = '';\n\n\t\tif (initialValues != null && initialValues.details.length > 0) {\n\t\t\tpurpose = initialValues != null ? initialValues.details[0].purpose : '';\n\t\t}\n\n\t\tlet subjectValid = this.state.selectedSubject != null;\n\t\tif (this.state.subjectId == 'new') {\n\t\t\tif (this.state.subjectCode == '' || this.state.subjectTitle == '') {\n\t\t\t\tsubjectValid = false;\n\t\t\t}\n\t\t}\n\n\t\tlet options = [];\n\t\tif (initialValues == null) {\n\t\t\toptions.push({\n\t\t\t\tlabel: this.props.translate('+ Create subject'),\n\t\t\t\tvalue: 'new',\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.tenantSubjects != null) {\n\t\t\tthis.props.tenantSubjects.forEach((subject) => {\n\t\t\t\toptions.push({\n\t\t\t\t\tlabel:\n\t\t\t\t\t\tsubject.title +\n\t\t\t\t\t\t` - ${subject.subjectCode} (${this.props.translate(subject.typeOfSchooling)})`,\n\t\t\t\t\tvalue: subject.id,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t true}\n\t\t\t\t\tonSubmit={this.submit}\n\t\t\t\t\tvalidate={(values) => validate(values, this.props.translate)}\n\t\t\t\t\trender={({ handleSubmit, submitting, valid }) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{submitting ? (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t asyncValidate(value, initialValues, meta)}\n\t\t\t\t\t\t\t\t\t\tmaxLength={50}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t this.onSubjectChange(value)}\n\t\t\t\t\t\t\t\t\t\tclassName='simple-select'\n\t\t\t\t\t\t\t\t\t\tdefaultOptions={options}\n\t\t\t\t\t\t\t\t\t\tloadOptions={debounce(this.onSubjectSearch, 500, false)}\n\t\t\t\t\t\t\t\t\t\tplaceholder={this.props.translate('Search for a subject')}\n\t\t\t\t\t\t\t\t\t\tignoreCase\n\t\t\t\t\t\t\t\t\t\tloadingPlaceholder={this.props.translate('Loading...')}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{initialValues == null ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t this.setState({ open })}\n\t\t\t\t\t\t\t\t\t\t\ttitle={this.props.translate('Subject description')}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState({ subjectTitle: e.target.value })\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={this.state.subjectTitle || ''}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={this.state.subjectId != 'new'}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsubjectSchoolType: e.target.value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={this.state.subjectId != 'new'}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.schoolTypes.sort((a, b) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate(a.typeId).localeCompare(translate(b.typeId))\n\t\t\t\t\t\t\t\t\t\t\t\t\t).map((type, index) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState({ subjectCode: e.target.value })\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={this.state.subjectCode}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={this.state.subjectId != 'new'}\n\t\t\t\t\t\t\t\t\t\t\t\tmaxLength={50}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.state.subjectError != null ? (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{this.state.subjectError}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{this.renderCoreContent()}\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.props.onClose(false, false);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={submitting}\n\t\t\t\t\t\t\t\t\t\t\ttype='secondary'\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Cancel')}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\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/>\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\tlet initialValues = null;\n\tif (state.Courses.course != null) {\n\t\tinitialValues = { ...state.Courses.course };\n\t\tinitialValues.purpose = state.Courses.course.details[0].purpose;\n\t}\n\n\treturn {\n\t\tinitialValues,\n\t\tcourseByCourseCode: state.Courses.courseByCourseCode,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tcurrentUser: state.user.currentUser,\n\t\ttenant: state.user.tenant,\n\t\tsubjectsSearchResults: state.Subjects.search,\n\t\ttenantSubjects: state.Subjects.tenant,\n\t\tcreatedSubject: state.Subjects.created,\n\t\tgroup: state.sections.graphSection,\n\t\tschoolTypes: state.Tenant.schoolTypes,\n\t};\n}\n\nexport default withRouter(\n\tconnect(mapStateToProps, {\n\t\tgetSectionByGraphId,\n\t\taddCourse,\n\t\tupdateCourse,\n\t\tgetCourseByCourseCode,\n\t\tgetTenantSubjects,\n\t\tsearchSubjects,\n\t\tcreateSubject,\n\t\tgetSchoolTypes,\n\t})(CourseForm)\n);\n","import { getCourses } from 'actions/courses';\nimport { getSections } from 'actions/sections';\nimport { CardsContainer } from 'components/Cards/Card';\nimport Course from 'components/Presentation/Cards/Course';\nimport CourseForm from 'containers/Forms/CourseForm';\nimport Modal from 'containers/Modals/Modal';\nimport React, { Component } from 'react';\nimport { getRootUrl } from 'helpers/url';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { setPageTitle, setPageActions } from 'actions/header';\nimport LoadingCards from 'components/Cards/LoadingCard';\nimport User from '_class/User';\n\nclass Courses extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tmodalIsOpen: false,\n\t\t\tisLoading: false,\n\t\t};\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (!(user.isCourseAdministrator() || user.isAdministrator())) {\n\t\t\tthis.props.history.push(getRootUrl());\n\t\t}\n\n\t\tlet actions = [];\n\n\t\tthis.props.setPageTitle(this.props.translate('nav_courses'));\n\n\t\tactions.push({\n\t\t\ttype: 'button',\n\t\t\tvalue: this.props.translate('Create'),\n\t\t\tonClick: this.openModal,\n\t\t\ticon: 'plus',\n\t\t});\n\n\t\tthis.props.setPageActions(actions);\n\t}\n\n\tcomponentDidMount = () => {\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (user.isCourseAdministrator() || user.isAdministrator()) {\n\t\t\tthis.setState({ isLoading: true })\n\t\t\tthis.props.getCourses(\"CUSTOM_COURSE\").then(() => {\n\t\t\t\tthis.setState({ isLoading: false })\n\t\t\t});\n\t\t}\n\t}\n\n\topenModal = () => {\n\t\tthis.setState({ modalIsOpen: true });\n\t}\n\n\tcloseModal = (reload, skipPrompt) => {\n\t\tif (skipPrompt) {\n\t\t\tthis.setState({ modalIsOpen: false });\n\t\t} else {\n\t\t\tthis.setState({ modalIsOpen: false });\n\t\t}\n\t}\n\n\trender() {\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{this.state.isLoading ?\n\t\t\t\t\t\n\t\t\t\t\t:\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.courses.map((course) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\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}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tcourses: state.Courses.courses,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tcurrentUser: state.user.currentUser,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tgetSections,\n\tgetCourses,\n\tsetPageTitle,\n\tsetPageActions,\n})(Courses));","import React from 'react';\nimport CoursesSection from 'containers/Overview/Sections/Courses';\n\nconst Courses = () => {\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n\n};\n\nexport default Courses;\n","import { getStandardCourses } from 'actions/courses';\nimport { getSections } from 'actions/sections';\nimport { CardsContainer } from 'components/Cards/Card';\nimport LoadingCards from 'components/Cards/LoadingCard';\nimport Course from 'components/Presentation/Cards/Course';\nimport SectionTitle from 'components/Presentation/SectionTitle';\nimport CourseForm from 'containers/Forms/CourseForm';\nimport Modal from 'containers/Modals/Modal';\nimport { isUserCurriculumAdmin } from 'helpers/user';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Link, Redirect } from 'react-router-dom';\nimport { setPageTitle, setPageActions } from 'actions/header';\n\n\nclass StandardCourses extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tmodalIsOpen: false,\n\t\t\tisLoading:false,\n\t\t};\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tthis.props.setPageTitle(this.props.translate('courses-header-overview'));\n\n\t\tif (isUserCurriculumAdmin(this.props.currentUser)) {\n\t\t\tlet actions = [];\n\t\t\tactions.push({\n\t\t\t\ttype: 'button',\n\t\t\t\tvalue: this.props.translate('Create'),\n\t\t\t\tbuttonType: 'primary',\n\t\t\t\tonClick: this.openModal,\n\t\t\t});\n\n\t\t\tthis.props.setPageActions(actions);\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (isUserCurriculumAdmin(this.props.currentUser)) {\n\t\t\tthis.setState({isLoading:true})\n\t\t\tthis.props.getStandardCourses(\"PREDEFINED_COURSE\").then(() => {\n\t\t\t\tthis.setState({isLoading:false})\n\t\t\t})\n\t\t}\n\t}\n\n\topenModal = () => {\n\t\tthis.setState({ modalIsOpen: true });\n\t}\n\n\tcloseModal = (reload, skipPrompt) => {\n\t\tif (skipPrompt) {\n\t\t\tthis.setState({ modalIsOpen: false });\n\t\t} else {\n\t\t\tthis.setState({ modalIsOpen: false });\n\t\t}\n\t}\n\n\trender() {\n\t\tif (!isUserCurriculumAdmin(this.props.currentUser)) {\n\t\t\treturn \n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('search-courses')}\n\t\t\t\t\t\n\t\t\t\t\n\n {this.state.isLoading ?\n\t\t\t \n\t\t\t :\n\t\t\t\t\n\t\t\t\t\t{this.props.courses.map((course) => {\n\t\t\t\t\t\treturn (\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\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tcourses: state.Courses.standardCourses,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tactiveSchool: state.user.activeSchool,\n\t\tcurrentUser: state.user.currentUser,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetSections,\n\tgetStandardCourses,\n\tsetPageTitle,\n\tsetPageActions,\n})(StandardCourses);\n","import StandardCoursesSection from 'containers/Overview/Sections/StandardCourses';\nimport React, { Component } from 'react';\n\nclass StandardCourses extends Component {\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nexport default StandardCourses;\n","import { FIELD_DESCRIPTION, FIELD_TEXT, FIELD_TEXTAREA, FIELD_TITLE } from 'constants/fields';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Icon, TooltipMenu } from '@haldor/ui';\nimport './Styles.scss';\n\nclass CreateFormTemplate extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet fields = [];\n\n\t\tif (props.fields != null && props.fields.length > 0) {\n\t\t\tfields = [...props.fields];\n\t\t}\n\n\t\tthis.state = {\n\t\t\tfields,\n\t\t};\n\t}\n\n\tgetHighestName = () => {\n\t\tif (this.state.fields.length > 0) {\n\t\t\tlet max = 0;\n\t\t\tthis.state.fields.forEach(function (field) {\n\t\t\t\tconst fieldIndex = parseInt(field.name.replace('field-', ''));\n\t\t\t\tif (fieldIndex > max) {\n\t\t\t\t\tmax = fieldIndex;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn max;\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t/* Events */\n\tonChange = () => {\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(this.state.fields);\n\t\t}\n\t}\n\n\tonValueChange = (value, index) => {\n\t\tlet fields = [...this.state.fields];\n\n\t\tlet field = { ...fields[index], value: value };\n\t\tfields[index] = field;\n\n\t\tfields.forEach((field, index) => {\n\t\t\tfield.sortOrder = index;\n\t\t});\n\n\t\tthis.setState({ fields }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonMoveUp = (index) => {\n\t\tlet { fields } = this.state;\n\n\t\tif (index > 0) {\n\t\t\tconst field = fields[index];\n\t\t\tfields.splice(index, 1);\n\t\t\tfields.splice(index - 1, 0, field);\n\t\t}\n\n\t\tfields.forEach((field, index) => {\n\t\t\tfield.sortOrder = index;\n\t\t});\n\n\t\tthis.setState({ fields }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonRemove = (index) => {\n\t\tlet { fields } = this.state;\n\t\tfields.splice(index, 1);\n\n\t\tfields.forEach((field, index) => {\n\t\t\tfield.sortOrder = index;\n\t\t});\n\n\t\tthis.setState({ fields }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonMoveDown = (index) => {\n\t\tlet { fields } = this.state;\n\n\t\tif (index < fields.length) {\n\t\t\tconst field = fields[index];\n\t\t\tfields.splice(index, 1);\n\t\t\tfields.splice(index + 1, 0, field);\n\t\t}\n\n\t\tfields.forEach((field, index) => {\n\t\t\tfield.sortOrder = index;\n\t\t});\n\n\t\tthis.setState({ fields }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\taddField = (type) => {\n\t\tlet { fields } = this.state;\n\n\t\tconst fieldIndex = this.getHighestName() + 1;\n\n\t\tswitch (type) {\n\t\t\tcase FIELD_TEXT:\n\t\t\t\tfields.push({\n\t\t\t\t\ttype: FIELD_TEXT,\n\t\t\t\t\tplaceholder: '',\n\t\t\t\t\tname: 'field-' + fieldIndex,\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\n\t\t\tcase FIELD_TEXTAREA:\n\t\t\t\tfields.push({\n\t\t\t\t\ttype: FIELD_TEXTAREA,\n\t\t\t\t\tplaceholder: '',\n\t\t\t\t\tname: 'field-' + fieldIndex,\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\n\t\t\tcase FIELD_TITLE:\n\t\t\t\tfields.push({\n\t\t\t\t\ttype: FIELD_TITLE,\n\t\t\t\t\tname: 'field-' + fieldIndex,\n\t\t\t\t\tvalue: '',\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\n\t\t\tcase FIELD_DESCRIPTION:\n\t\t\t\tfields.push({\n\t\t\t\t\ttype: FIELD_DESCRIPTION,\n\t\t\t\t\tname: 'field-' + fieldIndex,\n\t\t\t\t\tvalue: '',\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tfields.forEach((field, index) => {\n\t\t\tfield.sortOrder = index;\n\t\t});\n\n\t\tthis.setState({ fields }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\t/* Render methods */\n\tfieldControls = (field, index) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t this.onMoveUp(index)}>\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t this.onMoveDown(index)}>\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t this.onRemove(index)}>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t)\n\t}\n\n\trenderField = (field, index) => {\n\t\tif (field.type == FIELD_TITLE) {\n\t\t\treturn
\n\t\t\t\t
\n\t\t\t\t\t{this.props.translate('heading')}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.fieldControls(field, index)}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t this.onValueChange(e.target.value, index)}\n\t\t\t\t/>\n\t\t\t
\n\t\t}\n\n\t\tif (field.type == FIELD_DESCRIPTION) {\n\t\t\treturn
\n\t\t\t\t
\n\t\t\t\t\t{this.props.translate('description')}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.fieldControls(field, index)}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t this.onValueChange(e.target.value, index)}\n\t\t\t\t/>\n\t\t\t
\n\t\t}\n\n\t\treturn
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.fieldControls(field, index)}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t{field.type == FIELD_TEXTAREA ?\n\t\t\t\t\tthis.props.translate('fields_input_textarea')\n\t\t\t\t\t:\n\t\t\t\t\tthis.props.translate('fields_input_text')\n\t\t\t\t}\n\t\t\t
\n\t\t
\n\t}\n\n\trender() {\n\t\tconst trigger = (\n\t\t\t
+ {this.props.translate('add-content')}
\n\t\t);\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.state.fields.map(this.renderField)}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t this.addField(FIELD_TITLE)}>\n\t\t\t\t\t\t\t{this.props.translate('heading')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t this.addField(FIELD_DESCRIPTION)}>\n\t\t\t\t\t\t\t{this.props.translate('description')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t this.addField(FIELD_TEXT)}>\n\t\t\t\t\t\t\t{this.props.translate('fields_input_text')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t this.addField(FIELD_TEXTAREA)}>\n\t\t\t\t\t\t\t{this.props.translate('fields_input_textarea')}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(CreateFormTemplate);\n","import { createFormTemplate, updateFormTemplate } from 'actions/templates';\nimport CreateFormTemplate from 'containers/FormTemplate/Form/CreateFormTemplate';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Field, reduxForm } from 'redux-form';\nimport { Button } from '@haldor/ui';\n\nclass FormTemplate extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet fields = [];\n\n\t\t// Todo: Change so we can send an entire form object as prop and set fields from that\n\t\tif (props.fields != null && props.fields.length > 0) {\n\t\t\tfields = [...props.fields];\n\t\t}\n\n\t\tif (props.initialValues != null && props.initialValues.fields != null && props.initialValues.fields.length > 0) {\n\t\t\tfields = [...props.initialValues.fields];\n\t\t}\n\n\t\tthis.state = {\n\t\t\tfields,\n\t\t};\n\t}\n\n\t/* Helper methods */\n\trequired = (value) => {\n\t\tif (typeof (value) !== 'undefined' && value !== '') {\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string and not over 200 characters\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('field-needs-input');\n\t}\n\n\t/* Events */\n\tonCancel = (event) => {\n\t\t// cancel form\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onAbort != null) {\n\t\t\tthis.props.onAbort();\n\t\t}\n\t}\n\n\tonSubmit = (values) => {\n\t\treturn new Promise((resolve) => {\n\t\t\t// Todo: Add support for all other form attributes here\n\t\t\tvalues.fields = this.state.fields;\n\t\t\tvalues.status = 'PUBLISHED';\n\n\t\t\tif (this.props.initialValues != null) {\n\t\t\t\tthis.props.updateFormTemplate(values)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tresolve(1);\n\n\t\t\t\t\t\tif (this.props.onAbort != null) {\n\t\t\t\t\t\t\tthis.props.onAbort(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.props.createFormTemplate(values)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tresolve(1);\n\n\t\t\t\t\t\tif (this.props.onAbort != null) {\n\t\t\t\t\t\t\tthis.props.onAbort(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonFieldsChange = (fields) => {\n\t\tthis.setState({ fields: fields });\n\t}\n\n\t/* Render methods */\n\trenderInput = ({ input, label, type, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { submitting, handleSubmit, valid } = this.props;\n\t\tlet isEditing = false;\n\t\tlet disableSave = false;\n\n\t\tif (this.state.fields.length == 0) {\n\t\t\tdisableSave = true;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{submitting ?

: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{isEditing ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t
\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\n\t\t\t
\n\t\t)\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\t//initialValues: state.Templates.formTemplate,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tcreateFormTemplate,\n\tupdateFormTemplate,\n})(reduxForm({\n\tform: 'CreateFormTemplate',\n\tdestroyOnUnmount: true,\n})(FormTemplate));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getFormTemplates } from 'actions/templates';\nimport { translate } from '@haldor/ui';\n\nimport Modal from 'containers/Modals/Modal';\nimport FormTemplate from 'containers/Forms/FormTemplate';\n\nimport { Spinner } from 'UI';\nimport Card, { CardsContainer, CardTitle } from 'components/Cards/Card';\nimport { setPageTitle, setPageActions } from 'actions/header';\n\nclass AllForms extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tmodal: false,\n\t\t\tloading: true,\n\t\t};\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tlet actions = [];\n\n\t\tthis.props.setPageTitle(this.props.translate('form-templates'));\n\n\t\tactions.push({\n\t\t\ttype: 'button',\n\t\t\tvalue: this.props.translate('Create'),\n\t\t\tonClick: this.toggleModal,\n\t\t\ticon: 'plus',\n\t\t});\n\n\t\tthis.props.setPageActions(actions);\n\t}\n\n\tcomponentDidMount = async () => {\n\t\tawait this.props.getFormTemplates();\n\t\tthis.setState({ loading: false });\n\t}\n\n\ttoggleModal = (reload) => {\n\t\tthis.setState({ modal: !this.state.modal });\n\n\t\tif (reload) {\n\t\t\tthis.props.getFormTemplates();\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { translate } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t this.toggleModal(false)} title={translate('create-template')}>\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{this.state.loading ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{this.props.templates != null && this.props.templates.length > 0 && !this.state.loading ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.templates.map((template) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{template.title}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t);\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: null}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tservices: state.Services.availableServices,\n\t\ttranslate: translate(state.Languages.translations),\n\t\ttemplates: state.Templates.templates,\n\t};\n};\n\nexport default connect(mapStateToProps, {\n\tsetPageTitle,\n\tsetPageActions,\n\tgetFormTemplates,\n})(AllForms);\n","import { FIELD_DESCRIPTION, FIELD_TITLE } from 'constants/fields';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport './Styles.scss';\n\nclass PreviewForm extends Component {\n\n\trenderTitle = (field) => {\n\t\treturn
\n\t\t\t{field.value}\n\t\t
\n\t}\n\n\trenderDescription = (field) => {\n\t\treturn
{field.value}
\n\t}\n\n\trenderInput = (field) => {\n\t\tconst type = field.type.toLowerCase();\n\n\t\treturn
\n\t\t\t{this.props.translate(type)}\n\t\t
\n\t}\n\n\trenderField = (field, index) => {\n\t\tif (field.type == FIELD_TITLE) {\n\t\t\treturn
\n\t\t\t\t{this.renderTitle(field, index)}\n\t\t\t
\n\t\t}\n\n\t\tif (field.type == FIELD_DESCRIPTION) {\n\t\t\treturn
\n\t\t\t\t{this.renderDescription(field, index)}\n\t\t\t
\n\t\t}\n\n\t\treturn
\n\t\t\t{this.renderInput(field, index)}\n\t\t
\n\t}\n\n\trender() {\n\t\tif (this.props.fields == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet fields = [...this.props.fields];\n\t\tfields.sort((a, b) => {\n\t\t\treturn a.sortOrder > b.sortOrder ? 1 : -1;\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{fields.map(this.renderField)}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps, null, null, {\n\tpure: false,\n})(PreviewForm);\n","import React, { Component } from 'react';\nimport swal from 'sweetalert2';\nimport { connect } from 'react-redux';\n\nimport {\n\tgetSection,\n\tgetSectionGuardians,\n\tsetActiveSection,\n\ttoggleSelectedSection,\n\tclearSelectedSections,\n} from 'actions/sections';\n\nimport { Expandable, Spinner } from 'UI';\nimport { Checkbox, Icon, translate } from '@haldor/ui';\n\nimport './MultipleSectionSelector.scss';\nimport DisplayName from 'components/Presentation/DisplayName';\n\nclass MultipleSectionSelector extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tvar sections = JSON.parse(JSON.stringify(props.sections));\n\t\tif (props.mentorGroups) {\n\t\t\tsections = JSON.parse(JSON.stringify(props.mentorSections));\n\t\t}\n\n\t\tif (sections != null) {\n\t\t\tsections = sections.sort(function (a, b) {\n\t\t\t\treturn (a.title > b.title) ? 1 : ((b.title > a.title) ? -1 : 0);\n\t\t\t});\n\n\t\t\tsections = sections.filter(section => {\n\t\t\t\treturn section.userRole == \"OWNER\"\n\t\t\t})\n\n\t\t\tsections.forEach(section => {\n\t\t\t\tif (this.props.value != null) {\n\t\t\t\t\tif (section.id == this.props.value) {\n\t\t\t\t\t\tsection.checked = true;\n\t\t\t\t\t\treturn section;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.state = {\n\t\t\tsections: sections\n\t\t};\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tthis.props.setActiveSection();\n\t\tthis.props.clearSelectedSections();\n\t\tthis.setState({ sections: [] });\n\t}\n\n\tcomponentDidUpdate = (prevProps) => {\n\t\tif (prevProps.selectGuardians != this.props.selectGuardians) {\n\t\t\tthis.onUpdateResult();\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.state.sections != null) {\n\t\t\tthis.state.sections.forEach(section => {\n\t\t\t\tif (this.props.value != null) {\n\t\t\t\t\tif (section.id == this.props.value) {\n\t\t\t\t\t\tsection.checked = false;\n\t\t\t\t\t\tthis.onSectionChange(section);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tpromptEmpty = () => {\n\t\tconst { translate } = this.props;\n\t\tif (this.props.type == 'assignment') {\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('The group contains no students'),\n\t\t\t\tshowCancelButton: false,\n\t\t\t\tconfirmButtonText: this.props.translate('Ok'),\n\t\t\t\thtml: `\n\t\t\t\t${translate('The group you selected does not contain any students. You can`t create assignments for a group without students. The group may lack students due to the fact that:')}\n\t\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t
  • ${translate('No students have been added to the group. Make sure your team/Microsoft 365 group includes students.')}
  • \n\t\t\t\t\t
  • ${translate('Students have not been activated on the team. To do this, use Microsoft Teams.')}
  • \n\t\t\t\t\t
  • ${translate('The group could not be loaded correctly. Close the form and reload the page, then try again.')}
  • \n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t`,\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.type == 'plan') {\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('The group contains no students'),\n\t\t\t\tshowCancelButton: false,\n\t\t\t\tconfirmButtonText: this.props.translate('Ok'),\n\t\t\t\thtml: `\n\t\t\t\t${translate('create-planning-selected-group-no-students')}\n\t\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t
  • ${translate('No students have been added to the group. Make sure your team/Microsoft 365 group includes students.')}
  • \n\t\t\t\t\t
  • ${translate('Students have not been activated on the team. To do this, use Microsoft Teams.')}
  • \n\t\t\t\t\t
  • ${translate('The group could not be loaded correctly. Close the form and reload the page, then try again.')}
  • \n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t`,\n\t\t\t});\n\t\t}\n\t}\n\n\tonSectionChange = (section, checked) => {\n\t\tif (!section.checked) {\n\t\t\tsection.checked = true;\n\t\t} else {\n\t\t\tsection.checked = checked;\n\t\t}\n\n\t\tif (section.students == null || section.students.length == 0) {\n\t\t\tthis.loadSectionStudents(section, section.checked);\n\t\t}\n\n\t\tif (section.students != null) {\n\t\t\tif (section.checked && section.students.length == 0) {\n\t\t\t\tif (this.props.type == 'assignment') {\n\t\t\t\t\tsection.checked = false;\n\t\t\t\t\tthis.setState({});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.markSectionStudents(section, checked);\n\t\t}\n\n\t\tthis.props.toggleSelectedSection(section);\n\t}\n\n\tonSectionOpenChange = (section) => {\n\t\tsection.open = !section.open;\n\t\tthis.setState({});\n\n\t\tif (section.students == null || section.students.length == 0) {\n\t\t\tthis.loadSectionStudents(section);\n\t\t}\n\t}\n\n\tmarkSectionStudents = (section, checked) => {\n\t\tif (this.props.selectGuardians) {\n\t\t\tsection.students.forEach((student) => {\n\t\t\t\tstudent.guardians.forEach(guardian => {\n\t\t\t\t\tguardian.checked = checked;\n\t\t\t\t\tstudent.checked = section.checked;\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tsection.students.forEach((student) => {\n\t\t\t\tstudent.checked = checked;\n\t\t\t});\n\t\t}\n\n\t\tsection.allStudentsSelected = true;\n\t\tthis.setState({}, () => {\n\t\t\tthis.onUpdateResult();\n\t\t});\n\t}\n\n\tloadSectionStudents = (section, prompt = false) => {\n\t\tlet sections = this.state.sections;\n\t\tlet stateSection = sections.find(t => t.id == section.id);\n\t\tstateSection.loading = true;\n\n\t\tthis.setState({ sections }, () => {\n\t\t\tif (this.props.selectGuardians) {\n\t\t\t\tthis.props.getSectionGuardians(section.id)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tstateSection.students = JSON.parse(JSON.stringify(this.props.guardians));\n\n\t\t\t\t\t\tstateSection.students.forEach((student) => {\n\t\t\t\t\t\t\tstudent.guardians.forEach(guardian => {\n\t\t\t\t\t\t\t\tguardian.checked = section.checked;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tstudent.checked = section.checked;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstateSection.loading = false;\n\t\t\t\t\t\tthis.setState({ sections }, () => {\n\t\t\t\t\t\t\tthis.onUpdateResult();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.props.getSection(section.id)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tif (this.props.activeSection != null) {\n\t\t\t\t\t\t\tstateSection.students = JSON.parse(JSON.stringify(this.props.activeSection.students));\n\t\t\t\t\t\t\tstateSection.courses = JSON.parse(JSON.stringify(this.props.activeSection.courses));\n\n\t\t\t\t\t\t\tif (stateSection.students != null) {\n\t\t\t\t\t\t\t\tif (stateSection.students.length == 0 && prompt) {\n\t\t\t\t\t\t\t\t\tthis.promptEmpty();\n\n\t\t\t\t\t\t\t\t\tif (this.props.type == 'assignment') {\n\t\t\t\t\t\t\t\t\t\tstateSection.checked = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstateSection.students.forEach((student) => {\n\t\t\t\t\t\t\t\t\tstudent.checked = section.checked;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstateSection.loading = false;\n\t\t\t\t\t\t\tthis.setState({ sections }, () => {\n\t\t\t\t\t\t\t\tthis.onUpdateResult();\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}\n\t\t});\n\t}\n\n\tonGuardiansUpdate = (section) => {\n\t\tconst checkedGuardians = section.students.find((student) => {\n\t\t\treturn student.guardians.find(guardian => {\n\t\t\t\treturn guardian.checked == true;\n\t\t\t});\n\t\t});\n\n\t\tif (checkedGuardians != null) {\n\t\t\tsection.checked = true;\n\t\t} else {\n\t\t\tsection.checked = false;\n\t\t}\n\n\t\tthis.setState({}, () => {\n\t\t\tthis.onUpdateResult();\n\t\t});\n\t}\n\n\tonStudentsUpdate = (section) => {\n\t\tconst checkedStudents = section.students.filter(function (student) {\n\t\t\treturn student.checked == true;\n\t\t});\n\n\t\tif (checkedStudents != null && checkedStudents.length > 0) {\n\t\t\tif (!section.checked) {\n\t\t\t\tthis.props.toggleSelectedSection(section);\n\t\t\t}\n\n\t\t\tif (checkedStudents != null && checkedStudents.length == section.students.length) {\n\t\t\t\tsection.allStudentsSelected = true;\n\t\t\t} else {\n\t\t\t\tsection.allStudentsSelected = false;\n\t\t\t}\n\n\t\t\tsection.checked = true;\n\t\t} else {\n\t\t\t// No students are no longer checked\n\t\t\tif (section.checked) {\n\t\t\t\tthis.props.toggleSelectedSection(section);\n\t\t\t\tsection.allStudentsSelected = null;\n\t\t\t}\n\n\t\t\tsection.checked = false;\n\t\t}\n\n\t\tthis.setState({}, () => {\n\t\t\tthis.onUpdateResult();\n\t\t});\n\t}\n\n\tonStudentChange = (student, section) => {\n\t\tstudent.checked = student.checked ? false : true;\n\n\t\tthis.setState({}, () => {\n\t\t\tthis.onStudentsUpdate(section);\n\t\t});\n\t}\n\n\tonGuardianChange = (guardian, section) => {\n\t\tguardian.checked = guardian.checked ? false : true;\n\n\t\tthis.setState({}, () => {\n\t\t\tthis.onGuardiansUpdate(section);\n\t\t});\n\t}\n\n\tonUpdateResult = () => {\n\t\tlet filtered = this.state.sections.filter(t => t.checked || t.active);\n\t\tlet sections = [];\n\n\t\tfiltered.forEach((section) => {\n\t\t\tlet sectionObject = {\n\t\t\t\tid: section.id,\n\t\t\t\tcourses: section.courses,\n\t\t\t\ttype: section.type,\n\t\t\t\tstudents: section.students != null ? section.students.filter(t => t.checked) : [],\n\t\t\t\tallStudentsSelected: section.students != null && section.students.length > 0 ? section.students.every(student => student.checked) : false,\n\t\t\t\tgraphId: section.graphId,\n\t\t\t\ttitle: section.title,\n\t\t\t}\n\n\t\t\tif (this.props.selectGuardians) {\n\t\t\t\tsectionObject.guardians = [];\n\t\t\t\tsection.students.forEach(student => {\n\t\t\t\t\tif (student.guardians != null) {\n\t\t\t\t\t\tstudent.guardians.forEach(guardian => {\n\t\t\t\t\t\t\tif (guardian.checked) {\n\t\t\t\t\t\t\t\tsectionObject.guardians.push(guardian);\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});\n\t\t\t}\n\n\t\t\tsections.push(sectionObject);\n\t\t});\n\t\tthis.props.onChange(sections);\n\t}\n\n\tonSectionOpen = (section, toggle) => {\n\t\tif (section.open != null) {\n\t\t\tsection.open = !section.open;\n\t\t} else {\n\t\t\tsection.open = true;\n\t\t}\n\n\t\tif (section.students == null || section.students.length == 0) {\n\t\t\tthis.loadSectionStudents(section);\n\t\t}\n\n\t\ttoggle();\n\t}\n\n\trenderStudent = (student, section) => {\n\t\tconst displayName =\n\t\t\t\n\t\tif (this.props.selectGuardians) {\n\t\t\treturn
\n\t\t\t\t{student.firstName} {student.lastName}\n\t\t\t\t
\n\t\t\t\t\t{student.guardians.map(guardian => {\n\t\t\t\t\t\treturn this.onGuardianChange(guardian, section)}\n\t\t\t\t\t\t\tvalue={guardian.checked}\n\t\t\t\t\t\t\tlabel={`${guardian.firstName} ${guardian.lastName != null ? guardian.lastName : ''}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t})}\n\t\t\t\t
\n\t\t\t
\n\t\t}\n\n\t\treturn
\n\t\t\t this.onStudentChange(student, section)}\n\t\t\t\tvalue={student.checked}\n\t\t\t\tlabel={displayName}\n\t\t\t/>\n\t\t
\n\t}\n\n\trenderSection = (section) => {\n\t\tconst title = (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t this.onSectionChange(section, checked)}\n\t\t\t\t\t\tlabel={section.title}\n\t\t\t\t\t\tdisabled={this.props.disabled || section.classroomUrl == null || section.classroomUrl == ''}\n\t\t\t\t\t/>\n\t\t\t\t
\n\n\t\t\t\t{section.students != null && section.students.length == 0 ?\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('The group contains no students')}\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{section.classroomUrl == null || section.classroomUrl == '' ?\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('Workspace missing')}\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\n\t\tif (section.open == null) {\n\t\t\tsection.open = false;\n\t\t}\n\n\t\treturn (\n\t\t\t { this.onSectionOpenChange(section) }}\n\t\t\t\tonClick={toggle => { return false; }}\n\t\t\t>\n\t\t\t\t{section.error ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{section.error}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{section.loading ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{section.students ?\n\t\t\t\t\tsection.students\n\t\t\t\t\t\t.sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"))\n\t\t\t\t\t\t.map(student => this.renderStudent(student, section))\n\t\t\t\t\t: null}\n\t\t\t\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { disabled } = this.props;\n\n\t\tif (this.props.sections != null) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t{this.state.sections.map(section => {\n\t\t\t\t\t\treturn this.renderSection(section)\n\t\t\t\t\t})}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tsections: state.sections.educationGroups,\n\t\tmentorSections: state.sections.mentorGroups,\n\t\tactiveSection: state.sections.activeSection,\n\t\tguardians: state.sections.guardians,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetSection,\n\tgetSectionGuardians,\n\tsetActiveSection,\n\ttoggleSelectedSection,\n\tclearSelectedSections,\n})(MultipleSectionSelector);","import { clearFormTemplate, createForm, getFormTemplate, getFormTemplates, updateForm } from 'actions/templates';\nimport PreviewFormTemplate from 'containers/FormTemplate/Display/PreviewFormTemplate';\nimport Moment from 'moment';\nimport { withRouter } from 'react-router-dom';\nimport React, { Component } from 'react';\nimport DatePicker from 'react-datepicker';\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\nimport sv from 'date-fns/locale/sv';\nimport no from 'date-fns/locale/nb';\nimport en from 'date-fns/locale/en-US';\nimport da from 'date-fns/locale/da';\nimport uk from 'date-fns/locale/uk';\nimport { translate, getActiveLanguage } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Field, reduxForm } from 'redux-form';\nimport { Expandable, List, Spinner } from 'UI';\nimport MultipleSectionSelector from './Partials/MultipleSectionSelector';\nimport { Checkbox, Button } from '@haldor/ui';\n\nclass SendDynamicForm extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tregisterLocale('en-US', en);\n\t\tregisterLocale('sv-SE', sv);\n\t\tregisterLocale('nb-NO', no);\n\t\tregisterLocale('da-DK', da);\n\t\tregisterLocale('uk', uk);\n\t\tsetDefaultLocale('en-US');\n\n\t\tlet form = '0';\n\t\tif (props.activeForm != null) {\n\t\t\tform = props.activeForm.id;\n\t\t}\n\n\t\tlet dueDate = Moment().set({ hours: 23, minutes: 59, seconds: 59 });\n\t\tif (props.initialValues != null && props.initialValues.dueDate != null) {\n\t\t\tdueDate = Moment(props.initialValues.dueDate);\n\t\t}\n\n\t\tthis.state = {\n\t\t\tform,\n\t\t\tdueDate,\n\t\t\tloading: false,\n\t\t\tsections: [],\n\t\t\tdueDate,\n\t\t\tguardians: false,\n\t\t};\n\t}\n\n\t/* Helper methods */\n\trequired = (value) => {\n\t\tif (typeof (value) !== 'undefined' && value !== '') {\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string and not over 200 characters\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('field-needs-input');\n\t}\n\n\t/* Events */\n\tonCancel = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onAbort != null) {\n\t\t\tthis.props.onAbort(false);\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.templates == null) {\n\t\t\tthis.props.getFormTemplates();\n\t\t}\n\t}\n\n\tonDateChange = (date) => {\n\t\tlet dueDate = Moment(date).set({ hours: 23, minutes: 59, seconds: 59 });\n\t\tthis.setState({ dueDate });\n\t}\n\n\tonSubmit = (values) => {\n\t\treturn new Promise(resolve => {\n\t\t\tvalues.formTemplateId = this.state.form;\n\t\t\tvalues.status = 'PUBLISHED';\n\t\t\tvalues.dueDate = this.state.dueDate.utc().format();\n\n\t\t\tif (values.formInstances == null) {\n\t\t\t\tvalues.formInstances = [];\n\t\t\t\tthis.state.sections.forEach((section) => {\n\t\t\t\t\tif (this.state.guardians) {\n\t\t\t\t\t\tsection.guardians.forEach(guardian => {\n\t\t\t\t\t\t\tlet instance = {\n\t\t\t\t\t\t\t\tassignedTo: guardian.id,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tlet inArray = values.formInstances.find(inst => instance.assignedTo == inst.assignedTo);\n\t\t\t\t\t\t\tif (inArray == null) {\n\t\t\t\t\t\t\t\tvalues.formInstances.push(instance);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsection.students.forEach(student => {\n\t\t\t\t\t\t\tlet instance = {\n\t\t\t\t\t\t\t\tassignedTo: student.id,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tlet inArray = values.formInstances.find(inst => instance.assignedTo == inst.assignedTo);\n\t\t\t\t\t\t\tif (inArray == null) {\n\t\t\t\t\t\t\t\tvalues.formInstances.push(instance);\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});\n\t\t\t}\n\n\t\t\tif (this.props.initialValues == null) {\n\t\t\t\tthis.props.createForm(values).then(() => {\n\t\t\t\t\tresolve(1);\n\t\t\t\t\tthis.props.onAbort(true);\n\t\t\t\t\tthis.props.history.push(`form/${this.props.createdForm}`);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.props.updateForm(values).then(() => {\n\t\t\t\t\tresolve(1);\n\t\t\t\t\tthis.props.onAbort();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonFormChange = (event) => {\n\t\tthis.setState({ form: event.target.value });\n\n\t\tif (event.target.value != '0') {\n\t\t\tthis.setState({ loading: true });\n\t\t\tthis.props.getFormTemplate(event.target.value)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t} else {\n\t\t\tthis.props.clearFormTemplate();\n\t\t}\n\t}\n\n\tonSectionsChange = (selected) => {\n\t\tthis.setState({ sections: selected });\n\t}\n\n\tonGuardiansChange = (checked) => {\n\t\tthis.setState({ guardians: checked });\n\t}\n\n\t/* Render methods */\n\trenderInput = ({ input, label, type, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderTextarea = ({ input, label, type, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))}\n\t\t\t
\n\t\t);\n\t}\n\n\tgetDateFormat = () => {\n\t\tlet format = Moment.localeData(getActiveLanguage()).longDateFormat(\"L\");\n\t\tlet newFormat = format.replace(\"YYYY\", \"yyyy\");\n\t\tlet days = newFormat.replace(\"DD\", \"dd\");\n\t\treturn days;\n\t};\n\n\tnormalizeLocale = (locale) => {\n\t\tconst [language, region] = locale.split('-');\n\n\t\tif (language.toUpperCase() == \"UK\"){\n\t\t\treturn `uk`;\n\t\t}\n\t\treturn `${language}-${region.toUpperCase()}`;\n\t};\n\n\trender() {\n\t\tconst { handleSubmit, submitting, valid, translate } = this.props;\n\n\t\tlet disableSave = false;\n\t\tif (this.state.sections.length == 0) {\n\t\t\tdisableSave = true;\n\t\t}\n\n\t\tif (this.state.form == '0') {\n\t\t\tdisableSave = true;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{submitting ?

: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.initialValues == null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.initialValues == null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{this.props.initialValues == null ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{this.state.loading ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{this.state.form != '0' && this.props.activeForm != null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{this.state.form != '0' && this.props.activeForm != null && !this.state.loading ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{translate('preview')}

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\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\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\ttemplates: state.Templates.templates,\n\t\tactiveForm: state.Templates.formTemplate,\n\t\tinitialValues: state.Templates.form,\n\t\tcreatedForm: state.Templates.createdForm\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tgetFormTemplate,\n\tclearFormTemplate,\n\tcreateForm,\n\tgetFormTemplates,\n\tupdateForm,\n})(reduxForm({\n\tform: 'SendDynamicForm',\n\tdestroyOnUnmount: true,\n})(SendDynamicForm)));","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\n\nimport { getFormInstance } from 'actions/templates';\nimport { FIELD_DESCRIPTION, FIELD_TITLE } from 'constants/fields';\n\nimport './Styles.scss';\n\nclass DisplayFormResults extends Component {\n\n\t/* Render methods */\n\trenderTitle = (field) => {\n\t\treturn
\n\t\t\t{field.value}\n\t\t
\n\t}\n\n\trenderDescription = (field) => {\n\t\treturn
{field.value}
\n\t}\n\n\trenderInput = (field) => {\n\t\tconst { activeInstance } = this.props;\n\t\tconst type = field.type.toLowerCase();\n\n\t\tlet value = null;\n\t\tif (activeInstance != null) {\n\t\t\tlet findResult = activeInstance.fieldResults.find(result => {\n\t\t\t\treturn result.fieldName == field.name;\n\t\t\t});\n\n\t\t\tif (findResult != null) {\n\t\t\t\tvalue = findResult.value;\n\t\t\t}\n\t\t}\n\n\t\treturn
\n\t}\n\n\trenderField = (field, index) => {\n\t\tif (field.type == FIELD_TITLE) {\n\t\t\treturn
\n\t\t\t\t{this.renderTitle(field, index)}\n\t\t\t
\n\t\t}\n\n\t\tif (field.type == FIELD_DESCRIPTION) {\n\t\t\treturn
\n\t\t\t\t{this.renderDescription(field, index)}\n\t\t\t
\n\t\t}\n\n\t\treturn
\n\t\t\t{this.renderInput(field, index)}\n\t\t
\n\t}\n\n\trender() {\n\t\tif (this.props.fields == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet fields = [...this.props.fields];\n\t\tfields.sort((a, b) => {\n\t\t\treturn a.sortOrder > b.sortOrder ? 1 : -1;\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.activeInstance?.assigneeViewedCount != null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.translate('opened')}: {this.props.activeInstance.assigneeViewedCount}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{fields.map(this.renderField)}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state, ownProps) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tactiveInstance: ownProps.instance,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetFormInstance,\n})(DisplayFormResults);\n","import React, { useEffect } from 'react';\nimport moment from 'moment';\nimport store from '../../index';\nimport DateTime from '_class/DateTime';\nimport { FormSpy, useForm } from 'react-final-form';\nimport { throttle } from 'helpers/content';\nimport { getBasedOnLastModified, saveWithExpirationAndLastModified, getObjectExpiration } from 'helpers/localstorage';\n\nconst updateLocalValues = throttle(({ values }, name) => {\n\tsaveWithExpirationAndLastModified(name + '-values', JSON.stringify(values), moment().add(48, 'hours'));\n}, 1000);\n\nconst PersistentFormListener = ({ name, initialValues, lastModifiedUTC, addTimeStampedToast }) => {\n\tconst form = useForm();\n\tif (form.getState().submitSucceeded && !form.getState().dirtySinceLastSubmit) {\n\t\tlocalStorage.removeItem(name + '-values');\n\t}\n\tuseEffect(() => {\n\t\tif (lastModifiedUTC != null && getBasedOnLastModified(name + '-values', lastModifiedUTC) != null) {\n\t\t\tconst storedValues = JSON.parse(getBasedOnLastModified(name + '-values', lastModifiedUTC));\n\t\t\tif (storedValues.hasOwnProperty('status')) {\n\t\t\t\tdelete storedValues['status'];\n\t\t\t}\n\t\t\tif (initialValues.hasOwnProperty('status')) {\n\t\t\t\tdelete initialValues['status'];\n\t\t\t}\n\t\t\tif (JSON.stringify(initialValues) != JSON.stringify(storedValues)) {\n\t\t\t\tconst values = storedValues;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tform.batch(() => {\n\t\t\t\t\t\tObject.keys(values).forEach((field) => {\n\t\t\t\t\t\t\tconst value = values[field];\n\t\t\t\t\t\t\tif (value == null || value == \"\") {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tform.change(field, values[field]);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}, 50);\n\t\t\t\taddTimeStampedToast('There are changes to the form that have not been saved. In order not to lose the changes, you must resave the form at the latest:', moment.utc(getObjectExpiration(name + '-values')).local().format('Do MMMM HH:mm'), 'error');\n\t\t\t}\n\t\t}\n\t\treturn () => {\n\t\t\tif (!form.getState().submitFailed) {\n\t\t\t\tlocalStorage.removeItem(name + '-values');\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t {\n\t\t\t\tif (!form.getState().dirty && !form.getState().dirtySinceLastSubmit) {\n\t\t\t\t\t// Dont update values in localStorage if form isnt touched (init)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tupdateLocalValues(subscription, name)\n\t\t\t}}\n\t\t\tsubscription={{ values: true }}\n\t\t/>\n\t);\n\n\n};\n\nPersistentFormListener.defaultProps = {\n\tname: 'persisted_form',\n};\n\nexport default PersistentFormListener;\n","import React, { Component } from 'react';\nimport { Prompt } from 'react-router-dom';\nimport store from '../../../index';\nimport moment from 'moment';\nimport DateTime from '_class/DateTime';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Form, FormSpy } from 'react-final-form';\nimport { Spinner } from 'UI';\nimport { Field } from 'UI/Inputs';\nimport { Icon, Button, Flex } from '@haldor/ui';\nimport PersistentFormListener from 'components/Inputs/PersistentFormListener';\nimport { FormPrompt } from 'components/Inputs/FormPrompt';\n\nimport { updateFormInstance } from 'actions/templates';\nimport ColorScale from '_class/ColorScale';\nimport PermissionManager from '_class/PermissionManager';\n\nclass FormInstance extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet edited = null;\n\n\t\tif (this.props.instance != null) {\n\t\t\tedited = moment.utc(this.props.instance.edited).local().format();\n\t\t}\n\n\t\tthis.state = {\n\t\t\tedited: null,\n\t\t\thiddenFields: [],\n\t\t\tsubmitting: false,\n\t\t\tupdating: false,\n\t\t\tisAllFieldsShrinked: false,\n\t\t\tpermissionTypes: new PermissionManager().getPermissionTypes()\n\t\t};\n\n\t\tthis.form = React.createRef();\n\t\tthis.interval = null;\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.instance == null) {\n\t\t\tthis.setState({ submitting: true });\n\t\t\tlet values = {};\n\n\t\t\tthis.props.fields.forEach((field) => {\n\t\t\t\tif (field.type.indexOf('INPUT') > -1) {\n\t\t\t\t\tvalues[field.name] = '';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.submit(values);\n\t\t}\n\n\t\tthis.interval = setInterval(() => {\n\t\t\tthis.setState({ edited: this.state.edited });\n\t\t}, 30 * 1000);\n\t}\n\n\tcomponentWillMount = () => {\n\t\tif (this.interval != null) {\n\t\t\tclearInterval(this.interval);\n\t\t}\n\t}\n\n\t_addToast = (message, type = 'warning') => {\n\t\tconst error = {\n\t\t\ttranslateMsg: message,\n\t\t\ttype: type,\n\t\t\ttarget: 'API',\n\t\t\ttime: new DateTime(),\n\t\t};\n\n\t\tstore.dispatch({\n\t\t\ttype: 'ADD_ERROR',\n\t\t\tpayload: error,\n\t\t});\n\t}\n\n\t_addTimeStampedToast = (message, timeStamp, type = 'warning') => {\n\t\tmessage = this.props.translate(message) + ' ' + timeStamp;\n\t\tconst error = {\n\t\t\ttranslateMsg: message,\n\t\t\ttype: type,\n\t\t\ttarget: 'API',\n\t\t\ttime: new DateTime(),\n\t\t};\n\n\t\tstore.dispatch({\n\t\t\ttype: 'ADD_ERROR',\n\t\t\tpayload: error,\n\t\t});\n\t}\n\n\tsubmit = (values) => new Promise((resolve) => {\n\t\tthis.setState({ updating: true });\n\t\tlet fieldResults = [];\n\t\tlet status = values.status;\n\n\t\tif (status == null) {\n\t\t\tstatus = 'SAVED';\n\t\t}\n\n\t\tObject.keys(values).map((key, index) => {\n\t\t\tif (key == 'status') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar templateField = this.props.fields.find(t => t.name == key);\n\t\t\tvar instanceField = this.props.instance?.fieldResults.find(t => t.fieldName == key);\n\n\t\t\tlet result = {\n\t\t\t\t'fieldName': key,\n\t\t\t\t'value': values[key],\n\t\t\t\t'FieldTemplateId': templateField != null ? templateField.id : null,\n\t\t\t\t'id': instanceField != null ? instanceField.id : null\n\t\t\t};\n\n\t\t\tfieldResults.push(result);\n\t\t});\n\n\t\tif (this.props.onSubmit != null && this.props.instance == null) {\n\t\t\tthis.setState({ submitting: true });\n\n\t\t\tlet data = {\n\t\t\t\tfieldResults,\n\t\t\t\tstatus,\n\t\t\t};\n\n\t\t\tdata.formID = this.props.form;\n\n\t\t\tthis.props.onSubmit(data).then(() => {\n\t\t\t\tthis.setState({ edited: moment().format(), submitting: false, updating: false, error: false });\n\t\t\t\tresolve(1);\n\n\t\t\t\tif (this.props.onAbort != null) {\n\t\t\t\t\tthis.props.onAbort(true);\n\t\t\t\t}\n\t\t\t}).catch(() => {\n\t\t\t\tthis._addToast('Form could not be saved. Please try again.', 'error');\n\t\t\t});\n\t\t} else {\n\t\t\tlet data = this.props.instance;\n\t\t\tdata.fieldResults = fieldResults;\n\t\t\tdata.status = status;\n\n\t\t\tthis.props.updateFormInstance(data).then(() => {\n\t\t\t\tthis.setState({ edited: moment().format(), updating: false });\n\t\t\t\tresolve(1);\n\n\t\t\t\tif (this.props.onAbort != null) {\n\t\t\t\t\tthis.props.onAbort(true);\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tthis._addToast('Form could not be saved. Please try again.', 'error');\n\t\t\t\tconsole.log('promise catch FormInstance', error)\n\t\t\t\tthis.setState({ updating: false });\n\t\t\t\tresolve({ error: 'Could not sync' });\n\t\t\t});\n\t\t}\n\t});\n\n\tcopyAnswerToTextField = (answer, value, setValue) => {\n\t\tconst field = answer.formInstance.formTemplate.fields.find(t => t.name == answer.formField.fieldName);\n\n\t\tif (value != null && value != '') {\n\t\t\tif (field.type == \"FIELDS_INPUT_TEXTAREA\") {\n\t\t\t\tsetValue(answer.formField.fieldName,\n\t\t\t\t\tvalue + \" \\n\\n\" +\n\t\t\t\t\t\"

\" + answer.formField.value + \"

\" +\n\t\t\t\t\t\"- \" + answer.formInstance.user.firstName + \" \" + answer.formInstance.user.lastName + \"
\\n\\n\" +\n\t\t\t\t\t\"

\"\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsetValue(answer.formField.fieldName,\n\t\t\t\t\tvalue + \" \" +\n\t\t\t\t\tanswer.formInstance.user.firstName + \" \" + answer.formInstance.user.lastName + \": \" + answer.formField.value\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tif (field.type == \"FIELDS_INPUT_TEXTAREA\") {\n\t\t\t\tsetValue(\n\t\t\t\t\tanswer.formField.fieldName,\n\t\t\t\t\t\"

\" + answer.formField.value + \"

\" +\n\t\t\t\t\t\"- \" + answer.formInstance.user.firstName + \" \" + answer.formInstance.user.lastName + \"
\\n\\n\" +\n\t\t\t\t\t\"

\"\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsetValue(\n\t\t\t\t\tanswer.formField.fieldName,\n\t\t\t\t\tanswer.formInstance.user.firstName + \" \" + answer.formInstance.user.lastName + \": \" + answer.formField.value\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tshrinkAllFields = () => {\n\t\tif (!this.props.shrinkFields) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet titleWasFound = false;\n\n\t\tthis.props.fields.forEach((field, index) => {\n\t\t\tif (field.type == 'FIELDS_ELEMENT_TITLE') {\n\t\t\t\tthis.shrinkField(field, index, this.state.isAllFieldsShrinked);\n\t\t\t\ttitleWasFound = true;\n\t\t\t}\n\t\t});\n\n\t\tif (!titleWasFound && this.props.fields.length > 0) {\n\t\t\tthis.shrinkField(this.props.fields[0], -1, this.state.isAllFieldsShrinked);\n\t\t}\n\n\t\tthis.setState({ isAllFieldsShrinked: !this.state.isAllFieldsShrinked });\n\t}\n\n\tfindNextTitleIndex = (array, currentIndex, override) => {\n\t\tvar tempList = [];\n\n\t\tif (currentIndex < array.length)\n\t\t\ttempList = array.slice(currentIndex + 1);\n\n\t\tvar object = tempList.find(item => item.type == 'FIELDS_ELEMENT_TITLE');\n\n\t\tif (!object && !override)\n\t\t\treturn -1;\n\n\t\tvar nextIndex = array.findIndex(item => item.id == object.id);\n\n\t\treturn nextIndex;\n\t}\n\n\tshrinkField = (clickedElement, index, visible) => {\n\t\tif (!this.props.shrinkFields) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet { hiddenFields } = this.state;\n\n\t\tif (clickedElement.type === 'FIELDS_ELEMENT_TITLE') {\n\t\t\tclickedElement.visible = visible ? false : true;\n\t\t\tclickedElement.toggled = visible;\n\t\t}\n\n\t\tvar nextTitleIndex = null;\n\n\t\tnextTitleIndex = this.findNextTitleIndex(this.props.fields, index);\n\n\t\tif (!nextTitleIndex || nextTitleIndex === -1)\n\t\t\tnextTitleIndex = this.props.fields.length;\n\n\t\twhile (index <= nextTitleIndex) {\n\t\t\tindex = index + 1;\n\n\t\t\tconst field = this.props.fields[index];\n\n\t\t\tif (field != null) {\n\t\t\t\tif (field.type == 'FIELDS_ELEMENT_TITLE') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst foundIndex = hiddenFields.findIndex(hidden => {\n\t\t\t\t\treturn field.id == hidden.id;\n\t\t\t\t});\n\n\t\t\t\tif (visible) {\n\t\t\t\t\tif (foundIndex > -1) {\n\t\t\t\t\t\thiddenFields.splice(foundIndex, 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (foundIndex == -1) {\n\t\t\t\t\t\thiddenFields.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.setState({ hiddenFields });\n\t\t\t}\n\t\t}\n\t}\n\n\tcontainsAnswer = (answer) => {\n\t\tvar doc = new DOMParser().parseFromString(answer, 'text/html');\n\t\tif (doc.body.textContent.trim() == \"\") {\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { submitting, user, followUp, translate, instance } = this.props;\n\n\t\tif (this.props.fields == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar isStudent = user.isStudent();\n\t\tlet containerClass = 'form form-component form-instance';\n\t\tlet isDisabled = true;\n\n\t\tif (this.props.shrinkFields) {\n\t\t\tcontainerClass += ' shrinkable';\n\t\t}\n\n\t\tif (user.isMentor()) {\n\t\t\tisDisabled = false;\n\t\t}\n\n\t\tif (!followUp && isStudent && this.props.instance != null && this.props.instance.assignedTo == user.getUserId()) {\n\t\t\tisDisabled = false;\n\t\t}\n\n\t\tif (followUp && isStudent && this.props.studentLed) {\n\t\t\tisDisabled = false;\n\t\t}\n\n\t\tif (this.props.locked) {\n\t\t\tisDisabled = true;\n\t\t}\n\n\t\tlet shrinkAllclassName = \"shrink-all\";\n\t\tif (!this.state.isAllFieldsShrinked)\n\t\t\tshrinkAllclassName += \" flip\";\n\n\t\tlet fields = [...this.props.fields];\n\t\tfields.sort((a, b) => {\n\t\t\treturn a.sortOrder > b.sortOrder ? 1 : -1;\n\t\t});\n\n\t\treturn (\n\t\t\t {\n\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'SUBMITTED');\n\t\t\t\t\t},\n\t\t\t\t\tsetValue: ([field, value], state, utils) => {\n\t\t\t\t\t\tutils.changeValue(state, field, () => value)\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tonSubmit={this.submit}\n\t\t\t\tkeepDirtyOnReinitialize\n\t\t\t\trender={({ handleSubmit, form }) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{this.state.submitting ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.shrinkFields ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t {this.state.isAllFieldsShrinked ? this.props.translate('fold-out-all') : this.props.translate('fold-them-all-up')}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t{fields.map((field, index) => {\n\t\t\t\t\t\t\t\t\tconst value = form.getFieldState(field.name)?.value;\n\t\t\t\t\t\t\t\t\tvar answers = [];\n\n\t\t\t\t\t\t\t\t\tif (this.props.references != null) {\n\t\t\t\t\t\t\t\t\t\tthis.props.references.forEach((form) => {\n\t\t\t\t\t\t\t\t\t\t\tif (form.form.reference.formTemplate.id == this.props.formTemplate.id) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet formField = form.formInstance?.reference?.fieldResults?.find(t => t.fieldTemplateId == field.id);\n\t\t\t\t\t\t\t\t\t\t\t\tif (formField != null) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tanswers.push({ formField, formInstance: form.formInstance.reference });\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tfield.onBlur = () => {\n\t\t\t\t\t\t\t\t\t\tif (this.props.followUp == true && !this.props.user.isStudent()) {\n\t\t\t\t\t\t\t\t\t\t\tthis.form.current.dispatchEvent(new Event('submit', {\n\t\t\t\t\t\t\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet foundInHidden = null;\n\t\t\t\t\t\t\t\t\tif (this.props.shrinkFields) {\n\t\t\t\t\t\t\t\t\t\tfield.onLabelClick = () => this.shrinkField(field, index, field.visible);\n\n\t\t\t\t\t\t\t\t\t\tfoundInHidden = this.state.hiddenFields.find((hidden) => {\n\t\t\t\t\t\t\t\t\t\t\treturn hidden.id == field.id;\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tfield.disabled = isDisabled;\n\n\t\t\t\t\t\t\t\t\tlet className = null;\n\t\t\t\t\t\t\t\t\tif (foundInHidden != null) className = 'hidden-field';\n\t\t\t\t\t\t\t\t\tif (field.toggled) className = 'flip';\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{user != null && (!user.isStudent() || this.props.studentLed) && !isDisabled ?\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{answers.map((answer) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!this.containsAnswer(answer.formField.value)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{answer.formInstance.user.firstName + \" \" + answer.formInstance.user.lastName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{' • ' + new DateTime(answer.formInstance.created).getDateStamp()}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.copyAnswerToTextField(answer, value, form.mutators.setValue);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('quote')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{({ submitFailed }) => submitFailed ? (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t {this.props.translate('Form could not be saved. Please try again.')}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{!isDisabled ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusSubmitted();\n\t\t\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{this.props.instance?.status == 'SUBMITTED' || this.props.followUp ?\n\t\t\t\t\t\t\t\t\t\t\t\tthis.props.translate('save')\n\t\t\t\t\t\t\t\t\t\t\t\t: this.props.translate('submit')}\n\n\t\t\t\t\t\t\t\t\t\t\t{submitting || this.state.updating ?\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.props.instance?.status != 'SUBMITTED' && !this.props.followUp ?\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{({ submitSucceeded, modifiedSinceLastSubmit }) => submitSucceeded && !modifiedSinceLastSubmit ?\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t{translate('saved')}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\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}}\n\t\t\t/>\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state, ownProps) {\n\tlet initialValues = null;\n\n\tif (ownProps.instance != null) {\n\t\tinitialValues = {};\n\n\t\townProps.instance.fieldResults.forEach(result => {\n\t\t\tinitialValues[result.fieldName] = result.value;\n\t\t});\n\t}\n\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tinitialValues,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tupdateFormInstance,\n})(FormInstance);\n","import { setPageTitle } from 'actions/header';\nimport { clearForm, getForm, getFormInstance, getFormTemplate, updateFormInstance } from 'actions/templates';\nimport Redirect from 'components/Redirect/Redirect';\nimport SendDynamicForm from 'containers/Forms/SendDynamicForm';\nimport DisplayFormResults from 'containers/FormTemplate/Display/DisplayFormResults';\nimport FormInstance from 'containers/FormTemplate/Display/FormInstance';\nimport PreviewFormTemplate from 'containers/FormTemplate/Display/PreviewFormTemplate';\nimport Modal from 'containers/Modals/Modal';\nimport Moment from 'moment';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { DataList, Spinner } from 'UI';\nimport Block, { BlockContent, BlockWrapper } from 'UI/Elements/Block';\nimport RowItem, { RowCell } from 'UI/Elements/List/RowItem';\nimport DateTime from '_class/DateTime';\n\nclass SingleForm extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tmodal: false,\n\t\t\tformInstance: null,\n\t\t\tloading: true,\n\t\t\tloadingFormInstance: false\n\t\t};\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentDidMount = () => {\n\t\tthis.loadForm();\n\t}\n\n\tloadForm = () => {\n\t\tthis.props.getForm(this.props.match.params.id).then(() => {\n\t\t\tlet promises = [];\n\t\t\tif (this.props.user.id != this.props.form.creator) {\n\t\t\t\tlet instanceId = this.props.form.formInstances[0].id;\n\t\t\t\tpromises = [this.props.getFormInstance(instanceId), this.props.getFormTemplate(this.props.form.formTemplateID)];\n\t\t\t} else {\n\t\t\t\tpromises = [this.props.getFormTemplate(this.props.form.formTemplateID)];\n\t\t\t}\n\n\t\t\tthis.props.setPageTitle(this.props.form.title);\n\n\t\t\tPromise.all(promises).then(() => {\n\t\t\t\tthis.setState({ loading: false })\n\t\t\t});\n\t\t}).catch(() => {\n\t\t\tthis.setState({ notFound: true, loading: false });\n\t\t})\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tthis.props.clearForm();\n\t}\n\n\t/* Events */\n\ttoggleModal = () => {\n\t\tthis.setState({ modal: !this.state.modal });\n\t}\n\n\tonAbort = (reload) => {\n\t\tif (reload) {\n\t\t\tthis.loadForm();\n\t\t}\n\t}\n\n\tonInstanceClick = (instance) => {\n\t\tthis.props.getFormInstance(instance.id).then(() => {\n\t\t\tthis.setState({ formInstance: instance });\n\t\t});\n\t}\n\n\tcloseFormInstance = () => {\n\t\tthis.setState({ formInstance: null });\n\t}\n\n\t/* Render methods */\n\trenderFormInstance = (instance) => {\n\t\tvar edited = new DateTime(instance.edited);\n\t\treturn (\n\t\t\t { instance.status == 'SUBMITTED' ? this.onInstanceClick(instance) : null }}>\n\t\t\t\t\n\t\t\t\t\t{instance.user.firstName} {instance.user.lastName}\n\t\t\t\t\n\n\t\t\t\t{instance.assigneeViewedCount != null ?\n\t\t\t\t\t\n\t\t\t\t\t\t{instance.assigneeViewedCount}\n\t\t\t\t\t : null\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\t\t{instance.status == 'SUBMITTED' ?\n\t\t\t\t\t\tedited.getLongDateWithTime()\n\t\t\t\t\t\t: ''}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t{instance.status == 'SUBMITTED' ?\n\t\t\t\t\t\tthis.props.translate('turned-in')\n\t\t\t\t\t\t: this.props.translate('not-turned-in')}\n\t\t\t\t\n\t\t\t\n\t\t)\n\t}\n\n\trender() {\n\t\tif (!this.props.services.forms) {\n\t\t\treturn \n\t\t}\n\n\t\tif (this.state.loading) {\n\t\t\treturn \n\t\t} else if (this.state.notFound) {\n\t\t\treturn

{this.props.translate('not-found')}

\n\t\t}\n\n\t\tconst { translate, formTemplate, form, formInstance } = this.props;\n\n\t\tconst turnedIn = [...this.props.form.formInstances].filter(x => x.status == 'SUBMITTED').length;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t this.toggleModal()} title={this.props.translate('forms')}>\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

{form.text}

\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.user.id == form.creator ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.user.id == form.creator ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

{translate('preview')}

\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{Moment().isAfter(form.dueDate) ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t

{this.props.translate('your-answers')}

\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t

{this.props.translate('answers')}

\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t
\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
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

Information

\n\n\t\t\t\t\t\t{this.props.user.id == form.creator ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{turnedIn} / {form.formInstances.length} {this.props.translate('turned-in')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{turnedIn > 0 ? this.props.translate('turned-in') : this.props.translate('not-turned-in')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\n\t\t\t\t\t{form.dueDate != null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{this.props.translate('last-answer-day')}

\n\t\t\t\t\t\t\t{new DateTime(form.dueDate).getLongDate()}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.user.id != form.creator && Moment().isBefore(form.dueDate) && turnedIn < 1 ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.user.id == form.creator ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{translate('tools')}

\n\n\t\t\t\t\t\t\t this.toggleModal('edit')}>\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{translate('Edit')}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tservices: state.Services.availableServices,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tformTemplate: state.Templates.formTemplate,\n\t\tform: state.Templates.form,\n\t\tuser: state.user.currentUser,\n\t\tinstance: state.Templates.instance,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tsetPageTitle,\n\tgetFormTemplate,\n\tgetForm,\n\tupdateFormInstance,\n\tgetFormInstance,\n\tclearForm,\n})(SingleForm);\n","import { setPageTitle } from 'actions/header';\nimport { clearFormTemplate, getFormTemplate } from 'actions/templates';\nimport Redirect from 'components/Redirect/Redirect';\nimport FormTemplate from 'containers/Forms/FormTemplate';\nimport PreviewFormTemplate from 'containers/FormTemplate/Display/PreviewFormTemplate';\nimport Modal from 'containers/Modals/Modal';\nimport Moment from 'moment';\nimport React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Spinner } from 'UI';\n\nimport { Block, Icon, Button } from '@haldor/ui';\n\nclass SingleFormTemplatePage extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloading: true,\n\t\t\tmodal: false,\n\t\t};\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentDidMount = () => {\n\t\tthis.props.getFormTemplate(this.props.match.params.id)\n\t\t\t.then(() => {\n\t\t\t\tthis.props.setPageTitle(this.props.template.title);\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tthis.props.clearFormTemplate();\n\t}\n\n\t/* Events */\n\ttoggleModal = (reload) => {\n\t\tthis.setState({ modal: !this.state.modal });\n\n\t\tif (reload) {\n\t\t\tthis.props.setPageTitle(this.props.template.title);\n\t\t}\n\t}\n\n\t/* Render methods */\n\trender() {\n\t\tif (!this.props.services.forms) {\n\t\t\treturn \n\t\t}\n\n\t\tif (this.state.loading) {\n\t\t\treturn \n\t\t}\n\n\t\tconst { template, translate } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t this.toggleModal(false)} title={translate('form-template')}>\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{translate('preview')}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t{template.instances == 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{translate('tools')}

\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tservices: state.Services.availableServices,\n\t\ttranslate: translate(state.Languages.translations),\n\t\ttemplate: state.Templates.formTemplate,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetFormTemplate,\n\tsetPageTitle,\n\tclearFormTemplate,\n})(SingleFormTemplatePage);\n","export const PRESCHOOL = 'PRESCHOOL';\nexport const COMPULSORY_SCHOOL = 'COMPULSORY_SCHOOL';\nexport const UPPER_SECONDARY_EDUCATION = 'UPPER_SECONDARY_EDUCATION';\nexport const ADULT_EDUCATION = 'ADULT_EDUCATION';","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslate } from 'lib/translate';\n\nimport { getWelcomeInformation, hideWelcomeWindow, updateInformationTextRead } from 'actions/information_texts';\n\nimport Modal from 'containers/Modals/Modal';\nimport { Checkbox } from '@haldor/ui';\n\nconst WelcomeMessage = (props) => {\n\tconst translate = useTranslate();\n\tconst dispatch = useDispatch();\n\tconst message = useSelector(state => state.InformationTexts.welcome);\n\tconst hideWelcomeModal = useSelector(state => state.InformationTexts.hideWelcomeModal);\n\tconst user = useSelector(state => state.user.currentUser);\n\tconst [open, setOpen] = useState(true);\n\tconst [disabled, setDisabled] = useState(false);\n\n\tuseEffect(() => {\n\t\tif(hideWelcomeModal){\n\t\t\tsetOpen(false);\n\t\t\treturn;\n\t\t}\n\t\tdispatch(getWelcomeInformation());\n\t}, []);\n\t\n\tconst onClose = () => {\n\t\tsetOpen(false);\n\t\tif(!disabled){\n\t\t\tdispatch(hideWelcomeWindow());\n\t\t\treturn;\n\t\t}\n\t\tdispatch(updateInformationTextRead({\n\t\t\t\"referenceType\": 'INFORMATIONTEXT',\n\t\t\t\"referenceId\": message.id,\n\t\t\t\"userType\": 'USER',\n\t\t\t\"status\": disabled ? 'DONTSHOWAGAIN' : null,\n\t\t}));\n\t}\n\n\tconst onCheckboxChange = (checked) => {\n\t\tsetDisabled(checked);\n\t}\n\n\tif (message == null) {\n\t\treturn null;\n\t}\n\n\tif (message.parts == null || message.parts.length == 0) {\n\t\treturn null;\n\t}\n\n\treturn \n\t\t
\n\t\t\t
\n\t\t\t\t{message.parts != null ?\n\t\t\t\t\tmessage.parts.map((part, index) => {\n\t\t\t\t\t\treturn \n\t\t\t\t\t})\n\t\t\t\t\t: null}\n\n\t\t\t\t{message.showType == 'USERSET' ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t
\n\t
\n}\n\nexport default WelcomeMessage;","import api from 'lib/api';\nimport { loginRequest, getToken, http } from 'lib/msal';\n\nexport const getFile = (id, callback) => ({\n\ttype: 'get_file',\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`fileItems/${id}`).then((response) => {\n\t\t\tcallback(response.data);\n\t\t\tresolve(response.data);\n\t\t});\n\t}),\n});\n\nexport const getFileUrl = (id, callback) => ({\n\ttype: 'get_file_url',\n\tpayload: new Promise((resolve) => {\n\t\t// TODO: Test this\n\t\tlet url = http.defaults.baseURL + `fileItems/${id}`;\n\n\t\tgetToken(loginRequest).then((response) => {\n\t\t\turl += `?token=${response.accessToken}`;\n\n\t\t\tresolve(url);\n\t\t\tcallback(url);\n\t\t});\n\t}),\n});\n\nexport const getPreschoolDocumentImage = (id, callback) => ({\n\ttype: 'get_preschool_document_image',\n\tpayload: new Promise((resolve) => {\n\t\tapi.get(`fileItems/${id}`).then((response) => {\n\t\t\tcallback(response.data);\n\t\t\tresolve({ id: id, src: response.data });\n\t\t});\n\t}),\n});\n\nexport const deleteFile = (file) => ({\n\ttype: 'delete_file_item',\n\tpayload: new Promise((resolve) => {\n\t\tapi.delete(`fileitems/${file.id}`).then((response) => {\n\t\t\tresolve(response.data);\n\t\t});\n\t})\n});\n","import React, { Component } from 'react';\nimport { BlockContent } from 'UI/Elements/Block';\nimport { Checkbox } from '@haldor/ui';\n\nclass GroupUserSelect extends Component {\n\n\t/* Class setup */\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tselected: [],\n\t\t}\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentDidMount = () => {\n\t\tlet selected = [];\n\t\tif (this.props.input.value != null && this.props.input.value.length > 0) {\n\t\t\tthis.props.section.students.forEach(student => {\n\t\t\t\tif (this.isStudentSelected(student)) {\n\t\t\t\t\tselected.push(student);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tselected = [...this.props.section.students];\n\t\t}\n\n\t\tthis.setState({ selected }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\t/* Helper methods */\n\tisStudentSelected = (student) => {\n\t\tconst { value } = this.props.input;\n\t\tconst { section } = this.props;\n\t\tconst { selected } = this.state;\n\n\t\tif (selected.length == 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet found = selected.find(selected => {\n\t\t\treturn selected.id == student.id;\n\t\t});\n\n\t\tif (found != null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value != null && value.length > 0) {\n\t\t\tlet entireGroup = value.find(ref => this.findSectionRelation(ref, section));\n\n\t\t\tif (entireGroup != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet userRelation = value.find(ref => this.findUserRelation(ref, student, section));\n\n\t\t\tif (userRelation != null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfindUserRelation = (ref, student, section) => {\n\t\treturn ref.referenceType == 'USER' && ref.referenceId == student.id && ref.parentId == section.id;\n\t}\n\n\tfindSectionRelation = (ref, section) => {\n\t\treturn ref.referenceType == 'SECTION' && ref.referenceId == section.id;\n\t}\n\n\t/* Events */\n\tonChange = () => {\n\t\tconst { section } = this.props;\n\t\tlet { selected } = this.state;\n\t\tlet relationships = [];\n\n\t\tif (selected.length == section.students.length) {\n\t\t\t// All students selected in this section\n\t\t\tlet relationship = null;\n\n\t\t\tif (this.props.input.value != null && this.props.input.value.length > 0) {\n\t\t\t\tthis.props.input.value.find(ref => this.findSectionRelation(ref, section));\n\t\t\t}\n\n\t\t\tif (relationship == null) {\n\t\t\t\trelationship = {\n\t\t\t\t\tid: -1,\n\t\t\t\t\treferenceType: 'SECTION',\n\t\t\t\t\treferenceId: section.id,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\trelationships.push(relationship);\n\t\t} else {\n\t\t\t// All students are not selected\n\t\t\tselected.forEach(student => {\n\t\t\t\tlet relationship = null;\n\n\t\t\t\tif (this.props.input.value != null && this.props.input.value.length > 0) {\n\t\t\t\t\trelationship = this.props.input.value.find(ref => this.findUserRelation(ref, student, section));\n\t\t\t\t}\n\n\t\t\t\tif (relationship == null) {\n\t\t\t\t\trelationship = {\n\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\t\treferenceId: student.id,\n\t\t\t\t\t\tparentId: section.id,\n\t\t\t\t\t\tparentType: 'SECTION',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\trelationships.push(relationship);\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.input != null) {\n\t\t\tthis.props.input.onChange(relationships);\n\t\t}\n\t}\n\n\tonUserCheckboxClick = (student) => {\n\t\tlet selected = this.state.selected;\n\t\tlet found = selected.findIndex(selected => {\n\t\t\treturn selected.id == student.id;\n\t\t});\n\n\t\tif (found > -1) {\n\t\t\tselected.splice(found, 1);\n\t\t} else {\n\t\t\tselected.push(student);\n\t\t}\n\n\t\tthis.setState({ selected }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\t/* Render methods */\n\trender() {\n\t\tconst { section } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{section.students ? section.students.map(student => {\n\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t this.onUserCheckboxClick(student)}\n\t\t\t\t\t\t\t\tvalue={this.isStudentSelected(student)}\n\t\t\t\t\t\t\t\tlabel={student.firstName + \" \" + student.lastName}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t
\n\t\t\t\t\t}) : null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nexport default GroupUserSelect;\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { reduxForm, Field } from 'redux-form';\nimport { isValidPhoneNumber, parsePhoneNumber } from 'libphonenumber-js';\n\nimport { PhoneInput } from 'UI/Inputs';\nimport { Button } from '@haldor/ui';\n\nclass UserPhone extends Component {\n\n\tsubmit = (values) => {\n\t\treturn new Promise(resolve => {\n\t\t\tif (values.mobilePhone != null && values.mobilePhone != '') {\n\t\t\t\tvalues.mobilePhone = '+' + values.mobilePhone;\n\t\t\t\tvalues.mobilePhone = parsePhoneNumber(values.mobilePhone).format('E.164');\n\t\t\t}\n\n\t\t\tif (this.props.onSubmit != null) {\n\t\t\t\tthis.props.onSubmit(values)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tthis.setState({ error });\n\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve(1);\n\t\t\t}\n\t\t});\n\t}\n\n\tvalidatePhone = (value) => {\n\t\tif (value == null || value == '') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (value.length < 5) {\n\t\t\treturn this.props.translate('Enter a valid phone number');\n\t\t}\n\n\t\tconst number = '+' + value;\n\t\tif (isValidPhoneNumber(number)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this.props.translate('Enter a valid phone number');\n\t}\n\n\tonCancel = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onCancel != null) {\n\t\t\tthis.props.onCancel();\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { submitting, handleSubmit, valid, translate } = this.props;\n\n\t\tif (this.props.user == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst country = this.props.tenant.lcid.slice(-2);\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{submitting ?

: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\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\n\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state, ownProps) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\ttenant: state.user.tenant,\n\t\tinitialValues: ownProps.user,\n\t};\n}\n\nexport default connect(mapStateToProps)(reduxForm({\n\tform: 'UserPhoneForm',\n\tdestroyOnUnmount: true,\n})(UserPhone));","import React, { Component } from 'react';\nimport { getSection } from 'actions/sections';\nimport { connect } from 'react-redux';\nimport User from '_class/User';\nimport { isValidPhoneNumber } from 'libphonenumber-js';\n\nimport { getUsersWithoutMentorGroups, updateUser } from 'actions/user';\n\nimport Modal from 'containers/Modals/Modal';\nimport UserPhoneForm from 'containers/Forms/UserPhone';\n\nimport { Expandable, Spinner } from 'UI';\nimport { Search } from 'UI/Inputs';\nimport { BlockContent } from 'UI/Elements/Block';\n\nimport { Checkbox, Icon, translate } from '@haldor/ui';\n\nimport { appInsights } from 'lib/appInsights';\n\nimport './UserSelect.scss';\nimport DisplayName from 'components/Presentation/DisplayName';\nimport { Stack } from '@mui/material';\n\nclass UserSelect extends Component {\n\n\tstatic defaultProps = {\n\t\tuserSelectAllowed: true,\n\t\tmultipleSectionsAllowed: true,\n\t\tmaximumSectionsAllowed: 0,\n\t\tautoExpandSections: true,\n\t\tselectMultipleSchools: false,\n\t\tshowUsersWithoutMentorGroups: false,\n\t\tshowPhonenumbers: false,\n\t\talwaysFetchStudents: false,\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\trelations: [],\n\t\t\tsections: [],\n\t\t\tfilter: '',\n\t\t\tmyGroups: false,\n\t\t\teducationGroups: true,\n\t\t\tmentorGroups: true,\n\t\t\teditStudent: null,\n\t\t\tisLoading: false,\n\t\t};\n\t}\n\n\tonChange = () => {\n\t\tif (this.props.input != null && this.props.input.onChange != null && typeof (this.props.input.onChange) == 'function') {\n\t\t\tthis.props.input.onChange(this.state.relations);\n\t\t}\n\n\t\tif (this.props.onChange != null && typeof (this.props.onChange) == 'function') {\n\t\t\tthis.props.onChange(this.state.relations);\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tlet { input, sections } = this.props;\n\t\tconst user = new User(this.props.user);\n\t\tlet edit = false;\n\n\t\tif (this.props.input) {\n\t\t\tif (input.value && input.value.length > 0) {\n\t\t\t\tedit = true;\n\t\t\t\tlet clonedSections = JSON.parse(JSON.stringify(sections));\n\t\t\t\tclonedSections.forEach((section) => {\n\t\t\t\t\tlet relation = input.value.find(t => t.referenceId == section.id && t.referenceType == 'SECTION');\n\t\t\t\t\tif (relation != null) {\n\t\t\t\t\t\tsection.checked = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet userRelation = input.value.find(t => t.parentId == section.id && t.parentType == 'SECTION');\n\t\t\t\t\t\tif (userRelation != null) {\n\t\t\t\t\t\t\tsection.checked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.setState({ relations: input.value, sections: clonedSections }, () => {\n\t\t\t\t\tthis.onChange()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (edit == false) {\n\t\t\tthis.setState({ sections: JSON.parse(JSON.stringify(sections)) }, () => {\n\t\t\t\tthis.onChange()\n\t\t\t});\n\t\t}\n\n\t\tif (user.isAdministrator() || user.isSchoolLeader()) {\n\t\t\tif (this.props.showUsersWithoutMentorGroups) {\n\t\t\t\tthis.props.getUsersWithoutMentorGroups();\n\t\t\t}\n\t\t}\n\t}\n\n\tisFetching = (fetching = true) => {\n\t\tif (this.props.setIsLoading != null && typeof this.props.setIsLoading == 'function') {\n\t\t\tthis.setState({ isLoading: fetching });\n\t\t\tthis.props.setIsLoading(fetching);\n\t\t}\n\t}\n\n\ttoggleMyGroups = (checked) => {\n\t\tthis.setState({ myGroups: checked });\n\t}\n\n\ttoggleAll = () => {\n\t\tlet sections = this.state.sections;\n\t\tconst foundSectionRelations = [...this.state.relations].filter(relation => {\n\t\t\treturn relation.referenceType == 'SECTION';\n\t\t});\n\n\t\tif (foundSectionRelations.length != this.state.sections.length) {\n\t\t\tlet relations = [];\n\n\t\t\tif (this.props.alwaysFetchStudents) {\n\t\t\t\tsections.forEach(section => {\n\t\t\t\t\tif (this.state.myGroups) {\n\t\t\t\t\t\tif (section.userRole != 'OWNER') {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.state.educationGroups) {\n\t\t\t\t\t\tif (section.type == 'EDUCATION_GROUP') {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.state.mentorGroups) {\n\t\t\t\t\t\tif (section.type == 'MENTOR_GROUP') {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsection.checked = true;\n\t\t\t\t\treturn section;\n\t\t\t\t})\n\n\t\t\t\tthis.setState({ relations, sections }, async () => {\n\t\t\t\t\tconst mapSeries = async (iterable, action) => {\n\t\t\t\t\t\tfor (const x of iterable) {\n\t\t\t\t\t\t\tawait action(x, true)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this.toggleStudentsWithoutMentorGroup(true);\n\t\t\t\t\tmapSeries(sections, this.onSectionCheckboxClick);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsections.forEach(section => {\n\t\t\t\t\tif (this.state.myGroups) {\n\t\t\t\t\t\tif (section.userRole != 'OWNER') {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.state.educationGroups) {\n\t\t\t\t\t\tif (section.type == 'EDUCATION_GROUP') {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.state.mentorGroups) {\n\t\t\t\t\t\tif (section.type == 'MENTOR_GROUP') {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsection.checked = true;\n\t\t\t\t\tif (section.students != null) {\n\t\t\t\t\t\tsection.students.forEach(student => {\n\t\t\t\t\t\t\tstudent.checked = true;\n\t\t\t\t\t\t\treturn student;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\trelations.unshift({\n\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\treferenceId: section.id,\n\t\t\t\t\t\treferenceType: 'SECTION',\n\t\t\t\t\t\tsection: section,\n\t\t\t\t\t});\n\t\t\t\t})\n\n\t\t\t\tthis.setState({ relations, sections }, () => {\n\t\t\t\t\tthis.toggleStudentsWithoutMentorGroup(true);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tsections.forEach(section => {\n\t\t\t\tsection.checked = false;\n\t\t\t\tif (section.students != null) {\n\t\t\t\t\tsection.students.forEach(student => {\n\t\t\t\t\t\tstudent.checked = false;\n\t\t\t\t\t\treturn student;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn section;\n\t\t\t});\n\n\t\t\tif (this.props.usersWithoutMentorGroups != null) {\n\t\t\t\tthis.props.usersWithoutMentorGroups.forEach(user => {\n\t\t\t\t\tuser.checked = false;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.setState({ relations: [], sections });\n\t\t}\n\t}\n\n\ttoggleSchool = (school) => {\n\t\tschool.checked = !school.checked;\n\t\tlet relations = [...this.state.relations];\n\n\t\tlet relation = relations.findIndex(t =>\n\t\t\tt.referenceId == school.id && t.referenceType == 'SCHOOL'\n\t\t);\n\n\t\tif (relation == -1) {\n\t\t\trelations.push({\n\t\t\t\tid: -1,\n\t\t\t\treferenceId: school.id,\n\t\t\t\treferenceType: 'SCHOOL',\n\t\t\t});\n\t\t} else {\n\t\t\trelations.splice(relation, 1);\n\t\t}\n\n\t\tthis.setState({ relations }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonSectionCheckboxClick = (section, forceActive = false) => {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tsection.checked = !section.checked;\n\t\t\tif (forceActive) {\n\t\t\t\tsection.checked = true;\n\t\t\t}\n\n\t\t\tlet relations = [...this.state.relations];\n\n\t\t\tif (section.checked) {\n\t\t\t\tlet relation = relations.find(t =>\n\t\t\t\t\tt.referenceId == section.id && t.referenceType == 'SECTION'\n\t\t\t\t);\n\n\t\t\t\tif (relation == null) { //Add checked section\n\t\t\t\t\trelations.unshift({\n\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\treferenceId: section.id,\n\t\t\t\t\t\treferenceType: 'SECTION',\n\t\t\t\t\t\tsection: section,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (section.students != null) {\n\t\t\t\t\t\tsection.students.forEach((student) => {\n\t\t\t\t\t\t\tlet studentRelation = relations.find(t =>\n\t\t\t\t\t\t\t\tt.referenceId == student.id && t.referenceType == 'USER' && t.parentId == section.id && t.parentType == 'SECTION'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (studentRelation == null) {\n\t\t\t\t\t\t\t\t// Student doesnt have relation, add it\n\t\t\t\t\t\t\t\tlet relation = {\n\t\t\t\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\t\t\t\treferenceId: student.id,\n\t\t\t\t\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\t\t\t\t\tparentId: section.id,\n\t\t\t\t\t\t\t\t\tparentType: 'SECTION',\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (student.mobilePhone != null) {\n\t\t\t\t\t\t\t\t\trelation.mobilePhone = student.mobilePhone;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\trelations.push(relation);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstudent.checked = true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.props.alwaysFetchStudents && section.students == null) {\n\t\t\t\t\tsection.loading = true;\n\t\t\t\t\tthis.isFetching(true);\n\t\t\t\t\tthis.props.getSection(section.id).then(() => {\n\t\t\t\t\t\tthis.isFetching(false);\n\t\t\t\t\t\tsection.students = this.props.group.students;\n\t\t\t\t\t\tif (this.state.relations.find(t => t.referenceId == section.id && t.referenceType == 'SECTION') != null) {\n\t\t\t\t\t\t\tif (section.students != null) {\n\t\t\t\t\t\t\t\tsection.students.forEach((student) => student.checked = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (section.students != null) {\n\t\t\t\t\t\t\tsection.students.forEach((student) => {\n\t\t\t\t\t\t\t\tlet relation = relations.find(t =>\n\t\t\t\t\t\t\t\t\tt.referenceId == student.id && t.referenceType == 'USER' && t.parentId == section.id && t.parentType == 'SECTION'\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (relation != null) {\n\t\t\t\t\t\t\t\t\tstudent.checked = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (section.checked) {\n\t\t\t\t\t\t\t\t\t\tlet relation = {\n\t\t\t\t\t\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\t\t\t\t\t\treferenceId: student.id,\n\t\t\t\t\t\t\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\t\t\t\t\t\t\tparentId: section.id,\n\t\t\t\t\t\t\t\t\t\t\tparentType: 'SECTION',\n\t\t\t\t\t\t\t\t\t\t\tstudent: student,\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\tif (student.mobilePhone != null) {\n\t\t\t\t\t\t\t\t\t\t\trelation.mobilePhone = student.mobilePhone;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tstudent.checked = true;\n\t\t\t\t\t\t\t\t\t\trelations = [...relations, relation];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsection.loading = false;\n\n\t\t\t\t\t\tthis.setState({ relations }, () => {\n\t\t\t\t\t\t\tthis.onChange();\n\t\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tthis.setState({ relations }, () => {\n\t\t\t\t\tthis.onChange();\n\t\t\t\t\tresolve(1);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Remove section relationship\n\t\t\t\trelations = [...relations.filter((t) => {\n\t\t\t\t\treturn (t.referenceId == section.id && t.referenceType == 'SECTION') == true ? false : true;\n\t\t\t\t})];\n\n\t\t\t\t// Remove all user relations on this section\n\t\t\t\trelations = [...relations.filter((t) => {\n\t\t\t\t\treturn (t.parentId == section.id && t.referenceType == 'USER') == true ? false : true;\n\t\t\t\t})];\n\n\t\t\t\t// Set all students to unchecked\n\t\t\t\tif (section.students != null) {\n\t\t\t\t\tsection.students.forEach((student) => student.checked = false);\n\t\t\t\t}\n\n\t\t\t\tsection.checked = false;\n\t\t\t}\n\n\t\t\tthis.setState({ relations }, () => {\n\t\t\t\tthis.onChange()\n\t\t\t\tresolve(1);\n\t\t\t});\n\t\t})\n\t}\n\n\tonStudentSubmit = (values) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tlet { sections, relations } = this.state;\n\t\t\tconst mobilePhone = values.mobilePhone == '' || values.mobilePhone == null ? null : values.mobilePhone;\n\n\t\t\tthis.props.updateUser(values).then(() => {\n\t\t\t\tresolve(1);\n\n\t\t\t\tsections.map(section => {\n\t\t\t\t\tif (section.students != null) {\n\t\t\t\t\t\tsection.students.map(student => {\n\t\t\t\t\t\t\tif (student.id == values.id) {\n\t\t\t\t\t\t\t\tstudent.mobilePhone = mobilePhone;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn student;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn section;\n\t\t\t\t});\n\n\t\t\t\trelations.map(relation => {\n\t\t\t\t\tif (relation.referenceId == values.id) {\n\t\t\t\t\t\trelation.mobilePhone = mobilePhone;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn relation;\n\t\t\t\t});\n\n\t\t\t\tthis.setState({ sections, relations, editStudent: null }, () => {\n\t\t\t\t\tconst user = new User(this.props.user);\n\t\t\t\t\tif (user.isAdministrator() || user.isSchoolLeader()) {\n\t\t\t\t\t\tif (this.props.showUsersWithoutMentorGroups) {\n\t\t\t\t\t\t\tthis.props.getUsersWithoutMentorGroups();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onChange();\n\t\t\t\t});\n\t\t\t});\n\t\t})\n\t}\n\n\tonUserCheckboxClick = (user, section) => {\n\t\tuser.checked = !user.checked;\n\n\t\tlet relations = [...this.state.relations]\n\n\t\tif (user.checked) {\n\t\t\tlet relation = relations.find(t =>\n\t\t\t\tt.referenceId == user.id && t.referenceType == 'USER' && t.parentId == section.id && t.parentType == 'SECTION'\n\t\t\t);\n\n\t\t\tif (relation == null) { //Add checked user\n\t\t\t\tsection.checked = false;\n\n\t\t\t\tlet relation = {\n\t\t\t\t\tid: -1,\n\t\t\t\t\treferenceId: user.id,\n\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\tparentId: section.id,\n\t\t\t\t\tparentType: 'SECTION',\n\t\t\t\t\tstudent: user,\n\t\t\t\t};\n\n\t\t\t\tif (user.mobilePhone != null) {\n\t\t\t\t\trelation.mobilePhone = user.mobilePhone;\n\t\t\t\t}\n\n\t\t\t\trelations = [...relations, relation];\n\t\t\t}\n\t\t} else { //Removed unchecked user\n\t\t\trelations = [...relations.filter((t) => {\n\t\t\t\treturn (t.referenceId == user.id && t.referenceType == 'USER' && t.parentId == section.id) == true ? false : true;\n\t\t\t})];\n\t\t}\n\n\t\tlet sectionRelation = relations.find(t =>\n\t\t\tt.referenceId == section.id && t.referenceType == 'SECTION'\n\t\t);\n\n\t\t// Check if there is an unchecked student\n\t\tlet uncheckedStudent = section.students.find(student => {\n\t\t\treturn !student.checked;\n\t\t});\n\n\t\tif (sectionRelation != null) {\n\t\t\t// The current section has a reference\n\t\t\tif (uncheckedStudent != null) {\n\t\t\t\t// Remove section reference\n\t\t\t\trelations = [...relations.filter((t) => {\n\t\t\t\t\treturn (t.referenceId == section.id && t.referenceType == 'SECTION') == true ? false : true;\n\t\t\t\t})];\n\n\t\t\t\t// Section is not checked because all students isnt selected\n\t\t\t\tsection.checked = false;\n\t\t\t}\n\t\t} else {\n\t\t\t// The current section has no reference\n\t\t\tif (uncheckedStudent == null) {\n\t\t\t\t// Add section reference if no uncheckedStudent is found (all students checked)\n\t\t\t\trelations.unshift({\n\t\t\t\t\tid: -1,\n\t\t\t\t\treferenceId: section.id,\n\t\t\t\t\treferenceType: 'SECTION',\n\t\t\t\t\tsection: section,\n\t\t\t\t});\n\n\t\t\t\t// Section is checked because all students is selected\n\t\t\t\tsection.checked = true;\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ relations, section }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonOpenSection = (section) => {\n\t\tsection.open = !section.open;\n\n\t\tthis.setState({});\n\n\t\tif (section.students != null && section.students.length == 0) {\n\t\t\tappInsights.trackTrace({ message: \"EDU022 | UserSelect - no students for: \" + section.id });\n\t\t}\n\n\t\tif (!section.open || (section.students != null && section.students.length > 0)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tsection.loading = true;\n\t\tlet relations = [...this.state.relations];\n\t\tthis.isFetching(true);\n\t\tthis.props.getSection(section.id).then(() => {\n\t\t\tthis.isFetching(false);\n\t\t\tsection.students = this.props.group.students;\n\t\t\tif (this.state.relations.find(t => t.referenceId == section.id && t.referenceType == 'SECTION') != null) {\n\t\t\t\tif (section.students != null) {\n\t\t\t\t\tsection.students.forEach((student) => student.checked = true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (section.students != null) {\n\t\t\t\tsection.students.forEach((student) => {\n\t\t\t\t\tlet relation = this.state.relations.find(t =>\n\t\t\t\t\t\tt.referenceId == student.id && t.referenceType == 'USER' && t.parentId == section.id && t.parentType == 'SECTION'\n\t\t\t\t\t);\n\n\t\t\t\t\tif (relation != null) {\n\t\t\t\t\t\tstudent.checked = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet relation = {\n\t\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\t\treferenceId: student.id,\n\t\t\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\t\t\tparentId: section.id,\n\t\t\t\t\t\t\tparentType: 'SECTION',\n\t\t\t\t\t\t\tstudent: student,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (student.mobilePhone != null) {\n\t\t\t\t\t\t\trelation.mobilePhone = student.mobilePhone;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (section.checked) {\n\t\t\t\t\t\t\trelations = [...relations, relation];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsection.loading = false;\n\n\t\t\tthis.setState({ relations }, () => {\n\t\t\t\tthis.onChange();\n\t\t\t});\n\t\t});\n\t}\n\n\ttoggleStudentsWithoutMentorGroup = (checked) => {\n\t\treturn new Promise((resolve) => {\n\t\t\t// Remove or add relationships here\n\t\t\tlet relations = [...this.state.relations]\n\n\t\t\tif (checked) {\n\t\t\t\tif (this.props.usersWithoutMentorGroups != null) {\n\t\t\t\t\tthis.props.usersWithoutMentorGroups.forEach(user => {\n\t\t\t\t\t\tlet foundRelation = this.state.relations.findIndex(relation =>\n\t\t\t\t\t\t\trelation.referenceId == user.userId\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (foundRelation == -1) {\n\t\t\t\t\t\t\tuser.checked = true;\n\n\t\t\t\t\t\t\tlet relation = {\n\t\t\t\t\t\t\t\tid: -1,\n\t\t\t\t\t\t\t\treferenceId: user.userId,\n\t\t\t\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\t\t\t\tstudent: user,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (user.mobilePhone != null) {\n\t\t\t\t\t\t\t\trelation.mobilePhone = user.mobilePhone;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trelations = [...relations, relation];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.props.usersWithoutMentorGroups != null) {\n\t\t\t\t\tthis.props.usersWithoutMentorGroups.forEach(user => {\n\t\t\t\t\t\tuser.checked = false;\n\t\t\t\t\t\trelations = [...relations.filter((t) => {\n\t\t\t\t\t\t\treturn !(t.referenceId == user.userId && t.referenceType == 'USER')\n\t\t\t\t\t\t})];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.setState({ relations }, () => {\n\t\t\t\tthis.onChange();\n\t\t\t\tresolve(1);\n\t\t\t});\n\t\t})\n\t}\n\n\ttoggleStudentWithoutMentorGroup = (user) => {\n\t\tuser.checked = !user.checked;\n\n\t\tlet relations = [...this.state.relations]\n\n\t\tif (user.checked) {\n\t\t\tlet relation = relations.find(t =>\n\t\t\t\tt.referenceId == user.userId && t.referenceType == 'USER'\n\t\t\t);\n\n\t\t\tif (relation == null) { //Add checked user\n\t\t\t\tlet relation = {\n\t\t\t\t\tid: -1,\n\t\t\t\t\treferenceId: user.userId,\n\t\t\t\t\treferenceType: 'USER',\n\t\t\t\t\tstudent: user,\n\t\t\t\t};\n\n\t\t\t\tif (user.mobilePhone != null) {\n\t\t\t\t\trelation.mobilePhone = user.mobilePhone;\n\t\t\t\t}\n\n\t\t\t\trelations = [...relations, relation];\n\t\t\t}\n\t\t} else { //Removed unchecked user\n\t\t\trelations = [...relations.filter((t) => {\n\t\t\t\treturn !(t.referenceId == user.userId && t.referenceType == 'USER')\n\t\t\t})];\n\t\t}\n\n\t\tthis.setState({ relations }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\trenderUsersWithoutMentorGroup = () => {\n\t\tif (this.props.usersWithoutMentorGroups == null || this.props.usersWithoutMentorGroups.length == 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet isAllChecked = true;\n\n\t\tthis.props.usersWithoutMentorGroups.forEach(user => {\n\t\t\tlet foundRelation = this.state.relations.findIndex(relation =>\n\t\t\t\trelation.referenceId == user.userId\n\t\t\t);\n\n\t\t\tif (foundRelation == -1) {\n\t\t\t\tisAllChecked = false;\n\t\t\t}\n\t\t})\n\n\t\tconst title = (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\n\t\treturn (\n\t\t\t { return false; }}\n\t\t\t\tonPlus={toggle => { toggle() }}\n\t\t\t>\n\t\t\t\t
\n\t\t\t\t\t{this.props.usersWithoutMentorGroups\n\t\t\t\t\t\t.sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"))\n\t\t\t\t\t\t.map(user => {\n\t\t\t\t\t\t\tlet label = user.firstName + ' ' + (user.lastName || '');\n\t\t\t\t\t\t\tlet checked = this.state.relations.findIndex(relation =>\n\t\t\t\t\t\t\t\trelation.referenceId == user.userId && relation.parentId == null\n\t\t\t\t\t\t\t) > -1;\n\n\t\t\t\t\t\t\tif (this.props.showPhonenumbers) {\n\t\t\t\t\t\t\t\tlabel = (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{user.firstName} {user.lastName || ''}\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t{user.mobilePhone != null ?\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{user.mobilePhone.length > 4 && isValidPhoneNumber(user.mobilePhone) ?\n\t\t\t\t\t\t\t\t\t\t\t\t\tuser.mobilePhone\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Phone number invalid')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Phone number missing')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t
this.onStudentEdit(e, user)}>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t this.toggleStudentWithoutMentorGroup(user)}\n\t\t\t\t\t\t\t\t\tvalue={checked}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t})}\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\tonStudentEdit = (event, student) => {\n\t\tevent.stopPropagation();\n\t\tthis.setState({ editStudent: student });\n\t}\n\n\trenderSection = (section) => {\n\t\tif (this.state.myGroups) {\n\t\t\tif (section.userRole != 'OWNER') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.state.educationGroups) {\n\t\t\tif (section.type == 'EDUCATION_GROUP') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.state.mentorGroups) {\n\t\t\tif (section.type == 'MENTOR_GROUP') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst title = (\n\t\t\t
\n\t\t\t\t this.onSectionCheckboxClick(section)}\n\t\t\t\t\tlabel={(\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{section.title}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{section.loading ?\n\t\t\t\t\t\t\t\tthis.props.translate('loading') + '...'\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\tthis.props.translate(section.type)\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/>\n\t\t\t
\n\t\t);\n\n\t\treturn (\n\t\t\t { this.onOpenSection(section) }}\n\t\t\t\tonClick={toggle => { return false; }}\n\t\t\t\topen={section.open}\n\t\t\t\theaderStyles={{ padding: '0 !important' }}\n\t\t\t>\n\t\t\t\t{section.error ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{section.error}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{section.loading ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{!section.loading ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{section.students ? section.students\n\t\t\t\t\t\t\t.sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"))\n\t\t\t\t\t\t\t.map(student => {\n\n\t\t\t\t\t\t\t\tlet label = \n\t\t\t\t\t\t\t\tif (this.props.showPhonenumbers) {\n\t\t\t\t\t\t\t\t\tlabel = (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{student.mobilePhone != null ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{student.mobilePhone.length > 4 && isValidPhoneNumber(student.mobilePhone) ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstudent.mobilePhone\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Phone number invalid')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Phone number missing')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t
this.onStudentEdit(e, student)} style={{ marginLeft: \"1rem\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t this.onUserCheckboxClick(student, section)}\n\t\t\t\t\t\t\t\t\t\tvalue={student.checked}\n\t\t\t\t\t\t\t\t\t\tdisabled={this.props.userSelectDisabled}\n\t\t\t\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}) : null}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t\n\t\t);\n\t}\n\n\trenderSingleSchool = () => {\n\t\tlet sections = this.state.sections;\n\n\t\tif (this.state.filter != '') {\n\t\t\tsections = [...sections].filter(section =>\n\t\t\t\tsection.title.toLowerCase().indexOf(this.state.filter.toLowerCase()) > -1\n\t\t\t);\n\t\t}\n\n\t\tconst foundSectionRelations = [...this.state.relations].filter(relation => {\n\t\t\treturn relation.referenceType == 'SECTION';\n\t\t});\n\n\t\tconst schoolSelected = foundSectionRelations.length == this.state.sections.length;\n\t\tconst school = new User(this.props.user).getActiveSchool();\n\n\t\tlet schoolTitle = (\n\t\t\t
\n\t\t);\n\n\t\tif (school != null) {\n\t\t\tschoolTitle = (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)\n\t\t}\n\n\t\tif (sections != null && sections.length == 0) {\n\t\t\treturn
\n\t\t\t\t{this.props.translate('You have no connected groups. Contact your school administrator.')}\n\t\t\t
\n\t\t}\n\n\t\treturn (\n\t\t\t { return false; }}\n\t\t\t\tonPlus={toggle => { toggle() }}\n\t\t\t\theaderStyles={{ padding: '0px !important' }}\n\t\t\t>\n\t\t\t\t{sections.map(section => {\n\t\t\t\t\treturn this.renderSection(section)\n\t\t\t\t})}\n\n\t\t\t\t{this.props.showUsersWithoutMentorGroups ?\n\t\t\t\t\tthis.renderUsersWithoutMentorGroup()\n\t\t\t\t\t: null}\n\t\t\t\n\t\t)\n\t}\n\n\trenderSchool = (school) => {\n\t\tlet checked = false;\n\n\t\tif (this.state.relations.length > 0) {\n\t\t\tchecked = this.state.relations.find(t =>\n\t\t\t\tt.referenceId == school.id && t.referenceType == 'SCHOOL'\n\t\t\t) != null;\n\t\t}\n\n\t\treturn
\n\t\t\t this.toggleSchool(school)}\n\t\t\t\tvalue={checked}\n\t\t\t/>\n\t\t
\n\t}\n\n\trender() {\n\t\tconst { translate } = this.props;\n\t\tconst user = new User(this.props.user);\n\n\t\tlet schools = this.props.user.schools;\n\t\tschools = schools.sort((a, b) => a.title.localeCompare(b.title));\n\n\t\tif (this.props.selectMultipleSchools) {\n\t\t\treturn
\n\t\t\t\t\n\t\t\t\t\t{schools.map(school => {\n\t\t\t\t\t\treturn this.renderSchool(school);\n\t\t\t\t\t})}\n\t\t\t\t\n\t\t\t
\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.state.editStudent != null ?\n\t\t\t\t\t this.setState({ editStudent: null })}>\n\t\t\t\t\t\t this.setState({ editStudent: null })}\n\t\t\t\t\t\t\tonSubmit={this.onStudentSubmit}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t\n\t\t\t\t\t{this.state?.sections.length > 0 ? (
\n\t\t\t\t\t\t this.setState({ filter: value })}\n\t\t\t\t\t\t\tplaceholder={this.props.translate('Search group')}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
) : null}\n\n\t\t\t\t\t{this.renderSingleSchool()}\n\n\t\t\t\t\t{this.state?.sections.length > 0 && (user.isOperationManager() || user.isSchoolLeader() || user.isAdministrator()) ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t this.setState({ mentorGroups: c })}\n\t\t\t\t\t\t\t\t\tvalue={this.state.mentorGroups}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t this.setState({ educationGroups: c })}\n\t\t\t\t\t\t\t\t\tvalue={this.state.educationGroups}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tuser: state.user.currentUser,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tgroup: state.sections.activeSection,\n\t\tusersWithoutMentorGroups: state.user.usersWithoutMentorGroups,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetSection,\n\tgetUsersWithoutMentorGroups,\n\tupdateUser,\n})(UserSelect);","import { fetch_preschoolgoals, search_preschoolgoals } from 'actions/preschoolform';\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { Expandable } from 'UI';\nimport { Checkbox } from '@haldor/ui';\n\nclass SearchPreschoolGoal extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tselectedGoals: [],\n\t\t\tgroups: [],\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.preschoolGoals.length < 1) {\n\t\t\tthis.props.fetch_preschoolgoals();\n\t\t}\n\n\t\tif (this.props.selectedGoals && this.props.selectedGoals.length > 0) {\n\t\t\tthis.setState({ selectedGoals: this.props.selectedGoals }, () => {\n\t\t\t\tif (this.props.onChange != null) {\n\t\t\t\t\tthis.props.onChange(this.state.selectedGoals);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.generateGroups(this.props);\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tthis.generateGroups(nextProps);\n\n\t\tif (nextProps.selectedGoals) {\n\t\t\tif (nextProps.selectedGoals != this.state.selectedGoals) {\n\t\t\t\tthis.setState({ selectedGoals: nextProps.selectedGoals });\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateGroups = (props) => {\n\t\tlet { groups } = this.state;\n\n\t\t// Check if we have preschoolgoals and no groups\n\t\tif (props.preschoolGoals.length > 0 && groups.length < 1) {\n\t\t\tprops.preschoolGoals.map(goal => {\n\t\t\t\tif (!groups.find(group => { return group.title === goal.group })) {\n\t\t\t\t\tgroups.push({ title: goal.group, color: goal.colorCode });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.setState({ groups });\n\t\t}\n\t}\n\n\tonGoalSelect = (goal) => {\n\t\tlet selectedGoals = this.state.selectedGoals;\n\n\t\tconst inArray = selectedGoals.find(function (sG) {\n\t\t\treturn sG.goalId == goal.id;\n\t\t});\n\n\t\tif (!inArray) {\n\t\t\tselectedGoals.push({ goalId: goal.id });\n\t\t} else {\n\t\t\tlet index = selectedGoals.findIndex(function (pG) {\n\t\t\t\treturn pG.goalId == goal.id;\n\t\t\t});\n\n\t\t\tselectedGoals.splice(index, 1);\n\t\t}\n\n\t\tthis.setState({ selectedGoals }, () => {\n\t\t\tif (this.props.onChange) {\n\t\t\t\tthis.props.onChange(selectedGoals);\n\t\t\t}\n\t\t});\n\t}\n\n\trender() {\n\t\tconst { preschoolGoals, handleSubmit, change, pristine, reset, submitting, valid } = this.props;\n\t\tconst { selectedGoals, groups } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{groups && preschoolGoals ?\n\t\t\t\t\tgroups.map(group => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{preschoolGoals.map(goal => {\n\t\t\t\t\t\t\t\t\tlet isChecked = selectedGoals.find(function (sg) {\n\t\t\t\t\t\t\t\t\t\treturn sg.goalId == goal.id;\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (typeof (isChecked) != 'undefined') {\n\t\t\t\t\t\t\t\t\t\tisChecked = true;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tisChecked = false;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn (group.title === goal.group ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t { this.onGoalSelect(goal) }}\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={goal.title} />\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null);\n\t\t\t\t\t\t\t\t})}\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: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tpreschoolGoals: state.PreschoolGoals.preschoolGoals,\n\t}\n}\n\nfunction mapDispatchToProps(dispatch) {\n\treturn bindActionCreators({ fetch_preschoolgoals, search_preschoolgoals }, dispatch);\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchPreschoolGoal);\n","import React, { Component } from 'react';\nimport swal from 'sweetalert2';\nimport { withRouter } from 'react-router-dom';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Form, Field } from 'react-final-form';\nimport User from '_class/User';\n\nimport getEnvironment from 'lib/env';\nimport { getToken, loginRequest, http } from 'lib/msal';\n\nimport { submit_preschooldocument, update_preschooldocument, deleteDocumentationFile } from 'actions/documents';\nimport { getPlanDetails, getPlansBySectionId } from 'actions/plans';\nimport { getSection, getSections } from 'actions/sections';\n\nimport DropzoneComponent from 'react-dropzone-component';\nimport FileItem from 'components/FileItem';\nimport GroupUserSelect from 'components/List/GroupUserSelect';\nimport UserSelect from 'components/List/UserSelect';\n\nimport SearchPreschoolGoals from './SearchPreschoolGoals';\n\nimport { Expandable, List } from 'UI';\nimport { Close, Image } from 'UI/Icons';\nimport { Editor } from 'UI/Inputs';\nimport { Button, Icon, Radio } from '@haldor/ui';\n\nclass Documentation extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tconst isEditing = (props.initialValues != null && Object.keys(props.initialValues).length > 1);\n\n\t\tlet uploadedFiles = [];\n\t\tlet defaultPlan = null;\n\n\t\tif (props.initialValues != null && props.initialValues.associatedFiles != null) {\n\t\t\tuploadedFiles = props.initialValues.associatedFiles;\n\t\t}\n\n\t\tif (props.initialValues != null && props.initialValues.planId != null) {\n\t\t\tdefaultPlan = props.initialValues.planId;\n\t\t} else if (props.planId != null) {\n\t\t\tdefaultPlan = props.planId;\n\t\t}\n\n\t\tthis.state = {\n\t\t\tselectedGoals: isEditing ? props.initialValues.associatedGoals : [],\n\t\t\tFiles: [],\n\t\t\tPlanId: defaultPlan,\n\t\t\tuploadedFiles: uploadedFiles,\n\t\t\tremovedFiles: [],\n\t\t\tsectionRelations: [],\n\t\t\terror: null,\n\t\t\tuploadProgress: null,\n\t\t\tsectionPlans: null,\n\t\t};\n\n\t\tthis.dropzone = null;\n\n\t\t/* Configure dropzone component */\n\t\tthis.componentConfig = {\n\t\t\ticonFiletypes: ['.jpg', '.png', '.gif'],\n\t\t\tshowFiletypeIcon: false,\n\t\t\tpostUrl: http.defaults.baseURL + 'fileItems',\n\t\t\tdropzoneSelector: '.dropzone-trigger',\n\t\t};\n\n\t\tthis.djsConfig = {\n\t\t\tautoProcessQueue: false,\n\t\t\tparallelUploads: 1,\n\t\t\ttimeout: 99900000,\n\t\t\theaders: {},\n\t\t};\n\n\t\tlet request = loginRequest;\n\t\trequest.scopes = [\n\t\t\t...getEnvironment().scopes,\n\t\t\t...request.scopes\n\t\t];\n\n\t\tgetToken(request).then((response) => {\n\t\t\tthis.djsConfig.headers['Authorization'] = 'Bearer ' + response.accessToken;\n\t\t});\n\n\t\tthis.dropzoneEvents = {\n\t\t\tinit: this.dropzoneInit,\n\t\t\taddedfile: this.onAddFile,\n\t\t\tsuccess: () => {\n\t\t\t\tthis.dropzone.processQueue();\n\t\t\t},\n\t\t};\n\t}\n\n\t/* Redux form functions */\n\trequired = (value) => {\n\t\tif (value != null && value !== '') {\n\t\t\tif (value.length > 199) {\n\t\t\t\t// Field failed validation, return error for this field (String)\n\t\t\t\treturn this.props.translate('field-max-200-chars');\n\t\t\t}\n\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string and not over 200 characters\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('field-needs-input');\n\t}\n\n\tquillValidation = (value) => {\n\t\tvar strValue = value;\n\n\t\tvar text = '';\n\t\tif (typeof (strValue) == 'string') {\n\t\t\ttext = strValue.replace(/<(?:.|\\n)*?>/gm, '');\n\t\t}\n\n\t\tif (text == \"\" || text == null) {\n\t\t\treturn this.props.translate('needs-description');\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tvalidateRelationships = (value) => {\n\t\tif (value == null || value == '') {\n\t\t\treturn this.props.translate('select-relation-error');\n\t\t}\n\n\t\tif (value.length == 0) {\n\t\t\treturn this.props.translate('select-relation-error');\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.sections == null) {\n\t\t\tthis.props.getSections();\n\t\t}\n\n\t\tlet sectionId = null;\n\t\tif (this.props.section != null) {\n\t\t\tsectionId = this.props.section.id;\n\t\t}\n\n\t\tif (this.props.sectionId != null) {\n\t\t\tsectionId = this.props.sectionId;\n\t\t}\n\n\t\tif (sectionId != null) {\n\t\t\tthis.props.getPlansBySectionId(sectionId);\n\t\t}\n\n\t\tif (this.props.planId != null) {\n\t\t\tthis.props.getPlanDetails(this.props.planId).then(() => {\n\t\t\t\tconst { plan } = this.props;\n\t\t\t\tlet goals = [];\n\t\t\t\tplan.associatedGoals.map((goal) => {\n\t\t\t\t\tgoals.push({ goalId: goal.goalId });\n\t\t\t\t});\n\n\t\t\t\tthis.setState({ selectedGoals: goals });\n\t\t\t});\n\t\t}\n\t}\n\n\tonCancel = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onModalClose) {\n\t\t\tthis.props.onModalClose();\n\t\t}\n\t}\n\n\tsubmit = (values) => {\n\t\treturn new Promise(resolve => {\n\t\t\tif (values.relationships == null || values.relationships.length == 0) {\n\t\t\t\tthis.setState({ error: this.props.translate('select-relation-error') + '!' });\n\t\t\t\tresolve(0);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst { initialValues } = this.props;\n\t\t\tconst isEditing = (initialValues != null && Object.keys(initialValues).length > 1 && initialValues.id != null);\n\t\t\tconst user = new User(this.props.currentUser);\n\n\t\t\tif (this.dropzone && this.dropzone.getQueuedFiles().length > 0) {\n\t\t\t\tthis.dropzone.on('totaluploadprogress', (progress) => {\n\t\t\t\t\tthis.setState({ uploadProgress: progress });\n\t\t\t\t});\n\n\t\t\t\tconst that = this;\n\t\t\t\tthis.readyForSubmit(values).then((data) => {\n\t\t\t\t\tlet url = `${http.defaults.baseURL}documentations/${data}/files?schoolId=${user.getActiveSchool().id}`;\n\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\turl = `${http.defaults.baseURL}documentations/${initialValues.id}/files?schoolId=${user.getActiveSchool().id}`;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.componentConfig.postUrl = url;\n\t\t\t\t\tthis.dropzone.options.url = url;\n\t\t\t\t\tthis.dropzone.processQueue();\n\n\t\t\t\t\tthis.dropzone.on(\"queuecomplete\", (images) => {\n\t\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\t\tif (that.props.onModalClose) {\n\t\t\t\t\t\t\t\tthat.props.onModalClose(true, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.props.history.push(`/preschooldocument/${data}`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst that = this;\n\t\t\t\tthis.readyForSubmit(values).then((data) => {\n\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\tif (that.props.onModalClose) {\n\t\t\t\t\t\t\tthat.props.onModalClose(true, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.props.history.push(`/preschooldocument/${data}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(data);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\treadyForSubmit = (values, callback) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst {\n\t\t\t\tselectedGoals,\n\t\t\t\tPlanId,\n\t\t\t\tremovedFiles,\n\t\t\t} = this.state;\n\n\t\t\tconst {\n\t\t\t\tsubmit_preschooldocument,\n\t\t\t\tupdate_preschooldocument,\n\t\t\t\tinitialValues,\n\t\t\t\tcurrentUser,\n\t\t\t} = this.props;\n\n\t\t\tlet goalIds = selectedGoals;\n\n\t\t\t/* Add custom inputs to the values object that redux form creates */\n\t\t\tvalues.associatedGoals = goalIds;\n\t\t\tvalues.planId = PlanId;\n\n\t\t\tif (values.status == null) {\n\t\t\t\tvalues.status = 'DOCUMENTATION_PUBLISHED';\n\t\t\t}\n\n\t\t\tif (values.sender != null) {\n\t\t\t\tif (values.sender == 'me') {\n\t\t\t\t\tvalues.author = currentUser.firstName + ' ' + currentUser.lastName;\n\t\t\t\t}\n\n\t\t\t\tdelete values.sender;\n\t\t\t}\n\n\t\t\t// Check for initialValues and make sure we have an id\n\t\t\tif (Object.keys(initialValues).length > 1 && initialValues.id != null) {\n\t\t\t\t// If the goals hasn't changed during the update we\n\t\t\t\t// just fetch the existing goals on the documentation and send them back\n\t\t\t\tif (goalIds.length < 1) {\n\t\t\t\t\tgoalIds = initialValues.associatedGoals;\n\t\t\t\t}\n\n\t\t\t\tif (removedFiles.length > 0) {\n\t\t\t\t\tremovedFiles.map((file) => {\n\t\t\t\t\t\tthis.props.deleteDocumentationFile(values.id, file.id);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tvalues.associatedGoals = goalIds;\n\n\t\t\t\tupdate_preschooldocument(values, (data) => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsubmit_preschooldocument(values, (data) => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonGoalsChange = (selectedGoals) => {\n\t\tthis.setState({ selectedGoals });\n\t}\n\n\tonPlanChange = (event) => {\n\t\tif (event.target.value != this.state.PlanId) {\n\t\t\tthis.props.getPlanDetails(event.target.value).then(() => {\n\t\t\t\tconst { plan } = this.props;\n\t\t\t\tlet goals = [];\n\t\t\t\tplan.associatedGoals.map(goal => {\n\t\t\t\t\tgoals.push({ goalId: goal.goalId });\n\t\t\t\t});\n\n\t\t\t\tthis.setState({ selectedGoals: goals });\n\t\t\t});\n\n\t\t\tthis.setState({ PlanId: event.target.value });\n\t\t}\n\t}\n\n\tdropzoneInit = (dropzone) => {\n\t\tthis.dropzone = dropzone;\n\t}\n\n\tonAddFile = (file) => {\n\t\tlet { Files } = this.state;\n\n\t\tif (file.size > 101000024) {\n\t\t\tthis.dropzone.removeFile(file);\n\n\t\t\t// File over 100MB\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('file-too-big'),\n\t\t\t\tshowCancelButton: false,\n\t\t\t\tconfirmButtonText: this.props.translate('okey'),\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\tFiles.push(file);\n\n\t\tsetTimeout(() => {\n\t\t\tthis.setState({ Files });\n\t\t}, 40);\n\t}\n\n\tonRemoveFile = (file) => {\n\t\tlet { Files } = this.state;\n\n\t\tconst fileIndex = Files.findIndex(function (f) {\n\t\t\treturn f.upload.filename === file.upload.filename;\n\t\t});\n\n\t\tFiles.splice(fileIndex, 1);\n\t\tthis.setState({ Files }, () => {\n\t\t\tif (this.dropzone) {\n\t\t\t\tthis.dropzone.removeFile(file);\n\t\t\t}\n\t\t});\n\t}\n\n\tremoveFileFromDocument = (file) => {\n\t\tlet { removedFiles, uploadedFiles } = this.state;\n\n\t\tif (file != null) {\n\t\t\tuploadedFiles = uploadedFiles.filter((f) => f.id != file.id);\n\t\t\tremovedFiles.push(file);\n\t\t\tthis.setState({ removedFiles, uploadedFiles });\n\t\t}\n\t}\n\n\trenderInput = ({ input, label, type, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderTextarea = ({ input, label, type, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))}\n\t\t\t
\n\t\t);\n\t}\n\n\trelationChange = (event) => {\n\t\tconst { PlanId } = this.state;\n\t\tlet sectionRelations = [];\n\t\tlet relations = Object.values(event);\n\n\t\trelations.map(rel => {\n\t\t\tif (rel.referenceType == 'SECTION') {\n\t\t\t\tsectionRelations.push(rel);\n\t\t\t}\n\n\t\t\tif (rel.referenceType == 'USER') {\n\t\t\t\tsectionRelations.push(rel);\n\t\t\t}\n\t\t});\n\n\t\tif (sectionRelations.length > 0) {\n\t\t\tconst firstReference = sectionRelations[0];\n\t\t\tlet sectionId = null;\n\n\t\t\tif (firstReference.referenceType == 'USER') {\n\t\t\t\tsectionId = firstReference.parentId;\n\t\t\t} else {\n\t\t\t\tsectionId = firstReference.referenceId;\n\t\t\t}\n\n\t\t\tif (this.state.sectionPlans != sectionId) {\n\t\t\t\tthis.props.getPlansBySectionId(sectionId);\n\t\t\t\tthis.setState({ sectionPlans: sectionId })\n\t\t\t}\n\t\t}\n\n\t\tif (sectionRelations.length > 1 && PlanId != null) {\n\t\t\tif (this.props.section == null) {\n\t\t\t\tthis.setState({ PlanId: null, selectedGoals: [], });\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ sectionRelations });\n\t}\n\n\ttriggerDropzone = () => {\n\t\tif (this.dropzone != null) {\n\t\t\tthis.dropzone.hiddenFileInput.click();\n\t\t}\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tsections,\n\t\t\tinitialValues,\n\t\t\tcurrentUser,\n\t\t} = this.props;\n\n\t\tlet { Files, uploadedFiles, PlanId, sectionRelations } = this.state;\n\t\tconst isEditing = (initialValues != null && initialValues.id != null);\n\n\t\tif (sectionRelations != null && sectionRelations.length > 0) {\n\t\t\tsectionRelations = sectionRelations.filter(rel =>\n\t\t\t\trel.referenceType == 'SECTION'\n\t\t\t);\n\t\t}\n\n\t\tlet myOwnedEducationGroups = sections != null ? sections.filter((section) => { return section.currentUserRole === 'OWNER' }) : [];\n\n\t\tif (isEditing) {\n\t\t\tconst { author } = this.props.initialValues;\n\t\t\tinitialValues.sender = author == currentUser.firstName + ' ' + currentUser.lastName ? 'me' : 'custom';\n\t\t} else {\n\t\t\tinitialValues.sender = 'me';\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t true}\n\t\t\t\t\tmutators={{\n\t\t\t\t\t\tsetStatusDraft: (args, state, utils) => {\n\t\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'DOCUMENTATION_DRAFT');\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsetStatusPublished: (args, state, utils) => {\n\t\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'DOCUMENTATION_PUBLISHED');\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({ form, valid, handleSubmit, submitting }) => {\n\t\t\t\t\t\tconst senderValue = form.getFieldState('sender')?.value;\n\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.props.section != null ?\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{this.state.error != null ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{this.state.error}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t 1 ? true : false}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.props.sectionPlans !== null ?\n\t\t\t\t\t\t\t\t\t\t\tthis.props.sectionPlans.map((plan) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{senderValue == 'custom' ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('drop-files-or-click-here')}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{Files && Files.length > 0 ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{Files.map(file => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t -1 ? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: `url(${file.dataURL})`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} : {}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`dropzone-file-preview ${!file.accepted ? \" not-accepted\" : \"\"} ${file.upload.progress > 0 ? ' upload-started' : ' not-started'} ${file.type.indexOf('image') > -1 ? ' image' : ''}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.name + ' '}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({file.size > 1048576 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath.ceil(file.size / 1024 / 1024) + 'MB'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath.max(Math.ceil(file.size / 1024), 1) + 'KB'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{ this.onRemoveFile(file) }} className=\"file-delete-btn\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.accepted && file.size > 7500000 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('size-warning')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!file.accepted ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('file-too-big')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.type.indexOf('image') > -1 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{isEditing && initialValues.associatedFiles != null ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{uploadedFiles != null && uploadedFiles.length > 0 && initialValues?.associatedFiles?.length > 0 ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{uploadedFiles.map((file) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn -1 ? ' image' : ''}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{ this.removeFileFromDocument(file) }} className=\"file-delete-btn\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.type.indexOf('image') > -1 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusPublished();\n\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={submitting || !valid}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{this.props.translate('publish')}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{isEditing && initialValues.status != \"DOCUMENTATION_DRAFT\" ? null : (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusDraft();\n\t\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tdisabled={submitting || !valid}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{this.props.translate(\"save-draft\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{submitting ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t{this.state.uploadProgress != null ?\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state, ownProps) {\n\tlet values = {\n\t\t...ownProps.values,\n\t\t...state.Documents.activeDocument\n\t};\n\n\treturn {\n\t\tcurrentUser: state.user.currentUser,\n\t\tinitialValues: values,\n\t\tsectionPlans: state.planning.sectionPlans,\n\t\tplan: state.planning.active_plan,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tsections: state.sections.educationGroups,\n\t\tpreschoolDocuments: state.Posts.documents,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tsubmit_preschooldocument,\n\tupdate_preschooldocument,\n\tgetPlansBySectionId,\n\tgetSection,\n\tgetSections,\n\tdeleteDocumentationFile,\n\tgetPlanDetails,\n})(Documentation));\n","import Moment from 'moment';\nimport React, { Component } from 'react';\nimport DatePicker from 'react-datepicker';\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\nimport sv from 'date-fns/locale/sv';\nimport no from 'date-fns/locale/nb';\nimport en from 'date-fns/locale/en-US';\nimport da from 'date-fns/locale/da';\nimport uk from 'date-fns/locale/uk';\nimport { translate, getActiveLanguage } from '@haldor/ui';\nimport { connect } from 'react-redux';\n\nclass DatePickerEvent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tMoment.locale(getActiveLanguage());\n\t\tregisterLocale('en-US', en);\n\t\tregisterLocale('sv-SE', sv);\n\t\tregisterLocale('nb-NO', no);\n\t\tregisterLocale('da-DK', da);\n\t\tregisterLocale('uk', uk);\n\t\tsetDefaultLocale('en-US');\n\n\t\tthis.state = {\n\t\t\ttimeStart: props.values?.eventDate != null ? Moment.utc(props.values.eventDate).local() : null,\n\t\t\tdtPickerStartDate: props.values?.eventDate != null ? Moment.utc(props.values.eventDate).local() : null,\n\t\t\tPublished: props.values?.published != null && props.values?.status == 'POST_PUBLISHED' ? Moment.utc(props.values.published).local() :\n\t\t\t\tprops.values?.published != null && Moment.utc(props.values.published).local() > Moment() ? Moment.utc(props.values.published).local() : Moment(),\n\t\t\tdtPickerPublished: props.values?.published != null && props.values?.status == 'POST_PUBLISHED' ? Moment.utc(props.values.published).local() :\n\t\t\t\tprops.values?.published != null && Moment.utc(props.values.published).local() > Moment() ? Moment.utc(props.values.published).local() : Moment(),\n\t\t\tdtPickerDueDate: props.values?.validUntil != null ? Moment.utc(props.values.validUntil).local() : null,\n\t\t\ttimeEnd: props.values?.validUntil != null ? Moment.utc(props.values.validUntil).local() : null,\n\t\t\tupdated: false,\n\t\t};\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.values != null && this.state.updated == false) {\n\t\t\tthis.setState({\n\t\t\t\tdtPickerStartDate: nextProps.values.eventDate != null ? Moment.utc(nextProps.values.eventDate).local() : this.state.dtPickerStartDate,\n\t\t\t\tPublished: nextProps.values.published != null ? Moment.utc(nextProps.values.published).local() : this.state.Published,\n\t\t\t\tdtPickerPublished: nextProps.values.published != null && nextProps.values?.status == 'POST_PUBLISHED' ? Moment.utc(nextProps.values.published).local() : this.state.dtPickerPublished,\n\t\t\t\tdtPickerDueDate: nextProps.values.validUntil != null ? Moment.utc(nextProps.values.validUntil).local() : this.state.dtPickerDueDate,\n\t\t\t\ttimeEnd: nextProps.values.validUntil != null ? Moment.utc(nextProps.values.validUntil).local() : this.state.timeEnd,\n\t\t\t\tupdated: true\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.onChange();\n\t}\n\n\tonStartChange = (date) => {\n\t\tdate = date != null ? Moment(date) : null;\n\t\tlet { dtPickerStartDate, timeStart, dtPickerDueDate, timeEnd } = this.state;\n\t\tdtPickerStartDate = date != null ? Moment(date).set({ hours: 23, minutes: 59, seconds: 59 }) : null;\n\t\ttimeStart = date != null ? Moment(date).set({ hours: 23, minutes: 59, seconds: 59 }) : null;\n\n\t\tif (date != null) {\n\t\t\tvar dueDate = Moment(date).add(2, 'days');\n\t\t\tif (dtPickerDueDate != null && date.diff(dtPickerDueDate, 'days') > 0) {\n\t\t\t\tdtPickerDueDate = dueDate;\n\t\t\t\ttimeEnd = dueDate;\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ dtPickerDueDate, timeEnd, dtPickerStartDate, timeStart }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonEndChange = (date) => {\n\t\tdate = date != null ? Moment(date) : null;\n\t\tlet { dtPickerDueDate, timeEnd, dtPickerPublished, Published } = this.state;\n\t\tdtPickerDueDate = date != null ? Moment(date).set({ hours: 23, minutes: 59, seconds: 59 }) : null;\n\t\ttimeEnd = date != null ? Moment(date).set({ hours: 23, minutes: 59, seconds: 59 }) : null;\n\n\t\tif (date != null && timeEnd) {\n\t\t\tvar publishedDate = timeEnd;\n\t\t\tif (timeEnd.diff(dtPickerPublished, 'days') < 0) {\n\t\t\t\tdtPickerPublished = publishedDate;\n\t\t\t\tPublished = publishedDate;\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ dtPickerDueDate, timeEnd, dtPickerPublished, Published }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonPublishedChange = (date) => {\n\t\tdate = date != null ? Moment(date) : null;\n\t\tlet { dtPickerPublished, Published, dtPickerDueDate, timeEnd, dtPickerStartDate, timeStart } = this.state;\n\t\tdtPickerPublished = date != null ? Moment(date).set({ hours: 0, minutes: 0, seconds: 0 }) : null;\n\t\tPublished = date != null ? Moment(date).set({ hours: 0, minutes: 0, seconds: 0 }) : null;\n\n\t\tif (date != null) {\n\t\t\tvar dueDate = date.add(2, 'days');\n\t\t\tvar startDate = date;\n\t\t\tif (dtPickerDueDate != null && date.diff(dtPickerDueDate) > 0) {\n\t\t\t\tdtPickerDueDate = dueDate;\n\t\t\t\ttimeEnd = dueDate;\n\t\t\t}\n\n\t\t\tif (dtPickerStartDate != null && date.diff(dtPickerStartDate) > 0) {\n\t\t\t\tdtPickerStartDate = startDate;\n\t\t\t\ttimeStart = startDate;\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ dtPickerPublished, dtPickerDueDate, timeEnd, timeStart, dtPickerStartDate, Published }, () => {\n\t\t\tthis.onChange();\n\t\t});\n\t}\n\n\tonChange = () => {\n\t\tif (this.props.onChange) {\n\t\t\tlet start = this.state.timeStart != null ?\n\t\t\t\tMoment(this.state.timeStart).format() : null;\n\n\t\t\tlet end = this.state.timeEnd != null ?\n\t\t\t\tMoment(this.state.timeEnd).format() : null;\n\n\t\t\tlet published = this.state.Published != null ?\n\t\t\t\tMoment(this.state.Published).format() : null;\n\n\t\t\tconst dates = {\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tpublished,\n\t\t\t};\n\n\t\t\tthis.props.onChange(dates);\n\t\t}\n\t}\n\n\tgetDateFormat = () => {\n\t\tlet format = Moment.localeData(getActiveLanguage()).longDateFormat(\"L\");\n\t\tlet newFormat = format.replace(\"YYYY\", \"yyyy\");\n\t\tlet days = newFormat.replace(\"DD\", \"dd\");\n\t\treturn days;\n\t};\n\n\tnormalizeLocale = (locale) => {\n\t\tconst [language, region] = locale.split('-');\n\n\t\tif (language.toUpperCase() == \"UK\"){\n\t\t\treturn `uk`;\n\t\t}\n\t\treturn `${language}-${region.toUpperCase()}`;\n\t};\n\n\trender() {\n\t\tconst { showEnd } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t{showEnd ?\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{this.props.translate('important-visible-seven-days')}\n\t\t\t\t\t\t\t\t
\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: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tlanguages: state.Languages.languages\n\t};\n}\n\nexport default connect(mapStateToProps)(DatePickerEvent);\n","import { addError } from 'actions';\nimport { submit_post, update_post, deletePostFile } from 'actions/posts';\nimport { getMentorGroups, getSection, getSections } from 'actions/sections';\nimport moment from 'moment';\n\nimport User from '_class/User';\n\nimport GroupUserSelect from 'components/List/GroupUserSelect';\nimport UserSelect from 'components/List/UserSelect';\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport DropzoneComponent from 'react-dropzone-component';\nimport { connect } from 'react-redux';\nimport { Form, Field } from 'react-final-form';\nimport { Expandable, List, Spinner } from 'UI';\nimport { withRouter } from 'react-router-dom';\nimport { Button, Checkbox, Radio, Icon, translate } from '@haldor/ui';\nimport { Close, Image } from 'UI/Icons';\nimport { Editor } from 'UI/Inputs';\nimport DatePickerEvent from './Partials/DatePickerEvent';\nimport swal from 'sweetalert2';\nimport FileItem from 'components/FileItem';\n\nimport getEnvironment from 'lib/env';\nimport { getToken, loginRequest, http } from 'lib/msal';\n\nclass Post extends Component {\n\tstatic contextTypes = {\n\t\trouter: PropTypes.object,\n\t};\n\n\tstatic defaultProps = {\n\t\tselectMultipleSchools: false,\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet uploadedFiles = [];\n\t\tif (props.activePost != null && props.activePost.associatedFiles != null) {\n\t\t\tuploadedFiles = props.activePost.associatedFiles;\n\t\t}\n\n\t\tthis.state = {\n\t\t\tFiles: [],\n\t\t\tuploadedFiles: uploadedFiles,\n\t\t\tremovedFiles: [],\n\t\t\timportant: props.activePost != null ? props.activePost.important : false,\n\t\t\tdateStart: null,\n\t\t\tdateEnd: null,\n\t\t\tpublished: null,\n\t\t\terror: null,\n\t\t\tuploadProgress: null,\n\t\t}\n\n\t\tthis.dropzone = null;\n\n\t\t/* Configure dropzone component */\n\t\tthis.componentConfig = {\n\t\t\ticonFiletypes: ['.jpg', '.png', '.gif'],\n\t\t\tshowFiletypeIcon: false,\n\t\t\tpostUrl: http.defaults.baseURL + 'fileItems',\n\t\t\tdropzoneSelector: '.dropzone-trigger',\n\t\t};\n\n\t\tthis.djsConfig = {\n\t\t\tautoProcessQueue: false,\n\t\t\tparallelUploads: 1,\n\t\t\ttimeout: 99900000,\n\t\t\theaders: {},\n\t\t};\n\n\t\tlet request = loginRequest;\n\t\trequest.scopes = [\n\t\t\t...getEnvironment().scopes,\n\t\t\t...request.scopes\n\t\t];\n\n\t\tgetToken(request).then((response) => {\n\t\t\tthis.djsConfig.headers['Authorization'] = 'Bearer ' + response.accessToken;\n\t\t});\n\n\t\tthis.dropzoneEvents = {\n\t\t\tinit: this.dropzoneInit,\n\t\t\taddedfile: this.onAddFile,\n\t\t\tsuccess: () => {\n\t\t\t\tthis.dropzone.processQueue();\n\t\t\t},\n\t\t};\n\t}\n\n\t/* Redux form functions */\n\trequired = (value) => {\n\t\tif (value != null && value !== '') {\n\t\t\tif (value.length > 199) {\n\t\t\t\t// Field failed validation, return error for this field (String)\n\t\t\t\treturn this.props.translate('field-max-200-chars');\n\t\t\t}\n\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string and not over 200 characters\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('field-needs-input');\n\t}\n\n\tquillValidation = (value) => {\n\t\tvar strValue = value;\n\n\t\tvar text = '';\n\t\tif (typeof (strValue) == 'string') {\n\t\t\ttext = strValue.replace(/<(?:.|\\n)*?>/gm, '');\n\t\t}\n\n\t\tif (text == \"\" || text == null) {\n\t\t\treturn this.props.translate('needs-description');\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tvalidateRelationships = (value) => {\n\t\tif (value == null || value == '') {\n\t\t\treturn this.props.translate('select-relation-error');\n\t\t}\n\n\t\tif (value.length == 0) {\n\t\t\treturn this.props.translate('select-relation-error');\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tcomponentDidMount = () => {\n\t\tlet promises = [];\n\t\tconst user = new User(this.props.currentUser);\n\t\tif ((user.isMentor() || user.isSchoolLeader() || user.isAdministrator()) && this.props.mentorGroups.length == 0) {\n\t\t\tlet mentorPromise = this.props.getMentorGroups();\n\t\t\tpromises.push(mentorPromise);\n\t\t}\n\n\t\tif (this.props.sections == null) {\n\t\t\tlet sectionPromise = this.props.getSections();\n\t\t\tpromises.push(sectionPromise);\n\t\t}\n\n\t\tif (promises.length > 0) {\n\t\t\tthis.setState({ loading: true });\n\t\t}\n\n\t\tPromise.all(promises).then(() => {\n\t\t\tthis.setState({ loading: false });\n\t\t});\n\t}\n\n\tonCancel = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onModalClose) {\n\t\t\tthis.props.onModalClose();\n\t\t}\n\t}\n\n\tsubmit = (values) => new Promise((resolve, reject) => {\n\t\tif (values.relationships == null) {\n\t\t\tthis.setState({ error: this.props.translate('select-relation-error') + '!' });\n\n\t\t\treject(0);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { activePost } = this.props;\n\t\tconst isEditing = (activePost != null && Object.keys(activePost).length > 0);\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (this.dropzone && this.dropzone.getQueuedFiles().length > 0) {\n\t\t\tthis.dropzone.on('totaluploadprogress', (progress) => {\n\t\t\t\tthis.setState({ uploadProgress: progress });\n\t\t\t});\n\n\t\t\tconst that = this;\n\t\t\tthis.readyForSubmit(values).then((data) => {\n\t\t\t\tlet url = `${http.defaults.baseURL}posts/${data}/files?schoolId=${user.getActiveSchool().id}`;\n\t\t\t\tif (isEditing) {\n\t\t\t\t\turl = `${http.defaults.baseURL}posts/${activePost.id}/files?schoolId=${user.getActiveSchool().id}`;\n\t\t\t\t}\n\n\t\t\t\tthis.componentConfig.postUrl = url;\n\t\t\t\tthis.dropzone.options.url = url;\n\t\t\t\tthis.dropzone.processQueue();\n\n\t\t\t\tthis.dropzone.on(\"queuecomplete\", () => {\n\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\tif (that.props.onModalClose) {\n\t\t\t\t\t\t\tthat.props.onModalClose(true, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.props.history.push(`/post/${data}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(data);\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst that = this;\n\t\t\tthis.readyForSubmit(values).then((data) => {\n\t\t\t\tif (isEditing) {\n\t\t\t\t\tif (that.props.onModalClose) {\n\t\t\t\t\t\tthat.props.onModalClose(true, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.history.push(`/post/${data}`);\n\t\t\t\t}\n\n\t\t\t\tresolve(data);\n\t\t\t});\n\t\t}\n\t});\n\n\treadyForSubmit = (values) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst {\n\t\t\t\tremovedFiles,\n\t\t\t\tdateStart,\n\t\t\t\tdateEnd,\n\t\t\t\tpublished,\n\t\t\t\timportant,\n\t\t\t} = this.state;\n\n\t\t\tconst { submit_post, update_post, activePost } = this.props;\n\t\t\tconst isEditing = (activePost != null && Object.keys(activePost).length > 1);\n\n\t\t\t/* Add custom inputs to the values object that redux form creates */\n\t\t\tvalues.eventDate = dateStart;\n\t\t\tvalues.validUntil = dateEnd;\n\t\t\tvalues.published = published;\n\t\t\tvalues.important = important;\n\t\t\tvalues.targetAudience = '';\n\n\t\t\tif (values.targetStudents) {\n\t\t\t\tvalues.targetAudience += 'STUDENTS:';\n\t\t\t}\n\n\t\t\tif (values.targetGuardians) {\n\t\t\t\tvalues.targetAudience += 'GUARDIANS:';\n\t\t\t}\n\n\t\t\tif (values.targetGuardians && values.targetStudents) {\n\t\t\t\tvalues.targetAudience = 'ALL';\n\t\t\t}\n\n\t\t\tif (values.targetAudience[values.targetAudience.length - 1] == ':') {\n\t\t\t\tvalues.targetAudience.substring(0, values.targetAudience.length - 1);\n\t\t\t}\n\n\t\t\tif (values.status == null) {\n\t\t\t\tvalues.status = 'POST_PUBLISHED';\n\t\t\t}\n\n\t\t\t// Remove internal form properties from data\n\t\t\tdelete values.targetGuardians;\n\t\t\tdelete values.targetStudents;\n\n\t\t\tif (values.sender != null) {\n\t\t\t\tif (values.sender == 'me') {\n\t\t\t\t\tvalues.author = null;\n\t\t\t\t}\n\n\t\t\t\tdelete values.sender;\n\t\t\t}\n\n\t\t\t// Convert dates to UTC\n\t\t\tvalues.published = moment(values.published).utc().format();\n\t\t\tif (values.eventDate != null) {\n\t\t\t\tvalues.eventDate = moment(values.eventDate).utc().format();\n\t\t\t}\n\n\t\t\tif (values.validUntil != null) {\n\t\t\t\tvalues.validUntil = moment(values.validUntil).utc().format();\n\t\t\t}\n\n\t\t\tif (isEditing) {\n\t\t\t\tif (removedFiles.length > 0) {\n\t\t\t\t\tremovedFiles.map((file) => {\n\t\t\t\t\t\tthis.props.deletePostFile(values.id, file.id);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Clear out the \"files\" object with fetched files to save data\n\t\t\t\tvalues.files = null; // Do NOT send the file src in the PUT request\n\n\t\t\t\tupdate_post(values, (data) => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsubmit_post(values).then(() => {\n\t\t\t\t\tresolve(this.props.createdPost.id);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonDateChange = (dates) => {\n\n\t\tdates.start = dates.start != null ? moment(dates.start) : null;\n\t\tdates.end = dates.end != null ? moment(dates.end) : null;\n\t\tdates.published = dates.published != null ? moment(dates.published) : null;\n\n\t\tthis.setState({ dateStart: dates.start, dateEnd: dates.end, published: dates.published });\n\t}\n\n\tdropzoneInit = (dropzone) => {\n\t\tthis.dropzone = dropzone;\n\t}\n\n\tonAddFile = (file) => {\n\t\tlet { Files } = this.state;\n\n\t\tif (file.size > 101000024) {\n\t\t\tthis.dropzone.removeFile(file);\n\n\t\t\t// File over 100MB\n\t\t\tswal.fire({\n\t\t\t\ttitle: this.props.translate('file-too-big'),\n\t\t\t\tshowCancelButton: false,\n\t\t\t\tconfirmButtonText: this.props.translate('okey'),\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\tFiles.push(file);\n\n\t\tsetTimeout(() => {\n\t\t\tthis.setState({ Files });\n\t\t}, 40);\n\t}\n\n\tonRemoveFile = (file) => {\n\t\tlet { Files } = this.state;\n\n\t\tconst fileIndex = Files.findIndex(function (f) {\n\t\t\treturn f.upload.filename === file.upload.filename;\n\t\t});\n\n\t\tFiles.splice(fileIndex, 1);\n\t\tthis.setState({ Files }, () => {\n\t\t\tif (this.dropzone) {\n\t\t\t\tthis.dropzone.removeFile(file);\n\t\t\t}\n\t\t});\n\t}\n\n\tremoveFileFromDocument = (file) => {\n\t\tlet { uploadedFiles, removedFiles } = this.state;\n\n\t\tif (file != null) {\n\t\t\tconst filesIndex = uploadedFiles.findIndex(function (f) {\n\t\t\t\treturn f.id === file.id;\n\t\t\t});\n\n\t\t\tconst fileObject = uploadedFiles[filesIndex];\n\n\t\t\tuploadedFiles.splice(filesIndex, 1);\n\t\t\tremovedFiles.push(fileObject);\n\n\t\t\tthis.setState({ uploadedFiles, removedFiles });\n\t\t}\n\t}\n\n\timportantToggle = (checked) => {\n\t\tthis.setState({ important: checked });\n\t}\n\n\trenderInput = ({ input, label, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderTextarea = ({ input, label, type, placeholder, meta: { touched, error, warning } }) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched && ((error &&\n\t\t\t\t\t{error}) || (warning &&\n\t\t\t\t\t\t{warning}))}\n\t\t\t
\n\t\t);\n\t}\n\n\ttriggerDropzone = () => {\n\t\tif (this.dropzone != null) {\n\t\t\tthis.dropzone.hiddenFileInput.click();\n\t\t}\n\t}\n\n\trender() {\n\t\tlet sections = [];\n\n\t\tlet initialValues = JSON.parse(JSON.stringify(this.props.activePost))\n\t\tconst isEditing = (initialValues != null && initialValues.id != null);\n\n\t\tif (initialValues == null) {\n\t\t\tinitialValues = {};\n\t\t}\n\n\t\tif (isEditing) {\n\t\t\tconst { targetAudience, author } = initialValues;\n\t\t\tconst { currentUser } = this.props;\n\n\t\t\tinitialValues.targetStudents = targetAudience == 'ALL' || targetAudience?.indexOf('STUDENTS') > -1;\n\t\t\tinitialValues.targetGuardians = targetAudience == 'ALL' || targetAudience?.indexOf('GUARDIANS') > -1;\n\t\t\tinitialValues.sender = author == currentUser.firstName + ' ' + currentUser.lastName ? 'me' : 'custom';\n\t\t} else {\n\t\t\tinitialValues.targetStudents = true;\n\t\t\tinitialValues.targetGuardians = true;\n\t\t\tinitialValues.sender = 'me';\n\t\t}\n\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (user.isMentor() || user.isSchoolLeader() || user.isAdministrator()) {\n\t\t\tsections = this.props.sections.concat(this.props.mentorGroups);\n\t\t} else {\n\t\t\tsections = this.props.sections;\n\t\t}\n\n\t\tif (!(user.isSchoolLeader() || user.isAdministrator())) {\n\t\t\t// Only show groups user is owner for\n\t\t\tsections = sections.filter(section => {\n\t\t\t\treturn section.userRole === \"OWNER\";\n\t\t\t});\n\t\t}\n\n\t\tif (this.state.loading) {\n\t\t\treturn \n\t\t}\n\n\t\t/* Validate group selection */\n\t\tlet passingGroup = true;\n\t\treturn (\n\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'POST_DRAFT');\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsetStatusPublished: (args, state, utils) => {\n\t\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'POST_PUBLISHED');\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tinitialValues={initialValues}\n\t\t\t\t\tinitialValuesEqual={() => true}\n\t\t\t\t\trender={({ handleSubmit, form, valid, submitting, initialValues }) => {\n\t\t\t\t\t\tlet { Files, uploadedFiles, important } = this.state;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{submitting ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t{this.state.uploadProgress != null ?\n\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.props.section != null ?\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t {this.props.translate('Posts will always be displayed for staff belonging to the groups you have selected.')}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{form.getFieldState('sender')?.value == 'custom' ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t{this.state.error != null ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{this.state.error}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('drop-files-or-click-here')}\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{Files && Files.length > 0 ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{Files.map(file => {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t -1 ? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: `url(${file.dataURL})`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} : {}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`dropzone-file-preview ${!file.accepted ? \" not-accepted\" : \"\"} ${file.upload.progress > 0 ? ' upload-started' : ' not-started'} ${file.type.indexOf('image') > -1 ? ' image' : ''}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.name + ' '}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({file.size > 1048576 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath.ceil(file.size / 1024 / 1024) + 'MB'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath.max(Math.ceil(file.size / 1024), 1) + 'KB'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{ this.onRemoveFile(file) }} className=\"file-delete-btn\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.accepted && file.size > 7500000 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('size-warning')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!file.accepted ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('file-too-big')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.type.indexOf('image') > -1 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{isEditing && initialValues.associatedFiles != null ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{uploadedFiles != null && uploadedFiles.length > 0 && initialValues.associatedFiles.length > 0 ?\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{uploadedFiles.map((file, index) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn -1 ? ' image' : ''}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{ this.removeFileFromDocument(file) }} className=\"file-delete-btn\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{file.type.indexOf('image') > -1 ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{!passingGroup ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('preschooldocument-form-studentgrouperror')}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{isEditing ?\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusPublished();\n\t\t\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={submitting || !valid || !passingGroup || (this.state.important == true && this.state.dateStart == null)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('publish')}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t{isEditing && initialValues.status != \"POST_DRAFT\" ? null : (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tform.mutators.setStatusDraft();\n\t\t\t\t\t\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={submitting || !valid || (this.state.important == true && this.state.dateStart == null)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{this.props.translate(\"save-draft\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\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/>\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tsections: state.sections.educationGroups,\n\t\tmentorGroups: state.sections.mentorGroups,\n\t\tcurrentUser: state.user.currentUser,\n\t\tcreatedPost: state.Posts.createdPost,\n\t\tactivePost: state.Posts.activePost,\n\t};\n}\n\nexport default withRouter(connect(mapStateToProps, {\n\tsubmit_post,\n\tupdate_post,\n\tgetSection,\n\tgetSections,\n\tdeletePostFile,\n\taddError,\n\tgetMentorGroups,\n})(Post));","import React, { Component } from 'react';\nimport DateTime from '_class/DateTime';\n\nclass FromNow extends Component {\n\n\ticon() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tcapitalizeFirstLetter(string) {\n\t\treturn string.charAt(0).toUpperCase() + string.slice(1);\n\t}\n\n\tformatDate = () => {\n\t\tlet dateTime = new DateTime(this.props.children);\n\n\t\tif (this.props.utc) {\n\t\t\treturn this.capitalizeFirstLetter(dateTime.getFromNow());\n\t\t}\n\n\t\treturn this.capitalizeFirstLetter(dateTime.getFromNow());\n\t}\n\n\trender() {\n\t\tlet containerProps = { ...this.props };\n\t\tdelete containerProps.children;\n\t\tdelete containerProps.dateTime;\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default FromNow;\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { Link } from 'react-router-dom';\nimport Moment from 'moment';\n\nimport { PRESCHOOL } from 'constants/schoolTypes';\n\nimport { getFileUrl } from 'actions/files';\n\nimport {\n\tclearDocumentsFromStore,\n\tclearSectionDocumentsFromStore,\n\tgetDocumentsPage,\n} from 'actions/documents';\n\nimport {\n\tclearPostsFromStore,\n\tgetPostsBySectionId,\n\tgetPostsPage,\n\tsetPostCollectionInfo\n} from 'actions/posts';\n\nimport { fetch_preschoolgoals } from 'actions/preschoolform';\nimport { getMentorGroups } from 'actions/sections';\nimport { setPageTitle, setPageActions } from 'actions/header';\n\nimport { getDescription } from 'helpers/content';\n\nimport User from '_class/User';\n\nimport LoadingCards from 'components/Cards/LoadingCard';\nimport Date from 'components/Presentation/Date/Date';\nimport SectionTitle from 'components/Presentation/SectionTitle';\nimport Documentation from 'containers/Forms/Documentation';\nimport Post from 'containers/Forms/Post';\nimport Modal from 'containers/Modals/Modal';\n\nimport Block, { BlockWrapper } from 'UI/Elements/Block';\nimport { Icon, TooltipMenu, Button, Radio } from '@haldor/ui';\nimport FromNow from 'components/Presentation/Date/FromNow';\n\nclass MyPosts extends Component {\n\n\tstatic defaultProps = {\n\t\tlimit: 3,\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tdocumentModal: false,\n\t\t\teventModal: false,\n\t\t\tsendAllmodal: false,\n\t\t\tloadingDocuments: false,\n\t\t\tloadingPosts: false,\n\t\t\tpage: 1,\n\t\t\tstartDate: moment().subtract('3', 'months').format('YYYY-MM-DD'),\n\t\t\tendDate: moment().format('YYYY-MM-DD'),\n\t\t};\n\t}\n\n\tcomponentDidMount = async () => {\n\t\tconst user = new User(this.props.currentUser);\n\t\tconst isPreschool = user.getActiveSchool() != null && user.getActiveSchool().type == PRESCHOOL;\n\n\t\tthis.props.clearDocumentsFromStore();\n\t\tthis.props.clearPostsFromStore();\n\t\tthis.fetchData(this.state.page);\n\n\t\tif (this.props.preschoolGoals.length < 1 && isPreschool) {\n\t\t\tthis.props.fetch_preschoolgoals();\n\t\t}\n\t}\n\n\tfetchData = (page, loadState = true) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst user = new User(this.props.currentUser);\n\t\t\tconst isPreschool = user.getActiveSchool() != null && user.getActiveSchool().type == PRESCHOOL;\n\n\t\t\tconst pageSize = this.props.limit === 3 ? 6 : 15;\n\n\t\t\t// Offset start and end date by 1 day bc <>\n\t\t\tconst start = this.props.userRole === \"student\" ? null : moment(this.state.startDate).subtract('1', 'days').format('YYYY-MM-DD');\n\t\t\tconst end = moment(this.state.endDate).add('1', 'days').format('YYYY-MM-DD');\n\n\t\t\tlet promises = [];\n\n\t\t\tif (loadState) {\n\t\t\t\tthis.setState({ loadingPosts: true });\n\t\t\t}\n\n\t\t\tconst getPostsPage = this.props.getPostsPage(page, 'published', start, end, pageSize);\n\t\t\tpromises.push(getPostsPage);\n\n\t\t\tif (isPreschool) {\n\t\t\t\tif (loadState) {\n\t\t\t\t\tthis.setState({ loadingDocuments: true });\n\t\t\t\t}\n\n\t\t\t\tconst getDocumentsPage = this.props.getDocumentsPage(page, 'DOCUMENTATION_PUBLISHED', start, end, pageSize);\n\t\t\t\tpromises.push(getDocumentsPage);\n\t\t\t}\n\n\t\t\tPromise.all(promises).then(() => {\n\t\t\t\tthis.setState({ loadingDocuments: false, loadingPosts: false });\n\t\t\t\tresolve(1);\n\t\t\t});\n\t\t})\n\t}\n\n\ttoggleDocumentModal = () => {\n\t\tthis.setState({ documentModal: !this.state.documentModal });\n\t}\n\n\ttoggleEventModal = () => {\n\t\tthis.setState({ eventModal: !this.state.eventModal });\n\t}\n\n\ttoggleSendAllModal = () => {\n\t\tthis.setState({ sendAllModal: !this.state.sendAllModal });\n\t}\n\n\trenderContent = () => {\n\t\tconst { combined } = this.props;\n\n\t\tlet i = 0;\n\t\tlet renderedItems = 0;\n\t\tif (combined.length > 0) {\n\t\t\tvar returnDOM =\n\t\t\t\t\n\t\t\t\t\t{combined ? combined.map((document) => {\n\t\t\t\t\t\tif (i < this.props.limit) {\n\t\t\t\t\t\t\tconst result = this.renderDocument(document)\n\n\t\t\t\t\t\t\tif (result != null) {\n\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\trenderedItems++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t}) : null}\n\t\t\t\t;\n\n\t\t\tif (renderedItems > 0) {\n\t\t\t\treturn returnDOM;\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.translate('no-items-found')}\n\t\t\t
\n\t\t);\n\t}\n\n\theaderContent = (document) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{document.author != null ?\n\t\t\t\t\t\ttypeof document.author == 'string' ?\n\t\t\t\t\t\t\tdocument.author\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t`${document.author.firstName != null ? document.author.firstName : ''} ${document.author.lastName != null ? document.author.lastName : ''}`\n\t\t\t\t\t\t: ' '}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{document.published != null ?\n\t\t\t\t\t\tmoment.utc(document.published).isAfter(moment()) ?\n\t\t\t\t\t\t\t{moment.utc(document.published).local().format()}\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t{moment.utc(document.published).local()}\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\n\t\t\t\t{document.important && document.eventDate != null ?\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{document.status == 'POST_DRAFT' || document.status == 'DOCUMENTATION_DRAFT' ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('Draft')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{document.important && document.eventDate != null && moment() <= moment(document.eventDate) ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('important!')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n\tcontent = (document) => {\n\t\tif (document.ReferenceType == 'post') {\n\t\t\tlet strippedDescription = \"\";\n\n\t\t\tif (document.abbreviatedDescription != null) {\n\t\t\t\tstrippedDescription = getDescription(document.abbreviatedDescription).replace(/(<([^>]+)>)/ig, '');\n\t\t\t\tif (strippedDescription.length > 99) {\n\t\t\t\t\tstrippedDescription = strippedDescription.slice(0, 100) + '…';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t

{document.title}

\n\n\t\t\t\t\t

\n\t\t\t\t

\n\t\t\t);\n\t\t} else {\n\t\t\tif (document.description) {\n\t\t\t\tlet strippedDescription = getDescription(document.description).replace(/(<([^>]+)>)/ig, '');\n\t\t\t\tif (strippedDescription.length > 99) {\n\t\t\t\t\tstrippedDescription = strippedDescription.slice(0, 100) + '…';\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t
\n\t\t\t\t\t\t

{document.title}

\n\n\t\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t

{document.title}

\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\t}\n\n\tfooterContent = (document) => {\n\t\tconst { preschoolGoals } = this.props;\n\n\t\tif (document.associatedGoals && document.associatedGoals.length > 0) {\n\t\t\tlet groups = [];\n\n\t\t\tif (preschoolGoals && preschoolGoals.length > 0) {\n\t\t\t\tpreschoolGoals.map(goal => {\n\t\t\t\t\tconst inDocument = document.associatedGoals.find(function (goalOb) {\n\t\t\t\t\t\treturn goalOb.goalId == goal.id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (typeof (inDocument) != 'undefined') {\n\t\t\t\t\t\tlet inArray = groups.findIndex(i => i.name == goal.group);\n\n\t\t\t\t\t\tif (inArray > -1) {\n\t\t\t\t\t\t\treturn groups[inArray].count++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet group = {\n\t\t\t\t\t\t\t\t'name': goal.group,\n\t\t\t\t\t\t\t\t'color': goal.colorCode,\n\t\t\t\t\t\t\t\t'count': 1,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\treturn groups.push(group);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t
{this.props.translate('goals')}
\n\n\t\t\t\t\t{groups.length > 0 ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{groups.map(group => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{group.name} ({group.count})\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\trenderDocument = (document) => {\n\t\tlet link = '';\n\t\tconst { limit } = this.props;\n\n\t\tif (document.ReferenceType == 'post') {\n\t\t\tlink = 'post/' + document.id;\n\t\t} else {\n\t\t\tlink = 'preschooldocument/' + document.id;\n\t\t}\n\n\t\t// Do not show important posts if this is for dashboard.\n\t\t// Assuming it is for dashboard if there is a limit (also since that is what decides if Importat is to be shown)\n\t\tif (limit &&\n\t\t\tdocument.important &&\n\t\t\tdocument.ReferenceType == \"post\" &&\n\t\t\tmoment().isSameOrAfter(moment(document.published), 'day') &&\n\t\t\tmoment(document.eventDate).isSameOrAfter(moment(), 'day') &&\n\t\t\tmoment().isSameOrAfter(moment(document.eventDate).subtract(7, \"days\"), 'day')) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet expireDate = moment(document.validUntil).hour(23).minute(59);\n\t\tif (this.props.limit != false && document.validUntil != null && expireDate.diff(moment()) < 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet file = null;\n\t\tif (document.associatedFiles != null && document.associatedFiles.length > 0) {\n\t\t\tfile = document.associatedFiles.find(file => {\n\t\t\t\treturn file.type && file.type.indexOf('image') > -1;\n\t\t\t})\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\trenderCreateButton = () => {\n\t\tlet isPreschool = false;\n\n\t\tif (this.props.currentUser.schools.getActiveSchool(this.props.currentUser.userId).type == PRESCHOOL) {\n\t\t\tisPreschool = true;\n\t\t}\n\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif ((user.isTeacher() || user.isMentor() || user.isAdministrator() || user.isSchoolLeader()) && isPreschool) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\t {this.props.translate('Create')}\n\t\t\t\t\t\t\n\t\t\t\t\t)}>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('Create documentation')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('Create post')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{user.isOperationManager() ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate('Create schoolwide announcement')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t);\n\t\t} else {\n\t\t\tif (user.isOperationManager()) {\n\t\t\t\treturn (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t {this.props.translate('Create')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate('Create post')}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate('Create schoolwide announcement')}\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);\n\t\t\t}\n\n\t\t\tif (user.isTeacher() || user.isMentor() || user.isAdministrator() || user.isSchoolLeader()) {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { loadingDocuments, loadingPosts } = this.state;\n\t\tlet isPreschool = false;\n\n\t\tconst user = new User(this.props.currentUser);\n\n\t\tif (user.getActiveSchool() != null && user.getActiveSchool().type == PRESCHOOL) {\n\t\t\tisPreschool = true;\n\t\t}\n\n\t\tlet sections = [];\n\t\tif (user.isMentor() || user.isAdministrator() || user.isSchoolLeader() || user.isOperationManager()) {\n\t\t\tsections = this.props.groups.concat(this.props.mentorGroups);\n\t\t} else {\n\t\t\tsections = this.props.groups;\n\t\t}\n\n\t\tif (!(user.isStudent() || user.isSchoolLeader() || user.isAdministrator() || user.isOperationManager())) {\n\t\t\tsections = sections.filter(section => {\n\t\t\t\treturn section.userRole === \"OWNER\";\n\t\t\t});\n\t\t}\n\n\t\tvar importantPosts = [];\n\t\tthis.props.combined.forEach((post) => {\n\t\t\tlet SevenDaysAgo = moment(post.eventDate).subtract(7, \"days\");\n\t\t\tif (post.important && post.ReferenceType == \"post\" && moment().isSameOrAfter(moment(post.published), 'day') && moment(post.eventDate).isSameOrAfter(moment(), 'day') && moment().isSameOrAfter(SevenDaysAgo, 'day')) {\n\t\t\t\timportantPosts.push(post);\n\t\t\t}\n\t\t});\n\n\t\timportantPosts.sort((a, b) => {\n\t\t\treturn moment(a.eventDate).unix() - moment(b.eventDate).unix();\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.props.combined.find((post) =>\n\t\t\t\t\tpost.important &&\n\t\t\t\t\tpost.ReferenceType == \"post\" &&\n\t\t\t\t\tmoment().isSameOrAfter(moment(post.published), 'day') &&\n\t\t\t\t\tmoment(post.eventDate).isSameOrAfter(moment(), 'day') &&\n\t\t\t\t\tmoment().isSameOrAfter(moment(post.eventDate).subtract(7, \"days\"), 'day')\n\t\t\t\t) != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.overview ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate('important-posts')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{importantPosts.map((post) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t

{post.title}

\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\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: null}\n\n\t\t\t\t{!user.isStudent() && isPreschool ?\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{!user.isStudent() ?\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{!user.isStudent() ?\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('preschooldocument-posts')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{this.renderCreateButton()}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('show-all')}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{loadingDocuments || loadingPosts ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t:\n\t\t\t\t\t\tthis.renderContent()\n\t\t\t\t\t}\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tuser: state.user.user,\n\t\tcurrentUser: state.user.currentUser,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tdocumentations: state.CombinedEvents.documentations,\n\t\tposts: state.CombinedEvents.posts,\n\t\tcollectionInformation: state.Posts.collectionInformation,\n\t\tpreschoolGoals: state.PreschoolGoals.preschoolGoals,\n\t\tgroups: state.sections.educationGroups,\n\t\tcombined: state.CombinedEvents.combined,\n\t\tgroupCombined: state.CombinedEvents.sectionCombined,\n\t\tmentorGroups: state.sections.mentorGroups\n\t}\n}\n\nexport default connect(mapStateToProps, {\n\tgetDocumentsPage,\n\tgetPostsPage,\n\tgetFileUrl,\n\tfetch_preschoolgoals,\n\tgetPostsBySectionId,\n\tclearSectionDocumentsFromStore,\n\tclearDocumentsFromStore,\n\tclearPostsFromStore,\n\tsetPageTitle,\n\tsetPageActions,\n\tgetMentorGroups,\n\tsetPostCollectionInfo\n})(MyPosts);","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\n\nclass Select extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\tOptions = () => {\n\t\tif (this.props.dataType === 'assignmentTypes') {\n\t\t\treturn (\n\t\t\t\tthis.props.options.map((item, i) => (\n\t\t\t\t\t\n\t\t\t\t))\n\t\t\t);\n\t\t} else if (this.props.dataType == 'assignment') {\n\t\t\treturn this.props.status.assignmentStatus.map((item, i) => {\n\t\t\t\tif (item.selectable) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (this.props.dataType == 'assignmentStatus') {\n\t\t\treturn this.props.options.map((item, i) => {\n\t\t\t\tif (item.selectable) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (this.props.dataType == 'plan') {\n\t\t\treturn this.props.options.map((item, i) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t});\n\t\t} else if (this.props.dataType == 'assignment-plan') {\n\t\t\treturn this.props.options.map((item, i) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t\telse if (this.props.dataType == 'groups-selector') {\n\t\t\treturn this.props.options.map((item, i) => (\n\t\t\t\t\n\t\t\t));\n\t\t}\n\n\t\treturn (\n\t\t\tthis.props.options.map((item, i) => (\n\t\t\t\t\n\t\t\t))\n\t\t);\n\t}\n\n\tplaceholderOption = () => {\n\t\tif (this.props.placeholder) {\n\t\t\tlet selectValue = '0';\n\n\t\t\tif (this.props.placeholderValue) {\n\t\t\t\tselectValue = this.props.placeholderValue;\n\t\t\t} else if (this.props.placeholderValue === '') {\n\t\t\t\tselectValue = this.props.placeholderValue;\n\t\t\t}\n\n\t\t\tif (this.props.placeholder != null && this.props.placeholder != '' && !this.props.placeholder) {\n\t\t\t\treturn ;\n\t\t\t}\n\n\t\t\treturn ;\n\t\t}\n\t}\n\n\tonChange = (event) => {\n\t\tif (this.props.onChange != null && typeof this.props.onChange == 'function') {\n\t\t\tthis.props.onChange(event);\n\t\t}\n\n\t\tif (this.props.input != null) {\n\t\t\tif (this.props.input.onChange != null && typeof this.props.input.onChange == 'function') {\n\t\t\t\tthis.props.input.onChange(event.target.value);\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { label, name, id, input, selectedValue, disabled, meta } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{label ? : ''}\n\t\t\t\t\n\t\t\t\t\t{this.placeholderOption()}\n\t\t\t\t\t{this.Options()}\n\t\t\t\t\n\n\t\t\t\t{typeof (meta) !== 'undefined' ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{meta.touched && ((meta.error &&\n\t\t\t\t\t\t\t{meta.error}) || (meta.warning &&\n\t\t\t\t\t\t\t\t{meta.warning}))}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tstatus: state.status.status,\n\t};\n}\n\n\nexport default connect(mapStateToProps)(Select);\n","export const GetGroupedByStudent = (adjustments, filterStatus = null, subjects = null) => {\n\tlet groupedBy = [];\n\n\tif (adjustments === undefined || adjustments == null || adjustments.length <= 0) {\n\t\treturn groupedBy;\n\t}\n\n\tif (filterStatus != null) {\n\t\tadjustments = adjustments.filter(adjustment => {\n\t\t\treturn adjustment.status == filterStatus;\n\t\t});\n\t}\n\n\tadjustments.forEach((adjustment) => {\n\t\tlet foundAdjustment = groupedBy.find(t => t.id == adjustment?.additionalAdjustment?.id);\n\t\tlet student = { ...adjustment.student };\n\n\t\tif (foundAdjustment != null) {\n\t\t\tlet foundStudent = foundAdjustment.items.find(t => t.userId == adjustment.studentID);\n\t\t\tif (foundStudent != null) {\n\t\t\t\tfoundStudent.items.push(adjustment);\n\t\t\t} else {\n\t\t\t\tstudent.items = [];\n\n\t\t\t\tstudent.items.push(adjustment);\n\t\t\t\tfoundAdjustment.items.push(student);\n\t\t\t}\n\t\t} else {\n\t\t\tif (adjustment.additionalAdjustment != null) {\n\t\t\t\tlet obj = {\n\t\t\t\t\tid: adjustment.additionalAdjustment.id,\n\t\t\t\t\ttype: adjustment.additionalAdjustment.type,\n\t\t\t\t\ttitle: adjustment.additionalAdjustment.title,\n\t\t\t\t\tdescription: adjustment.additionalAdjustment.description,\n\t\t\t\t\tsubTitle: adjustment.additionalAdjustment.subTitle,\n\t\t\t\t\tstatus: adjustment.additionalAdjustment.status,\n\t\t\t\t\tdeletable: adjustment.additionalAdjustment.deletable,\n\t\t\t\t\titems: []\n\t\t\t\t};\n\n\t\t\t\tstudent.items = [];\n\t\t\t\tstudent.items.push(adjustment);\n\n\t\t\t\tobj.items.push(student);\n\n\t\t\t\tgroupedBy.push(obj);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (subjects != null) {\n\t\tgroupedBy = groupedBy.filter(additionalAdjustment => {\n\t\t\tadditionalAdjustment.items = additionalAdjustment.items.filter((student) => {\n\t\t\t\t// Remove item if no adjustments containing courses exists\n\t\t\t\tif (student.items == null) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn student.items.find((adjustment) => {\n\t\t\t\t\tif (adjustment == null || adjustment.subjects == null) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn adjustment.subjects.find((subject) => {\n\t\t\t\t\t\treturn subjects.indexOf(subject.id) > -1;\n\t\t\t\t\t}) != null;\n\t\t\t\t}) != null;\n\t\t\t});\n\t\t\treturn additionalAdjustment.items.length > 0;\n\t\t});\n\t}\n\n\tgroupedBy = groupedBy.sort((a, b) =>\n\t\t(a.title.toUpperCase() > b.title.toUpperCase()) ? 1\n\t\t\t:\n\t\t\t((b.title.toUpperCase() > a.title.toUpperCase()) ? -1 : 0)\n\t);\n\n\treturn groupedBy;\n}\n\nexport const AddUnusedAdditionalAdjustments = (arrayToAddIn, allAdjustments) => {\n\tallAdjustments.forEach((adjustment) => {\n\t\tlet found = arrayToAddIn.find(t => t.id == adjustment.id);\n\t\tif (found == null) {\n\t\t\tlet obj = {\n\t\t\t\tid: adjustment.id,\n\t\t\t\ttitle: adjustment.title,\n\t\t\t\ttype: adjustment.type,\n\t\t\t\tsubTitle: adjustment.subTitle,\n\t\t\t\tstatus: adjustment.status,\n\t\t\t\tdescription: adjustment.description,\n\t\t\t\tdeletable: adjustment.deletable,\n\t\t\t\titems: []\n\t\t\t};\n\t\t\tarrayToAddIn.push(obj);\n\t\t}\n\t});\n\n\tarrayToAddIn.sort((a, b) =>\n\t\t(a.title.toUpperCase() > b.title.toUpperCase()) ? 1\n\t\t\t:\n\t\t\t((b.title.toUpperCase() > a.title.toUpperCase()) ? -1 : 0)\n\t);\n\n\treturn arrayToAddIn;\n}\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { reduxForm } from 'redux-form';\n\nimport { getUserSubjects } from 'actions/user';\nimport { updateStudentAdjustment } from 'actions/additional_adjustments';\n\nimport { Spinner } from 'UI';\nimport { Checkbox, Button } from '@haldor/ui';\nimport swal from 'sweetalert2';\n\nclass EditAdditionalAdjustmentSubjects extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tsubjects: null,\n\t\t\tloading: true,\n\t\t\tselectedSubjects: [],\n\t\t};\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.user != null) {\n\t\t\tthis.props.getUserSubjects(this.props.adjustment.studentID).then(() => {\n\t\t\t\tif (this.props.userSubjects.length > 0) {\n\t\t\t\t\tlet subjects = [...this.props.userSubjects];\n\n\t\t\t\t\tsubjects.forEach(subject => {\n\t\t\t\t\t\tlet found = this.props.adjustment.subjects.find(selectedSubject => {\n\t\t\t\t\t\t\treturn selectedSubject.id == subject.id;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsubject.selected = found != null;\n\t\t\t\t\t\tsubject.active = true;\n\t\t\t\t\t\treturn subject;\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.props.adjustment.subjects.forEach((subject) => {\n\t\t\t\t\t\tlet found = subjects.find(selectedSubject => {\n\t\t\t\t\t\t\treturn selectedSubject.id == subject.id;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (found == null) {\n\t\t\t\t\t\t\tlet newSubject = { ...subject };\n\t\t\t\t\t\t\tnewSubject.selected = true;\n\t\t\t\t\t\t\tnewSubject.active = false;\n\t\t\t\t\t\t\tsubjects.push(newSubject);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.setState({ subjects, loading: false });\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tsubmit = (values) => {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tlet values = JSON.parse(JSON.stringify(this.props.adjustment));\n\t\t\tlet subjects = values.subjects;\n\t\t\tlet removedSubjects = [];\n\n\t\t\tif (this.state.subjects != null) {\n\t\t\t\tthis.state.subjects.forEach((subject) => {\n\t\t\t\t\tif (subject.selected) {\n\t\t\t\t\t\t// Add non selected subject\n\t\t\t\t\t\tlet found = this.props.adjustment.subjects.find(selectedSubject => {\n\t\t\t\t\t\t\treturn selectedSubject.id == subject.id;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (found == null) {\n\t\t\t\t\t\t\tsubjects.push(subject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Not selected remove from values if needed\n\t\t\t\t\t\tlet foundIndex = subjects.findIndex(selectedSubject => {\n\t\t\t\t\t\t\treturn selectedSubject.id == subject.id;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (foundIndex > -1) {\n\t\t\t\t\t\t\tremovedSubjects.push(subjects[foundIndex].id);\n\t\t\t\t\t\t\tsubjects.splice(foundIndex, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (removedSubjects.length > 0) {\n\t\t\t\tlet response = await swal.fire({\n\t\t\t\t\ttitle: this.props.translate('Are you sure?'),\n\t\t\t\t\ttext: this.props.translate('If you delete a subject, the adjustment will no longer be used for those subjects.'),\n\t\t\t\t\tshowCancelButton: true,\n\t\t\t\t\tfocusConfirm: false,\n\t\t\t\t\tcancelButtonText: this.props.translate('No'),\n\t\t\t\t\tconfirmButtonText: this.props.translate('Yes'),\n\t\t\t\t})\n\n\t\t\t\tif (response.value == null) {\n\t\t\t\t\tresolve(0);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalues.subjects = subjects;\n\n\t\t\t// Clean up properties that doesnt need to be sent to the api\n\t\t\tdelete values.comments;\n\t\t\tdelete values.createdBy;\n\t\t\tdelete values.editedBy;\n\t\t\tdelete values.versions;\n\t\t\tdelete values.student;\n\n\t\t\tthis.props.updateStudentAdjustment(values).then(() => {\n\t\t\t\tresolve(1);\n\t\t\t\tthis.props.onClose();\n\t\t\t});\n\t\t});\n\t}\n\n\tselectAllSubjects = (checked) => {\n\t\tlet { subjects } = this.state;\n\n\t\tif (subjects != null) {\n\t\t\tsubjects.forEach(subject => {\n\t\t\t\tsubject.selected = checked;\n\t\t\t\treturn subject;\n\t\t\t});\n\t\t}\n\n\t\tthis.setState({ subjects });\n\t}\n\n\tonSubjectChange = (_subject) => {\n\t\tlet { subjects } = this.state;\n\n\t\tif (subjects != null) {\n\t\t\tsubjects.forEach(subject => {\n\t\t\t\tif (subject.id == _subject.id) {\n\t\t\t\t\tif (_subject.selected == true) {\n\t\t\t\t\t\tsubject.selected = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsubject.selected = true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn subject;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.setState({ subjects });\n\t}\n\n\trender() {\n\t\tconst { submitting, handleSubmit, valid } = this.props;\n\t\tlet hasInactive = false;\n\n\t\tif (this.state.subjects != null) {\n\t\t\thasInactive = this.state.subjects.find(subject => subject.active == false) != null;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{submitting ?\n\t\t\t\t\t

\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{!this.state.loading ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{this.state.subjects.map(subject => {\n\t\t\t\t\t\t\t\t\tif (subject.active == false) {\n\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet title = subject.title;\n\t\t\t\t\t\t\t\t\tif (subject.typeOfSchooling != null) {\n\t\t\t\t\t\t\t\t\t\ttitle += ` (${this.props.translate(subject.typeOfSchooling)})`;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t this.onSubjectChange(subject)}\n\t\t\t\t\t\t\t\t\t\t\tlabel={title}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{hasInactive ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.state.subjects.map(subject => {\n\t\t\t\t\t\t\t\t\t\t\tif (subject.active) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tlet title = subject.title;\n\t\t\t\t\t\t\t\t\t\t\tif (subject.typeOfSchooling != null) {\n\t\t\t\t\t\t\t\t\t\t\t\ttitle += ` (${this.props.translate(subject.typeOfSchooling)})`;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t\t\t this.onSubjectChange(subject)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={title}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: }\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tadditionalAdjustments: state.AdditionalAdjustments.adjustments,\n\t\tuserSubjects: state.user.userSubjects,\n\t\tuser: state.user.currentUser,\n\t}\n}\n\nexport default connect(mapStateToProps, {\n\tgetUserSubjects,\n\tupdateStudentAdjustment,\n})(reduxForm({\n\tform: 'EditAdditionalAdjustmentSubjects',\n\tdestroyOnUnmount: true,\n})(EditAdditionalAdjustmentSubjects));\n","import { getDescription } from 'helpers/content';\nimport React, { Component } from 'react';\n\n\nexport default class PostContent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n}\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Field, reduxForm, change } from 'redux-form';\n\nimport DateTime from '_class/DateTime';\n\nimport PostContent from 'components/Presentation/PostContent';\nimport { Spinner, Collapsible } from 'UI';\nimport { Editor } from 'UI/Inputs';\nimport { Flex, Button, translate } from '@haldor/ui';\n\nimport './EditStudentAdjustmentForm.scss'\nclass EditStudentAdjustmentForm extends Component {\n\n\tsubmit = (values) => {\n\t\treturn new Promise(resolve => {\n\t\t\tif (this.props.onSubmit != null) {\n\t\t\t\t// Clean up properties that doesnt need to be sent to the api\n\t\t\t\tdelete values.comments;\n\t\t\t\tdelete values.createdBy;\n\t\t\t\tdelete values.editedBy;\n\t\t\t\tdelete values.versions;\n\t\t\t\tdelete values.student;\n\n\t\t\t\tthis.props.onSubmit(values).then(() => {\n\t\t\t\t\tresolve(1)\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tresolve(1)\n\t\t\t}\n\t\t})\n\t}\n\n\tcancel = (event) => {\n\t\tevent.preventDefault();\n\n\t\tif (this.props.onClose != null) {\n\t\t\tthis.props.onClose();\n\t\t}\n\t}\n\n\trender() {\n\t\tconst { submitting, handleSubmit, valid } = this.props;\n\n\t\tif (this.props.adjustment == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{submitting ?

: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\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\n\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.adjustment.versions != null ?\n\t\t\t\t\t\t\tthis.props.adjustment.versions.map((version) => {\n\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{version.additionalAdjustment.title}\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{version.description}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{version.createdBy.firstName} {version.createdBy.lastName}\n\t\t\t\t\t\t\t\t\t\t{' • ' + new DateTime(version.created).getTimeStampHours()}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.adjustment.additionalAdjustment.title}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.props.adjustment.additionalAdjustment.description}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t

\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.adjustment.additionalAdjustment.createdBy.firstName} {this.props.adjustment.additionalAdjustment.createdBy.lastName}\n\t\t\t\t\t\t\t\t{' • ' + new DateTime(this.props.adjustment.created).getTimeStampHours()}\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
\n\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state, ownProps) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t\tinitialValues: JSON.parse(JSON.stringify(ownProps.adjustment)),\n\t}\n}\n\nexport default connect(mapStateToProps)(reduxForm({\n\tform: 'EditStudentAdjustmentForm',\n\tdestroyOnUnmount: true,\n})(EditStudentAdjustmentForm));","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Field, Form, reduxForm } from 'redux-form';\n\nimport DateTime from '_class/DateTime';\nimport User from '_class/User';\n\nimport {\n\tupdateStudentAdditionalAdjustmentComment,\n\tdeleteStudentAdditionalAdjustmentComment,\n} from 'actions/additional_adjustments';\n\nimport { Flex, Button, Icon, translate } from '@haldor/ui';\nimport { Spinner, Collapsible } from 'UI';\n\nclass Comments extends Component {\n\n\tstatic defaultProps = {\n\t\thideDeleted: false,\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t};\n\t}\n\n\trequired = (value) => {\n\t\tif (typeof (value) !== 'undefined' && value !== '') {\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('field-needs-input');\n\t}\n\n\t/* Event methods - JEVEN */\n\tsubmit = (values) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvalues.origin = 'USER';\n\n\t\t\tif (this.props.onSubmit != null) {\n\t\t\t\tthis.props.onSubmit(values).then(() => {\n\t\t\t\t\tthis.props.reset();\n\t\t\t\t\tresolve(1);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve(1);\n\t\t\t}\n\t\t});\n\t}\n\n\trestoreDeletedComment = (comment) => {\n\t\tlet values = { ...comment };\n\t\tvalues.status = '';\n\n\t\tthis.props.updateStudentAdditionalAdjustmentComment(values);\n\t}\n\n\tdeleteComment = (comment) => {\n\t\tthis.props.deleteStudentAdditionalAdjustmentComment(comment);\n\t}\n\n\tonKeyDown = (e) => {\n\t\tif (e.keyCode == 13) {\n\t\t\te.preventDefault();\n\n\t\t\tthis.props.submit();\n\t\t}\n\t}\n\n\t/* Render methods - JREND */\n\trenderUpdate = (comment, index) => {\n\t\tconst user = new User(this.props.user);\n\t\tconst deleteAllowed = user.isTeacher() || user.isMentor() || user.isPedagogue();\n\n\t\treturn
\n\t\t\t
\n\t\t\t\t{comment.createdBy.firstName} {comment.createdBy.lastName}\n\n\t\t\t\t{' • ' + comment.text}\n\n\t\t\t\t{' • ' + new DateTime(comment.created).getTimeStampHours()}\n\n\t\t\t\t{(comment.creator == this.props.user.id && this.props.onSubmit != null) || deleteAllowed ?\n\t\t\t\t\t { this.deleteComment(comment) }}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{(comment.creator == this.props.user.id && this.props.onSubmit != null && comment.status == \"DELETED\") || (comment.status == \"DELETED\" && user.isPedagogue()) ?\n\t\t\t\t\t { this.restoreDeletedComment(comment) }}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t
\n\t}\n\n\trenderComment = (comment, index) => {\n\t\tconst user = new User(this.props.user);\n\t\tconst deleteAllowed = user.isTeacher() || user.isMentor() || user.isPedagogue();\n\n\t\treturn
\n\t\t\t{comment.text}\n\n\t\t\t
\n\t\t\t\t{comment.createdBy.firstName} {comment.createdBy.lastName}\n\n\t\t\t\t{' • ' + new DateTime(comment.created).getTimeStampHours()}\n\n\t\t\t\t{(comment.creator == this.props.user.id && this.props.onSubmit != null) || deleteAllowed ?\n\t\t\t\t\t { this.deleteComment(comment) }}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t{(comment.creator == this.props.user.id && this.props.onSubmit != null && comment.status == \"DELETED\") || (comment.status == \"DELETED\" && user.isPedagogue()) ?\n\t\t\t\t\t { this.restoreDeletedComment(comment) }}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t
\n\t}\n\n\trender() {\n\t\tconst { adjustment, handleSubmit, submitting } = this.props;\n\t\tconst user = new User(this.props.user);\n\n\t\tlet comments = [];\n\t\tlet allComments = [];\n\t\tlet deleted = [];\n\n\t\tif (adjustment.comments.length > 0) {\n\t\t\tcomments = [...adjustment.comments];\n\n\t\t\tcomments.sort((a, b) => {\n\t\t\t\treturn b.id > a.id ? 1 : -1;\n\t\t\t});\n\n\t\t\tif (user.isPedagogue()) {\n\t\t\t\tdeleted = [...comments].filter(comment => comment.status == 'DELETED');\n\t\t\t}\n\n\t\t\tcomments = [...comments].filter(comment => comment.status != 'DELETED');\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.onSubmit != null ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{comments.map((comment, index) => {\n\t\t\t\t\t\t\t\tif (comment.origin == 'USER') {\n\t\t\t\t\t\t\t\t\treturn this.renderComment(comment, index);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t{deleted != null && deleted.length > 0 && !this.props.hideDeleted ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{deleted.map((comment, index) => {\n\t\t\t\t\t\t\t\t\t\t\tif (comment.origin == 'USER') {\n\t\t\t\t\t\t\t\t\t\t\t\treturn this.renderComment(comment, index);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{comments.map((comment, index) => {\n\t\t\t\t\t\t\tif (comment.origin == 'SYSTEM') {\n\t\t\t\t\t\t\t\treturn this.renderUpdate(comment, index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t{deleted != null && deleted.length > 0 && !this.props.hideDeleted ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{deleted.map((comment, index) => {\n\t\t\t\t\t\t\t\t\t\tif (comment.origin == 'SYSTEM') {\n\t\t\t\t\t\t\t\t\t\t\treturn this.renderUpdate(comment, index);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tuser: state.user.currentUser,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tdeleteStudentAdditionalAdjustmentComment,\n\tupdateStudentAdditionalAdjustmentComment,\n})(reduxForm({\n\tdestroyOnUnmount: true,\n})(Comments));","import React, { PureComponent, Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport DateTime from '_class/DateTime';\nimport swal from 'sweetalert2';\n\nimport {\n\taddComment,\n\tupdateStudentAdjustment,\n\tdeleteStudentAdjustment,\n} from 'actions/additional_adjustments';\n\nimport EditAdditionalAdjustmentSubjects from '../Form/EditAdditionalAdjustmentSubjects';\nimport EditStudentAdjustmentForm from '../Form/EditStudentAdjustmentForm';\n\nimport PostContent from 'components/Presentation/PostContent';\nimport Modal from 'containers/Modals/Modal';\nimport Comments from './Partials/Comments';\n\nimport { Collapsible } from 'UI';\nimport { Icon, Flex, Button } from '@haldor/ui'\nimport DisplayName from 'components/Presentation/DisplayName';\n\nclass AdditionalAdjustmentModal extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tsubjectsModal: null,\n\t\t\teditModal: null,\n\t\t}\n\t}\n\n\ttoggleCourseModal = (adjustment) => {\n\t\tif (adjustment == null) {\n\t\t\tthis.setState({ subjectsModal: null });\n\t\t} else {\n\t\t\tlet clonedAdjustment = JSON.parse(JSON.stringify(adjustment));\n\t\t\tthis.setState({ subjectsModal: clonedAdjustment });\n\t\t}\n\t}\n\n\ttoggleEditModal = (adjustment) => {\n\t\tif (adjustment == null) {\n\t\t\tthis.setState({ editModal: null });\n\t\t} else {\n\t\t\tlet clonedAdjustment = JSON.parse(JSON.stringify(adjustment));\n\t\t\tthis.setState({ editModal: clonedAdjustment });\n\t\t}\n\t}\n\n\tonAdjustmentSubmit = (values) => {\n\t\treturn new Promise(resolve => {\n\t\t\t// Clean up properties that doesnt need to be sent to the api\n\t\t\tdelete values.comments;\n\t\t\tdelete values.courses;\n\t\t\tdelete values.subjects;\n\t\t\tdelete values.createdBy;\n\t\t\tdelete values.editedBy;\n\t\t\tdelete values.versions;\n\t\t\tdelete values.student;\n\n\t\t\tthis.props.updateStudentAdjustment(values).then(() => {\n\t\t\t\tthis.setState({ editModal: null });\n\t\t\t\tresolve(1);\n\t\t\t})\n\t\t})\n\t}\n\n\tdeleteAdjustment = (adjustment) => {\n\t\tconst { translate } = this.props;\n\n\t\tswal.fire({\n\t\t\ttitle: translate('Are you sure?'),\n\t\t\ttext: translate('The adjustment will be removed from the student wherever it is used. Restoration can only be done by a special educational needs teacher.'),\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: translate('Cancel'),\n\t\t\tconfirmButtonText: translate('Remove'),\n\t\t}).then(async (response) => {\n\t\t\tif (response.value != null) {\n\t\t\t\tthis.props.deleteStudentAdjustment(adjustment);\n\t\t\t}\n\t\t});\n\t}\n\n\taddComment = (values, adjustmentId) => {\n\t\treturn new Promise(resolve => {\n\t\t\tthis.props.addComment(values, adjustmentId).then(() => {\n\t\t\t\tresolve(1);\n\t\t\t});\n\t\t});\n\t}\n\n\tonClose = () => {\n\t\tif (this.props.onClose != null) {\n\t\t\tthis.props.onClose();\n\t\t}\n\t}\n\n\trenderAdjustment = (adjustment) => {\n\t\tconst { translate } = this.props;\n\n\t\tconst collapseTrigger = (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{this.props.translate('subjects')} {adjustment.subjects.length}\n\t\t\t\t\n\n\t\t\t\t{!this.props.disableCommenting ?\n\t\t\t\t\t {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tthis.toggleCourseModal(adjustment)\n\t\t\t\t\t}}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t\n\t\t)\n\n\t\treturn
\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{adjustment.description}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{adjustment.createdBy.firstName} {adjustment.createdBy.lastName}\n\t\t\t\t\t\t\t{' • ' + new DateTime(adjustment.created).getTimeStampHours()}\n\n\t\t\t\t\t\t\t{adjustment.subjects.length > 0 ?\n\t\t\t\t\t\t\t\t' • '\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t{adjustment.subjects != null ?\n\t\t\t\t\t\t\t\tadjustment.subjects.map((subject, index) => {\n\t\t\t\t\t\t\t\t\tlet title = subject.title;\n\t\t\t\t\t\t\t\t\tif (index != adjustment.subjects.length - 1) {\n\t\t\t\t\t\t\t\t\t\ttitle += ', ';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.disableCommenting == true ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t this.addComment(values, adjustment.id)}\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
\n\n\t\t\t\t
\n\t\t\t\t\t{adjustment.status == 'ACTIVE' ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{translate('start-time')}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{new DateTime(adjustment.startDate).getLongDate()}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t:\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{translate('time-period')}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{new DateTime(adjustment.startDate).getLongDate()}\n\t\t\t\t\t\t\t{' - ' + new DateTime(adjustment.endDate).getLongDate()}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.translate('Status')}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.translate(adjustment.status.toLowerCase())}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{adjustment.subjects != null ?\n\t\t\t\t\t\t\t\tadjustment.subjects.map(subject => {\n\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t{subject.title}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t{!this.props.disableCommenting ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{!this.props.disableCommenting ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t}\n\t\n\trender() {\n\t\tconst { adjustment, translate } = this.props;\n\n\t\tif (adjustment == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet title = adjustment.title;\n\t\tif (adjustment.subTitle != null) {\n\t\t\ttitle += ' - ' + adjustment.subTitle\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{this.state.subjectsModal != null ?\n\t\t\t\t\t\t this.toggleCourseModal()} type=\"small\" title={translate('Subjects')}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\n\t\t\t\t{this.state.editModal != null ?\n\t\t\t\t\t this.toggleEditModal()} title={translate('Edit adjustment')}>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{adjustment.items.map(student => {\n\t\t\t\t\t\t\tlet activeItems = student.items.find(adjustment => {\n\t\t\t\t\t\t\t\treturn adjustment.status == 'ACTIVE';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (activeItems == null) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

\n\n\t\t\t\t\t\t\t\t{student.items.map(adjustment => {\n\t\t\t\t\t\t\t\t\tif (adjustment.status != 'ACTIVE') {\n\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn this.renderAdjustment(adjustment);\n\t\t\t\t\t\t\t\t})}\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
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\taddComment,\n\tupdateStudentAdjustment,\n\tdeleteStudentAdjustment,\n})(AdditionalAdjustmentModal);\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { translate } from '@haldor/ui';\n\nimport { getStudentAdditionalAdjustmentsForAssignment } from 'actions/assignments';\nimport { getStudentAdditionalAdjustmentsForPlan } from 'actions/plans';\nimport { getStudentAdditionalAdjustmentsForGroup, getStudentAdditionalAdjustmentsForMultipleGroups } from 'actions/sections';\n\nimport { Spinner, Person } from 'UI';\nimport { Block } from '@haldor/ui';\nimport { GetGroupedByStudent } from '../Helpers';\n\nimport AdditionalAdjustmentModal from './AdditionalAdjustmentModal';\n\nimport './TeacherAdjustments.scss';\n\nclass TeacherAdjustments extends PureComponent {\n\n\tstatic defaultProps = {\n\t\thideAll: false,\n\t\tdisableCommenting: false,\n\t}\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tactiveAdjustment: null,\n\t\t\tloading: false,\n\t\t\tloadedGroups: [],\n\t\t}\n\t}\n\n\t/* Lifecycle methods - JLIFE */\n\tcomponentDidMount = () => {\n\t\tif (this.props.groupId != null) {\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tthis.props.getStudentAdditionalAdjustmentsForGroup(this.props.groupId).then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t})\n\t\t}\n\n\t\tif (this.props.assignmentId != null) {\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tthis.props.getStudentAdditionalAdjustmentsForAssignment(this.props.assignmentId)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t})\n\t\t}\n\n\t\tif (this.props.planId != null) {\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tthis.props.getStudentAdditionalAdjustmentsForPlan(this.props.planId)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t})\n\t\t}\n\n\t\tif (this.props.groups != null) {\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tlet promises = [];\n\t\t\tthis.props.groups.forEach(groupId => {\n\t\t\t\tpromises.push(this.getAdjustmentsFromApi(groupId));\n\t\t\t});\n\n\t\t\tPromise.all(promises).then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t\t}\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.groupId != this.props.groupId) {\n\t\t\tif (nextProps.groupId == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.setState({ loading: true });\n\n\t\t\tif (this.shouldLoadAdjustments(nextProps.groupId)) {\n\t\t\t\tthis.props.getStudentAdditionalAdjustmentsForGroup(nextProps.groupId).then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.groups != null) {\n\t\t\tif (nextProps.groups !== this.props.groups) {\n\t\t\t\tthis.setState({ loading: true });\n\n\t\t\t\tlet promises = [];\n\n\t\t\t\tnextProps.groups.forEach(groupId => {\n\t\t\t\t\tif (this.shouldLoadAdjustments(groupId)) {\n\t\t\t\t\t\tpromises.push(this.getAdjustmentsFromApi(groupId));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tPromise.all(promises).then(() => {\n\t\t\t\t\tthis.setState({ loading: false });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Returns true if group has not been loaded\n\tshouldLoadAdjustments = (groupId) => {\n\t\treturn this.state.loadedGroups.indexOf(groupId) == -1;\n\t}\n\n\t// Returns promise for api call and add group id to loadedGroups state array\n\tgetAdjustmentsFromApi = (groupId) => {\n\t\tthis.setState({ loadedGroups: [...this.state.loadedGroups, groupId] })\n\n\t\treturn this.props.getStudentAdditionalAdjustmentsForMultipleGroups(groupId);\n\t}\n\n\t// Looks for a group in fetched data and returns it\n\tgetAdjustmentsForGroup = (groupId) => {\n\t\treturn [...this.props.multipleGroupAdjustments].filter(adj =>\n\t\t\tadj.groupId == groupId\n\t\t);\n\t}\n\n\t/* Events */\n\topenAdjustment = (adjustment) => {\n\t\tthis.setState({ activeAdjustment: adjustment.id });\n\t}\n\n\tcloseAdjustment = () => {\n\t\tthis.setState({ activeAdjustment: null });\n\t}\n\n\tadjustmentInUse = (additionalAdjustment) => {\n\t\tlet inUse = false;\n\t\tadditionalAdjustment.items.forEach(student => {\n\t\t\tstudent.items.forEach(adjustment => {\n\t\t\t\tif (adjustment.status == 'ACTIVE') {\n\t\t\t\t\tinUse = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn inUse;\n\t}\n\n\t/* Render methods - JREND */\n\trender() {\n\t\tif (this.state.loading) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\tlet adjustments = [];\n\t\tlet activeAdjustment = null;\n\t\tif (this.props.groups != null) {\n\t\t\tthis.props.groups.forEach((groupId) => {\n\t\t\t\tadjustments = [...adjustments, ...this.getAdjustmentsForGroup(groupId)];\n\t\t\t})\n\t\t} else if (this.props.assignmentId) {\n\t\t\tadjustments = this.props.assignment;\n\t\t} else if (this.props.planId) {\n\t\t\tadjustments = this.props.plan;\n\t\t} else {\n\t\t\tif (this.props.adjustments != null) {\n\t\t\t\tadjustments = this.props.adjustments;\n\t\t\t} else {\n\t\t\t\tadjustments = this.props.groupAdjustments;\n\t\t\t}\n\t\t}\n\n\t\tconst groupedBy = GetGroupedByStudent(adjustments, null, this.props.subjects);\n\n\t\tif (groupedBy.length == 0) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.translate('no-results')}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t)\n\t\t}\n\n\t\tif (this.state.activeAdjustment != null) {\n\t\t\tactiveAdjustment = groupedBy.find(gb => gb.id == this.state.activeAdjustment)\n\n\t\t\tif (activeAdjustment != null) {\n\t\t\t\tlet hasActive = activeAdjustment.items.find(student => {\n\t\t\t\t\treturn student.items.find(adjustment => adjustment.status == \"ACTIVE\")\n\t\t\t\t})\n\n\t\t\t\tif (hasActive == null) {\n\t\t\t\t\tactiveAdjustment = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t{groupedBy.map(additionalAdjustment => {\n\t\t\t\t\t\tlet additionalAdjustmentInUse = this.adjustmentInUse(additionalAdjustment);\n\t\t\t\t\t\tif (additionalAdjustmentInUse) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t
this.openAdjustment(additionalAdjustment)}>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{additionalAdjustment.title}\n\n\t\t\t\t\t\t\t\t\t\t\t{additionalAdjustment.subTitle != null ?\n\t\t\t\t\t\t\t\t\t\t\t\t' - ' + additionalAdjustment.subTitle\n\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{additionalAdjustment.items.map(student => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet activeItems = student.items.find(adjustment => {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn adjustment.status == 'ACTIVE';\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (activeItems == null) {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t})}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tgroupAdjustments: state.AdditionalAdjustments.groupAdjustments,\n\t\tmultipleGroupAdjustments: state.AdditionalAdjustments.multipleGroupAdjustments,\n\t\tassignment: state.AdditionalAdjustments.assignment,\n\t\tplan: state.AdditionalAdjustments.plan,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetStudentAdditionalAdjustmentsForAssignment,\n\tgetStudentAdditionalAdjustmentsForPlan,\n\tgetStudentAdditionalAdjustmentsForGroup,\n\tgetStudentAdditionalAdjustmentsForMultipleGroups,\n})(TeacherAdjustments);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\n\nclass Status extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\titerateTypes(status, type, id) {\n\t\tlet response = null;\n\t\tlet selectedStatus = null;\n\n\t\tif (status[type] != null) {\n\t\t\tselectedStatus = status[type].find(t_o => t_o.id == id);\n\t\t}\n\n\t\tif (selectedStatus != null) {\n\t\t\tresponse = selectedStatus.value;\n\t\t}\n\n\t\treturn response;\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t{this.iterateTypes(this.props.status, this.props.type, this.props.id)}\n\t\t\t\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tstatus: state.status.status,\n\t};\n}\n\nexport default connect(mapStateToProps)(Status);\n","import React, { Component, Fragment } from 'react';\nimport { connect } from 'react-redux';\n\nimport User from '_class/User';\n\nimport FromNow from 'components/Presentation/Date/FromNow';\nimport Status from 'components/Presentation/Status';\nimport PersonAddIcon from '@mui/icons-material/PersonAdd';\n\nimport { ColorLabel, ColorLabelContainer } from 'UI';\nimport { Icon, Flex, translate } from '@haldor/ui';\nimport { Link } from 'react-router-dom';\nimport { getRootUrl } from 'helpers/url';\nimport Tooltip from '@mui/material/Tooltip';\n\nclass DisplayAssignment extends Component {\n\trenderTeamsAssignment = () => {\n\t\tconst { assignment } = this.props;\n\n\t\treturn (\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{assignment.displayName}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{assignment.dueDateTime}\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tTeams\n\t\t\t\t\t\t
\n\n\n\t\t\t\t\t\t{this.props.remove != null ? (\n\t\t\t\t\t\t\t this.props.remove()}>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t};\n\n\trenderHaldorAssignment = () => {\n\t\tconst { translate, assignment } = this.props;\n\t\tconst user = new User(this.props.currentUser);\n\t\tlet addedColorDots = [];\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{this.props.useLink ?\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{assignment.courses != null && assignment.courses.length > 0 ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{assignment.courses.map((course) => {\n\t\t\t\t\t\t\t\t\t\tif (addedColorDots.find((t) => t == course.id) == null) {\n\t\t\t\t\t\t\t\t\t\t\tlet text = course.title;\n\t\t\t\t\t\t\t\t\t\t\ttext = course.year != null ? text + ' ' + course.year : text;\n\t\t\t\t\t\t\t\t\t\t\taddedColorDots.push(course.id);\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{assignment.title}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{assignment.section != null ? assignment.section.title : ''}\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:\n\t\t\t\t\t
\n\t\t\t\t\t\t{assignment.courses != null && assignment.courses.length > 0 ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{assignment.courses.map((course) => {\n\t\t\t\t\t\t\t\t\tif (addedColorDots.find((t) => t == course.id) == null) {\n\t\t\t\t\t\t\t\t\t\tlet text = course.title;\n\t\t\t\t\t\t\t\t\t\ttext = course.year != null ? text + ' ' + course.year : text;\n\t\t\t\t\t\t\t\t\t\taddedColorDots.push(course.id);\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{assignment.title}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{assignment.section != null ? assignment.section.title : ''}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{assignment.autoAssignStudents ?
{this.props.translate('Auto')}
: null}\n\n\n\t\t\t\t\t\t{assignment.status === 'ASSIGNMENT_LOCKED' ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate('Locked')}\n\t\t\t\t\t\t\t\t{user.isTeacher() ?\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{' '}{assignment?.lockedWorkspaces === 0 ? 0 : assignment?.lockedWorkspaces} /{' '}\n\t\t\t\t\t\t\t\t\t\t{assignment?.totalTasks}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{assignment.published == '0001-01-01T00:00:00' ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.translate('Draft')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{assignment.created != '0001-01-01T00:00:00' ? (\n\t\t\t\t\t\t\t{assignment.dueDate}\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{assignment.assessmentId != null ? (\n\t\t\t\t\t\t\t
{this.props.translate('assessed')}
\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{assignment.externalID != null ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tTeams\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : assignment.created == '0001-01-01T00:00:00' ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.translate('task-is-creating')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{this.props.customPermission ?\n\t\t\t\t\t\t\tthis.props.remove != null && this.props.permission ? (\n\t\t\t\t\t\t\t\t this.props.remove()}>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\tthis.props.remove != null ? (\n\t\t\t\t\t\t\t\t this.props.remove()}>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{assignment.submittedTasks != null && !user.isStudent() && assignment.totalTasks > 0 ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{translate('submitted-list-title')} {assignment.submittedTasks} /{' '}\n\t\t\t\t\t\t\t\t\t{assignment.totalTasks}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{assignment.publishedAssessments != null && !user.isStudent() && assignment.totalTasks > 0 ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{translate('assessed-tasks')} {assignment.publishedAssessments}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t};\n\n\trender() {\n\t\tif (this.props.assignment['@odata.type'] == 'haldor.assignment.block.teamsassignment') {\n\t\t\treturn this.renderTeamsAssignment();\n\t\t}\n\n\t\treturn this.renderHaldorAssignment();\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tcurrentUser: state.user.currentUser,\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(DisplayAssignment);\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\n\nclass GroupSelector extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\terror: '',\n\t\t};\n\t}\n\n\tonGroupSelect = (event, id) => {\n\t\tif (this.props.required) {\n\t\t\tif (event.target != null) {\n\t\t\t\tif (event.target.value === '' || event.target.value === '0') {\n\t\t\t\t\tthis.setState({ error: this.props.translate('field-needs-input') });\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState({ error: '' });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (event) {\n\t\t\tif (event.target != null) {\n\t\t\t\tif (this.props.onChange) {\n\t\t\t\t\tlet group = this.props.groups.find((x) => x.id == event.target.value);\n\t\t\t\t\tif (group) {\n\t\t\t\t\n\t\t\t\t\t\tthis.props.onChange(event.target.value, group);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.props.onChange(event.target.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (id && id != '0') {\n\t\t\tif (this.props.onChange) {\n\t\t\t\tthis.props.onChange(id);\n\t\t\t}\n\t\t}\n\t};\n\n\tgroupOptions = (groups) => {\n\t\treturn groups.map((group, i) => {\n\t\t\tif (\n\t\t\t\tgroup.classroomUrl == null ||\n\t\t\t\t(group.classroomUrl == '' && this.props.sectionId == null)\n\t\t\t) {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (group.currentUserRole == 'OWNER') {\n\t\t\t\tif (this.props.sectionId == null || this.props.cloneView) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (this.props.sectionId == group.id) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t};\n\n\tcomponentDidMount = () => {\n\t\tconst { sectionId } = this.props;\n\n\t\tif (sectionId != null && sectionId != 0) {\n\t\t\tvar find = this.props.groups.find((t) => t.id == sectionId);\n\n\t\t\tif (find == null) {\n\t\t\t\tthis.setState({ error: this.props.translate('field-needs-input') });\n\t\t\t\tthis.props.onChange(0);\n\t\t\t}\n\t\t}\n\t};\n\n\trender() {\n\t\tconst { groups, sectionId, disabled, required } = this.props;\n\t\tconst { error } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{this.groupOptions(groups)}\n\t\t\t\t\t\n\n\t\t\t\t\t{required && error !== '' ? (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t
\n\t\t\t\t\t) : null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tgroups: state.sections.educationGroups,\n\t};\n}\n\nexport default connect(mapStateToProps)(GroupSelector);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\n\nimport {\n\tgetHaldorAssignments,\n\tgetMicrosoftEducationAssignments,\n\tclearLatestAssignments,\n\tgetLatestHaldorAssignments,\n\tgetLatestMicrosoftEducationAssignments,\n} from 'actions/assignments';\n\nimport {\n\tclearSearchResults,\n\tsearchHaldorAssignmentsInGroup,\n\tsearchMicrosoftAssignmentsInGroup,\n\tsearchAssignment,\n} from 'actions/search';\nimport {\n\tgetSection\n} from 'actions/sections';\n\nimport { ColorLabel, ColorLabelContainer, Spinner } from 'UI';\nimport { Search } from 'UI/Inputs';\nimport { Tabs, Tab, translate } from '@haldor/ui';\nimport FromNow from 'components/Presentation/Date/FromNow';\nimport GroupSelector from '../Partials/GroupSelector';\n\nimport './AssignmentSelect.scss';\n\nclass AssignmentSelect extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloading: false,\n\t\t\tloadingLatest: false,\n\t\t\tsectionLoadedAtSetup: props.section != null,\n\t\t};\n\t}\n\n\tcomponentDidMount = () => {\n\t\tthis.setState({ loadingLatest: true });\n\t\tlet promises = [];\n\n\t\tif (this.props.section != null) {\n\t\t\tif (this.props.services.haldor) {\n\t\t\t\tpromises.push(this.props.getLatestHaldorAssignments(this.props.section.graphId));\n\t\t\t}\n\n\t\t\tif (this.props.services.microsoft) {\n\t\t\t\tpromises.push(this.props.getLatestMicrosoftEducationAssignments(this.props.section.graphId));\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.props.services.haldor) {\n\t\t\t\tpromises.push(this.props.getHaldorAssignments());\n\t\t\t}\n\n\t\t\tif (this.props.services.microsoft) {\n\t\t\t\tpromises.push(this.props.getMicrosoftEducationAssignments());\n\t\t\t}\n\t\t}\n\n\t\tPromise.all(promises).then(() => {\n\t\t\tthis.setState({ loadingLatest: false });\n\t\t});\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (this.props.section == null && nextProps.section != null && this.state.loadingLatest == false) {\n\t\t\tthis.setState({ loadingLatest: true });\n\t\t\tlet promises = [];\n\n\t\t\tif (this.props.services.microsoft) {\n\t\t\t\tpromises.push(this.props.getLatestHaldorAssignments(nextProps.section.graphId));\n\t\t\t}\n\n\t\t\tif (this.props.services.haldor) {\n\t\t\t\tpromises.push(this.props.getLatestMicrosoftEducationAssignments(nextProps.section.graphId));\n\t\t\t}\n\n\t\t\tPromise.all(promises).then(() => {\n\t\t\t\tthis.setState({ loadingLatest: false });\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tthis.props.clearSearchResults();\n\t\tthis.props.clearLatestAssignments();\n\t}\n\n\tassignmentFilter = (assignment) => {\n\t\tconst { filterResults } = this.props;\n\n\t\tif (assignment.status == 'ASSIGNMENT_DELETED') {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (filterResults != null && filterResults.length > 0) {\n\t\t\tconst found = filterResults.find(id => id == assignment.id);\n\t\t\treturn found != null;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tonGroupChange = (groupId, group) => {\n\t\tif (groupId != 0) {\n\t\t\tthis.props.getSection(groupId);\n\t\t}\n\t};\n\tonSearch = (value) => {\n\t\tthis.setState({ loading: true });\n\t\tlet promises = [];\n\n\t\tif (this.props.section != null) {\n\t\t\tif (this.props.services.microsoft) {\n\t\t\t\tpromises.push(this.props.searchMicrosoftAssignmentsInGroup(value.query, this.props.section.graphId));\n\t\t\t}\n\n\t\t\tif (this.props.services.haldor) {\n\t\t\t\tpromises.push(this.props.searchHaldorAssignmentsInGroup(value.query, this.props.section.graphId));\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.props.services.haldor) {\n\t\t\t\tpromises.push(this.props.searchAssignment(value.query));\n\t\t\t}\n\t\t}\n\n\t\tPromise.all(promises).then(() => {\n\t\t\tthis.setState({ loading: false });\n\t\t});\n\t}\n\n\trenderAssignment = (assignment) => {\n\t\tif (assignment.title == '')\n\t\t\treturn null;\n\n\t\tif (this.assignmentFilter(assignment))\n\t\t\treturn null;\n\n\t\tlet courses = [];\n\n\t\tif (assignment.selectedCourses != null && this.props.section != null) {\n\t\t\tlet courseIds = assignment.selectedCourses.split(\";\");\n\t\t\tcourseIds.forEach((id) => {\n\t\t\t\tvar findCourse = this.props.section.courses.find(t => t.id == id);\n\n\t\t\t\tif (findCourse != null) {\n\t\t\t\t\tcourses.push(findCourse);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn (\n\t\t\t
this.onSelect(assignment)}>\n\t\t\t\t{courses.length > 0 ?\n\t\t\t\t\t\n\t\t\t\t\t\t{courses.map(course => (\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: null}\n\n\t\t\t\t{assignment.title}\n\n\t\t\t\t{assignment.section != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{assignment.section.title}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{assignment.dueDate != null ?\n\t\t\t\t\t\n\t\t\t\t\t\t{assignment.dueDate}\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderTeamsAssignment = (assignment) => {\n\t\tif (assignment.displayName == '')\n\t\t\treturn null;\n\n\t\tif (this.assignmentFilter(assignment))\n\t\t\treturn null;\n\n\t\treturn (\n\t\t\t
this.onSelect(assignment)}>\n\t\t\t\t{assignment.displayName}\n\n\t\t\t\t{assignment.reference != null && assignment.reference.section != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{assignment.reference.section.title}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{assignment.dueDateTime != null ?\n\t\t\t\t\t\n\t\t\t\t\t\t{assignment.dueDateTime}\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\tonSelect = (assignment) => {\n\t\tif (this.props.onSelect) {\n\t\t\tthis.props.onSelect(assignment);\n\t\t}\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tlatestMicrosoftAssignments,\n\t\t\tlatestHaldorAssignments,\n\t\t\tincludeAssignmentsWithPlans,\n\t\t\tteacherAssignments,\n\t\t\tteacherTeamsAssignments,\n\t\t} = this.props;\n\n\t\tlet latest = [];\n\n\t\tif (this.props.section != null) {\n\t\t\tif (includeAssignmentsWithPlans != null && includeAssignmentsWithPlans == false) {\n\t\t\t\tif (latestHaldorAssignments != null && latestHaldorAssignments != '') {\n\t\t\t\t\tlatest.push(...latestHaldorAssignments.filter(t => t.plans.length == 0));\n\t\t\t\t}\n\t\t\t\tif (latestMicrosoftAssignments != null) {\n\t\t\t\t\tlatest.push(...latestMicrosoftAssignments);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (latestMicrosoftAssignments != null) {\n\t\t\t\t\tlatest.push(...latestMicrosoftAssignments);\n\t\t\t\t}\n\n\t\t\t\tif (latestHaldorAssignments != null) {\n\t\t\t\t\tlatest.push(...latestHaldorAssignments);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (teacherAssignments != null) {\n\t\t\t\tlatest.push(...teacherAssignments);\n\t\t\t}\n\t\t\tif (teacherTeamsAssignments != null) {\n\t\t\t\tlatest.push(...teacherTeamsAssignments);\n\t\t\t}\n\t\t}\n\n\t\tlatest.sort(function (a, b) {\n\t\t\tlet aDate, bDate = null;\n\t\t\tif (a.created != null) {\n\t\t\t\taDate = a.created;\n\t\t\t} else {\n\t\t\t\taDate = a.createdDateTime\n\t\t\t}\n\n\t\t\tif (b.created != null) {\n\t\t\t\tbDate = b.created;\n\t\t\t} else {\n\t\t\t\tbDate = b.createdDateTime\n\t\t\t}\n\n\t\t\treturn moment.utc(bDate).local().unix() - moment.utc(aDate).local().unix();\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.state.sectionLoadedAtSetup ? null :\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t\t{this.props.section == null ? null :
\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.state.loadingLatest ?\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t{latest.map((assignment) => {\n\t\t\t\t\t\t\t\tif (assignment.displayName != null)\n\t\t\t\t\t\t\t\t\treturn this.renderTeamsAssignment(assignment);\n\n\t\t\t\t\t\t\t\tconst inLatestMicrosoftAssignments = latestMicrosoftAssignments?.findIndex((_assignment) => {\n\t\t\t\t\t\t\t\t\treturn _assignment.id == assignment.externalID;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst inTeacherTeamsAssignments = teacherTeamsAssignments?.find((_assignment) => {\n\t\t\t\t\t\t\t\t\treturn _assignment.id == assignment.externalID;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (inLatestMicrosoftAssignments != null && inLatestMicrosoftAssignments > -1)\n\t\t\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t\t\tif (inTeacherTeamsAssignments != null)\n\t\t\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t\t\treturn this.renderAssignment(assignment);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{this.props.searchAssignmentsNoGroup != null && this.props.searchAssignmentsNoGroup.length > 0 ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.searchAssignmentsNoGroup.map((assignment) => {\n\t\t\t\t\t\t\t\t\tlet inMicrosoftTeamsResults = this.props.microsoftAssignments?.findIndex(_assignment => {\n\t\t\t\t\t\t\t\t\t\treturn _assignment.id == assignment.externalID;\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (inMicrosoftTeamsResults != null && inMicrosoftTeamsResults > -1)\n\t\t\t\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t\t\t\treturn this.renderAssignment(assignment);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{this.props.microsoftAssignments != null && this.props.microsoftAssignments.length > 0 ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.microsoftAssignments.map((assignment) => {\n\t\t\t\t\t\t\t\t\treturn this.renderTeamsAssignment(assignment);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{this.props.haldorAssignments != null && this.props.haldorAssignments.length > 0 ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.haldorAssignments.map((assignment) => {\n\t\t\t\t\t\t\t\t\tlet inMicrosoftTeamsResults = this.props.microsoftAssignments?.findIndex(_assignment => {\n\t\t\t\t\t\t\t\t\t\treturn _assignment.id == assignment.externalID;\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (inMicrosoftTeamsResults != null && inMicrosoftTeamsResults > -1)\n\t\t\t\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t\t\t\treturn this.renderAssignment(assignment);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t{this.props.assignments != null && this.props.assignments.length > 0 ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.assignments.map((assignment) => {\n\t\t\t\t\t\t\t\t\treturn this.renderAssignment(assignment);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tassignments: state.Search.assignments,\n\t\thaldorAssignments: state.Search.haldorAssignments,\n\t\tmicrosoftAssignments: state.Search.microsoftAssignments,\n\t\tlatestMicrosoftAssignments: state.assignments.latestMicrosoftAssignments,\n\t\tlatestHaldorAssignments: state.assignments.latestHaldorAssignments,\n\t\tservices: state.Services.availableServices,\n\t\ttranslate: translate(state.Languages.translations),\n\t\tteacherAssignments: state.assignments.assignments,\n\t\tteacherTeamsAssignments: state.assignments.teamsAssignments,\n\t\tsearchAssignmentsNoGroup: state.assignments.search_results,\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetHaldorAssignments,\n\tgetMicrosoftEducationAssignments,\n\tsearchHaldorAssignmentsInGroup,\n\tsearchMicrosoftAssignmentsInGroup,\n\tgetLatestHaldorAssignments,\n\tgetLatestMicrosoftEducationAssignments,\n\tclearSearchResults,\n\tclearLatestAssignments,\n\tsearchAssignment,\n\tgetSection,\n})(AssignmentSelect);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\nimport AssignmentSelect from \"containers/Forms/Partials/AssignmentSelect\";\n\nimport Modal from 'containers/Modals/Modal';\nimport { Button, Icon, translate } from '@haldor/ui';\n\nclass SelectAssignment extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tmodal: false,\n\t\t}\n\t}\n\n\ttoggleModal = (event) => {\n\t\tif (event != null) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\tthis.setState({ modal: !this.state.modal });\n\t}\n\n\tselectAssignmentForPlan = (assignment) => {\n\t\tif (assignment.id == parseInt(assignment.id)) {\n\t\t\t// Haldor assignment\n\t\t\tdelete assignment.associatedMatrices;\n\t\t\tdelete assignment.courses;\n\t\t\tdelete assignment.assessmentId;\n\t\t\tdelete assignment.assignmentDocuments;\n\t\t\tdelete assignment.attachedFiles;\n\t\t\tdelete assignment.containerId;\n\t\t\tdelete assignment.documentTemplates;\n\t\t\tdelete assignment.origin;\n\t\t\tdelete assignment.removeInstructions;\n\t\t\tdelete assignment.selectedCourses;\n\t\t\tdelete assignment.section;\n\t\t\tdelete assignment.plagiarismCheck;\n\t\t\tdelete assignment.teacher;\n\t\t\tdelete assignment.sectionUrl;\n\t\t\tdelete assignment.plans;\n\t\t\tdelete assignment.isDeletable;\n\t\t\tdelete assignment.locked;\n\t\t\tdelete assignment.matrix;\n\t\t\tdelete assignment.tasks;\n\t\t} else {\n\t\t\t// MS Teams assignment\n\t\t}\n\n\t\tif (this.props.onPicked != null) {\n\t\t\tthis.props.onPicked(assignment);\n\t\t}\n\n\t\tthis.setState({ modal: false });\n\t};\n\n\trender() {\n\t\tlet filterAssignments = [];\n\t\tlet section = null;\n\n\t\tif (this.props.selectedSections != null && this.props.selectedSections.length > 0) {\n\t\t\tsection = this.props.selectedSections[0];\n\t\t} else {\n\t\t\tsection = this.props.activeSection;\n\t\t}\n\n\t\tif (this.props.plan != null && this.props.plan.associatedAssignments != null) {\n\t\t\tfilterAssignments = this.props.plan.associatedAssignments.map((assignment) => assignment.assignmentId);\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t
\n\t\t)\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t\tplan: state.planning.active_plan,\n\t\tactiveSection: state.sections.activeSection,\n\t\tselectedSections: state.sections.selected,\n\t}\n}\n\nexport default connect(mapStateToProps, {\n})(SelectAssignment);","import React, { useState, useEffect } from 'react';\n\nimport { useTranslate } from 'lib/translate';\nimport Modal from 'containers/Modals/Modal';\n\nimport { Checkbox } from '@haldor/ui';\nimport { useSelector } from 'react-redux';\n\nconst InvalidGroupNotice = (props) => {\n\tconst [open, setOpen] = useState(false);\n\tconst [discard, setDiscard] = useState(false);\n\n\tconst sections = useSelector(state => state.sections.educationGroups);\n\tconst translate = useTranslate();\n\n\tuseEffect(() => {\n\t\tif (localStorage.getItem('discard-invalid-groups-msg') != null && localStorage.getItem('discard-invalid-groups-msg') == 'yes') {\n\t\t\treturn () => null;\n\t\t}\n\n\t\tif (sections != null) {\n\t\t\tlet invalidGroup = sections.find(section =>\n\t\t\t\tsection.archived == false && section.userRole == 'OWNER' && section.type == 'EDUCATION_GROUP' &&\n\t\t\t\t(section.classroomUrl == null || section.classroomUrl == '')\n\t\t\t);\n\n\t\t\tif (invalidGroup != null) {\n\t\t\t\tsetOpen(true);\n\t\t\t}\n\t\t}\n\t}, [sections]);\n\n\tconst onClose = () => {\n\t\tsetOpen(false);\n\n\t\tif (discard) {\n\t\t\tlocalStorage.setItem('discard-invalid-groups-msg', 'yes');\n\t\t}\n\t}\n\n\tconst onCheckboxChange = (checked) => {\n\t\tsetDiscard(checked);\n\t}\n\n\treturn \n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{translate('Workspace missing')}\n\t\t\t\t
\n\n\t\t\t\t

\n\t\t\t\t\t{translate('A configuration problem has occurred with one of your groups. This means that the group is missing a workspace in Sharepoint and no assignments or plans can be created.') + ' '}\n\t\t\t\t\t{translate('Please wait and try again later. If the problem persists, please contact your school for support.')}\n\t\t\t\t

\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n}\n\nexport default InvalidGroupNotice;","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { translate } from '@haldor/ui';\n\nimport { Button, Icon } from '@haldor/ui';\n\nimport './GenerateBaseGroupsRandomly.scss';\n\nclass GenerateBaseGroupsRandomly extends Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttype: 'number-of-groups',\n\t\t\tamount: 0,\n\t\t};\n\t}\n\n\tsetType = (event) => this.setState({ type: event.target.value })\n\tsetAmount = (event) => this.setState({ amount: event.target.value })\n\tsubtractAmount = (event) => this.setState({ amount: parseInt(this.state.amount) - 1 })\n\taddAmount = (event) => this.setState({ amount: parseInt(this.state.amount) + 1 })\n\n\tonReset = () => {\n\t\tthis.setState({ amount: 0, type: 'number-of-groups' });\n\n\t\tif (this.props.onSubmit != null) {\n\t\t\tthis.props.onSubmit([]);\n\t\t}\n\t}\n\n\tonSubmit = (e) => {\n\t\tif (e != null) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tlet units = [];\n\t\tlet students = [...this.props.students];\n\n\t\tif (this.state.amount < 1) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.state.type == 'number-of-groups') {\n\t\t\tlet studentsPerUnit = Math.ceil(students.length / this.state.amount);\n\n\t\t\twhile (units.length < this.state.amount) {\n\t\t\t\tlet unitStudents = [];\n\n\t\t\t\twhile (unitStudents.length < studentsPerUnit && students.length > 0) {\n\t\t\t\t\tlet index = Math.floor(Math.random() * students.length);\n\t\t\t\t\tunitStudents.push({\n\t\t\t\t\t\tuserId: students[index].id,\n\t\t\t\t\t\tuser: students[index],\n\t\t\t\t\t});\n\n\t\t\t\t\tstudents.splice(index, 1);\n\t\t\t\t}\n\n\t\t\t\tunits.push({\n\t\t\t\t\ttitle: this.props.translate('group') + ' ' + (units.length + 1),\n\t\t\t\t\tmemberships: unitStudents,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (this.state.type == 'students-per-group') {\n\t\t\tlet numberOfUnits = Math.ceil(students.length / this.state.amount);\n\n\t\t\twhile (units.length < numberOfUnits) {\n\t\t\t\tlet unitStudents = [];\n\n\t\t\t\twhile (unitStudents.length < this.state.amount && students.length > 0) {\n\t\t\t\t\tlet index = Math.floor(Math.random() * students.length);\n\t\t\t\t\tunitStudents.push({\n\t\t\t\t\t\tuserId: students[index].id,\n\t\t\t\t\t\tuser: students[index],\n\t\t\t\t\t});\n\n\t\t\t\t\tstudents.splice(index, 1);\n\t\t\t\t}\n\n\t\t\t\tunits.push({\n\t\t\t\t\ttitle: this.props.translate('group') + ' ' + (units.length + 1),\n\t\t\t\t\tmemberships: unitStudents,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.onSubmit != null) {\n\t\t\tthis.props.onSubmit(units);\n\t\t}\n\t}\n\n\trender() {\n\t\tconst types = [\n\t\t\t{\n\t\t\t\tvalue: 'number-of-groups',\n\t\t\t\tlabel: this.props.translate('number-of-groups'),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'students-per-group',\n\t\t\t\tlabel: this.props.translate('students-per-group'),\n\t\t\t}\n\t\t];\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t-\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t}\n}\n\nexport default connect(mapStateToProps)(GenerateBaseGroupsRandomly);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { translate } from '@haldor/ui';\nimport swal from 'sweetalert2';\n\nimport { Flex, Button, Select, Checkbox, Icon, TooltipMenu } from '@haldor/ui';\n\nimport GenerateBaseGroupsRandomly from './GenerateBaseGroupsRandomly';\n\nimport './BaseGroupForm.scss';\nimport DisplayName from 'components/Presentation/DisplayName';\n\nclass BaseGroupForm extends Component {\n\n\tstatic defaultProps = {\n\t\thideTitle: false,\n\t}\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet units = [];\n\t\tlet title = '';\n\n\t\tif (props.baseGroup != null) {\n\t\t\tunits = props.baseGroup.units;\n\t\t\ttitle = props.baseGroup.title;\n\t\t}\n\n\t\tthis.state = {\n\t\t\ttitle,\n\t\t\tunits,\n\t\t\tactiveStudents: [],\n\t\t\tsubmitting: false,\n\t\t};\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.baseGroup != null && nextProps.baseGroup != this.props.baseGroup) {\n\t\t\tthis.setState({ units: nextProps.baseGroup.units, title: nextProps.baseGroup.title });\n\t\t}\n\n\t\tif (nextProps.baseGroup == null && nextProps.baseGroup != this.props.baseGroup) {\n\t\t\tthis.setState({ units: [], title: '' });\n\t\t}\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.state.units.length > 0) {\n\t\t\t// Trigger onUpdate event when this form mounts and the value isnt empty\n\t\t\tthis.onUpdate();\n\t\t}\n\t}\n\n\t/* Help methods - JHELP */\n\tgetUnassignedStudents = () => {\n\t\tlet students = [];\n\t\tthis.props.section.students.forEach(student => {\n\t\t\tlet isSelected = this.state.units.find(unit => {\n\t\t\t\treturn unit.memberships.find(member => student.userId == member.userId);\n\t\t\t});\n\n\t\t\tif (isSelected != null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tstudents.push(student);\n\t\t\tstudents.sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"))\n\t\t});\n\n\t\treturn students;\n\t}\n\n\t/* Event methods - JEVEN */\n\tsetTitle = (event) => this.setState({ title: event.target.value });\n\n\tonUpdate = () => {\n\t\tif (this.props.onUpdate != null) {\n\t\t\tthis.props.onUpdate(this.state.units);\n\t\t}\n\t}\n\n\trandomUnitsSubmit = (units) => {\n\t\tthis.setState({ units }, () => {\n\t\t\tthis.onUpdate();\n\t\t});\n\t}\n\n\tonStudentActiveToggle = (student) => {\n\t\tlet { activeStudents } = this.state;\n\t\tlet studentIndex = this.state.activeStudents.findIndex(activeStudent => {\n\t\t\treturn activeStudent.userId == student.userId;\n\t\t});\n\n\t\tif (studentIndex > -1) {\n\t\t\tactiveStudents.splice(studentIndex, 1);\n\t\t} else {\n\t\t\tactiveStudents.push(student);\n\t\t}\n\t\tactiveStudents.sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"))\n\t\tthis.setState({ activeStudents });\n\t}\n\n\tonStudentSelect = (student, unitTitle) => {\n\t\tlet { units } = this.state;\n\n\t\tlet unit = units.find(unit => {\n\t\t\treturn unit.title == unitTitle;\n\t\t});\n\n\t\tif (unit == null) {\n\t\t\tunit = this.addUnit();\n\t\t}\n\n\t\tlet isSelected = this.state.units.find(unit => {\n\t\t\treturn unit.memberships.find(member => student.userId == member.userId);\n\t\t});\n\n\t\tif (isSelected != null) {\n\t\t\tlet inMemberships = isSelected.memberships.findIndex(member => student.userId == member.userId);\n\t\t\tif (inMemberships > -1) {\n\t\t\t\tisSelected.memberships.splice(inMemberships, 1);\n\t\t\t}\n\n\t\t\tif (unit != null && unit.title != isSelected.title) {\n\t\t\t\tunit.memberships.push({\n\t\t\t\t\tuserId: student.userId,\n\t\t\t\t\tuser: student,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tunit.memberships.push({\n\t\t\t\tuserId: student.userId,\n\t\t\t\tuser: student,\n\t\t\t});\n\t\t}\n\n\t\tthis.setState({ units }, () => {\n\t\t\tthis.onUpdate();\n\t\t});\n\t}\n\n\tassignStudentToNewGroup = (student) => {\n\t\tlet unit = this.addUnit();\n\n\t\tthis.onStudentSelect(student, unit.title);\n\t}\n\n\tsetGroupOnActiveStudents = (unitTitle) => {\n\t\tthis.state.activeStudents.forEach(student => {\n\t\t\tthis.onStudentSelect(student, unitTitle);\n\t\t});\n\n\t\tthis.setState({ activeStudents: [] });\n\t}\n\n\tcreateGroupWithActiveStudents = () => {\n\t\tlet unit = this.addUnit();\n\n\t\tthis.setGroupOnActiveStudents(unit.title);\n\t}\n\n\taddUnit = (e) => {\n\t\tif (e != null) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tlet { units } = this.state;\n\t\tlet unit = {\n\t\t\ttitle: this.props.translate('group') + ' ' + (this.state.units.length + 1),\n\t\t\tmemberships: [],\n\t\t};\n\n\t\tunits.push(unit);\n\n\t\tthis.setState({ units }, () => {\n\t\t\tthis.onUpdate();\n\t\t});\n\n\t\treturn unit;\n\t}\n\n\tremoveUnit = (unitTitle) => {\n\t\tlet { units } = this.state;\n\t\tlet unitIndex = units.findIndex(unit => {\n\t\t\treturn unit.title == unitTitle;\n\t\t});\n\n\t\tif (unitIndex > -1) {\n\t\t\tunits.splice(unitIndex, 1);\n\n\t\t\tunits.forEach((unit, index) => {\n\t\t\t\tunit.title = this.props.translate('group') + ' ' + (index + 1);\n\n\t\t\t\treturn unit;\n\t\t\t});\n\n\t\t\tthis.setState({ units }, () => {\n\t\t\t\tthis.onUpdate();\n\t\t\t});\n\t\t}\n\t}\n\n\teditUnitTitle = (unit) => {\n\t\tconst { translate } = this.props;\n\t\tlet { units } = this.state;\n\n\t\tswal.fire({\n\t\t\ttitle: translate('edit-name'),\n\t\t\ttext: translate('name'),\n\t\t\tinput: 'text',\n\t\t\tinputValue: unit.title,\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: translate('Cancel'),\n\t\t\tconfirmButtonText: translate('save'),\n\t\t\tpreConfirm: (value) => {\n\t\t\t\tif (value.length > 50) {\n\t\t\t\t\treturn swal.showValidationMessage(translate('Group name can not be longer than 50 characters'));\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t}).then((response) => {\n\t\t\tif (response.value != null) {\n\t\t\t\tunit.title = response.value;\n\n\t\t\t\tthis.setState({ units }, () => {\n\t\t\t\t\tthis.onUpdate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonSubmit = (e) => {\n\t\tif (e != null) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tif (this.props.onSubmit != null) {\n\t\t\tif (this.props.baseGroup != null) {\n\t\t\t\tlet values = { ...this.props.baseGroup };\n\t\t\t\tvalues.title = this.state.title;\n\t\t\t\tvalues.units = this.state.units;\n\n\t\t\t\tthis.setState({ submitting: true });\n\t\t\t\tthis.props.onSubmit(values).then(() => {\n\t\t\t\t\tthis.setState({ submitting: false });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet values = {\n\t\t\t\t\ttitle: this.state.title,\n\t\t\t\t\tsectionId: this.props.section.id,\n\t\t\t\t\tunits: this.state.units,\n\t\t\t\t};\n\n\t\t\t\tthis.setState({ submitting: true });\n\t\t\t\tthis.props.onSubmit(values).then(() => {\n\t\t\t\t\tthis.setState({ submitting: false });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Render methods - JREND */\n\trenderStudent = (student, index) => {\n\t\tlet options = [];\n\t\tlet isActive = this.state.activeStudents.find(activeStudent => {\n\t\t\treturn activeStudent.userId == student.userId;\n\t\t});\n\n\t\tconst unit = this.state.units.find(unit => {\n\t\t\treturn unit.memberships.find(member => member.userId == student.userId);\n\t\t});\n\n\t\tthis.state.units.forEach(unit => {\n\t\t\toptions.push({\n\t\t\t\tvalue: unit.title,\n\t\t\t\tlabel: unit.title,\n\t\t\t});\n\t\t});\n\n\t\toptions.push({\n\t\t\tvalue: 'new',\n\t\t\tlabel: this.props.translate('new-group'),\n\t\t});\n\n\t\treturn
\n\t\t\t\n\t\t\t\t}\n\t\t\t\tonChange={() => this.onStudentActiveToggle(student)}\n\t\t\t/>\n\n\t\t\t
\n\t\t\t\t this.onStudentSelect(student, value)}\n\t\t\t\t\toptions={options}\n\t\t\t\t>\n\t\t\t\t\t{unit != null ?\n\t\t\t\t\t\tunit.title\n\t\t\t\t\t\t: this.props.translate('select-group')}\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t
\n\t}\n\n\trender() {\n\t\tconst { section } = this.props;\n\t\tconst { units, title } = this.state;\n\t\tconst unassignedStudents = this.getUnassignedStudents();\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.state.submitting ?\n\t\t\t\t\t
\n\t\t\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t{!this.props.hideTitle ?\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('title')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\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: null}\n\n\t\t\t\t
\n\n\t\t\t\t{this.props.baseGroup == null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('automatically-divide')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t{this.props.translate('Groups')}\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t{this.state.units.map((unit, index) => {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{unit.title}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t { e.preventDefault(); this.editUnitTitle(unit) }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{this.props.translate('edit-name')}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t { e.preventDefault(); this.removeUnit(unit.title) }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{this.props.translate('Remove')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{unit.memberships.sort((a, b) => (a.user.lastName || \"\").localeCompare(b.user.lastName || \"\"))\n\t\t\t\t\t\t.map((membership, index) => {\n\t\t\t\t\t\t\treturn this.renderStudent(membership.user, index);\n\t\t\t\t\t\t})}\n\t\t\t\t\t
\n\t\t\t\t})}\n\n\t\t\t\t{unassignedStudents.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.props.translate('unassigned-students')}\n\n\t\t\t\t\t\t{unassignedStudents.map((student, index) => {\n\t\t\t\t\t\t\treturn this.renderStudent(student, index);\n\t\t\t\t\t\t})}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('select-group-for-selected-students')} \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tid=\"createBaseGroupSelectedStudentsTooltip\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{this.state.units.map(unit => {\n\t\t\t\t\t\t\t\t\treturn { e.preventDefault(); this.setGroupOnActiveStudents(unit.title) }}>\n\t\t\t\t\t\t\t\t\t\t{unit.title}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t { e.preventDefault(); this.createGroupWithActiveStudents() }}>\n\t\t\t\t\t\t\t\t\t{this.props.translate('new-group')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t{this.props.actions != null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.props.actions.map((action, index) => {\n\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\n\t\t\t\t{this.props.onSubmit != null ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(BaseGroupForm);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { translate } from '@haldor/ui';\nimport swal from 'sweetalert2';\n\nimport {\n\tgetBaseGroups,\n\tdeleteBaseGroup,\n\tgetBaseGroup,\n\tupdateBaseGroup,\n\tcreateBaseGroup,\n\tclearActiveBaseGroup,\n\tsetActiveBaseGroup,\n} from 'actions/basegroups';\n\nimport BaseGroupForm from 'containers/BaseGroups/Form/BaseGroupForm';\n\nimport { Button, Checkbox, Flex, Select, Icon } from '@haldor/ui';\nimport { Spinner } from 'UI';\nimport DisplayName from 'components/Presentation/DisplayName';\nimport { Stack } from '@mui/material';\n\nclass AssignmentTaskSelect extends Component {\n\n\t/* Class setup */\n\tstatic defaultProps = {\n\t\tcopyMode: false,\n\t\tgroupEnabled: false,\n\t};\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet tasks = [];\n\t\tlet editing = false;\n\t\tif (props.input.value != null && props.input.value !== '') {\n\t\t\ttasks = JSON.parse(JSON.stringify(props.input.value));\n\t\t\ttasks.forEach((task, index) => {\n\t\t\t\treturn task.index = index;\n\t\t\t});\n\n\t\t\tediting = true;\n\t\t}\n\n\t\tthis.state = {\n\t\t\ttasks,\n\t\t\tactiveStudents: [],\n\t\t\tunits: [],\n\t\t\tselectedBaseGroup: '',\n\t\t\tloading: false,\n\t\t};\n\n\t\tthis.editing = editing;\n\t\tthis.groupAssignment = this.props.groupEnabled;\n\t}\n\n\t/* Lifecycle methods */\n\tcomponentDidMount = () => {\n\t\tif (this.props.section != null) {\n\t\t\tthis.props.getBaseGroups(this.props.section?.id);\n\t\t}\n\n\t\tif (this.props.input != null && this.state.tasks.length > 0) {\n\t\t\tthis.props.input.onChange(this.state.tasks);\n\t\t}\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tif (nextProps.section != null && nextProps.section != this.props.section) {\n\t\t\tthis.props.getBaseGroups(nextProps.section?.id);\n\n\t\t\tif (this.props.copyMode && this.props.section?.id != nextProps.section?.id) {\n\t\t\t\tthis.props.clearActiveBaseGroup();\n\t\t\t\tlet tasks = [];\n\n\t\t\t\tthis.setState({ tasks: tasks, units: [], selectedBaseGroup: '' }, () => {\n\t\t\t\t\tif (this.props.input != null) {\n\t\t\t\t\t\tthis.props.input.onChange(tasks);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (nextProps.groupEnabled != null && nextProps.groupEnabled != this.groupAssignment) {\n\t\t\tthis.groupAssignment = nextProps.groupEnabled;\n\t\t\tthis.props.clearActiveBaseGroup();\n\t\t\tthis.setState({ tasks: [], units: [], selectedBaseGroup: '' }, () => {\n\t\t\t\tif (this.props.input != null) {\n\t\t\t\t\tthis.props.input.onChange(this.state.tasks);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tthis.props.clearActiveBaseGroup();\n\t}\n\n\t/* Helper methods */\n\t_loadTasksAsUnits = () => {\n\t\tlet units = [];\n\t\tthis.state.tasks.forEach(task => {\n\t\t\tlet unit = {\n\t\t\t\ttitle: task.groupName,\n\t\t\t\tmemberships: [],\n\t\t\t};\n\n\t\t\ttask.students.forEach(student => {\n\t\t\t\tunit.memberships.push({\n\t\t\t\t\tuserId: student.userId,\n\t\t\t\t\tuser: student,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tunits.push(unit);\n\t\t});\n\n\t\tif (units.length > 0) {\n\t\t\tthis.props.setActiveBaseGroup({\n\t\t\t\ttitle: '',\n\t\t\t\tunits: units,\n\t\t\t});\n\t\t}\n\t}\n\n\t/* Event methods */\n\tonBaseGroupSelect = async (event) => {\n\t\tif (event.target.value == null || event.target.value == '') {\n\t\t\tthis.setState({ selectedBaseGroup: '' });\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.setState({ loading: true, selectedBaseGroup: event.target.value });\n\t\tawait this.props.getBaseGroup(event.target.value);\n\n\t\tlet activeStudents = [];\n\t\tthis.props.active?.units?.forEach(unit => {\n\t\t\tunit.memberships?.forEach(membership => {\n\t\t\t\tactiveStudents.push(membership?.user);\n\t\t\t});\n\t\t});\n\n\t\tthis.setState({ loading: false, activeStudents, units: this.props.active?.units }, () => {\n\t\t\tthis.onUpdate();\n\t\t});\n\t}\n\n\tonBaseGroupSubmit = (event) => {\n\t\tconst { translate, section } = this.props;\n\t\tevent.preventDefault();\n\n\t\treturn new Promise((resolve) => {\n\t\t\tlet values = {\n\t\t\t\tunits: this.state.units,\n\t\t\t\tsectionId: section.id,\n\t\t\t};\n\n\t\t\tswal.fire({\n\t\t\t\ttitle: translate('Save base group'),\n\t\t\t\ttext: translate('name-basegroup') + '*',\n\t\t\t\tinput: 'text',\n\t\t\t\tshowCancelButton: true,\n\t\t\t\tcancelButtonText: translate('Cancel'),\n\t\t\t\tconfirmButtonText: translate('save'),\n\t\t\t\tpreConfirm: (value) => {\n\t\t\t\t\tif (value == null || value == '') {\n\t\t\t\t\t\treturn swal.showValidationMessage(translate('The field must not be empty'));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}).then(async (response) => {\n\t\t\t\tif (response.value != null) {\n\t\t\t\t\tvalues.title = response.value;\n\n\t\t\t\t\tif (values.id == null) {\n\t\t\t\t\t\tawait this.props.createBaseGroup(values);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.props.updateBaseGroup(values);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(1);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tonBaseGroupUpdate = (units) => {\n\t\tthis.setState({ units }, () => {\n\t\t\tthis.onUpdate();\n\t\t});\n\t}\n\n\tonStudentSelect = (student) => {\n\t\tlet { activeStudents } = this.state;\n\t\tlet studentIndex = this.state.activeStudents.findIndex(activeStudent => {\n\t\t\treturn activeStudent.userId == student.userId;\n\t\t});\n\n\t\tif (studentIndex > -1) {\n\t\t\tactiveStudents.splice(studentIndex, 1);\n\t\t} else {\n\t\t\tactiveStudents.push(student);\n\t\t}\n\n\t\tthis.setState({ activeStudents }, () => {\n\t\t\tthis.onUpdate();\n\t\t});\n\t}\n\n\tonUpdate = () => {\n\t\tlet tasks = [];\n\n\t\tthis.state.units.forEach((unit) => {\n\t\t\tlet task = {\n\t\t\t\tgroupName: unit.title,\n\t\t\t\tassignedTo: '',\n\t\t\t\tstudents: [],\n\t\t\t};\n\n\t\t\tunit.memberships?.forEach(member => {\n\t\t\t\ttask.assignedTo = task.assignedTo + member.userId + ';';\n\t\t\t\ttask.students.push(member.user);\n\t\t\t});\n\n\t\t\ttasks.push(task);\n\t\t});\n\n\t\tif (this.props.input != null) {\n\t\t\tthis.props.input.onChange(tasks);\n\t\t}\n\t}\n\n\tclearSelection = () => {\n\t\tthis.props.clearActiveBaseGroup();\n\n\t\tthis.setState({ units: [], activeStudents: [], selectedBaseGroup: '' });\n\t}\n\n\ttoggleTaskDeletion = (task) => {\n\t\tlet tasks = JSON.parse(JSON.stringify(this.state.tasks));\n\n\t\ttasks = tasks.map(t =>\n\t\t\tt.id === task.id ? { ...t, markedForDeletion: !t.markedForDeletion } : t\n\t\t);\n\n\t\tthis.setState({ tasks }, () => {\n\t\t\tif (this.props.onChange != null) {\n\t\t\t\tthis.props.onChange(tasks);\n\t\t\t}\n\n\t\t\tif (this.props.input != null) {\n\t\t\t\tthis.props.input.onChange(tasks);\n\t\t\t}\n\t\t});\n\t}\n\n\teditTaskTitle = (task) => {\n\t\tconst { translate } = this.props;\n\t\tlet { tasks } = this.state;\n\n\t\tswal.fire({\n\t\t\ttitle: translate('edit-name'),\n\t\t\ttext: translate('name'),\n\t\t\tinput: 'text',\n\t\t\tinputValue: task.groupName,\n\t\t\tshowCancelButton: true,\n\t\t\tcancelButtonText: translate('Cancel'),\n\t\t\tconfirmButtonText: translate('save'),\n\t\t\tpreConfirm: (value) => {\n\t\t\t\tif (value.length > 50) {\n\t\t\t\t\treturn swal.showValidationMessage(translate('Group name can not be longer than 50 characters'));\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t}).then(response => {\n\t\t\tif (response.value != null) {\n\t\t\t\ttask.groupName = response.value;\n\n\t\t\t\tthis.setState({ tasks }, () => {\n\t\t\t\t\tthis.onUpdate();\n\t\t\t\t\tif (this.props.input != null) {\n\t\t\t\t\t\tthis.props.input.onChange(tasks);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tremoveTaskObject = (taskIndex) => {\n\t\tlet { tasks } = this.state;\n\t\tconst task = tasks.find(task => task.index == taskIndex);\n\n\t\tif (task != null) {\n\t\t\tif (task.id != -1) {\n\t\t\t\ttask.markedForDeletion = !task.markedForDeletion;\n\t\t\t} else {\n\t\t\t\ttasks.splice(1, taskIndex);\n\t\t\t}\n\n\t\t\ttask.students.forEach((student) => {\n\t\t\t\tthis.removeStudentFromTask(student.id, taskIndex);\n\t\t\t});\n\n\t\t\tthis.setState({ tasks }, () => {\n\t\t\t\tif (this.props.input != null) {\n\t\t\t\t\tthis.props.input.onChange(this.state.tasks);\n\t\t\t\t}\n\t\t\t\tif (this.props.onChange != null) {\n\t\t\t\t\tthis.props.onChange(this.state.tasks);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tremoveStudentFromTask = async (studentId, taskIndex) => {\n\t\tlet { tasks } = this.state;\n\n\t\tlet task = tasks.find(task => task.index == taskIndex);\n\n\t\tif (task != null) {\n\t\t\tif (task.assignedTo.indexOf(studentId) > -1) {\n\t\t\t\ttask.assignedTo = task.assignedTo.replace(studentId + ';', '');\n\t\t\t\ttask.assignedTo = task.assignedTo.replace(studentId, '');\n\n\t\t\t\tlet studentsArr = task.students.filter(x => x.userId != studentId);\n\t\t\t\ttask.students = studentsArr;\n\t\t\t}\n\n\t\t\tthis.setState({ tasks }, () => {\n\t\t\t\tthis.onUpdate();\n\t\t\t\tif (this.props.input != null) {\n\t\t\t\t\tthis.props.input.onChange(this.state.tasks);\n\t\t\t\t}\n\t\t\t\tif (this.props.onChange != null) {\n\t\t\t\t\tthis.props.onChange(this.state.tasks);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t}\n\n\taddStudentAsTask = (student) => {\n\t\tlet tasks = JSON.parse(JSON.stringify(this.state.tasks));\n\n\t\tlet studentTask = tasks.find(task => {\n\t\t\treturn task.assignmentTaskAssignees.some(assignee => assignee.assigneeId === student.userId);\n\t\t});\n\n\t\tif (studentTask) {\n\t\t\ttasks = tasks.map(t =>\n\t\t\t\tt.id === studentTask.id ? { ...t, markedForDeletion: false } : t\n\t\t\t);\n\t\t} else {\n\t\t\ttasks.push({\n\t\t\t\tgroupName: student.firstName + ' ' + student.lastName,\n\t\t\t\tassignedTo: student.userId,\n\t\t\t\tstudents: [student],\n\t\t\t\tid: -1,\n\t\t\t\tindex: this.state.tasks.length + 1,\n\t\t\t\tassignmentTaskAssignees: [{\n\t\t\t\t\tassignee: student,\n\t\t\t\t\tassigneeId: student.userId\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\n\t\tthis.setState({ tasks });\n\n\t\tif (this.props.input != null) {\n\t\t\tthis.props.input.onChange(tasks);\n\t\t}\n\n\t\tif (this.props.onChange != null) {\n\t\t\tthis.props.onChange(tasks);\n\t\t}\n\t}\n\n\taddStudentOnTask = (student, taskIndex) => {\n\t\tlet { tasks } = this.state;\n\n\t\tlet task = tasks.find(task => task.index == taskIndex);\n\t\tif (task != null) {\n\t\t\tif (task.assignedTo != null) {\n\t\t\t\tif (!task.assignedTo.endsWith(';')) {\n\t\t\t\t\ttask.assignedTo = task.assignedTo + ';';\n\t\t\t\t}\n\n\t\t\t\ttask.assignedTo = task.assignedTo + student.userId + ';';\n\t\t\t} else {\n\t\t\t\ttask.assignedTo = student.userId + ';';\n\t\t\t}\n\n\t\t\ttask.students.push(student);\n\t\t}\n\n\t\tthis.setState({ tasks }, () => {\n\t\t\tthis.onUpdate();\n\n\t\t\tif (this.props.input.onChange != null) {\n\t\t\t\tthis.props.input.onChange(this.state.tasks);\n\t\t\t}\n\n\t\t\tif (this.props.onChange != null) {\n\t\t\t\tthis.props.onChange(this.state.tasks);\n\t\t\t}\n\t\t});\n\t}\n\n\taddTaskGroup = (e) => {\n\t\te.preventDefault();\n\n\t\tlet { tasks } = this.state;\n\n\t\tlet largest = 1;\n\t\ttasks.forEach(task => {\n\t\t\tconst num = parseInt(task.groupName.replace(/^\\D+/g, ''));\n\t\t\tif (num > largest) {\n\t\t\t\tlargest = num;\n\t\t\t}\n\t\t});\n\n\t\tlet task = {\n\t\t\tgroupName: this.props.translate('group') + ' ' + (largest + 1),\n\t\t\tassignedTo: '',\n\t\t\tstudents: [],\n\t\t\tid: -1,\n\t\t\tindex: this.state.tasks.length,\n\t\t};\n\n\t\ttasks.push(task);\n\n\t\tthis.setState({ tasks }, () => {\n\t\t\tthis.onUpdate();\n\t\t\tif (this.props.input != null) {\n\t\t\t\tthis.props.input.onChange(tasks);\n\t\t\t}\n\t\t});\n\n\t\treturn tasks;\n\t}\n\n\t/* Render methods */\n\trenderEditMode = () => {\n\t\tconst unassignedStudents = this.props.section.students.filter((student) => {\n\t\t\tlet foundInTasks = this.state.tasks.find((task) => {\n\t\t\t\tif (task.assignedTo == null) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst foundInStudents = task.students.find(taskStudent => {\n\t\t\t\t\treturn taskStudent.userId == student.userId;\n\t\t\t\t});\n\n\t\t\t\treturn task.assignedTo.indexOf(student.userId) > -1 || foundInStudents != null;\n\t\t\t});\n\n\t\t\treturn foundInTasks == null;\n\t\t}).sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"));\n\n\t\tlet options = [];\n\t\tthis.state.tasks.forEach(task => {\n\t\t\tif (!task.markedForDeletion) {\n\t\t\t\toptions.push({\n\t\t\t\t\tvalue: task.index,\n\t\t\t\t\tlabel: task.groupName,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{this.state.tasks.sort((a, b) =>\n\t\t\t\t\tisNaN(parseInt(a.groupName)) || isNaN(parseInt(b.groupName)) ?\n\t\t\t\t\t\ta.groupName.localeCompare(b.groupName, undefined, { numeric: true })\n\t\t\t\t\t\t: parseInt(a.groupName) - parseInt(b.groupName)).map((task, index) => {\n\t\t\t\t\t\t\tif (task.markedForDeletion) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar assessments = task.assessmentTypeRelationships?.find(atr => atr.assessmentId != null);\n\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{assessments ?\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tif (value == 'rename') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.editTaskTitle(task);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\toptions={[\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'rename',\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: this.props.translate('edit-name'),\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{task.groupName}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tif (value == 'remove') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.removeTaskObject(task.index);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (value == 'rename') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.editTaskTitle(task);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\toptions={[\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'rename',\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: this.props.translate('edit-name'),\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'remove',\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: this.props.translate('Remove'),\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{task.groupName}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{task.students\n\t\t\t\t\t\t\t\t\t.sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"))\n\t\t\t\t\t\t\t\t\t.map((student) => {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.removeStudentFromTask(student.id, task.index);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (value != 'remove') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.addStudentOnTask(student, value)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toptions={[...options, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'remove',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: this.props.translate('Remove'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{task.groupName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t})}\n\n\t\t\t\t{unassignedStudents.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('unassigned-students')}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{unassignedStudents\n\t\t\t\t\t\t\t.map((student) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t this.addStudentOnTask(student, value)}\n\t\t\t\t\t\t\t\t\t\t\t\toptions={options}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('select-group')}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trenderRegularEditMode = () => {\n\t\tconst unassignedStudents = this.props.section.students.filter(student => {\n\t\t\tlet studentTask = this.state.tasks.find(task => {\n\t\t\t\treturn task.assignmentTaskAssignees.some(assignee => assignee.assigneeId === student.userId);\n\t\t\t});\n\t\t\tconst deleted = studentTask != null ? studentTask.markedForDeletion : false;\n\t\t\treturn studentTask == null || deleted;\n\t\t}).sort((a, b) => (a.lastName || \"\").localeCompare(b.lastName || \"\"));\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{this.props.translate('assigned-students')}\n\t\t\t\t\t\n\n\t\t\t\t\t{this.state.tasks\n\t\t\t\t\t\t.sort((a, b) => (a.students[0].lastName || \"\").localeCompare(b.students[0].lastName || \"\"))\n\t\t\t\t\t\t.map((task, index) => {\n\t\t\t\t\t\t\tif (task.markedForDeletion) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar assessments = task.assessmentTypeRelationships?.find(atr => atr.assessmentId != null);\n\n\t\t\t\t\t\t\tvar studentId = task.students != null && task.students.length > 0 ? task.students[0].userId : null;\n\t\t\t\t\t\t\tvar isCurrentlyMemberInGroup = this.props.section.students.some(student => student.userId == studentId);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyMemberInGroup ? null :
{this.props.translate('Removed from group')}
}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{assessments ?\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Remove')}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t:
this.toggleTaskDeletion(task)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Remove')}\n\t\t\t\t\t\t\t\t\t\t\t
}\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t
\n\n\t\t\t\t{unassignedStudents.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.props.translate('unassigned-students')}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{unassignedStudents\n\t\t\t\t\t\t\t.map((student) => {\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
this.addStudentAsTask(student)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('Add')}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\trender() {\n\t\tif (this.props.section == null) {\n\t\t\treturn
\n\t\t\t\t{this.props.translate('select-a-group-to-continue')}\n\t\t\t
\n\t\t}\n\n\t\tif (this.editing && this.groupAssignment && !this.props.copyMode) {\n\t\t\treturn this.renderEditMode();\n\t\t}\n\n\t\tif (this.editing && !this.groupAssignment) {\n\t\t\treturn this.renderRegularEditMode();\n\t\t}\n\n\t\tconst baseGroupFormActions = [\n\t\t\t{\n\t\t\t\tvalue: this.props.translate('save-subgroup'),\n\t\t\t\tonClick: this.onBaseGroupSubmit,\n\t\t\t\ttype: 'secondary',\n\t\t\t},\n\t\t];\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{this.props.baseGroups != null ?\n\t\t\t\t\t\t\t\t\tthis.props.baseGroups.map((baseGroup) => {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}) : null}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{this.props.active != null ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t { e.preventDefault(); this.clearSelection(); }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{this.props.translate('reset')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t{this.state.loading ?\n\t\t\t\t\t\n\t\t\t\t\t:\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\tactive: state.BaseGroups.baseGroup,\n\t\tbaseGroups: state.BaseGroups.baseGroups,\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps, {\n\tgetBaseGroups,\n\tgetBaseGroup,\n\tclearActiveBaseGroup,\n\tcreateBaseGroup,\n\tupdateBaseGroup,\n\tsetActiveBaseGroup,\n})(AssignmentTaskSelect);\n","import React, { Component } from 'react';\nimport { translate } from '@haldor/ui';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Document } from 'UI/Icons';\nimport msal, { loginRequest, getToken } from 'lib/msal';\nimport getEnvironment from 'lib/env';\n\nclass AttachedDocuments extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tdocuments: [],\n\t\t\tundo: this.props.translate('undo'),\n\t\t\tdelete: this.props.translate('Delete'),\n\t\t};\n\n\t\tthis.token = null;\n\n\t\tlet request = loginRequest;\n\t\trequest.scopes = [\n\t\t\t...getEnvironment().scopes,\n\t\t\t...request.scopes\n\t\t];\n\n\t\tgetToken(request).then((response) => {\n\t\t\tthis.token = response.accessToken;\n\n\n\t\t\tthis.loadDocuments(this.props);\n\t\t});\n\t}\n\n\tUNSAFE_componentWillReceiveProps = (nextProps) => {\n\t\tthis.loadDocuments(nextProps);\n\t}\n\n\tloadDocuments = (props) => {\n\t\tif (this.token == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (props.documents != null) {\n\t\t\tif (typeof props.documents === 'string') {\n\t\t\t\tconst documentString = props.documents.split(';');\n\t\t\t\tconst documents = [];\n\t\t\t\tdocumentString.forEach((document) => {\n\t\t\t\t\tconst documentObj = {\n\t\t\t\t\t\tname: document.indexOf(\"?\") > 0 ? document.split(\"?\")[0].substring(document.split(\"?\")[0].lastIndexOf('/') + 1) : document.substring(document.lastIndexOf('/') + 1),\n\t\t\t\t\t\turl: document,\n\t\t\t\t\t\tremove: false,\n\t\t\t\t\t};\n\n\t\t\t\t\tdocuments.push(documentObj);\n\t\t\t\t});\n\n\t\t\t\tthis.setState({ documents });\n\t\t\t} else {\n\t\t\t\tconst documents = [];\n\t\t\t\tprops.documents.forEach((document) => {\n\t\t\t\t\tvar fileUrl = document.value;\n\n\t\t\t\t\tconst documentObj = {\n\t\t\t\t\t\tname: document.name,\n\t\t\t\t\t\turl: fileUrl,\n\t\t\t\t\t\tremove: document.markedForDeletion != null ?\n\t\t\t\t\t\t\tdocument.markedForDeletion : false,\n\t\t\t\t\t};\n\n\t\t\t\t\tdocuments.push(documentObj);\n\t\t\t\t});\n\n\t\t\t\tthis.setState({ documents });\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveDocument = (document) => {\n\t\tconst documents = this.state.documents;\n\n\t\tconst doc = documents.find(docItr => docItr.url == document.url);\n\t\tif (doc.remove) {\n\t\t\tdocument.remove = false;\n\t\t} else {\n\t\t\tdocument.remove = true;\n\t\t}\n\n\t\tthis.setState({ documents });\n\n\t\tthis.props.removeInstruction(document.url, document.remove);\n\t}\n\n\trenderDocuments = () => {\n\t\tif (this.props.documents !== null) {\n\t\t\tconst undo = this.state.undo;\n\t\t\tconst deleteTitle = this.state.delete;\n\n\t\t\treturn this.state.documents.map((document, i) => {\n\t\t\t\tif (document.url !== '') {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{document.name}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{this.props.removeInstruction != null ?\n\t\t\t\t\t\t\t\t
{ this.removeDocument(document); }}>\n\t\t\t\t\t\t\t\t\t{document.remove ? undo : deleteTitle}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\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}\n\t\t\t});\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.renderDocuments()}\n\t\t\t
\n\t\t);\n\t}\n}\n\nfunction mapStateToProps(state) {\n\treturn {\n\t\ttranslate: translate(state.Languages.translations),\n\t};\n}\n\nexport default connect(mapStateToProps)(AttachedDocuments);","import React from 'react';\nimport { Button, Haldor__Block__Plugin, Flex } from '@haldor/ui';\n\nimport { ASSESSMENT_TYPES } from '../AssessmentTypes';\n\nclass AddAssessmentBlockButton_Plugin extends Haldor__Block__Plugin {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.name = 'AddAssessmentBlockButton_Plugin';\n\t}\n\n\tonButtonPress = async (type, event) => {\n\t\tevent.preventDefault();\n\n\t\tswitch (type) {\n\t\t\tcase ASSESSMENT_TYPES.TEACHER:\n\t\t\t\tawait this.editor.addBlock('Haldor.Blocks.AssessmentBlock');\n\t\t\t\tbreak;\n\t\t\tcase ASSESSMENT_TYPES.PEER:\n\t\t\t\tawait this.editor.addBlock('Haldor.Blocks.AssessmentBlock.Peer');\n\t\t\t\tbreak;\n\t\t\tcase ASSESSMENT_TYPES.SELF:\n\t\t\t\tawait this.editor.addBlock('Haldor.Blocks.AssessmentBlock.Self');\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tvar arrayLength = this.editor.getBlocks().length;\n\t\tthis.editor.getBlocks()[arrayLength - 1].resources.push({ '@odata.type': 'assessmenttype', 'value': type })\n\t}\n\n\tinit = () => {\n\t\tconst { editor } = this;\n\t\tconst translate = editor.getProp('translate');\n\n\t\teditor.renderer.registerPosition('after_blocks', () => {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)\n\t\t})\n\t}\n\n}\n\nexport default AddAssessmentBlockButton_Plugin;","import React from 'react';\nimport { Button, Haldor__Block__Plugin, Flex } from '@haldor/ui';\n\nimport { ASSESSMENT_TYPES } from '../AssessmentTypes';\n\nclass AddTeacherAssessmentBlockButton_Plugin extends Haldor__Block__Plugin {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.name = 'AddAssessmentBlockButton_Plugin';\n\t}\n\n\tonButtonPress = async (type, event) => {\n\t\tevent.preventDefault();\n\t\tawait this.editor.addBlock('Haldor.Blocks.AssessmentBlock');\n\t}\n\n\tinit = () => {\n\t\tconst { editor } = this;\n\t\tconst translate = editor.getProp('translate');\n\n\t\teditor.renderer.registerPosition('after_blocks', () => {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)\n\t\t})\n\t}\n\n}\n\nexport default AddTeacherAssessmentBlockButton_Plugin;","import React from 'react';\nimport { Haldor__Block__Plugin } from '@haldor/ui';\nimport { ASSESSMENT_TYPES } from '../AssessmentTypes';\n\nclass PushAssessmentBlock_Plugin extends Haldor__Block__Plugin {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.name = 'PushAssessmentBlock_Plugin';\n\t}\n\n\teditorMount = async () => {\n\t\tconst { editor } = this;\n\n\t\tif (editor.getBlocks().length == 0) {\n\t\t\tawait editor.addBlock('Haldor.Blocks.AssessmentBlock');\n\t\t}\n\t}\n\n}\n\nexport default PushAssessmentBlock_Plugin;","import React, { Fragment } from 'react';\nimport ColorScale from '_class/ColorScale';\nimport { capitalize } from 'helpers/content';\nimport { useTranslate } from 'lib/translate';\nimport { Expandable, Icon } from '@haldor/ui';\nimport { Collapsible, ColorLabel, ColorLabelContainer } from 'UI';\nimport DOMPurify from 'dompurify';\n\nimport moment from 'moment';\nconst DisplayResource = (props) => {\n\tconst translate = useTranslate();\n\tconst { resource, block } = props;\n\tconst assessment = block.api.getEditor().getProp('assessment');\n\n\t/**\n\t * @param {object} row\n\t */\n\tconst getRowData = (row) => {\n\t\tif (row.referenceType == 'matrixRow') {\n\t\t\tlet foundRow = null;\n\t\t\tlet addNotAchieved = true;\n\t\t\tresource.value?.details?.forEach((_detail) => {\n\t\t\t\t_detail?.matrix?._ParagraphSet?.forEach((_paragraph) => {\n\t\t\t\t\tconst matchingRow = _paragraph.rows.find((_row) => _row.id == row.referenceId);\n\n\t\t\t\t\tif (matchingRow != null) {\n\t\t\t\t\t\tif (_detail.matrix.disableNotAchieved) {\n\t\t\t\t\t\t\taddNotAchieved = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfoundRow = JSON.parse(JSON.stringify(matchingRow));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\n\t\t\tif (foundRow != null && addNotAchieved) {\n\t\t\t\tif (foundRow?.cells.find(cell => cell.id == 'F') == null) {\n\t\t\t\t\tfoundRow?.cells.unshift({\n\t\t\t\t\t\ttext: translate('Not achieved'),\n\t\t\t\t\t\tid: 'F',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn foundRow;\n\t\t}\n\n\t\tif (row.referenceType == 'assessmentGoalRow') {\n\t\t\tlet foundRow = resource.value?.rows.find((_row) =>\n\t\t\t\t_row.id == row.referenceId\n\t\t\t);\n\n\t\t\tif (foundRow != null) {\n\t\t\t\tfoundRow.cells = foundRow.cells?.sort((a, b) => a.index - b.index);\n\t\t\t}\n\n\t\t\treturn foundRow;\n\t\t}\n\t}\n\n\t/**\n\t * @param {object} row\n\t */\n\tconst getRowParagraph = (row) => {\n\t\tif (row.referenceType == 'matrixRow') {\n\t\t\tlet foundParagraph = null;\n\t\t\tresource.value?.details?.forEach((_detail) => {\n\t\t\t\t_detail?.matrix?._ParagraphSet?.forEach((_paragraph) => {\n\t\t\t\t\tconst matchingRow = _paragraph.rows.find((_row) => _row.id == row.referenceId);\n\n\t\t\t\t\tif (matchingRow != null) {\n\t\t\t\t\t\tfoundParagraph = _paragraph;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn foundParagraph;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {object} row\n\t */\n\tconst getRowClarifications = (row) => {\n\t\tif (props.clarifications == null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst found = props.clarifications.find((clarification) => {\n\t\t\tif (clarification.value == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn clarification.value.title == row.id;\n\t\t});\n\n\t\tif (found == null) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn found.value.rows;\n\t}\n\n\tconst getCourseDetail = () => {\n\t\tif (resource.value == null || resource.value.details == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn resource.value.details.find((detail) =>\n\t\t\tdetail.matrixID == resource.referenceId\n\t\t);\n\t}\n\n\tconst renderExpiredText = () => {\n\t\tconst courseDetail = getCourseDetail();\n\n\t\tif (courseDetail != null && courseDetail.endDate != null && moment(courseDetail.endDate).isBefore(moment())) {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t{translate('Expired')}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {object} resource\n\t */\n\tconst getResourceTitle = (resource) => {\n\t\tconst translate = block.api.getEditor().getProp('translate');\n\t\tconst isStudent = block.api.getEditor().getProp('isStudent');\n\t\tlet text = '';\n\t\tif (resource.referenceType == 'assessmentGoal') {\n\t\t\ttext = translate('Goal');\n\t\t}\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\ttext = resource.value.year != null ? `${resource.value.title} ${resource.value.year} (${resource.value.courseCode})` : `${resource.value.title} (${resource.value.courseCode})`;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{resource.referenceType !== 'assessmentGoal' ?\n\t\t\t\t\t
{text} {renderExpiredText()}
\n\t\t\t\t\t:\n\t\t\t\t\t
\n\t\t\t\t\t\t
{text} {renderExpiredText()}
\n\t\t\t\t\t\t{props.course.length > 0 ?\n\t\t\t\t\t\t\tprops.course.map(course => {\n\t\t\t\t\t\t\t\tlet title = course.value.year != null ? `${course.value.title} ${course.value.year} (${course.value.courseCode})` : `${course.value.title} (${course.value.courseCode})`;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\t{!isStudent ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{renderPermission('STUDENT', resource.permissions)}\n\t\t\t\t\t\t{renderPermission('GUARDIAN', resource.permissions)}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n\n\t/**\n\t * @param {object} resource\n\t */\n\tconst getResourceColor = (resource) => {\n\t\tif (resource.referenceType == 'assessmentGoal') {\n\t\t\treturn '#0f78da';\n\t\t}\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\treturn resource.value.colorCode;\n\t\t}\n\n\t\treturn '#ccc';\n\t}\n\n\t/**\n\t * @param {object} rowData\n\t */\n\tconst getColors = (rowData) => {\n\t\tlet showRed = false;\n\n\t\tif (resource.referenceType == 'assessmentGoal') {\n\t\t\tshowRed = rowData.cells.find(cell => cell.type == 'NotAchievedTextField') != null;\n\t\t}\n\n\t\tif (resource.referenceType == 'matrix') {\n\t\t\tconst detail = resource.value.details.find((detail) => {\n\t\t\t\treturn detail.matrix._ParagraphSet.find((paragraph) => {\n\t\t\t\t\treturn paragraph.rows.find((row) => row.id == rowData.id)\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (detail != null && !detail.matrix.disableNotAchieved) {\n\t\t\t\tshowRed = true;\n\t\t\t}\n\t\t}\n\n\t\treturn new ColorScale(rowData.cells.length).get(showRed);\n\t}\n\n\t/**\n\t * @param {object} cell\n\t * @param {object} assessmentBlockPartRow\n\t */\n\tconst getIsCellSelected = (cell, assessmentBlockPartRow) => {\n\t\tif (assessment == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst foundInValue = assessment.assessmentDetails?.find((detail) =>\n\t\t\tdetail.cellId == cell.id && detail.assessmentBlockPartRowId == assessmentBlockPartRow.id\n\t\t);\n\n\t\treturn foundInValue != null;\n\t}\n\n\tconst getMatrix = () => {\n\t\treturn resource.value?.details?.find((detail) =>\n\t\t\tdetail.matrixID == resource.referenceId\n\t\t)?.matrix;\n\t}\n\n\t/**\n\t * @param {string} target\n\t * @param {array} permissions\n\t */\n\tconst renderPermission = (target, permissions) => {\n\t\tconst active = permissions.find((perm) =>\n\t\t\tperm.target == target && perm.referenceType == 'ASSESSMENTBLOCKPART'\n\t\t) != null;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{translate(capitalize(target))}\n\t\t\t
\n\t\t);\n\t}\n\n\tconst renderMatrixOrGoal = (row, paragraph, assessmentBlockPartRow, clarifications, colors) => {\n\t\tconst isStudent = block.api.getEditor().getProp('isStudent');\n\n\t\tconst rowText = row.description != null ?\n\t\t\trow.description\n\t\t\t: row.text;\n\n\t\treturn (\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{paragraph != null ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{paragraph.paragraphNr}.{row.sentenceNr}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\n\t\t\t\t\t{rowText != null ?
\"\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
: null}\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{row.cells.map((cell, index) => {\n\t\t\t\t\t\t\tconst selected = getIsCellSelected(cell, assessmentBlockPartRow);\n\n\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t{cell.value != null ?\n\t\t\t\t\t\t\t\t\tcell.value\n\t\t\t\t\t\t\t\t\t: cell.text}\n\n\t\t\t\t\t\t\t\t\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
\n\n\t\t\t\t{clarifications.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{clarifications.map((clarification) => {\n\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{clarification.description}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{clarification.cells.map((cell) => {\n\t\t\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t\t\t{cell.value}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t{!isStudent ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t {translate('Existing clarifications will not be copied and cannot be edited. Move them to an assessment goal instead.')}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\t\t\t\n\t\t)\n\t}\n\n\tconst { assessmentBlockPartRows } = resource;\n\tlet feedbacks = [];\n\n\tif (assessment != null) {\n\t\tfeedbacks = assessment.assessmentFeedbacks?.filter((feedback) =>\n\t\t\tfeedback.assessmentBlockPartId == resource.id\n\t\t);\n\t}\n\n\tif ((resource.assessmentBlockPartRows == null || resource.assessmentBlockPartRows.length == 0) && feedbacks.length == 0) {\n\t\treturn null;\n\t}\n\n\tlet matrix;\n\tif (resource.referenceType == 'matrix') {\n\t\tmatrix = getMatrix();\n\t\tif (matrix == null || matrix._ParagraphSet == null) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tconst isUndefined = (currentValue) => currentValue == undefined;\n\n\treturn (\n\t\t\n\t\t\t{resource.referenceType == 'matrix' &&\n\t\t\t\tmatrix._ParagraphSet.map((paragraph) => {\n\t\t\t\t\tvar paragraphUsed = paragraph.rows.map((row) => {\n\t\t\t\t\t\treturn assessmentBlockPartRows.find((selectedRow) => selectedRow.referenceId == row.id);\n\t\t\t\t\t});\n\t\t\t\t\tif (paragraphUsed != null && !paragraphUsed.every(isUndefined)) {\n\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t{paragraph.title != null ?
{paragraph.title}
: null}\n\t\t\t\t\t\t\t{paragraph.subtitle != null ?
{paragraph.subtitle}
: null}\n\t\t\t\t\t\t\t{paragraph.rows.map((row) => {\n\t\t\t\t\t\t\t\tvar assessmentBlockPartRow = assessmentBlockPartRows.find((selectedRow) => selectedRow.referenceId == row.id);\n\t\t\t\t\t\t\t\tif (assessmentBlockPartRow != null) {\n\n\t\t\t\t\t\t\t\t\trow = getRowData(assessmentBlockPartRow);\n\t\t\t\t\t\t\t\t\tparagraph = getRowParagraph(assessmentBlockPartRow);\n\t\t\t\t\t\t\t\t\tif (row == null) {\n\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst clarifications = getRowClarifications(row);\n\t\t\t\t\t\t\t\t\tconst colors = getColors(row);\n\n\t\t\t\t\t\t\t\t\treturn renderMatrixOrGoal(row, paragraph, assessmentBlockPartRow, clarifications, colors);\n\t\t\t\t\t\t\t\t}\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})}\n\n\t\t\t{resource.referenceType == 'assessmentGoal' &&\n\t\t\t\tassessmentBlockPartRows.map((assessmentBlockPartRow) => {\n\t\t\t\t\tconst row = getRowData(assessmentBlockPartRow);\n\t\t\t\t\tconst paragraph = getRowParagraph(assessmentBlockPartRow);\n\n\t\t\t\t\tif (row == null) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst clarifications = getRowClarifications(row);\n\t\t\t\t\tconst colors = getColors(row);\n\n\t\t\t\t\treturn renderMatrixOrGoal(row, paragraph, assessmentBlockPartRow, clarifications, colors);\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t{feedbacks != null && feedbacks.length > 0 ?\n\t\t\t\t
\n\t\t\t\t\t{feedbacks.map((feedback) => {\n\t\t\t\t\t\treturn \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
\n\t\t\t\t: null}\n\t\t\n\t);\n\n}\n\nexport default DisplayResource;","import React, { useState } from 'react';\nimport ColorScale from '_class/ColorScale';\n\nimport { FlexibleTextArea } from 'UI/Inputs';\nimport { Checkbox, Flex, Icon } from '@haldor/ui';\nimport { useTranslate } from 'lib/translate';\nimport sniffer from 'sniffer';\n\nconst GoalMatrixRowForm = (props) => {\n\tconst rebuildIndexes = (cell, index) => ({\n\t\t...cell,\n\t\tindex: index,\n\t});\n\n\tlet initialCells = [];\n\n\tif (props.row?.cells != null) {\n\t\tinitialCells = props.row.cells.sort((a, b) =>\n\t\t\ta.index - b.index\n\t\t).map(rebuildIndexes);\n\t}\n\n\tconst translate = useTranslate();\n\tconst [cells, setCells] = useState(initialCells);\n\tconst [description, setDescription] = useState(props.row?.description ?? '');\n\n\tconst onChange = (parentCells) => {\n\t\tlet cellValues = cells;\n\t\tif (parentCells != null) {\n\t\t\tcellValues = parentCells;\n\t\t}\n\n\t\tif (props.onChange != null) {\n\t\t\tif (props.row != null) {\n\t\t\t\tprops.onChange({\n\t\t\t\t\t...props.row,\n\t\t\t\t\tdescription,\n\t\t\t\t\tcells: cellValues,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tprops.onChange({\n\t\t\t\t\tdescription,\n\t\t\t\t\tcells: cellValues,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst onDescriptionChange = (event) => {\n\t\tsetDescription(event.target.value);\n\t}\n\n\tconst onCellChange = (cell, event) => {\n\t\tif (cell == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet newCells = [...cells];\n\t\tnewCells.splice(cell.index, 1, {\n\t\t\t...cell,\n\t\t\tvalue: event.target.value,\n\t\t});\n\n\t\tsetCells(newCells);\n\t}\n\n\tconst onCellCopy = async (cell, event) => {\n\t\tevent.preventDefault();\n\n\t\tif (cell == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet newCells = [...cells];\n\t\tnewCells.splice(cell.index, 0, {\n\t\t\tindex: 0,\n\t\t\tvalue: cell.value,\n\t\t\ttype: 'TextField',\n\t\t\tid: 0,\n\t\t});\n\n\t\t// Rebuild indexes on cells\n\t\tnewCells = newCells.map(rebuildIndexes);\n\t\tawait setCells(newCells);\n\t\tonChange(newCells);\n\t}\n\n\tconst onCellRemove = async (cell, event) => {\n\t\tevent.preventDefault();\n\n\t\tif (cell == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet newCells = [...cells];\n\t\tnewCells.splice(cell.index, 1);\n\n\t\t// Rebuild indexes on cells\n\t\tnewCells = newCells.map(rebuildIndexes);\n\t\tsetCells(newCells);\n\t\tonChange(newCells);\n\t}\n\n\tconst onAddCell = async (event) => {\n\t\tevent.preventDefault();\n\n\t\tlet newCells = [...cells];\n\t\tnewCells.push({\n\t\t\tindex: cells.length,\n\t\t\ttype: 'TextField',\n\t\t\tvalue: '',\n\t\t\tid: 0,\n\t\t});\n\n\t\tsetCells(newCells);\n\t\tonChange(newCells);\n\t}\n\n\tconst toggleNotAchieved = (add) => {\n\t\tlet newCells = [...cells];\n\n\t\tif (add) {\n\t\t\tnewCells = [\n\t\t\t\t{\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: 'NotAchievedTextField',\n\t\t\t\t\tvalue: translate('Not achieved'),\n\t\t\t\t\tid: 0,\n\t\t\t\t},\n\t\t\t\t...cells\n\t\t\t].map(rebuildIndexes);\n\t\t} else {\n\t\t\tnewCells = [...cells]\n\t\t\t\t.filter(cell => cell.type != 'NotAchievedTextField')\n\t\t\t\t.map(rebuildIndexes)\n\t\t}\n\n\t\tsetCells(newCells);\n\t\tonChange(newCells);\n\t}\n\n\tconst hasAchieved = cells.find(cell => cell.type == 'NotAchievedTextField') != null;\n\tconst colors = new ColorScale(cells.length).get(hasAchieved);\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{/* TODO: Limit to 255 characters */}\n\t\t\t\t\t\t onChange()}\n\t\t\t\t\t\t\tplaceholder={translate('Goal description')}\n\t\t\t\t\t\t\tvalue={description}\n\t\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\n\t\t\t\t\t{cells.map((cell, index) => {\n\t\t\t\t\t\tlet color = colors[index];\n\n\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t onCellChange(cell, event)}\n\t\t\t\t\t\t\t\tonBlur={() => onChange()}\n\t\t\t\t\t\t\t\tvalue={cell.value}\n\t\t\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{!props.disabled ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{cell.type != 'NotAchievedTextField' ?\n\t\t\t\t\t\t\t\t\t\t\t
onCellCopy(cell, event)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t\t\t
onCellRemove(cell, event)}>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\t\t\t\t\t})}\n\n\t\t\t\t\t{!props.disabled ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t {translate('Add step')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t
\n\t);\n\n}\n\nGoalMatrixRowForm.defaultProps = {\n\tdisabled: false,\n};\n\nexport default GoalMatrixRowForm;\n","import React, { useEffect, useState } from 'react';\nimport { Flex, Icon, Expandable } from '@haldor/ui';\nimport { useTranslate } from 'lib/translate';\n\nimport GoalMatrixRowForm from './GoalMatrixRowForm';\nimport { capitalize } from 'helpers/content';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\nimport { ColorLabel, ColorLabelContainer } from 'UI';\nimport sniffer from 'sniffer';\n\nconst GoalMatrixForm = (props) => {\n\tconst translate = useTranslate();\n\tconst [rows, setRows] = useState(props.part?.value.rows ?? []);\n\n\tuseEffect(() => {\n\t\tif (rows.length == 0) {\n\t\t\tlet rows = [];\n\t\t\trows.push({\n\t\t\t\tindex: rows.length,\n\t\t\t\tid: 0,\n\t\t\t\ttitle: '',\n\t\t\t\tdescription: '',\n\t\t\t\tcells: [\n\t\t\t\t\t{\n\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\ttype: 'NotAchievedTextField',\n\t\t\t\t\t\tvalue: translate('Not achieved'),\n\t\t\t\t\t\tid: 0,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\n\t\t\tsetRows(rows);\n\t\t}\n\t}, []);\n\n\t// onChange\n\tuseEffect(() => {\n\t\tif (props.onChange != null) {\n\t\t\tprops.onChange({\n\t\t\t\t...props.part,\n\t\t\t\tvalue: {\n\t\t\t\t\t...props.part?.value,\n\t\t\t\t\trows,\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, [rows]);\n\n\tconst onRowChange = (row) => {\n\t\tif (row == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet changedRows = [...rows];\n\t\tchangedRows.splice(row.index, 1, row);\n\t\tsetRows(changedRows);\n\t}\n\n\tconst removeMatrix = () => {\n\t\tif (props.onRemove != null) {\n\t\t\tprops.onRemove();\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} target\n\t * @param {string} referenceType\n\t * @description Toggles target permission on part data\n\t */\n\tconst togglePermission = (target, referenceType) => {\n\t\tlet permissions = props.part.permissions;\n\t\tconst indexOf = props.part.permissions?.findIndex(element =>\n\t\t\telement.target == target && element.referenceType == referenceType\n\t\t);\n\n\t\tif (indexOf > -1) {\n\t\t\tpermissions.splice(indexOf, 1);\n\t\t} else {\n\t\t\tpermissions.push({ target: target, referenceType: referenceType, level: 'READ' });\n\t\t}\n\n\t\tprops.onChange({\n\t\t\t...props.part,\n\t\t\tpermissions: permissions\n\t\t});\n\t}\n\n\t/**\n\t * @param {string} target\n\t */\n\tconst renderPermission = (target) => {\n\t\tconst active = props.part.permissions?.find(element =>\n\t\t\telement.target == target && element.referenceType == 'ASSESSMENTBLOCKPART'\n\t\t) != null;\n\n\t\treturn
{\n\t\t\tevent.stopPropagation(); togglePermission(target, 'ASSESSMENTBLOCKPART');\n\t\t}}>\n\t\t\t\n\t\t\t{translate(capitalize(target))}\n\t\t
\n\t}\n\n\tconst renderAssessmentFeedbackPermission = () => {\n\t\tconst active = props.part.permissions?.find(element =>\n\t\t\telement.target == 'GUARDIAN' && element.referenceType == 'ASSESSMENTFEEDBACK'\n\t\t) != null;\n\n\t\treturn
{\n\t\t\tevent.stopPropagation(); togglePermission('GUARDIAN', 'ASSESSMENTFEEDBACK');\n\t\t}}>\n\t\t\t{props.assessmentType == ASSESSMENT_TYPES.TEACHER &&\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t{translate(capitalize('Show feedback for guardians'))}\n\t\t\t\t\n\t\t\t}\n\t\t
\n\t}\n\n\tconst renderRowTitle = () => {\n\t\treturn
\n\t\t\t
{translate('Goal')}\n\t\t\t\t{props.course.length > 0 ?\n\t\t\t\t\tprops.course.map(course => {\n\t\t\t\t\t\tconst title = course.value.year != null ? `${course.value.title} ${course.value.year} (${course.value.courseCode})` : `${course.value.title} (${course.value.courseCode})`;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\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)\n\t\t\t\t\t: null}\n\n\n\t\t\t
\n\n\t\t\t{props.assessmentType == ASSESSMENT_TYPES.TEACHER &&\n\t\t\t\t<>\n\t\t\t\t\t
\n\t\t\t\t\t\t{renderPermission('STUDENT')}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{renderPermission('GUARDIAN')}\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t}\n\n\t\t\t{props.disableRows == null || props.disableRows.length == 0 ?\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t: null}\n\t\t
\n\t}\n\n\tconst getRowDisabled = (id) => {\n\t\tif (props.disableRows == null || props.disableRows.length == 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst reference = props.part.assessmentBlockPartRows?.find((partRow) => partRow.referenceId == id);\n\t\tif (reference == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn props.disableRows.indexOf(reference.id) > -1;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{renderAssessmentFeedbackPermission()}\n\t\t\t\t
\n\n\t\t\t\t{props.disabled ?\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{translate('To be able to edit, you must first delete the assessments made.')}\n\t\t\t\t\t
\n\t\t\t\t\t: null}\n\n\t\t\t\t\n\t\t\t\t\t{rows.map((row, index) => {\n\t\t\t\t\t\treturn \n\t\t\t\t\t})}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n\n}\n\nGoalMatrixForm.defaultProps = {\n\tassessments: [],\n\tdisabled: false,\n};\n\nexport default GoalMatrixForm;","import React, { useEffect, useState, useMemo } from 'react';\n\nimport {\n\tsearchCourseByTitle,\n\tclearCourseSearch as clear,\n} from 'actions/search';\n\nimport { putData } from 'actions';\nimport { getCourse } from 'actions/courses';\nimport { toggleSelectedSection } from 'actions/sections';\nimport { getSchoolTypes } from 'actions/tenants'\n\nimport { useTranslate } from 'lib/translate';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport Modal from 'containers/Modals/Modal';\nimport { Spinner } from 'UI';\nimport { Search } from 'UI/Inputs';\nimport { Tabs, Tab, Button, Checkbox } from '@haldor/ui';\n\nconst SelectCourses = (props) => {\n\tconst [searching, setSearching] = useState(false);\n\tconst [submitting, setSubmitting] = useState(false);\n\tconst [selected, setSelected] = useState([]);\n\tconst [addOnGroup, setAddOnGroup] = useState(true);\n\tconst [schoolType, setSchoolType] = useState('All');\n\tconst [year, setYear] = useState('All');\n\tconst [searchValue, setSearchValue] = useState('');\n\tconst sections = useSelector(state => state.sections.selected);\n\tconst group = useSelector(state => state.assignments.section);\n\tconst searchResultsData = useSelector(state => state.Courses.courseSearchResults);\n\tconst courseDetails = useSelector(state => state.Courses.courses);\n\tconst schoolTypes = useSelector(state => state.Tenant.schoolTypes);\n\tconst YEARS = [\"All\", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n\tconst translate = useTranslate();\n\tconst dispatch = useDispatch();\n\n\tuseEffect(() => {\n\t\tif (schoolTypes == null || schoolTypes.length == 0) {\n\t\t\tdispatch(getSchoolTypes());\n\t\t}\n\t}, []);\n\n\tconst sectionCourses = useMemo(() => {\n\t\tif ((sections == null || sections.length == 0) && group == null) {\n\t\t\treturn [];\n\t\t} else if ((sections == null || sections.length == 0) && group != null) {\n\t\t\treturn group.courses;\n\t\t}\n\n\t\tlet courses = [];\n\t\tsections.forEach((element) => {\n\t\t\telement.courses.forEach(course => {\n\t\t\t\tif (props.skipCourses != null) {\n\t\t\t\t\tif (props.skipCourses.indexOf(course.id) > -1) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcourses.push(JSON.parse(JSON.stringify(course)))\n\t\t\t});\n\t\t});\n\n\t\tconst removeDuplicate = courses.filter((item, index, self) =>\n\t\t\tself.findIndex((t) => t.id === item.id) === index\n\t\t);\n\n\t\treturn removeDuplicate;\n\t}, [sections, props.skipCourses]);\n\n\tconst searchResults = useMemo(() => {\n\t\tif (searchResultsData == null || searchResultsData.length == 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn JSON.parse(JSON.stringify(searchResultsData)).filter((course) => {\n\t\t\tif (props.skipCourses == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn props.skipCourses.indexOf(course.id) == -1;\n\t\t}).filter((v, i, a) => a.findIndex(v2 => (v2.id === v.id)) === i);\n\t}, [searchResultsData]);\n\n\tconst onSubmit = async (event) => {\n\t\tevent.preventDefault();\n\n\t\tsetSubmitting(true);\n\n\t\tlet values = selected;\n\t\tconst missingDetails = selected.filter(course => course.details.length == 0);\n\n\t\tif (missingDetails.length > 0) {\n\t\t\tawait Promise.all(\n\t\t\t\tmissingDetails.map((course) => new Promise(async (resolve) => {\n\t\t\t\t\tawait dispatch(getCourse(course.id));\n\t\t\t\t\tconst details = courseDetails.find((c) => c.id == course.id);\n\n\t\t\t\t\tif (details != null) {\n\t\t\t\t\t\tvalues = values.map((course) =>\n\t\t\t\t\t\t\tcourse.id == details.id ? details : course\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t}))\n\t\t\t);\n\n\t\t\tif (addOnGroup) {\n\t\t\t\tconst groups = JSON.parse(JSON.stringify(sections));\n\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tgroups.map((group) => new Promise(async (resolve) => {\n\t\t\t\t\t\tdispatch(toggleSelectedSection(group));\n\n\t\t\t\t\t\tmissingDetails.forEach((course) => {\n\t\t\t\t\t\t\tconst courseWithDetails = courseDetails.find((c) => c.id == course.id);\n\t\t\t\t\t\t\tgroup.courses.push(courseWithDetails);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tawait dispatch(putData('sections', group));\n\t\t\t\t\t\tdispatch(toggleSelectedSection(group));\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (props.onSubmit != null) {\n\t\t\tprops.onSubmit(values);\n\t\t}\n\t}\n\n\tconst onSearch = () => {\n\t\tsetSelected([]);\n\n\t\tif (searchValue == '' && schoolType == 'All' && year == 'All') {\n\t\t\tdispatch(clear());\n\t\t\treturn;\n\t\t}\n\n\t\tsetSearching(true);\n\n\t\tdispatch(searchCourseByTitle(\n\t\t\tsearchValue == '' ? null : searchValue,\n\t\t\tschoolType == 'All' ? '' : schoolType,\n\t\t\tyear == 'All' ? '' : year,\n\t\t)).then(() => {\n\t\t\tsetSearching(false);\n\t\t});\n\t}\n\n\tuseEffect(() => {\n\t\tonSearch();\n\t}, [year, schoolType])\n\n\tconst renderCourse = (course, index) => {\n\t\tconst value = selected.find((s) => s.id == course.id) != null;\n\t\tconst schoolType = translate(course.typeOfSchooling);\n\t\tconst courseTitle = `${course.title} - ${course.year != null ? course.year : ''} ${course.courseCode} (${schoolType})`;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t toggleCourse(course)}\n\t\t\t\t\tvalue={value}\n\t\t\t\t/>\n\t\t\t
\n\t\t);\n\t}\n\n\tconst toggleCourse = (course) => {\n\t\tconst found = selected.find((s) => s.id == course.id);\n\t\tif (found != null) {\n\t\t\tsetSelected(selected.filter((s) => s.id != course.id));\n\t\t} else {\n\t\t\tsetSelected([...selected, course]);\n\t\t}\n\t}\n\n\tconst toggleAll = (checked) => {\n\t\tif (checked) {\n\t\t\tlet courses = [];\n\t\t\tsections.forEach(element => {\n\t\t\t\telement.courses.forEach(course =>\n\t\t\t\t\tcourses.push(course))\n\t\t\t});\n\n\t\t\tsetSelected([...courses]);\n\t\t\treturn;\n\t\t};\n\n\t\tsetSelected([]);\n\t}\n\n\tconst selectedSchoolType = schoolTypes?.find((type) =>\n\t\ttype.typeId == schoolType\n\t);\n\n\treturn \n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{translate('Courses')}\n\t\t\t\t
\n\n\t\t\t\t setSelected([])}>\n\t\t\t\t\t\n\t\t\t\t\t\t{sectionCourses.length > 0 ?\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t toggleAll(value)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{sectionCourses.map((course, index) => {\n\t\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t\t{renderCourse(course, index)}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t setSearchValue(value)}\n\t\t\t\t\t\t\tallowEmpty\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t setSchoolType(e.target.value)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{schoolTypes?.sort((a, b) =>\n\t\t\t\t\t\t\t\t\t\t\ttranslate(a.typeId).localeCompare(translate(b.typeId))\n\t\t\t\t\t\t\t\t\t\t).map((schoolType, index) => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{selectedSchoolType != null && selectedSchoolType.maxYear != null && selectedSchoolType.minYear != null ?\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t setYear(e.target.value)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{YEARS\n\t\t\t\t\t\t\t\t\t\t\t\t.filter((year) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (year == 'All') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn year >= selectedSchoolType?.minYear && year <= selectedSchoolType?.maxYear;\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t.map((year, index) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{searchResults.map(renderCourse)}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\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
\n\n\t\t\t
\n\t\t
\n\t
\n}\n\nexport default SelectCourses;","import React, { Fragment, useEffect, useState } from 'react';\nimport moment from 'moment';\nimport { Icon, Expandable, Checkbox } from '@haldor/ui';\nimport { useTranslate } from 'lib/translate';\nimport { capitalize } from 'helpers/content';\nimport { Collapsible } from 'UI';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\nimport DOMPurify from \"dompurify\";\n\n\nimport './_SelectMatricesForm.scss';\n\nconst SelectMatricesForm = (props) => {\n\tconst { course, part } = props;\n\tconst translate = useTranslate();\n\tconst [selectedRows, setSelectedRows] = useState([]);\n\n\tuseEffect(() => {\n\t\tif (part == null || part.assessmentBlockPartRows == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet rows = [];\n\t\tpart.assessmentBlockPartRows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\t// Only update selectedRows if rows don't already exist in selectedRows\n\t\tif (rows.filter(row => selectedRows.some((selectedRow) => selectedRow.referenceId == row.referenceId)).length != rows.length) {\n\t\t\tsetSelectedRows(rows);\n\t\t}\n\n\t\treturn null;\n\t}, [part]);\n\n\tuseEffect(() => {\n\t\tif (props.onChange != null) {\n\t\t\tconst matrix = getMatrix();\n\n\t\t\tif (matrix == null) {\n\t\t\t\t// Dont add value for this course if matrix is null\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet relations = [\n\t\t\t\t{\n\t\t\t\t\t'courseId': course.id,\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tif (part != null && part.assessmentBlockPartRelationships != null) {\n\t\t\t\trelations = part.assessmentBlockPartRelationships;\n\t\t\t}\n\n\t\t\t// Build assessmentPart object for course\n\t\t\tprops.onChange({\n\t\t\t\t...props.part,\n\t\t\t\t'referenceId': matrix.id,\n\t\t\t\t'assessmentBlockPartRows': selectedRows,\n\t\t\t\t'assessmentBlockPartRelationships': relations,\n\t\t\t});\n\t\t}\n\t}, [selectedRows]);\n\n\tconst getCourseDetail = () => {\n\t\treturn course.details.find((detail) =>\n\t\t\tdetail.matrixID == part.referenceId\n\t\t)\n\t}\n\n\tconst getMatrix = () => {\n\t\tif (part == null || part.referenceId == null || part.referenceId == '' || part.referenceId == 0) {\n\t\t\treturn course.details.filter((detail) =>\n\t\t\t\tdetail.endDate == null || moment(detail.endDate).isAfter(moment())\n\t\t\t)[0]?.matrix;\n\t\t}\n\n\t\treturn course.details.find((detail) =>\n\t\t\tdetail.matrixID == part.referenceId\n\t\t)?.matrix;\n\t}\n\n\t/**\n\t * @param {object} row\n\t */\n\tconst getRowClarifications = (row) => {\n\t\tif (props.clarifications == null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst found = props.clarifications.find((clarification) => {\n\t\t\tif (clarification.value == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn clarification.value.title == row.id;\n\t\t});\n\n\t\tif (found == null) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn found.value.rows;\n\t}\n\n\tconst removeCourse = (event) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif (props.onRemove != null) {\n\t\t\tprops.onRemove();\n\t\t}\n\t}\n\n\tconst onToggleRow = async (row) => {\n\t\tconst selected = selectedRows.find((selectedRow) => selectedRow.referenceId == row.id);\n\n\t\tif (selected != null) {\n\t\t\tsetSelectedRows(selectedRows.filter((selectedRow) => selectedRow.referenceId != row.id));\n\t\t} else {\n\t\t\tsetSelectedRows([...selectedRows, {\n\t\t\t\t'referenceType': 'matrixRow',\n\t\t\t\t'referenceId': row.id,\n\t\t\t}]);\n\t\t}\n\t}\n\n\tconst onToggleParagraph = async (active, paragraph) => {\n\t\tlet values = [...selectedRows];\n\t\tif (active) {\n\t\t\t// Remove all previously selected rows for this paragraph\n\t\t\tvalues = values.filter((selectedRow) => {\n\t\t\t\treturn paragraph.rows.find((r) => r.id == selectedRow.referenceId) == null;\n\t\t\t});\n\n\t\t\t// Add all rows as selected\n\t\t\tvalues.push(...paragraph.rows.map((row) => ({\n\t\t\t\t'referenceType': 'matrixRow',\n\t\t\t\t'referenceId': row.id,\n\t\t\t})));\n\t\t} else {\n\t\t\t// Remove selected rows for this paragraph\n\t\t\tvalues = values.filter((selectedRow) => {\n\t\t\t\treturn paragraph.rows.find((r) => r.id == selectedRow.referenceId) == null;\n\t\t\t});\n\t\t}\n\n\t\tsetSelectedRows(values);\n\t}\n\n\t/**\n\t * @param {string} target\n\t * @param {string} referenceType\n\t * @description Toggles target permission on part data\n\t */\n\tconst togglePermission = (target, referenceType) => {\n\t\tlet permissions = props.part.permissions;\n\n\t\tconst indexOf = props.part.permissions?.findIndex(element =>\n\t\t\telement.target == target && element.referenceType == referenceType\n\t\t);\n\n\t\tif (indexOf > -1) {\n\t\t\tpermissions.splice(indexOf, 1);\n\t\t} else {\n\t\t\tpermissions.push({ target: target, referenceType: referenceType, level: 'READ' });\n\t\t}\n\n\t\tprops.onChange({\n\t\t\t...props.part,\n\t\t\tpermissions: permissions\n\t\t});\n\t}\n\n\t/**\n\t * @param {string} target\n\t */\n\tconst renderPermission = (target) => {\n\t\tconst active = props.part.permissions?.find(element =>\n\t\t\telement.target == target && element.referenceType == 'ASSESSMENTBLOCKPART'\n\t\t) != null;\n\n\t\treturn
{\n\t\t\tevent.stopPropagation(); togglePermission(target, 'ASSESSMENTBLOCKPART');\n\t\t}}>\n\t\t\t\n\t\t\t{translate(capitalize(target))}\n\t\t
\n\t}\n\n\tconst renderAssessmentFeedbackPermission = () => {\n\t\tconst active = props.part.permissions?.find(element =>\n\t\t\telement.target == 'GUARDIAN' && element.referenceType == 'ASSESSMENTFEEDBACK'\n\t\t) != null;\n\n\t\treturn
{\n\t\t\tevent.stopPropagation(); togglePermission('GUARDIAN', 'ASSESSMENTFEEDBACK');\n\t\t}}>\n\t\t\t{props.assessmentType == ASSESSMENT_TYPES.TEACHER &&\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t{translate(capitalize('Show feedback for guardians'))}\n\t\t\t\t\n\t\t\t}\n\t\t
\n\t}\n\n\tconst renderExpiredText = () => {\n\t\tconst courseDetail = getCourseDetail();\n\t\tif (courseDetail != null && courseDetail.endDate != null && moment(courseDetail.endDate).isBefore(moment())) {\n\t\t\treturn
\n\t\t\t\t\n\t\t\t\t{translate('Expired')}\n\t\t\t
\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconst renderRowTitle = () => {\n\t\tconst courseTitle = course.year != null ? `${course.title} ${course.year} (${course.courseCode})` : `${course.title} (${course.courseCode})`;\n\n\t\treturn
\n\t\t\t
\n\t\t\t{courseTitle} {renderExpiredText()}
\n\n\t\t\t{props.assessmentType == ASSESSMENT_TYPES.TEACHER &&\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{renderPermission('STUDENT')}\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{renderPermission('GUARDIAN')}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t}\n\n\t\t\t{props.disableRows == null || props.disableRows.length == 0 ?\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t: null}\n\t\t
\n\t}\n\n\tconst getDisabledRowsForParagraph = (paragraph) => {\n\t\tif (props.disableRows == null || props.disableRows.length == 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet disabled = [];\n\t\tparagraph.rows.forEach((row) => {\n\t\t\tconst reference = props.part.assessmentBlockPartRows.find((partRow) => partRow.referenceId == row.id);\n\t\t\tif (reference == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (props.disableRows.indexOf(reference.id) > -1) {\n\t\t\t\tdisabled.push(row.id);\n\t\t\t}\n\t\t});\n\n\t\treturn disabled;\n\t}\n\n\tconst renderMatrix = () => {\n\t\tconst matrix = getMatrix();\n\t\tconst courseDetail = getCourseDetail();\n\t\tconst isExpiredCourseDetail = courseDetail != null && courseDetail.endDate != null && moment(courseDetail.endDate).isBefore(moment());\n\n\t\tif (matrix == null || matrix._ParagraphSet == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn matrix._ParagraphSet.map((paragraph) => {\n\t\t\tlet active = true;\n\t\t\tconst disabledRows = getDisabledRowsForParagraph(paragraph);\n\t\t\tparagraph.rows.forEach((row) => {\n\t\t\t\tif (selectedRows.find((selectedRow) => selectedRow.referenceId == row.id) == null) {\n\t\t\t\t\tactive = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn
\n\t\t\t\t
\n\t\t\t\t\t onToggleParagraph(active, paragraph)}\n\t\t\t\t\t\tvalue={active}\n\t\t\t\t\t\tdisabled={disabledRows.length > 0 || isExpiredCourseDetail}\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\t{paragraph.title}\n\t\t\t\t\t\n\t\t\t\t\t{paragraph.subtitle != null ?
{paragraph.subtitle}
: null}\n\t\t\t\t
\n\n\t\t\t\t{paragraph.rows.map((row, index) => {\n\t\t\t\t\tconst selected = selectedRows.find((selectedRow) => selectedRow.referenceId == row.id) != null;\n\t\t\t\t\tconst clarifications = getRowClarifications(row);\n\n\t\t\t\t\treturn \n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{paragraph.paragraphNr}.{row.sentenceNr}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t onToggleRow(row)}\n\t\t\t\t\t\t\t\t\t\tvalue={selected}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabledRows.indexOf(row.id) > -1 || isExpiredCourseDetail}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{row.text != null ?
\"\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t
: null}\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{row.cells.map((cell) => {\n\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t{cell.text}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{clarifications.length > 0 ?\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{clarifications.map((clarification) => {\n\t\t\t\t\t\t\t\t\t\treturn
\n\n\t\t\t\t\t\t\t\t\t\t\t{clarification.description != null ?
\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t
: null}\n\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{clarification.cells.map((cell) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cell.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t {translate('Existing clarifications will not be copied and cannot be edited. Move them to an assessment goal instead.')}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t
\n\t\t\t\t})}\n\t\t\t
\n\t\t});\n\t}\n\n\tif (course == null) {\n\t\treturn null;\n\t}\n\n\tlet color = '#ccc';\n\tif (course.colorCode != null) {\n\t\tcolor = course.colorCode;\n\t}\n\n\treturn
\n\t\t\n\t\t\t
\n\t\t\t\t{renderAssessmentFeedbackPermission()}\n\t\t\t
\n\n\t\t\t{props.disabled ?\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t{translate('To be able to edit, you must first delete the assessments made.')}\n\t\t\t\t
\n\t\t\t\t: null}\n\n\t\t\t{renderMatrix()}\n\t\t
\n\t
\n}\n\nSelectMatricesForm.defaultProps = {\n\tdisabled: false,\n};\n\nexport default SelectMatricesForm;","import React, { useEffect, useState } from 'react';\nimport { Flex, Icon, Expandable, Block } from '@haldor/ui';\nimport { useTranslate } from 'lib/translate';\n\nimport GoalMatrixRowForm from './GoalMatrixRowForm';\nimport { capitalize } from 'helpers/content';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\nimport { ColorLabel, ColorLabelContainer } from 'UI';\n\nimport './_OnlyFeedbackForm.scss';\n\nconst OnlyFeedbackForm = (props) => {\n\tconst translate = useTranslate();\n\tconst [rows, setRows] = useState(props.part?.value?.rows ?? []);\n\n\tuseEffect(() => {\n\t}, []);\n\n\tconst removeMatrix = () => {\n\t\tif (props.onRemove != null) {\n\t\t\tprops.onRemove();\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} target\n\t * @param {string} referenceType\n\t * @description Toggles target permission on part data\n\t */\n\tconst togglePermission = (target, referenceType) => {\n\t\tlet permissions = props.part.permissions;\n\n\t\tconst indexOf = props.part.permissions?.findIndex(element =>\n\t\t\telement.target == target && element.referenceType == referenceType\n\t\t);\n\n\t\tif (indexOf > -1) {\n\t\t\tpermissions.splice(indexOf, 1);\n\t\t} else {\n\t\t\tpermissions.push({ target: target, referenceType: referenceType, level: 'READ' });\n\t\t}\n\n\t\tprops.onChange({\n\t\t\t...props.part,\n\t\t\tpermissions: permissions\n\t\t});\n\t}\n\n\tconst renderAssessmentFeedbackPermission = () => {\n\t\tconst active = props.part.permissions?.find(element =>\n\t\t\telement.target == 'GUARDIAN' && element.referenceType == 'ASSESSMENTFEEDBACK'\n\t\t) != null;\n\n\t\treturn
{\n\t\t\tevent.stopPropagation(); togglePermission('GUARDIAN', 'ASSESSMENTFEEDBACK');\n\t\t}}>\n\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t{translate(capitalize('Show feedback for guardians'))}\n\t\t\t\n\n\t\t
\n\t}\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t {translate('You can always provide feedback. If you add learning goals or a curriculum, then the feedback will be tied to these.')}\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t{renderAssessmentFeedbackPermission()}\n\t\t\t
\n\t\t
\n\t);\n\n}\n\nOnlyFeedbackForm.defaultProps = {\n\tassessments: [],\n\tdisabled: false,\n};\n\nexport default OnlyFeedbackForm;","import React, { useEffect, useState } from 'react';\nimport { Flex, Icon, Expandable, Block } from '@haldor/ui';\nimport { useTranslate } from 'lib/translate';\n\nimport GoalMatrixRowForm from './GoalMatrixRowForm';\nimport { capitalize } from 'helpers/content';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\nimport { Collapsible, ColorLabel, ColorLabelContainer } from 'UI';\n\nimport './_OnlyFeedbackForm.scss';\nimport { utlGetLocalStorage } from '@microsoft/applicationinsights-common';\n\nconst DisplayOnlyFeedback = (props) => {\n\tconst translate = useTranslate();\n\tconst { part, block } = props;\n\tconst assessment = block.api.getEditor().getProp('assessment');\n\tconst isStudent = block.api.getEditor().getProp('isStudent');\n\n\tconst renderAssessmentFeedbackPermission = () => {\n\t\tconst active = props.part.permissions?.find(element =>\n\t\t\telement.target == 'GUARDIAN' && element.referenceType == 'ASSESSMENTFEEDBACK'\n\t\t) != null;\n\n\t\treturn
\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t{translate(capitalize('Show feedback for guardians'))}\n\t\t\t\n\t\t
\n\t}\n\n\tconst renderTitle = () => {\n\t\treturn (
\n\t\t\t{translate('Feedback')}\n\n\t\t\t{!isStudent ?\n\t\t\t\t
\n\t\t\t\t\t{renderAssessmentFeedbackPermission()}\n\t\t\t\t
\n\t\t\t\t: null}\n\t\t
)\n\t}\n\n\tlet feedbacks = [];\n\n\tif (assessment != null) {\n\t\tfeedbacks = assessment.assessmentFeedbacks?.filter((feedback) =>\n\t\t\tfeedback.assessmentBlockPartId == part.id\n\t\t);\n\t}\n\n\tif (!isStudent) {\n\t\treturn (
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{translate('Feedback')}\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{renderAssessmentFeedbackPermission()}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
)\n\t}\n\n\tif (isStudent && feedbacks != null && feedbacks.length > 0) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{feedbacks != null && feedbacks.length > 0 ?\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{feedbacks.map((feedback) => {\n\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t: null}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n\treturn null;\n}\n\nDisplayOnlyFeedback.defaultProps = {\n\tassessments: [],\n\tdisabled: false,\n};\n\nexport default DisplayOnlyFeedback;","import React from 'react';\nimport { Button, Flex, Haldor__Block, Icon } from '@haldor/ui';\n\nimport DisplayResource from './DisplayResource';\nimport GoalMatrixForm from './GoalMatrixForm';\nimport SelectCoursesForm from './SelectCoursesForm';\nimport SelectMatricesForm from './SelectMatricesForm';\nimport OnlyFeedbackForm from './OnlyFeedbackForm';\nimport DisplayOnlyFeedback from './DisplayOnlyFeedback';\n\nclass AssessmentBlock extends Haldor__Block {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.PART_RESOURCE_TYPE = 'Haldor.Blocks.AssessmentBlockPart'\n\n\t\tthis.registerResourceType(this.PART_RESOURCE_TYPE, {\n\t\t\tstatus: 'string',\n\t\t\treferenceId: 'string',\n\t\t\treferenceType: 'string',\n\t\t\tvalue: 'object',\n\t\t\t// permissions: 'object'\n\t\t});\n\n\t\tthis.registerResourceType('Haldor.Blocks.AssessmentBlock.ShowModal', {\n\t\t\tvisible: 'boolean',\n\t\t});\n\n\t\tthis.registerResourceType('assessmenttype', {});\n\t}\n\n\taddCoursePart = (event) => {\n\t\tevent.preventDefault();\n\n\t\tthis.addResource('Haldor.Blocks.AssessmentBlock.ShowModal', {\n\t\t\tvisible: true,\n\t\t});\n\t}\n\n\taddGoalMatrix = (event) => {\n\t\tevent.preventDefault();\n\t\tthis.removeFeedBackOnlyResource();\n\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\tstatus: 'Started',\n\t\t\treferenceId: '',\n\t\t\treferenceType: 'assessmentGoal',\n\t\t\tvalue: {\n\t\t\t\tid: 0,\n\t\t\t\tvisibleToStudent: true,\n\t\t\t\tvisibleToGuardian: true,\n\t\t\t\ttitle: '',\n\t\t\t\trows: [],\n\t\t\t},\n\t\t\tpermissions: [\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTBLOCKPART',\n\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\tlevel: 'READ',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTBLOCKPART',\n\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\tlevel: 'READ',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\tlevel: 'READ'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\tlevel: 'READ'\n\t\t\t\t}\n\t\t\t],\n\t\t});\n\t}\n\n\taddFeedBackOnlyResource = () => {\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\tstatus: 'Started',\n\t\t\treferenceId: '0',\n\t\t\treferenceType: 'assessmentonlyfeedback',\n\t\t\tassessmentBlockPartRows: [],\n\t\t\tvalue: null,\n\t\t\tpermissions: [\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\tlevel: 'READ'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\tlevel: 'READ'\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t}\n\n\tremoveFeedBackOnlyResource = () => {\n\t\tlet foundExisting = this.getResources().find((resource) =>\n\t\t\tresource.referenceType == 'assessmentonlyfeedback'\n\t\t);\n\n\t\tif (foundExisting != null) {\n\t\t\tthis.removeResource(foundExisting);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tremoveResourceFromBlock = (resource) => {\n\t\tthis.removeResource(resource);\n\n\t\tlet assessmentBlockPart = this.getResources().find((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE\n\t\t});\n\n\t\tif (assessmentBlockPart == null && this.name == \"Haldor.Blocks.AssessmentBlock\") {\n\t\t\tthis.addFeedBackOnlyResource();\n\t\t}\n\t}\n\n\taddCourses = (values) => {\n\t\tthis.removeFeedBackOnlyResource();\n\n\t\tvalues.forEach((course) => {\n\t\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\t\tstatus: 'Started',\n\t\t\t\treferenceId: '',\n\t\t\t\treferenceType: 'matrix',\n\t\t\t\tassessmentBlockPartRows: [],\n\t\t\t\tvalue: course,\n\t\t\t\tpermissions: [\n\t\t\t\t\t{\n\t\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\t\tlevel: 'READ'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\t\tlevel: 'READ'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t});\n\t}\n\n\tgoalMatrixChange = (goalMatrix) => {\n\t\tif (goalMatrix.index != null) {\n\t\t\tlet foundExisting = this.getResources().find((resource) =>\n\t\t\t\tresource.index == goalMatrix.index\n\t\t\t);\n\n\t\t\tif (foundExisting != null) {\n\t\t\t\tconst currentIndex = foundExisting.index;\n\t\t\t\tthis.removeResource(foundExisting);\n\t\t\t\tthis.addResource(this.PART_RESOURCE_TYPE, goalMatrix, currentIndex);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, goalMatrix);\n\t}\n\n\tcourseChange = (course) => {\n\t\tif (course == null || course.value == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet foundExisting = this.getResources().find((resource) =>\n\t\t\tresource.value?.id == course.value.id\n\t\t);\n\n\t\tif (foundExisting != null) {\n\t\t\tconst currentIndex = foundExisting.index;\n\t\t\tthis.removeResource(foundExisting);\n\t\t\tthis.addResource(this.PART_RESOURCE_TYPE, course, currentIndex);\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, course);\n\t}\n\n\n\tonlyFeedbackChange = (onlyFeedback) => {\n\t\tlet foundExisting = this.getResources().find((resource) =>\n\t\t\tresource.referenceType == onlyFeedback.referenceType\n\t\t);\n\n\t\tif (foundExisting != null) {\n\t\t\tconst currentIndex = foundExisting.index;\n\t\t\tthis.removeResource(foundExisting);\n\t\t\tthis.addResource(this.PART_RESOURCE_TYPE, onlyFeedback, currentIndex);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\n\tedit = (props) => {\n\t\tconst translate = this.api.getEditor().getProp('translate');\n\t\tlet disabled = false;\n\t\tlet addGoalsDisabled = false;\n\n\t\tlet resources = JSON.parse(JSON.stringify(props.resources));\n\t\tif (this.api.getEditor().getProp('assessmentFeedbackParts') != null && this.api.getEditor().getProp('assessmentFeedbackParts').length > 0) {\n\t\t\taddGoalsDisabled = true;\n\t\t};\n\n\t\tif (this.api.getEditor().getProp('disableRows') != null) {\n\t\t\tdisabled = props.resources.find((resource) => {\n\t\t\t\treturn resource.assessmentBlockPartRows?.findIndex((row) =>\n\t\t\t\t\tthis.api.getEditor().getProp('disableRows').includes(row.id)\n\t\t\t\t) > -1;\n\t\t\t}) != null;\n\t\t}\n\n\n\t\tconst showModal = props.resources.find((resource) =>\n\t\t\tresource['@odata.type'] == 'Haldor.Blocks.AssessmentBlock.ShowModal'\n\t\t);\n\n\t\tconst goalParts = resources.filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'assessmentGoal'\n\t\t});\n\n\t\tconst feedbackParts = resources.filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'assessmentonlyfeedback'\n\t\t});\n\n\t\tconst courses = resources.filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'matrix'\n\t\t});\n\n\t\tconst clarifications = resources.filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'assessmentClarification'\n\t\t});\n\n\t\treturn
\n\t\t\t{showModal != null ?\n\t\t\t\t this.removeResource(showModal)}\n\t\t\t\t\tskipCourses={courses.map(course => course.value.id)}\n\t\t\t\t\tonSubmit={(values) => {\n\t\t\t\t\t\tthis.removeResource(showModal);\n\t\t\t\t\t\tthis.addCourses(values);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t: null}\n\n\t\t\t
\n\t\t\t\t{goalParts.map((part, index) => {\n\t\t\t\t\treturn this.removeResourceFromBlock(part)}\n\t\t\t\t\t\tassessmentType={this.assessmentType}\n\t\t\t\t\t\tdisableRows={this.api.getEditor().getProp('disableRows')}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t})}\n\n\t\t\t\t{courses.map((part, index) => {\n\t\t\t\t\treturn this.removeResourceFromBlock(part)}\n\t\t\t\t\t\tclarifications={clarifications}\n\t\t\t\t\t\tassessmentType={this.assessmentType}\n\t\t\t\t\t\tdisableRows={this.api.getEditor().getProp('disableRows')}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t})}\n\n\t\t\t\t{feedbackParts.map((part, index) => {\n\t\t\t\t\treturn \n\t\t\t\t})}\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t
\n\t}\n\n\tconsume = (props) => {\n\t\tlet resources = JSON.parse(JSON.stringify(props.resources));\n\n\t\tconst goals = [...resources].filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'assessmentGoal'\n\t\t});\n\n\t\tconst courses = [...resources].filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'matrix'\n\t\t});\n\n\t\tconst clarifications = [...resources].filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'assessmentClarification'\n\t\t});\n\n\t\tconst feedbackParts = resources.filter((resource) => {\n\t\t\treturn resource['@odata.type'] == this.PART_RESOURCE_TYPE && resource.referenceType == 'assessmentonlyfeedback'\n\t\t});\n\n\t\treturn
\n\t\t\t
\n\t\t\t\t{goals.map((resource) =>\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t{courses.map((resource) =>\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t{feedbackParts.map((resource, index) =>\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t}\n\n}\n\nexport default AssessmentBlock;","import AssessmentBlock from '../AssessmentBlock';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\n\nclass TeacherAssessmentBlock extends AssessmentBlock {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.name = 'Haldor.Blocks.AssessmentBlock';\n\t\tthis.block_type = 'expandable_block';\n\t\tthis.assessmentType = ASSESSMENT_TYPES.TEACHER;\n\t}\n\n\teditorBlockWasAdded = () => {\n\t\tconst editor = this.api.getEditor();\n\t\tconst translate = editor.getProp('translate');\n\t\tlet editMode = false;\n\n\t\tif (this.resources.length == 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.addResource('assessmenttype', {\n\t\t\t\t\t'@odata.type': 'assessmenttype',\n\t\t\t\t\t'value': ASSESSMENT_TYPES.TEACHER,\n\t\t\t\t});\n\n\t\t\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\t\t\tstatus: 'Started',\n\t\t\t\t\treferenceId: '0',\n\t\t\t\t\treferenceType: 'assessmentonlyfeedback',\n\t\t\t\t\tassessmentBlockPartRows: [],\n\t\t\t\t\tvalue: null,\n\t\t\t\t\tpermissions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\t\t\tlevel: 'READ'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\t\t\tlevel: 'READ'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}, 500);\n\t\t}\n\n\t\tconst teacherAssessments = editor.getBlocks().filter(block => {\n\t\t\treturn block.assessmentType == ASSESSMENT_TYPES.TEACHER\n\t\t});\n\n\t\teditor.getBlocks().forEach(block => {\n\t\t\teditMode = block.resources?.length > 0 && block.resources.every((s) => {\n\t\t\t\treturn s.id != null && s.id > 0\n\t\t\t});\n\t\t});\n\n\t\tif (editMode) {\n\t\t\tconst foundIndex = teacherAssessments.findIndex((b) => b.field == this.field);\n\t\t\tthis.events.onTitleChange(translate('Teacher assessment') + ' ' + (foundIndex + 1))\n\t\t} else {\n\t\t\tthis.events.onTitleChange(translate('Teacher assessment') + ' ' + teacherAssessments.length)\n\t\t}\n\n\t\tconst disableRows = editor.getProp('disableRows');\n\t\tif (disableRows != null && disableRows.length > 0 && this.resources != null) {\n\t\t\tconst disabled = this.getResources().find((resource) => {\n\t\t\t\treturn resource.assessmentBlockPartRows?.findIndex((row) =>\n\t\t\t\t\tdisableRows.includes(row.id)\n\t\t\t\t) > -1;\n\t\t\t}) != null;\n\n\t\t\tif (disabled) {\n\t\t\t\tthis.api.deregisterAction('Remove');\n\t\t\t}\n\t\t}\n\t}\n\n\taddGoalMatrix = (event) => {\n\t\tevent.preventDefault();\n\n\t\tthis.removeFeedBackOnlyResource();\n\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\tstatus: 'Started',\n\t\t\treferenceId: '',\n\t\t\treferenceType: 'assessmentGoal',\n\t\t\tvalue: {\n\t\t\t\tid: 0,\n\t\t\t\tvisibleToStudent: true,\n\t\t\t\tvisibleToGuardian: true,\n\t\t\t\ttitle: '',\n\t\t\t\trows: [],\n\t\t\t},\n\t\t\tpermissions: [\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTBLOCKPART',\n\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\tlevel: 'READ',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTBLOCKPART',\n\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\tlevel: 'READ',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\ttarget: 'GUARDIAN',\n\t\t\t\t\tlevel: 'READ'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treferenceType: 'ASSESSMENTFEEDBACK',\n\t\t\t\t\ttarget: 'STUDENT',\n\t\t\t\t\tlevel: 'READ'\n\t\t\t\t}\n\t\t\t],\n\t\t});\n\t}\n}\n\nexport default TeacherAssessmentBlock;","import AssessmentBlock from '../AssessmentBlock';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\n\nclass SelfAssessmentBlock extends AssessmentBlock {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.name = 'Haldor.Blocks.AssessmentBlock.Self';\n\t\tthis.block_type = 'expandable_block';\n\t\tthis.assessmentType = ASSESSMENT_TYPES.SELF;\n\t}\n\n\teditorBlockWasAdded = () => {\n\t\tconst editor = this.api.getEditor();\n\t\tconst translate = editor.getProp('translate');\n\t\tlet editMode = false;\n\t\tconst selfAssessments = editor.getBlocks().filter(block => {\n\t\t\treturn block.assessmentType == ASSESSMENT_TYPES.SELF\n\t\t});\n\n\t\teditor.getBlocks().forEach(block => {\n\t\t\teditMode = block.resources?.length > 0 && block.resources.every((s) => {\n\t\t\t\treturn s.id != null && s.id > 0\n\t\t\t});\n\t\t});\n\n\t\tif (editMode) {\n\t\t\tconst foundIndex = selfAssessments.findIndex((b) => b.field == this.field);\n\t\t\tthis.events.onTitleChange(translate('Self assessment') + ' ' + (foundIndex + 1));\n\t\t} else {\n\t\t\tthis.events.onTitleChange(translate('Self assessment') + ' ' + selfAssessments.length);\n\t\t}\n\n\t\tconst disableRows = editor.getProp('disableRows');\n\t\tif (disableRows != null && disableRows.length > 0 && this.resources != null) {\n\t\t\tconst disabled = this.getResources().find((resource) => {\n\t\t\t\treturn resource.assessmentBlockPartRows?.findIndex((row) =>\n\t\t\t\t\tdisableRows.includes(row.id)\n\t\t\t\t) > -1;\n\t\t\t}) != null;\n\n\t\t\tif (disabled) {\n\t\t\t\tthis.api.deregisterAction('Remove');\n\t\t\t}\n\t\t}\n\t}\n\n\taddGoalMatrix = (event) => {\n\t\tevent.preventDefault();\n\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\tstatus: 'Started',\n\t\t\treferenceId: '',\n\t\t\treferenceType: 'assessmentGoal',\n\t\t\tvalue: {\n\t\t\t\tid: 0,\n\t\t\t\tvisibleToStudent: true,\n\t\t\t\tvisibleToGuardian: true,\n\t\t\t\ttitle: '',\n\t\t\t\trows: [],\n\t\t\t},\n\t\t\tpermissions: []\n\t\t});\n\t}\n}\n\nexport default SelfAssessmentBlock;","import AssessmentBlock from '../AssessmentBlock';\nimport { ASSESSMENT_TYPES } from 'components/BlockAssessments/AssessmentTypes';\n\nclass PeerReviewBlock extends AssessmentBlock {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.name = 'Haldor.Blocks.AssessmentBlock.Peer';\n\t\tthis.block_type = 'expandable_block';\n\t\tthis.assessmentType = ASSESSMENT_TYPES.PEER;\n\t}\n\n\teditorBlockWasAdded = () => {\n\t\tconst editor = this.api.getEditor();\n\t\tconst translate = editor.getProp('translate');\n\t\tvar editMode = false;\n\t\tconst peerAssessments = editor.getBlocks().filter(block => {\n\t\t\treturn block.assessmentType == ASSESSMENT_TYPES.PEER\n\t\t});\n\n\t\teditor.getBlocks().forEach(block => {\n\t\t\teditMode = block.resources?.length > 0 && block.resources.every((s) => {\n\t\t\t\treturn s.id != null && s.id > 0\n\t\t\t});\n\t\t});\n\n\t\tif (editMode) {\n\t\t\tconst foundIndex = peerAssessments.findIndex((b) => b.field == this.field);\n\t\t\tthis.events.onTitleChange(translate('Peer review') + ' ' + (foundIndex + 1));\n\t\t} else {\n\t\t\tthis.events.onTitleChange(translate('Peer review') + ' ' + (peerAssessments.length));\n\t\t}\n\n\t\tconst disableRows = editor.getProp('disableRows');\n\t\tif (disableRows != null && disableRows.length > 0 && this.resources != null) {\n\t\t\tconst disabled = this.getResources().find((resource) => {\n\t\t\t\treturn resource.assessmentBlockPartRows?.findIndex((row) =>\n\t\t\t\t\tdisableRows.includes(row.id)\n\t\t\t\t) > -1;\n\t\t\t}) != null;\n\n\t\t\tif (disabled) {\n\t\t\t\tthis.api.deregisterAction('Remove');\n\t\t\t}\n\t\t}\n\t}\n\n\taddGoalMatrix = (event) => {\n\t\tevent.preventDefault();\n\n\t\tthis.addResource(this.PART_RESOURCE_TYPE, {\n\t\t\tstatus: 'Started',\n\t\t\treferenceId: '',\n\t\t\treferenceType: 'assessmentGoal',\n\t\t\tvalue: {\n\t\t\t\tid: 0,\n\t\t\t\tvisibleToStudent: true,\n\t\t\t\tvisibleToGuardian: true,\n\t\t\t\ttitle: '',\n\t\t\t\trows: [],\n\t\t\t},\n\t\t\tpermissions: []\n\t\t});\n\t}\n}\n\nexport default PeerReviewBlock;","export const ASSESSMENT_BLOCK_TYPES = Object.freeze({\n SELF_ASSESSMENT_BLOCK: \"Haldor.Blocks.AssessmentBlock.Self\",\n PEER_REVIEW_BLOCK: \"Haldor.Blocks.AssessmentBlock.Peer\",\n TEACHER_ASSESSMENT_BLOCK: \"Haldor.Blocks.AssessmentBlock\"\n});","import React from 'react';\n\nimport { HaldorBlockEditor } from '@haldor/ui';\nimport { useTranslate } from 'lib/translate';\n\nimport AddAssessmentBlockButton from './Plugins/AddAssessmentBlockButton';\nimport AddTeacherAssessmentBlockButton_Plugin from './Plugins/AddTeacherAssessmentBlockButton';\n\nimport PushAssessmentBlock from './Plugins/PushAssessmentBlock';\nimport TeacherAssessmentBlock from './Blocks/TeacherAssessmentBlock/TeacherAssessmentBlock';\nimport SelfAssessmentBlock from './Blocks/SelfAssessmentBlock/SelfAssessmentBlock';\nimport PeerReviewBlock from './Blocks/PeerReviewBlock/PeerReviewBlock';\n\nimport './_AssessmentBlock.scss';\nimport { ASSESSMENT_TYPES } from './AssessmentTypes';\nimport { ASSESSMENT_BLOCK_TYPES } from './AssessmentBlockTypes';\n\nconst BlockAssessments = (props) => {\n\tconst translate = useTranslate();\n\n\tlet plugins = [\n\t\tTeacherAssessmentBlock,\n\t\tPeerReviewBlock,\n\t\tSelfAssessmentBlock,\n\t\tPushAssessmentBlock,\n\t];\n\n\tif (props.multipleAssessmentOptions) {\n\t\tplugins.push(AddAssessmentBlockButton);\n\t}\n\n\tif (!props.multipleAssessmentOptions) {\n\t\tplugins.push(AddTeacherAssessmentBlockButton_Plugin);\n\t}\n\n\n\tif (props.input?.value != '') {\n\t\tprops.input?.value?.forEach((value) => {\n\t\t\tif (value.resources != null && value.resources.length > 0) {\n\t\t\t\tlet resource = value.resources.map(s => s.assessmentType)[0];\n\t\t\t\tswitch (resource) {\n\t\t\t\t\tcase ASSESSMENT_TYPES.PEER:\n\t\t\t\t\t\tvalue.type = ASSESSMENT_BLOCK_TYPES.PEER_REVIEW_BLOCK\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ASSESSMENT_TYPES.TEACHER:\n\t\t\t\t\t\tvalue.type = ASSESSMENT_BLOCK_TYPES.TEACHER_ASSESSMENT_BLOCK\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ASSESSMENT_TYPES.SELF:\n\t\t\t\t\t\tvalue.type = ASSESSMENT_BLOCK_TYPES.SELF_ASSESSMENT_BLOCK\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue.type = ASSESSMENT_BLOCK_TYPES.TEACHER_ASSESSMENT_BLOCK\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn
\n\t\t\n\t
\n}\n\nBlockAssessments.defaultProps = {\n\tmultipleAssessmentOptions: false,\n};\n\nexport default BlockAssessments;","import React, { useState, useEffect, useRef } from 'react';\nimport { Icon } from '@haldor/ui';\n// onClick={(event) => toggleList(event)}\nconst CustomSelector = (props) => {\n\tconst [open, setOpen] = useState(false);\n\tconst ref = useRef(null);\n\tconst buttonRef = useRef(null);\n\tconst handleOutsideClick = (event) => {\n\t\tif (\n\t\t\tref?.current &&\n\t\t\t!ref.current?.contains(event.target) &&\n\t\t\tevent.path != null && event.path[0] !== buttonRef.current\n\t\t) {\n\t\t\tsetOpen(false);\n\t\t}\n\t};\n\tuseEffect(() => {\n\t\tdocument.addEventListener('click', handleOutsideClick, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('click', handleOutsideClick);\n\t\t};\n\t}, []);\n\n\tconst buttonAction = (e) => {\n\t\te.preventDefault();\n\t\tif (!open) {\n\t\t\tprops.fetchLesson();\n\t\t}\n\t\tsetOpen((prev) => !prev);\n\t};\n\treturn (\n\t\t
\n\t\t\t buttonAction(event)}\n\t\t\t>\n\t\t\t\t{props.label}\n\t\t\t\t\n\t\t\t\n\n\t\t\t{open ? (\n\t\t\t\t
\n\t\t\t\t\t{props.children}\n\t\t\t\t
\n\t\t\t) : null}\n\t\t
\n\t);\n};\n\nexport default CustomSelector;\n","import React, { useEffect, useState, useCallback } from \"react\";\nimport {\n\tList,\n\tListItem,\n\tListItemButton,\n\tListItemIcon,\n\tListItemText,\n\tCheckbox,\n\tSkeleton,\n\tStack,\n\tBreadcrumbs,\n\tLink,\n\tTypography,\n\tBox,\n\tButton,\n\tIconButton,\n} from \"@mui/material\";\nimport { translate as translateConstructor, Button as HaldorButton, Icon } from '@haldor/ui';\nimport { getOnBehalfOfAccessToken } from \"actions/user\";\nimport { Document, FolderIcon } from 'UI/Icons';\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport './_FileBrowser.scss';\n\nconst FileBrowser = ({\n\tsource,\n\tonUpdate,\n\tonClose,\n\tonBreadcrumbChange,\n\tinitialBreadCrumbs = [{ id: \"me\", name: \"Home\" }],\n}) => {\n\tconst [selectedFiles, setSelectedFiles] = useState([]);\n\tconst [files, setFiles] = useState([]);\n\tconst [loading, setLoading] = useState(false);\n\tconst [breadcrumbs, setBreadcrumbs] = useState(initialBreadCrumbs);\n\tconst [error, setError] = useState(null);\n\n\tconst translations = useSelector(state => state.Languages.translations);\n\tconst translate = React.useMemo(() => translateConstructor(translations), [translations]);\n\n\tconst dispatch = useDispatch();\n\tconst user = useSelector((state) => state.user.currentUser);\n\n\tconst getAccessTokenAsync = useCallback(async () => {\n\t\tlet token = await dispatch(getOnBehalfOfAccessToken(user.userId, \"Files.ReadWrite.All\"));\n\t\tif (token == null) {\n\t\t\ttoken = await dispatch(getOnBehalfOfAccessToken(user.userId, \"Sites.ReadWrite.All\"));\n\t\t}\n\n\t\tif (!token) {\n\t\t\tsetError(\"Something went wrong\");\n\t\t\treturn null;\n\t\t}\n\n\t\treturn token;\n\t}, [dispatch, user.userId]);\n\n\t// Fetch files for the root folder\n\tconst defaultFetchFiles = useCallback(async () => {\n\t\ttry {\n\t\t\tconst token = await getAccessTokenAsync();\n\t\t\tif (!token) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst url = source === \"me\"\n\t\t\t\t? \"https://graph.microsoft.com/v1.0/me/drive/root/children\"\n\t\t\t\t: `https://graph.microsoft.com/v1.0/groups/${source}/drive/root/children`;\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: {\n\t\t\t\t\t\"Authorization\": `Bearer ${token}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst data = await response.json();\n\t\t\treturn data.value || [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t}, [source, getAccessTokenAsync]);\n\n\t// Load files when component mounts or source changes\n\tuseEffect(() => {\n\t\tconst loadFiles = async () => {\n\t\t\tsetLoading(true);\n\t\t\tconst fetchedFiles = await defaultFetchFiles();\n\t\t\tsetFiles(fetchedFiles);\n\t\t\tsetLoading(false);\n\t\t};\n\t\tloadFiles();\n\t}, [source, defaultFetchFiles]);\n\n\tconst fetchFileById = useCallback(async (fileId) => {\n\t\ttry {\n\t\t\tconst token = await getAccessTokenAsync();\n\t\t\tif (!token) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Determine URL based on the source value\n\t\t\tconst url = source === \"me\"\n\t\t\t\t? `https://graph.microsoft.com/v1.0/me/drive/items/${fileId}`\n\t\t\t\t: `https://graph.microsoft.com/v1.0/groups/${source}/drive/items/${fileId}`;\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: {\n\t\t\t\t\t\"Authorization\": `Bearer ${token}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst data = await response.json();\n\n\t\t\tif (data != null && data.package != null) {\n\t\t\t\tif (data.package.type != null && data.package.type == \"oneNote\") {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error fetching file by ID:\", error);\n\t\t\treturn null;\n\t\t}\n\t}, [getAccessTokenAsync, source]);\n\n\t// Fetch files from a specific folder\n\tconst fetchFilesFromFolder = useCallback(async (folderId) => {\n\t\ttry {\n\t\t\tconst token = await getAccessTokenAsync();\n\t\t\tif (!token) {\n\t\t\t\tconsole.error(\"Failed to get access token\");\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst url = source === \"me\"\n\t\t\t\t? `https://graph.microsoft.com/v1.0/me/drive/items/${folderId}/children`\n\t\t\t\t: `https://graph.microsoft.com/v1.0/groups/${source}/drive/items/${folderId}/children`;\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: {\n\t\t\t\t\t\"Authorization\": `Bearer ${token}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst data = await response.json();\n\t\t\treturn data.value || [];\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error fetching folder contents:\", error);\n\t\t\treturn [];\n\t\t}\n\t}, [getAccessTokenAsync, source]);\n\n\t// Helper to load root files (called when root breadcrumb is clicked)\n\tconst loadRootFiles = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tconst rootFiles = await defaultFetchFiles();\n\t\tsetFiles(rootFiles);\n\t\tsetBreadcrumbs(initialBreadCrumbs);\n\t\tsetLoading(false);\n\t}, [source, defaultFetchFiles]);\n\n\t// Handler for opening a folder\n\tconst handleOpenFolder = useCallback(async (folderId, folderName) => {\n\t\tconst newFiles = await fetchFilesFromFolder(folderId);\n\t\tsetFiles(newFiles);\n\t\tsetBreadcrumbs((prevBreadcrumbs) => {\n\t\t\tconst updatedBreadcrumbs = [...prevBreadcrumbs, { id: folderId, name: folderName }];\n\t\t\treturn updatedBreadcrumbs;\n\t\t});\n\t}, [fetchFilesFromFolder]);\n\n\t// Handler for clicking on a breadcrumb\n\tconst handleBreadcrumbClick = useCallback((index) => {\n\t\tconst currentBreadCrumb = breadcrumbs[index];\n\n\t\tconst newBreadcrumbs = breadcrumbs.slice(0, index + 1);\n\t\tsetBreadcrumbs(newBreadcrumbs);\n\t\tsetSelectedFiles([]);\n\n\t\t// course is currentBreadCrumb.id then loadRootFiles\n\t\tif (currentBreadCrumb != null && currentBreadCrumb.id === source) {\n\t\t\tloadRootFiles();\n\t\t}\n\n\t\tif (onBreadcrumbChange != null) {\n\t\t\tonBreadcrumbChange(currentBreadCrumb);\n\t\t}\n\n\t}, [breadcrumbs, source, loadRootFiles]);\n\n\t// Helper function to get the appropriate icon for a file/folder\n\tconst getFileIcon = useCallback((file) => {\n\t\tlet icon = (
{file.folder ? : }
)\n\t\treturn icon;\n\t\t;\n\t}, []);\n\n\tconst formatSize = useCallback((bytes) => {\n\t\tif (bytes < 1024) return `${bytes} B`;\n\t\tconst kb = bytes / 1024;\n\t\tif (kb < 1024) {\n\t\t\treturn `${kb.toFixed(2)} KB`;\n\t\t}\n\t\tconst mb = kb / 1024;\n\t\tif (mb < 1024) {\n\t\t\treturn `${mb.toFixed(2)} MB`;\n\t\t}\n\t\tconst gb = mb / 1024;\n\t\treturn `${gb.toFixed(2)} GB`;\n\t}, []);\n\n\tconst onSelect = useCallback((fileId) => {\n\t\tsetSelectedFiles((prev) =>\n\t\t\tprev.includes(fileId) ? prev.filter((id) => id !== fileId) : [...prev, fileId]\n\t\t);\n\t}, []);\n\n\tconst processSelectedFiles = async () => {\n\t\tsetLoading(true);\n\t\tconst fetchedFiles = await Promise.all(selectedFiles.map(fetchFileById));\n\n\t\tlet processedFiles = [];\n\n\t\tfetchedFiles.forEach(element => {\n\t\t\tif (element == null) return;\n\n\t\t\tprocessedFiles.push({\n\t\t\t\tname: element.name,\n\t\t\t\turl: element['@microsoft.graph.downloadUrl'],\n\t\t\t\tid: element.id,\n\t\t\t\ttype: element['file'].mimeType,\n\t\t\t\tdriveItemId: element.id,\n\t\t\t\tparentReference: element.parentReference,\n\t\t\t});\n\t\t});\n\n\t\tif (onUpdate != null) {\n\t\t\tonUpdate(processedFiles);\n\t\t}\n\n\t\tsetLoading(false);\n\t};\n\n\treturn (\n\t\t\n\t\t\t{/* Fixed Header */}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{breadcrumbs &&\n\t\t\t\t\t\tbreadcrumbs.map((crumb, index) => (\n\t\t\t\t\t\t\t handleBreadcrumbClick(index)}\n\t\t\t\t\t\t\t\tsx={{ cursor: \"pointer\" }}\n\t\t\t\t\t\t\t\tcolor={index === breadcrumbs.length - 1 ? \"text.primary\" : \"inherit\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{translate(crumb.name)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\n\t\t\t\n\n\t\t\t{/* File/Folder List (Takes remaining space) */}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{!loading && error && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{translate(error)}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t{loading && error === null && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!loading && files.length === 0 && error === null && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{translate('No files selected')}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!loading && files.length > 0 && error === null && (\n\t\t\t\t\t\tfiles.map((file) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tfile.folder\n\t\t\t\t\t\t\t\t\t\t\t? handleOpenFolder(file.id, file.name)\n\t\t\t\t\t\t\t\t\t\t\t: onSelect && onSelect(file.id)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: selectedFiles.includes(file.id)\n\t\t\t\t\t\t\t\t\t\t\t? \"#e3f2fd\"\n\t\t\t\t\t\t\t\t\t\t\t: \"inherit\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!file.folder && (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{getFileIcon(file)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\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\n\t\t\t\n\n\t\t\t{/* Fixed Footer */}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{translate('Upload')}\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FileBrowser;\n","import React, { useState } from \"react\";\nimport {\n\tBox,\n\tIconButton,\n\tModal,\n} from \"@mui/material\";\n\nimport { translate as translateConstructor } from '@haldor/ui';\n\nimport FileBrowser from \"./FileBrowser\";\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport { useSelector } from \"react-redux\";\n\nconst modalStyle = {\n\tposition: \"absolute\",\n\ttop: \"50%\",\n\tleft: \"50%\",\n\ttransform: \"translate(-50%, -50%)\",\n\tbgcolor: \"background.paper\",\n\theight: \"80vh\",\n\twidth: \"80vw\",\n\tborderRadius: \"5px\",\n\toverflow: \"hidden\",\n\tpt: 3,\n\tpb: 3,\n\tpx: 4,\n};\nconst OneDriveFilePicker = ({ onUpdate, onClose }) => {\n\tconst [openModal, setOpenModal] = useState(true);\n\n\tconst translations = useSelector(state => state.Languages.translations);\n\tconst translate = React.useMemo(() => translateConstructor(translations), [translations]);\n\n\tconst processSelectedFiles = (files) => {\n\t\tonUpdate(files);\n\t\tsetOpenModal(false);\n\t}\n\n\tconst onCloseModal = () => {\n\t\tsetOpenModal(false);\n\n\t\tif (onClose)\n\t\t\tonClose();\n\t}\n\n\treturn (\n\t\t
\n\t\t\t { setOpenModal(false); onClose(); }}\n\t\t\t\taria-labelledby=\"modal-modal-title\"\n\t\t\t\taria-describedby=\"modal-modal-description\"\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

{translate('Selected files')}

\n\n\t\t\t\t\t\t\t{/* Reload Icon */}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\n\t\t\t\t\t\t\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
\n\t\t\t\n\t\t
\n\t);\n};\n\nexport default OneDriveFilePicker;\n","import React, { useEffect, useState } from \"react\";\nimport {\n\tBox,\n\tModal,\n\tBreadcrumbs,\n\tLink,\n\tList,\n\tListItem,\n\tListItemButton,\n\tListItemIcon,\n\tListItemText,\n\tTypography,\n\tIconButton,\n} from \"@mui/material\";\n\nimport { translate as translateConstructor } from '@haldor/ui';\n\nimport GroupIcon from '@mui/icons-material/Group';\nimport FolderIcon from \"@mui/icons-material/Folder\";\nimport CloseIcon from '@mui/icons-material/Close';\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport { useSelector } from \"react-redux\";\nimport FileBrowser from \"./FileBrowser\";\n\nconst modalStyle = {\n\tposition: \"absolute\",\n\ttop: \"50%\",\n\tleft: \"50%\",\n\ttransform: \"translate(-50%, -50%)\",\n\tbgcolor: \"background.paper\",\n\theight: \"80vh\",\n\twidth: \"80vw\",\n\toverflow: \"hidden\",\n\tborderRadius: \"5px\",\n\tpt: 3,\n\tpb: 3,\n\tpx: 4,\n};\n\nconst TeamFilePicker = ({ onUpdate, onClose }) => {\n\tconst [openModal, setOpenModal] = useState(true);\n\tconst [breadcrumb, setBreadcrumb] = useState([{ id: \"root\", name: \"Select Group\" }]);\n\tconst [currentGroup, setCurrentGroup] = useState({ id: \"root\", name: \"Select Group\" });\n\tconst [selectedFiles, setSelectedFiles] = useState([]);\n\n\tconst educationGroups = useSelector((state) => state.sections.educationGroups);\n\tconst translations = useSelector(state => state.Languages.translations);\n\n\tconst translate = React.useMemo(() => translateConstructor(translations), [translations]);\n\n\tconst loadGroup = (groupId, groupName) => {\n\t\tsetCurrentGroup({ id: groupId, name: groupName });\n\t};\n\n\tconst goToBreadcrumb = (index) => {\n\t\tsetBreadcrumb(breadcrumb.slice(0, index + 1));\n\t};\n\n\tconst processSelectedFiles = (files) => {\n\t\tonUpdate(files);\n\t\tsetOpenModal(false);\n\t}\n\n\tconst onBreadcrumbChange = (newBreadcrumb) => {\n\t\tif (newBreadcrumb != null && newBreadcrumb.id == \"root\") {\n\t\t\tsetBreadcrumb([newBreadcrumb]);\n\t\t\tsetCurrentGroup({ id: \"root\", name: \"Select Group\" });\n\t\t}\n\t};\n\n\n\tconst onCloseModal = () => {\n\t\tsetOpenModal(false);\n\n\t\tif (onClose)\n\t\t\tonClose();\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t

{translate('Selected files')}

\n\n\t\t\t\t\t{/* Reload Icon */}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t{/* Group List */}\n\t\t\t\t{currentGroup.id == \"root\" ? (\n\t\t\t\t\t{/* Breadcrumb Navigation */}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{breadcrumb.map((item, index) => (\n\t\t\t\t\t\t\t\t goToBreadcrumb(index)}\n\t\t\t\t\t\t\t\t\tsx={{ cursor: \"pointer\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.name}\n\t\t\t\t\t\t\t\t\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\n\t\t\t\t\t\t{educationGroups.map((group) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t loadGroup(group.graphId, group.title)}>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\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) : null}\n\n\t\t\t\t{currentGroup.id != \"root\" ? : null}\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default TeamFilePicker;\n","import React, { useCallback, useState } from \"react\";\nimport { Box, Button, List, ListItem, ListItemIcon, ListItemText, Modal, Typography, LinearProgress, IconButton, Stack } from \"@mui/material\";\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\nimport CloseIcon from '@mui/icons-material/Close';\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\nimport { translate as translateConstructor, Button as HaldorButton } from '@haldor/ui';\n\nimport DropzoneComponent from 'react-dropzone-component';\nimport swal from 'sweetalert2';\nimport { http } from 'lib/msal';\n\nimport './LocalFilePicker.scss';\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getOnBehalfOfAccessToken } from \"actions/user\";\n\nconst modalStyle = {\n\tposition: \"absolute\",\n\ttop: \"50%\",\n\tleft: \"50%\",\n\ttransform: \"translate(-50%, -50%)\",\n\tbgcolor: \"background.paper\",\n\theight: \"85vh\",\n\twidth: \"80vw\",\n\toverflow: \"hidden\",\n\tborderRadius: \"5px\",\n\tpt: 3,\n\tpb: 3,\n\tpx: 4,\n};\n\nconst LocalFilePicker = ({ onUpdate, onClose }) => {\n\tconst [openModal, setOpenModal] = useState(true);\n\tconst [dropzone, setDropzone] = useState(null);\n\tconst [files, setFiles] = useState([]);\n\tconst [processedFiles, setProcessedFiles] = useState([]);\n\tconst [loading, setLoading] = useState(false);\n\n\tconst dispatch = useDispatch();\n\tconst user = useSelector((state) => state.user.currentUser);\n\tconst translations = useSelector(state => state.Languages.translations);\n\n\tconst translate = React.useMemo(() => translateConstructor(translations), [translations]);\n\n\tconst onCloseModal = () => {\n\t\tsetOpenModal(false);\n\t\tif (onClose) onClose();\n\t};\n\n\t// Save the dropzone instance in state\n\tconst dropzoneInit = (dz) => {\n\t\tsetDropzone(dz);\n\t};\n\n\tconst getAccessTokenAsync = useCallback(async () => {\n\t\tlet token = await dispatch(getOnBehalfOfAccessToken(user.userId, \"Files.ReadWrite.All\"));\n\t\tif (token == null) {\n\t\t\ttoken = await dispatch(getOnBehalfOfAccessToken(user.userId, \"Sites.ReadWrite.All\"));\n\t\t}\n\t\treturn token;\n\t}, [dispatch, user.userId]);\n\n\t// Trigger file dialog via dropzone's hidden input\n\tconst triggerDropzone = () => {\n\t\tif (dropzone && dropzone.hiddenFileInput) {\n\t\t\tdropzone.hiddenFileInput.click();\n\t\t}\n\t};\n\n\t// Dropzone event handlers\n\tconst dropzoneEvents = {\n\t\tinit: dropzoneInit,\n\t\taddedfile: (file) => {\n\n\t\t\t// Remove file if it's over 100MB\n\t\t\tif (file.size > 101000024) {\n\t\t\t\tif (dropzone) {\n\t\t\t\t\tdropzone.removeFile(file);\n\t\t\t\t}\n\t\t\t\tswal.fire({\n\t\t\t\t\ttitle: 'file-too-big',\n\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\tconfirmButtonText: 'okay',\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Save the file along with initial metadata for tracking upload progress\n\t\t\tsetFiles(prevFiles => [...prevFiles, { file, progress: 0, status: \"pending\", fileInfo: null }]);\n\t\t},\n\t};\n\n\t// Dropzone configuration (we handle uploading separately)\n\tconst djsConfig = {\n\t\tautoProcessQueue: false,\n\t\tparallelUploads: 1,\n\t\ttimeout: 99900000,\n\t\theaders: {},\n\t};\n\n\tconst componentConfig = {\n\t\ticonFiletypes: ['.jpg', '.png', '.gif'],\n\t\tshowFiletypeIcon: false,\n\t\tpostUrl: http.defaults.baseURL + 'fileItems'\n\t};\n\n\t// Helper to update a specific file's state\n\tconst updateFileState = (index, newProps) => {\n\t\tsetFiles(prevFiles => {\n\t\t\tconst updated = [...prevFiles];\n\t\t\tupdated[index] = { ...updated[index], ...newProps };\n\t\t\treturn updated;\n\t\t});\n\t};\n\n\n\tconst formatSize = useCallback((bytes) => {\n\t\tif (bytes < 1024) return `${bytes} B`;\n\t\tconst kb = bytes / 1024;\n\t\tif (kb < 1024) {\n\t\t\treturn `${kb.toFixed(2)} KB`;\n\t\t}\n\t\tconst mb = kb / 1024;\n\t\tif (mb < 1024) {\n\t\t\treturn `${mb.toFixed(2)} MB`;\n\t\t}\n\t\tconst gb = mb / 1024;\n\t\treturn `${gb.toFixed(2)} GB`;\n\t}, []);\n\n\t// Upload each file to OneDrive with progress updates\n\tconst uploadFiles = async () => {\n\t\tsetLoading(true);\n\t\tvar token = await getAccessTokenAsync();\n\t\tlet proccessedFiles = [];\n\n\t\tfor (let i = 0; i < files.length; i++) {\n\t\t\tif (!token) {\n\t\t\t\tupdateFileState(i, { status: \"error\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tupdateFileState(i, { status: \"uploading\", progress: 0 });\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await uploadLargeFile(token, files[i].file, (progress) => {\n\t\t\t\t\tupdateFileState(i, { progress });\n\t\t\t\t});\n\n\t\t\t\tproccessedFiles.push({\n\t\t\t\t\tname: fileInfo.name,\n\t\t\t\t\turl: fileInfo['@microsoft.graph.downloadUrl'],\n\t\t\t\t\tid: fileInfo.id,\n\t\t\t\t\ttype: fileInfo['file'].mimeType,\n\t\t\t\t\tdriveItemId: fileInfo.id,\n\t\t\t\t\tparentReference: fileInfo.parentReference\n\t\t\t\t});\n\t\t\t\tupdateFileState(i, { status: \"success\", progress: 100, fileInfo });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Upload error for file\", files[i].file.name, error);\n\t\t\t\tupdateFileState(i, { status: \"error\" });\n\t\t\t}\n\t\t}\n\n\t\tsetLoading(false);\n\n\t\tif (onUpdate && token) {\n\t\t\tsetOpenModal(false);\n\t\t\tonUpdate(proccessedFiles);\n\t\t}\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{/* Fixed Header */}\n\t\t\t\t\t\n\t\t\t\t\t\t

{translate('Selected files')}

\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t{/* Middle content: Dropzone and List, each taking equal space */}\n\t\t\t\t\t\n\t\t\t\t\t\t{/* Dropzone Area */}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/* Custom Dropzone UI */}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{translate('drop-files-or-click-here')}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{/* List Area */}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{files.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{translate('No files selected')}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{translate('Selected files')}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{files.map((item, index) => (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatSize(item.file.size)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{item.status === 'uploading' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{item.status === 'error' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t{translate('Something went wrong')}\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t{/* Fixed Footer */}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{translate('Upload')}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n// Function to ensure the folder exists. If not, it creates the folder.\nasync function ensureFolderExists(accessToken, folderName) {\n\tconst folderPath = `/${folderName}`;\n\tconst checkUrl = `https://graph.microsoft.com/v1.0/me/drive/root:${folderPath}`;\n\n\t// Check if the folder exists.\n\tlet response = await fetch(checkUrl, {\n\t\theaders: { 'Authorization': `Bearer ${accessToken}` }\n\t});\n\n\t// If the folder exists, return its data.\n\tif (response.ok) {\n\t\treturn await response.json();\n\t}\n\n\t// Otherwise, create the folder.\n\tconst createUrl = `https://graph.microsoft.com/v1.0/me/drive/root/children`;\n\tresponse = await fetch(createUrl, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\t'Authorization': `Bearer ${accessToken}`,\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tname: folderName,\n\t\t\tfolder: {}, // Indicates that this is a folder\n\t\t\t\"@microsoft.graph.conflictBehavior\": \"rename\"\n\t\t})\n\t});\n\n\tif (!response.ok) {\n\t\tconst errorText = await response.text();\n\t\tconsole.error(`Error creating folder: ${errorText}`);\n\t\tthrow new Error(`Failed to create folder: ${folderName}`);\n\t}\n\n\treturn await response.json();\n}\n\n\n// Helper function to upload a large file to OneDrive with progress tracking\nasync function uploadLargeFile(accessToken, file, onProgress) {\n\n\t// Ensure the Haldor_tmpstorage folder exists.\n\tawait ensureFolderExists(accessToken, 'Haldor_tmpstorage');\n\n\t// 1. Create an upload session in the Haldor_tmpstorage folder\n\tconst sessionUrl = `https://graph.microsoft.com/v1.0/me/drive/root:/Haldor_tmpstorage/${encodeURIComponent(file.name)}:/createUploadSession`;\n\tconst sessionResponse = await fetch(sessionUrl, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\t'Authorization': `Bearer ${accessToken}`,\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\titem: {\n\t\t\t\t'@microsoft.graph.conflictBehavior': 'rename'\n\t\t\t}\n\t\t}),\n\t});\n\n\tif (!sessionResponse.ok) {\n\t\tconsole.error('Failed to create upload session:', await sessionResponse.text());\n\t\tthrow new Error('Failed to create upload session');\n\t}\n\n\tconst sessionData = await sessionResponse.json();\n\tconst uploadUrl = sessionData.uploadUrl;\n\n\t// 2. Upload the file in chunks (10 MB per chunk)\n\tconst chunkSize = 10 * 1024 * 1024;\n\tconst totalSize = file.size;\n\tlet start = 0;\n\n\twhile (start < totalSize) {\n\t\tconst end = Math.min(start + chunkSize, totalSize);\n\t\tconst blob = file.slice(start, end);\n\t\tconst contentRange = `bytes ${start}-${end - 1}/${totalSize}`;\n\n\t\tconst response = await fetch(uploadUrl, {\n\t\t\tmethod: 'PUT',\n\t\t\theaders: {\n\t\t\t\t'Content-Length': blob.size,\n\t\t\t\t'Content-Range': contentRange,\n\t\t\t},\n\t\t\tbody: blob,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconsole.error('Error uploading chunk:', await response.text());\n\t\t\tthrow new Error('Error uploading chunk');\n\t\t}\n\t\tstart = end;\n\t\tconst progress = Math.floor((start / totalSize) * 100);\n\t\tonProgress(progress);\n\t}\n\n\t// 3. Retrieve the uploaded file information from OneDrive (within Haldor_tmpstorage)\n\tconst fileInfoResponse = await fetch(\n\t\t`https://graph.microsoft.com/v1.0/me/drive/root:/Haldor_tmpstorage/${encodeURIComponent(file.name)}`,\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Authorization': `Bearer ${accessToken}`,\n\t\t\t},\n\t\t}\n\t);\n\n\tif (!fileInfoResponse.ok) {\n\t\tconsole.error('Error retrieving file info:', await fileInfoResponse.text());\n\t\tthrow new Error('Error retrieving file info');\n\t}\n\n\tconst fileInfo = await fileInfoResponse.json();\n\treturn fileInfo;\n}\n\nexport default LocalFilePicker;\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Menu, MenuItem, ListItemIcon, Typography } from \"@mui/material\";\nimport CloudIcon from \"@mui/icons-material/Cloud\";\nimport GroupsIcon from \"@mui/icons-material/Groups\";\nimport UploadIcon from \"@mui/icons-material/Upload\";\nimport { useSelector } from \"react-redux\";\nimport { translate as translateConstructor, Button as HaldorButton, Icon } from '@haldor/ui';\n\nimport OneDriveFilePicker from \"./OneDriveFilePicker\";\nimport TeamFilePicker from \"./TeamFilePicker\";\nimport LocalFilePicker from \"./LocalFilePicker\";\nimport { OneDriveIcon } from \"UI/Icons\";\n\nconst FileUploadMenu = ({ onUpdate }) => {\n\tconst translations = useSelector(state => state.Languages.translations);\n\tconst translate = React.useMemo(() => translateConstructor(translations), [translations]);\n\n\tconst [selectedPage, setSelectedPage] = useState(null);\n\tconst [anchorEl, setAnchorEl] = useState(null);\n\tconst open = Boolean(anchorEl);\n\n\tconst handleClick = (event) => {\n\t\tevent.preventDefault();\n\t\tsetAnchorEl(event.currentTarget);\n\t};\n\n\tconst handleClose = () => {\n\t\tsetAnchorEl(null);\n\t\tsetSelectedPage(null);\n\t};\n\n\tconst handleOnUpdate = (files) => {\n\t\thandleClose();\n\n\t\tif (onUpdate)\n\t\t\tonUpdate(files);\n\t}\n\n\tswitch (selectedPage) {\n\t\tcase 'ONE_DRIVE':\n\t\t\treturn ;\n\t\tcase 'TEAM':\n\t\t\treturn ;\n\t\tcase 'CUSTOM_UPLOAD':\n\t\t\treturn ;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{translate(\"Add files\")}\n\t\t\t\n\t\t\t { handleClose(null) }}\n\t\t\t\tanchorOrigin={{\n\t\t\t\t\tvertical: \"bottom\",\n\t\t\t\t\thorizontal: \"center\", // Centered horizontally\n\t\t\t\t}}\n\t\t\t\ttransformOrigin={{\n\t\t\t\t\tvertical: \"top\",\n\t\t\t\t\thorizontal: \"center\", // Ensure it aligns properly\n\t\t\t\t}}\n\t\t\t\tslotProps={{\n\t\t\t\t\tpaper: {\n\t\t\t\t\t\televation: 0,\n\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\tfilter: \"drop-shadow(0px 2px 8px rgba(0,0,0,0.32))\",\n\t\t\t\t\t\t\tmt: 1.5,\n\t\t\t\t\t\t\t\"& .MuiAvatar-root\": {\n\t\t\t\t\t\t\t\twidth: 32,\n\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\tml: -0.5,\n\t\t\t\t\t\t\t\tmr: 1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"&::before\": {\n\t\t\t\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateX(-50%) translateY(-50%) rotate(45deg)\",\n\t\t\t\t\t\t\t\twidth: 10,\n\t\t\t\t\t\t\t\theight: 10,\n\t\t\t\t\t\t\t\tbgcolor: \"background.paper\",\n\t\t\t\t\t\t\t\tzIndex: 0,\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}}\n\t\t\t>\n\t\t\t\t setSelectedPage('ONE_DRIVE')}>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tOne Drive\n\t\t\t\t\n\t\t\t\t setSelectedPage('TEAM')}>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tTeam\n\t\t\t\t\n\t\t\t\t setSelectedPage('CUSTOM_UPLOAD')}>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tLadda upp från enheten\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nexport default FileUploadMenu;\n","import React, { Component } from \"react\";\nimport { translate, getActiveLanguage, Floating, Icon } from '@haldor/ui';\nimport { connect } from \"react-redux\";\nimport { Field, Form } from \"react-final-form\";\nimport { withRouter } from 'react-router-dom';\nimport Moment from 'moment';\nimport swal from 'sweetalert2';\n\nimport { addError } from 'actions';\nimport {\n\tcreateAssignment,\n\tgetTaskDetails,\n\tsetActiveAssignment,\n\tupdateAssignment,\n} from 'actions/assignments';\n\nimport {\n\tgetPlanDetails,\n\tgetPlansBySectionId,\n\tsetActivePlan,\n\tclearSectionPlansFromStore,\n} from 'actions/plans';\n\nimport { createAssessmentBlock, getBlocksByReference, updateAssessmentBlock, updateBlocksOnReference, deleteBlock } from 'actions/blocks';\nimport { clearSelectedSections, getSection, toggleSelectedSection, setActiveSection } from 'actions/sections';\nimport { getScheduleForUser, getScheduleItems, clearSearchedSchedules } from 'actions/schedule';\n\nimport { getRootUrl } from 'helpers/url';\n\nimport DatePickerFromTo from '../Partials/DatePickerFromTo';\nimport GroupSelector from '../Partials/GroupSelector';\nimport InvalidGroupNotice from '../Partials/InvalidGroupNotice';\nimport TeacherAdjustments from 'containers/AdditionalAdjustments/Display/TeacherAdjustments';\nimport AssignmentTaskSelect from 'components/List/AssignmentTaskSelect';\nimport Modal from 'containers/Modals/Modal';\nimport DatePicker from 'react-datepicker';\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\nimport sv from 'date-fns/locale/sv';\nimport no from 'date-fns/locale/nb';\nimport en from 'date-fns/locale/en-US';\nimport da from \"date-fns/locale/da\";\nimport uk from \"date-fns/locale/uk\";\n\nimport Select from \"components/Inputs/select\";\nimport AttachedDocuments from \"components/Presentation/Documents/AttachedDocuments\";\nimport BlockAssessments from \"components/BlockAssessments\";\n\nimport { Expandable, Spinner } from 'UI';\nimport { Editor, TimePicker } from 'UI/Inputs';\nimport { Button, Checkbox } from '@haldor/ui';\nimport CustomSelector from '../Partials/CustomSelector';\n\nimport HelpOutlineRoundedIcon from '@mui/icons-material/HelpOutlineRounded';\nimport { Stack } from \"@mui/material\";\nimport FileUploadMenu from \"components/BlockEditor/Blocks/FileBlock/FileUploadMenu\";\n\nimport './formAssignment.scss';\n\nclass AssignmentForm extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tregisterLocale('en-US', en);\n\t\tregisterLocale('sv-SE', sv);\n\t\tregisterLocale('nb-NO', no);\n\t\tregisterLocale('da-DK', da);\n\t\tregisterLocale('uk', uk);\n\t\tsetDefaultLocale('en-US');\n\n\t\tlet attachedFiles = [];\n\n\t\tlet dateStart = Moment().second(0);\n\t\tlet dueDate = null;\n\t\tif (props.date != null) {\n\t\t\tdateStart = props.date;\n\t\t}\n\n\t\tif (props.initialValues?.startDate) {\n\t\t\tdateStart = Moment.utc(props.initialValues?.startDate).local();\n\t\t}\n\n\t\tif (props.initialValues?.dueDate) {\n\t\t\tdueDate = props.initialValues?.dueDate;\n\t\t}\n\n\t\tlet published = props.initialValues?.published !== '0001-01-01T00:00:00' ?\n\t\t\tMoment.utc(props?.initialValues?.published).local()\n\t\t\t: Moment().local();\n\n\t\tthis.inititalPublished = published;\n\n\t\tthis.state = {\n\t\t\tdateStart: props.hasDate ? Moment(props.hasDate) : dateStart,\n\t\t\tdateEnd: dueDate,\n\t\t\tsectionId: '0',\n\t\t\ttasks: null,\n\t\t\tattachedFiles: attachedFiles,\n\t\t\tnewDocuments: [],\n\t\t\tloading: false,\n\t\t\tupdated: false,\n\t\t\tcreateEvent: false,\n\t\t\tpublished: published,\n\t\t\ttempPublishDate: published,\n\t\t\tallowFetch: true,\n\t\t\tlesson: [],\n\t\t\tstatus: props.initialValues?.status ?? 'ASSIGNMENT_OPEN',\n\t\t\tisFetchingLesson: false,\n\t\t\tenableAutoAssign: null,\n\t\t\tselectedLesson: [],\n\t\t\ttoggleLesson: {},\n\t\t\tplanid: props.planid != null ? props.planid : 0,\n\t\t\tfileTypes: [\n\t\t\t\t{ value: 1, text: this.props.translate('instructions') },\n\t\t\t\t{ value: 2, text: this.props.translate('template-document') },\n\t\t\t],\n\t\t};\n\n\t\tthis.formRef = null;\n\t}\n\n\tstatic defaultProps = {\n\t\tdisablePlanSelector: false,\n\t};\n\n\t/* Redux form functions */\n\trequired = (value) => {\n\t\tif (typeof value != 'undefined' && value != '' && value != null) {\n\t\t\tif (value.length > 99) {\n\t\t\t\t// Field failed validation, return error for this field (String)\n\t\t\t\treturn this.props.translate('field-max-100-chars');\n\t\t\t}\n\n\t\t\t// Field passes validation, return a undefined error for this field\n\t\t\t// Rule: Not undefined and not an empty string and not over 200 characters\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Field failed validation, return error for this field (String)\n\t\treturn this.props.translate('field-needs-input');\n\t};\n\n\tonAssignmentTasksChange = (values) => {\n\t\tlet section = this.props.section != null ? this.props.section : null;\n\t\tif (section != null) {\n\t\t\tif (values != null && section.students.every(student => values.some(value => value.assignedTo === student.id && !value.markedForDeletion))) {\n\t\t\t\tthis.setState({ enableAutoAssign: true });\n\t\t\t} else {\n\t\t\t\tthis.setState({ enableAutoAssign: false });\n\t\t\t}\n\t\t}\n\t}\n\n\trequireAssignmentTasks = (values) => {\n\t\tif (values == null || values.length == 0) {\n\t\t\treturn this.props.translate('field-needs-input');\n\t\t}\n\n\t\tif (!this.props.editView) {\n\t\t\tlet countTaskAssignees = 0;\n\t\t\tvalues.forEach(element => {\n\t\t\t\tif (element.students?.length > 0) {\n\t\t\t\t\tcountTaskAssignees += element.students?.length;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (countTaskAssignees > 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn this.props.translate('field-needs-input');\n\t\t}\n\n\t\t//handle validation for groups if enabled\n\t\tif (this.props.initialValues?.groupEnabled) {\n\t\t\tlet countTaskAssignees = 0;\n\t\t\tvalues.forEach(element => {\n\t\t\t\tif (element.students?.length > 0) {\n\t\t\t\t\tcountTaskAssignees += element.students?.length;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (countTaskAssignees > 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn this.props.translate('field-needs-input');\n\t\t}\n\n\t\tlet studentsArr = [];\n\t\t//check how many of the task has markedForDeletion\n\t\tlet getDeleted = values?.filter(x => x?.markedForDeletion);\n\n\t\t//handle groupassignments\n\t\tvalues.forEach(element => {\n\t\t\tstudentsArr = [...studentsArr, ...element.students]\n\t\t});\n\n\t\tif (getDeleted.length === studentsArr.length) {\n\t\t\treturn this.props.translate('field-needs-input');\n\t\t}\n\n\t\treturn undefined;\n\t};\n\n\tcomponentDidUpdate(prevProps, prevState) {\n\t\t/**\n\t\t * When componend mount it will be null, first form load then the enableAutoAssign will be set to true or false, if it false, we need to set autoAssignStudents to false\n\t\t * if it was true and now is false, we need to set autoAssignStudents to false\n\t\t */\n\t\tif ((prevState.enableAutoAssign == null || prevState.enableAutoAssign === true) && this.state.enableAutoAssign === false) {\n\t\t\tthis.formRef.mutators.setAutoAssignStudents(false);\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (window.location.pathname.indexOf('/plan/') == -1) {\n\t\t\tthis.props.setActivePlan();\n\t\t}\n\n\t\tif (this.props.cloneView && this.props.clearOnUnmount) {\n\t\t\tthis.props.setActiveAssignment();\n\t\t}\n\n\t\t/**\n\t\t * only clear selected sections if the plan selector is not enabled, if it is enabled probably user is creating assignment from plan\n\t\t */\n\t\tif (!this.props.disablePlanSelector) {\n\t\t\tthis.props.setActiveSection(null);\n\t\t}\n\n\t\tthis.props.clearSelectedSections();\n\t\tthis.props.clearSearchedSchedules();\n\t}\n\n\tUNSAFE_componentWillMount = () => {\n\t\tif (this.props.cloneView) {\n\t\t\tthis.setState({ loading: true });\n\t\t}\n\n\t\tthis.props.clearSectionPlansFromStore();\n\t};\n\n\tgetToggleLesson = (data) => {\n\t\tlet obj = {};\n\t\tdata.forEach(element => {\n\t\t\tobj = { ...obj, [element.id]: true }\n\t\t});\n\t\treturn obj;\n\t}\n\n\tcomponentDidMount = () => {\n\t\tif (this.props.groupid != null) {\n\t\t\tconst sectionId = this.props.groupid;\n\t\t\tvar find = this.props.sections.find((t) => t.id == sectionId);\n\n\t\t\tif (find == null) {\n\t\t\t\tthis.setState({ sectionId: 0 });\n\t\t\t} else {\n\t\t\t\tthis.setState({ sectionId, loading: true }, () => {\n\t\t\t\t\tlet promises = [];\n\n\t\t\t\t\tpromises.push(this.props.getPlansBySectionId(sectionId));\n\t\t\t\t\tpromises.push(this.props.getSection(sectionId));\n\n\t\t\t\t\tif (this.props.cloneView) {\n\t\t\t\t\t\tpromises.push(this.props.getTaskDetails(this.props.task.id));\n\t\t\t\t\t}\n\n\t\t\t\t\tPromise.all(promises).then(() => {\n\t\t\t\t\t\tthis.setState({ loading: false });\n\n\t\t\t\t\t\tthis.props.toggleSelectedSection(this.props.section);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.planid != null) {\n\t\t\tthis.props.getPlanDetails(this.props.planid);\n\t\t}\n\n\t\tif (this.props.cloneView) {\n\t\t\tthis.setState({ loading: true });\n\t\t\tthis.props.getTaskDetails(this.props.task.id).then(() => {\n\t\t\t\tthis.setState({ loading: false });\n\t\t\t});\n\t\t}\n\n\t\tif (this.props.initialValues?.relationships?.length > 0) {\n\t\t\tlet promises = [];\n\t\t\tthis.props.initialValues.relationships.forEach(element => {\n\t\t\t\tpromises.push(this.props.getScheduleItems(element.calendarEventId))\n\t\t\t});\n\n\t\t\tPromise.all(promises).then(() => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tselectedLesson: this.props.connectedLessons,\n\t\t\t\t\tlesson: this.props.connectedLessons,\n\t\t\t\t\ttoggleLesson: this.getToggleLesson(this.props.connectedLessons),\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n\n\tUNSAFE_componentWillReceiveProps(nextProps) {\n\t\tif (this.props.cloneView && nextProps.initialValues != null && this.state.updated == false) {\n\t\t\tlet attachedFiles = this.state.attachedFiles;\n\n\t\t\tif (nextProps.initialValues.assignmentDocuments != null) {\n\t\t\t\tvar files = nextProps.initialValues.assignmentDocuments.split(';');\n\n\t\t\t\tfiles.forEach((file) => {\n\t\t\t\t\tif (file != '') {\n\t\t\t\t\t\tvar fileObj = {\n\t\t\t\t\t\t\tkey: file.substring(file.lastIndexOf('/') + 1),\n\t\t\t\t\t\t\tvalue: file,\n\t\t\t\t\t\t\tfileType: 1,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tattachedFiles.push(fileObj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (nextProps.initialValues.documentTemplates != null) {\n\t\t\t\tvar files = nextProps.initialValues.documentTemplates.split(';');\n\t\t\t\tfiles.forEach((file) => {\n\t\t\t\t\tif (file != '') {\n\t\t\t\t\t\tvar fileObj = {\n\t\t\t\t\t\t\tkey: file.substring(file.lastIndexOf('/') + 1),\n\t\t\t\t\t\t\tvalue: file,\n\t\t\t\t\t\t\tfileType: 2,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tattachedFiles.push(fileObj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (attachedFiles.length > 0) {\n\t\t\t\tthis.setState({ attachedFiles, updated: true });\n\t\t\t}\n\t\t}\n\t}\n\n\tfixDescription = (html) => {\n\t\thtml = html.replace(/</g, '<');\n\t\thtml = html.replace(/>/g, '>');\n\t\thtml = html.replace(/\\<\\/b\\>/gi, ' ');\n\t\thtml = html.replace(/\\<\\/i\\>/gi, ' ');\n\t\thtml = html.replace(/\\<\\/a\\>/gi, ' ');\n\t\thtml = html.replace(/\\<\\/p\\>/gi, '

');\n\t\treturn html;\n\t};\n\n\thandleStatus = (value) => {\n\t\tthis.setState({ status: value });\n\t};\n\n\thandleDisplayInSchedule = (event) => {\n\t\tevent.preventDefault();\n\t\tthis.setState({ createEvent: true });\n\t};\n\n\tcloseModal = () => {\n\t\tthis.setState({ createEvent: false, tempPublishDate: this.state.published ?? this.inititalPublished });\n\t};\n\n\thandleLessons = (checked, lessonObj) => {\n\t\tthis.setState((prevState) => ({\n\t\t\tselectedLesson: checked\n\t\t\t\t? [...prevState.selectedLesson, lessonObj]\n\t\t\t\t: prevState.selectedLesson.filter((x) => x.id != lessonObj.id),\n\t\t\ttoggleLesson: checked\n\t\t\t\t? { ...prevState.toggleLesson, [lessonObj.id]: true }\n\t\t\t\t: { ...prevState.toggleLesson, [lessonObj.id]: false },\n\t\t}));\n\t};\n\n\tfilterLesson = (data) => {\n\t\tconst sortByStartTime = (a, b) => Moment(a.startTime).diff(b.startTime);\n\n\t\tif (this.state.selectedLesson.length > 0) {\n\t\t\tlet filter = data.filter((item) => {\n\t\t\t\treturn !this.state.selectedLesson.find((f) => {\n\t\t\t\t\treturn f.id === item.id;\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn filter.concat(this.state.selectedLesson).sort(sortByStartTime);\n\t\t}\n\n\t\treturn data.sort(sortByStartTime);\n\t};\n\n\tfetchLesson = () => {\n\t\tif (!this.state.allowFetch) {\n\t\t\treturn;\n\t\t}\n\t\t//dont fetch if both start and end date is same\n\t\tlet start = this.state.dateStart;\n\t\tlet end = this.state.dateEnd;\n\t\tconst diff = end.diff(start, 'minutes');\n\t\tif (diff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState({ isFetchingLesson: true });\n\n\t\tif (this.state.dateStart && this.state.dateEnd) {\n\t\t\tthis.props.getScheduleForUser(\n\t\t\t\tthis.props.user.id,\n\t\t\t\tMoment(this.state.dateStart).utc().set({ second: 0, millisecond: 0 }).toISOString(),\n\t\t\t\tMoment(this.state.dateEnd).utc().set({ second: 0, millisecond: 0 }).toISOString(),\n\t\t\t).then(() => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tlesson: this.filterLesson(this.props.usersSchedule[this.props.user.id]),\n\t\t\t\t\tisFetchingLesson: false,\n\t\t\t\t\tallowFetch: false,\n\t\t\t\t});\n\t\t\t}).catch((e) => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tisFetchingLesson: true,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tlet startTime = Moment().utc().set({ hour: 0, minute: 0, second: 0 }).toISOString();\n\t\t\tlet endTime = Moment().utc().set({ hour: 23, minute: 59, second: 59 }).toISOString();\n\n\t\t\tthis.props.getScheduleForUser(this.props.user.id, startTime, endTime)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tlesson: this.filterLesson(this.props.usersSchedule[this.props.user.id]),\n\t\t\t\t\t\tisFetchingLesson: true,\n\t\t\t\t\t\tallowFetch: false,\n\t\t\t\t\t});\n\t\t\t\t}).catch((e) => {\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tisFetchingLesson: true,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t};\n\n\thandleDisplayDate = (date) => {\n\t\tthis.setState({\n\t\t\ttempPublishDate: Moment(date),\n\t\t});\n\t};\n\n\tonSubmitDisplayDate = () => {\n\t\tthis.setState({\n\t\t\tpublished: this.state.tempPublishDate,\n\t\t\tcreateEvent: false,\n\t\t});\n\t};\n\n\tsubmit = (values) => {\n\t\tconst { initialValues } = this.props;\n\t\tconst { dateStart, dateEnd, attachedFiles, sectionId, published } = this.state;\n\n\t\tif (sectionId == 0 || sectionId == \"\") {\n\t\t\treturn new Promise((resolve) => resolve(1));\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tlet assessmentBlocks = [];\n\t\t\tlet deletedBlocks = [];\n\n\t\t\tconst isEditing = this.props.editView;\n\n\t\t\tif (values.groupEnabled == null || this.props.cloneView) {\n\t\t\t\tvalues.groupEnabled = true;\n\t\t\t}\n\t\t\tif (this.state.selectedLesson.length > 0) {\n\t\t\t\tlet relation = [];\n\t\t\t\tthis.state.selectedLesson.map((items) => {\n\t\t\t\t\tlet obj = {\n\t\t\t\t\t\tCalendarEventId: items.id,\n\t\t\t\t\t\tReferenceType: 'ASSIGNMENT',\n\t\t\t\t\t\tReferenceId: 0,\n\t\t\t\t\t};\n\t\t\t\t\trelation.push(obj);\n\t\t\t\t});\n\t\t\t\tvalues.relationships = relation;\n\t\t\t} else {\n\t\t\t\tvalues.relationships = [];\n\t\t\t}\n\n\t\t\tvalues.startDate = dateStart;\n\t\t\tvalues.dueDate = dateEnd;\n\t\t\tvalues.sectionId = parseInt(sectionId);\n\n\t\t\tif (values.status === 'ASSIGNMENT_DRAFT') {\n\t\t\t\tvalues.published = '0001-01-01T00:00:00';\n\t\t\t\tvalues.status = this.state.status;\n\t\t\t} else {\n\t\t\t\tvalues.published = published;\n\t\t\t}\n\t\t\tvalues.attachedFiles = this.state.attachedFiles;\n\n\t\t\tif (values.status == null) {\n\t\t\t\tvalues.status == 'ASSIGNMENT_OPEN';\n\t\t\t}\n\n\t\t\tif (values.assessmentBlocks != null) {\n\t\t\t\tassessmentBlocks = [...values.assessmentBlocks];\n\t\t\t}\n\n\t\t\tif (values.assessmentType == null) {\n\t\t\t\tvalues.assessmentType = 'TEACHER';\n\t\t\t}\n\n\t\t\tif (this.state.newDocuments.length > 0) {\n\t\t\t\tvalues.attachedFiles = [...values.attachedFiles, ...this.state.newDocuments];\n\t\t\t}\n\n\t\t\tvalues.plans = null;\n\n\t\t\tif (typeof values.status === 'undefined') {\n\t\t\t\tvalues.status = this.state.status;\n\t\t\t}\n\n\t\t\tif (isEditing) {\n\t\t\t\tvalues.status = this.state.status;\n\t\t\t}\n\n\t\t\tif (initialValues != null && initialValues.assessmentBlocks != null) {\n\t\t\t\tdeletedBlocks = [...initialValues.assessmentBlocks].filter((block) =>\n\t\t\t\t\t!assessmentBlocks.find(_bl => _bl.id == block.id) && !values.assessmentBlocks.find(_bl => _bl.id == block.id)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tdelete values.assessmentBlocks;\n\n\t\t\tlet that = this;\n\t\t\tif (isEditing && this.props.cloneView == false) {\n\t\t\t\tvalues.workspace = initialValues.workspace;\n\t\t\t\tthis.props.updateAssignment(values).then(() => {\n\t\t\t\t\tlet promises = [];\n\n\t\t\t\t\tif (deletedBlocks.length > 0) {\n\t\t\t\t\t\tdeletedBlocks.forEach(block => {\n\t\t\t\t\t\t\tlet deletePromise = new Promise(resolve => {\n\t\t\t\t\t\t\t\tthis.props.deleteBlock(block.id).then(() => {\n\t\t\t\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tpromises.push(deletePromise);\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tassessmentBlocks.forEach((block) => {\n\t\t\t\t\t\tpromises.push(new Promise(async (resolve) => {\n\t\t\t\t\t\t\tconst initialBlock = this.props.initialValues.assessmentBlocks.find((b) => b.id == block.id);\n\n\t\t\t\t\t\t\tif (initialBlock != null) {\n\t\t\t\t\t\t\t\tawait this.props.updateAssessmentBlock(block, initialBlock);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tawait this.props.createAssessmentBlock(block, initialValues.id, 'ASSIGNMENT');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t\t}));\n\t\t\t\t\t});\n\n\t\t\t\t\tPromise.all(promises).then(() => {\n\t\t\t\t\t\tthat.props.addError(that.props.translate(\"changes-saved\"), \"info\");\n\t\t\t\t\t\tthat.props.onAbort(true, true, true);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (this.props.cloneView) {\n\t\t\t\t\tvalues.documentTemplates = null;\n\t\t\t\t\tvalues.assignmentDocuments = null;\n\t\t\t\t}\n\n\t\t\t\tthis.props.createAssignment(values).then(async () => {\n\t\t\t\t\tif (this.props.onSubmit) {\n\t\t\t\t\t\tlet starttime = Moment(values.dueDate).utc().format();\n\t\t\t\t\t\tthis.props.onSubmit(starttime);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.state.planid != 0) {\n\t\t\t\t\t\t// Add this assignment as a block on the selected plan\n\t\t\t\t\t\tawait new Promise(async resolve => {\n\t\t\t\t\t\t\tawait this.props.getBlocksByReference(this.state.planid, 'PLAN');\n\n\t\t\t\t\t\t\tlet blocks = [];\n\n\t\t\t\t\t\t\tif (this.props.planBlocks != null && this.props.planBlocks.length > 0) {\n\t\t\t\t\t\t\t\tblocks = [...this.props.planBlocks];\n\n\t\t\t\t\t\t\t\tblocks.forEach(block => {\n\t\t\t\t\t\t\t\t\tif (block.type == 'Haldor.Blocks.Assignment') {\n\t\t\t\t\t\t\t\t\t\tif (block.resources != null) {\n\t\t\t\t\t\t\t\t\t\t\tlet resources = [];\n\t\t\t\t\t\t\t\t\t\t\tblock.resources.forEach(resource => {\n\t\t\t\t\t\t\t\t\t\t\t\tresources.push({\n\t\t\t\t\t\t\t\t\t\t\t\t\tid: resource.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'@odata.type': resource['@odata.type'],\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\tblock.resources = resources;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tblock['_Resources'] = null;\n\n\t\t\t\t\t\t\t\t\treturn block;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tblocks.push({\n\t\t\t\t\t\t\t\ttype: 'Haldor.Blocks.Assignment',\n\t\t\t\t\t\t\t\ttitle: '',\n\t\t\t\t\t\t\t\tvalue: '',\n\t\t\t\t\t\t\t\tsortorder: blocks.length,\n\t\t\t\t\t\t\t\tid: 0,\n\t\t\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'@odata.type': 'haldor.assignment.block.assignment',\n\t\t\t\t\t\t\t\t\t\tid: this.props.newAssignment.id,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tawait this.props.updateBlocksOnReference(blocks, this.state.planid, 'PLAN');\n\t\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tlet promises = [];\n\t\t\t\t\tassessmentBlocks.forEach((block) => {\n\t\t\t\t\t\tif (this.props.cloneView) {\n\t\t\t\t\t\t\tblock.resources.map((resource) => {\n\t\t\t\t\t\t\t\tresource.originId = resource.id;\n\t\t\t\t\t\t\t\tresource.id = 0;\n\t\t\t\t\t\t\t\treturn resource;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpromises.push(new Promise((resolve) => {\n\t\t\t\t\t\t\tthis.props.createAssessmentBlock(block, this.props.newAssignment.id, 'ASSIGNMENT')\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}));\n\t\t\t\t\t});\n\n\t\t\t\t\tPromise.all(promises).then(() => {\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\tif (this.props.dontRedirect) {\n\t\t\t\t\t\t\tthat.props.onAbort(true);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.props.onCreated != null) {\n\t\t\t\t\t\t\tthis.props.onCreated(this.props.newAssignment);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this.props.newAssignment != null && !this.props.dontRedirect) {\n\t\t\t\t\t\t\t\tvar id = this.props.newAssignment.id;\n\t\t\t\t\t\t\t\tif (this.props.cloneView) {\n\t\t\t\t\t\t\t\t\twindow.location = `${getRootUrl()}assignment/${id}`;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.props.history.push(`${getRootUrl()}assignment/${id}`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tonGroupChange = (groupId, group) => {\n\t\tconst { translate } = this.props;\n\n\t\tif (group != null) {\n\t\t\tthis.props.toggleSelectedSection(group, true);\n\t\t}\n\n\t\tif (groupId != 0) {\n\t\t\tthis.setState({ sectionId: groupId }, () => {\n\t\t\t\tthis.props.getSection(groupId).then(() => {\n\t\t\t\t\tif (this.props.section.students != null && this.props.section.students.length == 0) {\n\t\t\t\t\t\tswal.fire({\n\t\t\t\t\t\t\ttitle: this.props.translate('The group contains no students'),\n\t\t\t\t\t\t\tshowCloseButton: true,\n\t\t\t\t\t\t\tconfirmButtonText: this.props.translate('Ok'),\n\t\t\t\t\t\t\thtml: `\n\t\t\t\t\t\t\t${translate('The group you selected does not contain any students. You can`t create assignments for a group without students. The group may lack students due to the fact that:')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
  • ${translate('No students have been added to the group. Make sure your team/Microsoft 365 group includes students.')}
  • \n\t\t\t\t\t\t\t\t
  • ${translate('Students have not been activated on the team. To do this, use Microsoft Teams.')}
  • \n\t\t\t\t\t\t\t\t
  • ${translate('The group could not be loaded correctly. Close the form and reload the page, then try again.')}
  • \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tthis.setState({ sectionId: 0 });\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.props.getPlansBySectionId(groupId);\n\n\t\t\t\t\tif (this?.props?.displayTitle) {\n\t\t\t\t\t\tthis.props.displayTitle(group.title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tthis.setState({ sectionId: 0 });\n\t\t}\n\t};\n\n\tonPlanChange = (event, form) => {\n\t\tif (event.target.value != '0') {\n\t\t\tthis.setState({ planid: event.target.value, loadingPlan: true });\n\t\t\tthis.props.getPlanDetails(event.target.value).then(async () => {\n\t\t\t\tawait this.props.getBlocksByReference(event.target.value, 'PLAN');\n\n\t\t\t\tif (this.props.planBlocks != null) {\n\t\t\t\t\tconst assessmentBlocks = this.props.planBlocks.filter((block) =>\n\t\t\t\t\t\tblock.type == 'Haldor.Blocks.AssessmentBlock'\n\t\t\t\t\t).map((block) => ({\n\t\t\t\t\t\t...block,\n\t\t\t\t\t\tid: 0,\n\t\t\t\t\t\treferenceId: 0,\n\t\t\t\t\t\treferenceType: '',\n\t\t\t\t\t}));\n\n\t\t\t\t\tlet values = form.getFieldState('assessmentBlocks')?.value;\n\t\t\t\t\tif (values == null) {\n\t\t\t\t\t\tvalues = [...assessmentBlocks];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = [...values, ...assessmentBlocks];\n\t\t\t\t\t}\n\n\t\t\t\t\tform.change('assessmentBlocks', values);\n\t\t\t\t}\n\n\t\t\t\tthis.setState({ loadingPlan: false });\n\t\t\t});\n\t\t} else {\n\t\t\tthis.props.setActivePlan(null);\n\t\t\tthis.setState({ loadingPlan: true, planid: 0 }, () => {\n\t\t\t\tthis.setState({ loadingPlan: false });\n\t\t\t});\n\t\t}\n\t};\n\n\tonDateChange = (dates) => {\n\t\tthis.setState({ dateStart: Moment(dates.start), dateEnd: Moment(dates.end), allowFetch: true });\n\t};\n\n\tselectDocument = (files) => {\n\t\tlet prepareNewFiles = this.state.newDocuments != null && this.state.newDocuments.length > 0 ? this.state.newDocuments : [];\n\n\t\tfiles.forEach((file) => {\n\t\t\tprepareNewFiles.push({\n\t\t\t\tid: file.driveItemId,\n\t\t\t\tparentReference: file.parentReference,\n\t\t\t\tkey: file.name,\n\t\t\t\tvalue: file.url,\n\t\t\t\tmimeType: file.Type,\n\t\t\t});\n\t\t});\n\n\t\tthis.setState({ newDocuments: prepareNewFiles });\n\t};\n\n\tdeleteFile = (file) => {\n\t\tlet documents = this.state.newDocuments;\n\t\tdocuments = documents.filter((doc) => doc.id != file.id);\n\t\tthis.setState({ newDocuments: documents });\n\t}\n\n\tremoveInstruction = (instruction, remove) => {\n\t\tlet attachedFiles = this.state.attachedFiles;\n\t\tvar removeFile = attachedFiles.find((file) => file.value == instruction);\n\n\t\tif (removeFile != null) {\n\t\t\tif (this.props.cloneView) {\n\t\t\t\tattachedFiles = attachedFiles.filter((t) => t.value != instruction);\n\t\t\t} else {\n\t\t\t\tif (removeFile.markedForDeletion == true && remove == false) {\n\t\t\t\t\tvar removeFileIndex = attachedFiles.findIndex((file) => file.value == instruction);\n\t\t\t\t\tattachedFiles.splice(removeFileIndex, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (remove) {\n\t\t\t\tlet assignmentDocuments = this.props.initialValues ?\n\t\t\t\t\tthis.props.initialValues.assignmentDocuments != null ?\n\t\t\t\t\t\tthis.props.initialValues.assignmentDocuments.split(\";\")\n\t\t\t\t\t\t: []\n\t\t\t\t\t: [];\n\n\t\t\t\tassignmentDocuments.forEach(document => {\n\t\t\t\t\tif (document == instruction && document != \"\" && document != null) {\n\t\t\t\t\t\tlet removeFile = {\n\t\t\t\t\t\t\tmarkedForDeletion: remove,\n\t\t\t\t\t\t\tfileType: 1,\n\t\t\t\t\t\t\tvalue: document,\n\t\t\t\t\t\t\tkey: '',\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tattachedFiles.push(removeFile);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet file = {\n\t\t\t\t\tfileType: 1,\n\t\t\t\t\tvalue: instruction,\n\t\t\t\t\tkey: instruction.substring(instruction.lastIndexOf('/') + 1),\n\t\t\t\t};\n\n\t\t\t\tattachedFiles.push(file);\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ attachedFiles });\n\t};\n\n\tremoveTemplate = (template, remove) => {\n\t\tlet attachedFiles = this.state.attachedFiles;\n\t\tconst removeFile = attachedFiles.find((file) => file.value == template);\n\t\tif (removeFile != null) {\n\t\t\tif (this.props.cloneView) {\n\t\t\t\tattachedFiles = attachedFiles.filter((t) => t.value != template);\n\t\t\t} else {\n\t\t\t\tif (removeFile.markedForDeletion == true && remove == false) {\n\t\t\t\t\tvar removeFileIndex = attachedFiles.findIndex((file) => file.value == template);\n\t\t\t\t\tattachedFiles.splice(removeFileIndex, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (remove) {\n\t\t\t\tlet documentTemplates = this.props.initialValues\n\t\t\t\t\t? this.props.initialValues.documentTemplates != null\n\t\t\t\t\t\t? this.props.initialValues.documentTemplates.split(';')\n\t\t\t\t\t\t: []\n\t\t\t\t\t: [];\n\n\t\t\t\tdocumentTemplates.forEach((document) => {\n\t\t\t\t\tif (document == template && document != '' && document != null) {\n\t\t\t\t\t\tlet removeFile = {\n\t\t\t\t\t\t\tmarkedForDeletion: remove,\n\t\t\t\t\t\t\tfileType: 2,\n\t\t\t\t\t\t\tvalue: document,\n\t\t\t\t\t\t\tkey: '',\n\t\t\t\t\t\t};\n\t\t\t\t\t\tattachedFiles.push(removeFile);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet file = {\n\t\t\t\t\tfileType: 2,\n\t\t\t\t\tvalue: template,\n\t\t\t\t\tkey: template.substring(template.lastIndexOf('/') + 1),\n\t\t\t\t};\n\t\t\t\tattachedFiles.push(file);\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ attachedFiles });\n\t};\n\n\trenderInput = ({\n\t\tinput,\n\t\tlabel,\n\t\ttype,\n\t\tplaceholder,\n\t\tmeta: { touched, error, warning }\n\t}) => {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t{touched &&\n\t\t\t\t\t((error && {error}) ||\n\t\t\t\t\t\t(warning && {warning}))}\n\t\t\t
\n\t\t);\n\t};\n\n\tselectFileType = (event, file) => {\n\t\tfile.fileType = event.target.value;\n\t\tthis.setState((prevState) => ({\n\t\t\tnewDocuments: prevState.newDocuments.map((doc) =>\n\t\t\t\tdoc.id === file.id ? file : doc\n\t\t\t),\n\t\t}));\n\n\t}\n\n\tgetDateFormat = () => {\n\t\tlet format = Moment.localeData(getActiveLanguage()).longDateFormat(\"L\");\n\t\tlet newFormat = format.replace(\"YYYY\", \"yyyy\");\n\t\tlet days = newFormat.replace(\"DD\", \"dd\");\n\t\treturn days;\n\t};\n\n\tnormalizeLocale = (locale) => {\n\t\tconst [language, region] = locale.split('-');\n\n\t\tif (language.toUpperCase() == \"UK\") {\n\t\t\treturn `uk`;\n\t\t}\n\t\treturn `${language}-${region.toUpperCase()}`;\n\t};\n\n\t/* Render form */\n\trender() {\n\t\tconst { sectionId, attachedFiles } = this.state;\n\t\tconst isEditing = this.props.editView;\n\t\tlet groupId = null;\n\t\tif (this.state.loading) {\n\t\t\treturn ;\n\t\t}\n\t\tlet invalidDocuments = [...this.state.newDocuments].filter((file) => {\n\t\t\tif (file.fileType != null) {\n\t\t\t\treturn file.fileType == 0;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\tlet documentsPassing = true;\n\t\tif (invalidDocuments.length > 0) {\n\t\t\tdocumentsPassing = false;\n\t\t}\n\n\t\tif (this.state.sectionId != '0') {\n\t\t\tgroupId = this.state.sectionId;\n\t\t}\n\n\t\tlet showMessageToShowFileType = this.state.newDocuments.length > 0 && this.state.newDocuments.some((file) => file.fileType == null || file.fileType == 0);\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\n\t\t\t\t true}\n\t\t\t\t\tmutators={{\n\t\t\t\t\t\tsetStatusDraft: (args, state, utils) => {\n\t\t\t\t\t\t\tutils.changeValue(state, 'status', () => 'ASSIGNMENT_DRAFT');\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsetAutoAssignStudents: (args, state, utils) => {\n\t\t\t\t\t\t\tutils.changeValue(state, 'autoAssignStudents', () => args[0]);\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({ handleSubmit, submitting, valid, form, initialValues }) => {\n\t\t\t\t\t\tthis.formRef = form;\n\n\t\t\t\t\t\tlet statusValue = initialValues?.status;\n\t\t\t\t\t\tif (form.getFieldState('status') != null) {\n\t\t\t\t\t\t\tstatusValue = form.getFieldState('status').value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet assessmentBlocks = form.getFieldState('assessmentBlocks')?.value;\n\t\t\t\t\t\tlet subjects = [];\n\t\t\t\t\t\tif (assessmentBlocks?.length > 0) {\n\t\t\t\t\t\t\tassessmentBlocks?.forEach((content) => {\n\t\t\t\t\t\t\t\tcontent?.resources?.forEach(resources => {\n\t\t\t\t\t\t\t\t\tif (resources?.value != null) {\n\t\t\t\t\t\t\t\t\t\tif (subjects.indexOf(resources.value?.subjectId) == -1) {\n\t\t\t\t\t\t\t\t\t\t\tsubjects.push(parseInt(resources.value?.subjectId));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Enable the auto assign option if all groups have all students selected\n\t\t\t\t\t\t */\n\n\t\t\t\t\t\tlet enableAutoAssign = this.state.enableAutoAssign;\n\n\t\t\t\t\t\tif (enableAutoAssign == null) {\n\t\t\t\t\t\t\tlet tasks = this.props.initialValues?.tasks ?? [];\n\t\t\t\t\t\t\tlet section = this.props.section != null ? this.props.section : null;\n\t\t\t\t\t\t\tif (section != null) {\n\t\t\t\t\t\t\t\tif (tasks != null && section.students.every(student => tasks.some(value => value.assignedTo === student.id && !value.markedForDeletion))) {\n\t\t\t\t\t\t\t\t\tenableAutoAssign = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{submitting ? (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t{!isEditing ? (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t this.handleStatus(e.target.value)}\n\t\t\t\t\t\t\t\t\t\tvalue={this.state.status}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{this.props.assignmentStatus\n\t\t\t\t\t\t\t\t\t\t\t.filter((x) => x.id !== 'ASSIGNMENT_DRAFT')\n\t\t\t\t\t\t\t\t\t\t\t.map((item) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.props.assignmentTypes.map((item) => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{!isEditing && !this.props.disablePlanSelector ? (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.props.sectionPlans !== null ? (\n\t\t\t\t\t\t\t\t\t\t\t this.onPlanChange(e, form)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t this.onPlanChange(e, form)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{this.props.services.advancedSchedule ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Moment(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).format('dddd Do MMMM')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: this.props.time.format(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'dddd Do MMMM'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: this.props.time.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Moment.utc(this.props.lesson.startTime)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.add(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.lesson.length,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'minutes'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: Moment.utc(this.props?.time)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.add(this.props?.end, 'minutes')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props?.lesson.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : this.state.selectedLesson.length > 1 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.selectedLesson.length}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('lessons selected')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : this.state.selectedLesson.length === 1 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).local().format('dddd Do MMMM')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).local().format('LT')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.add(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].length,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'minutes'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.selectedLesson[0].title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'select lesson'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tlesson={this.props.lesson}\n\t\t\t\t\t\t\t\t\t\t\t\tfetchLesson={this.fetchLesson}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{!this.state.isFetchingLesson ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.lesson.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('There are no lessons within the assignment time period')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.lesson.map((lesson) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.handleLessons(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlesson\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment(lesson.startTime).format('dddd Do MMMM')}{' '}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(lesson.startTime).local().set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).format('LT')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(lesson.startTime).local().set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).add(lesson.length, 'minutes').format('LT')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lesson.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{this.props.services.advancedSchedule ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t this.handleDisplayInSchedule(e)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{this.state.published.format('dddd Do MMMM')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t{this.state.published.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t{(this.props.editView || this.props.cloneView) &&\n\t\t\t\t\t\t\t\t\tinitialValues.assignmentDocuments !== null &&\n\t\t\t\t\t\t\t\t\tinitialValues.assignmentDocuments.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t{this.props.cloneView &&\n\t\t\t\t\t\t\t\t\tinitialValues.documentTemplates !== null &&\n\t\t\t\t\t\t\t\t\tinitialValues.documentTemplates.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{!this.state.loadingPlan ?\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\t\t\t\t\t...this.props.assessments[index]?.assessmentFeedbacks?.map((feedback) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfeedback.assessmentBlockPartId\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}, [])}\n\t\t\t\t\t\t\t\t\t\t\tdisableRows={this.props.cloneView ? null : this.props.assessments.reduce((prev, current, index) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\t\t\t\t\t...this.props.assessments[index]?.assessmentDetails?.map((detail) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail.assessmentBlockPartRowId\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}, [])}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t\t\t\t{this.state.newDocuments.length > 0 && showMessageToShowFileType ? (
\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('need-to-select-file-types')}!\n\t\t\t\t\t\t\t\t\t
) : null}\n\n\t\t\t\t\t\t\t\t\t{this.state.newDocuments.map((file, i) => {\n\t\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lockedStatus && file.fileType === '2' ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t{file.key}\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t this.handleStatus(e.target.value)}>\n\t\t\t\t\t\t\t\t\t\t{this.props.assignmentStatus\n\t\t\t\t\t\t\t\t\t\t\t.filter((x) => x.id !== 'ASSIGNMENT_DRAFT')\n\t\t\t\t\t\t\t\t\t\t\t.map((item) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{this.props.assignmentTypes.map((item) => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{this.state.sections.length == 1 && !this.props.disablePlanSelector ? (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t this.onPlanChange(e, form)}\n\t\t\t\t\t\t\t\t\t\t\tvalue={this.state.planId}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t{this.props.sectionPlans.map((sectionPlan) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{this.props.services.advancedSchedule ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Moment(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).format('dddd Do MMMM')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: this.props.time.format(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'dddd Do MMMM'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: this.props.time.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lesson?.startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Moment.utc(this.props.lesson.startTime)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.add(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.lesson.length,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'minutes'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: Moment.utc(this.props?.time)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.add(this.props?.end, 'minutes')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props?.lesson.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : this.state.selectedLesson?.length > 1 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.selectedLesson?.length}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('lessons-selected')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : this.state.selectedLesson.length === 1 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).local().format('dddd Do MMMM')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).local().format('LT')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].startTime\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).local()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.add(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.selectedLesson[0].length,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'minutes'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.selectedLesson[0].title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'select lesson'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tlesson={this.props.lesson}\n\t\t\t\t\t\t\t\t\t\t\t\tfetchLesson={this.fetchLesson}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{!this.state.isFetchingLesson ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.lesson.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.props.translate('There are no lessons within the assignment time period')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state.lesson.map((lesson) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.handleLessons(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlesson\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment(lesson.startTime).format('dddd Do MMMM')}{' '}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(lesson.startTime).local().set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).format('LT')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Moment.utc(lesson.startTime).local().set({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmillisecond: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}).add(lesson.length, 'minutes').format('LT')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lesson.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{this.props.services.advancedSchedule ?\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t this.handleDisplayInSchedule(e)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{this.state.published.format('dddd Do MMMM')}{' '}\n\t\t\t\t\t\t\t\t\t\t\t{this.state.published.format('LT')}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t: null}\n\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{!this.state.loadingPlan ?\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{(this.props.editView || this.props.cloneView) &&\n\t\t\t\t\t\t\t\t\tthis.props.initialValues.assignmentDocuments != null &&\n\t\t\t\t\t\t\t\t\tthis.props.initialValues.assignmentDocuments.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t{this.props.cloneView &&\n\t\t\t\t\t\t\t\t\tinitialValues.documentTemplates != null &&\n\t\t\t\t\t\t\t\t\tinitialValues.documentTemplates.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t{this.state.newDocuments.length > 0 && showMessageToShowFileType ? (
\n\t\t\t\t\t\t\t\t\t\t{this.props.translate('need-to-select-file-types')}!\n\t\t\t\t\t\t\t\t\t
) : null}\n\n\t\t\t\t\t\t\t\t\t{this.state.newDocuments.map((file, i) => {\n\t\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{this.props.lockedStatus && file.fileType === '2' ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t{file.key}\n\t\t\t\t\t\t\t\t\t\t\t
\n\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{getParameterByName('debug') != null ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\t\t\t\n\t\t);\n\t}\n\n\treturn ;\n};\n\nexport default LTI;\n","import React, { useEffect, useRef } from 'react';\nimport api from 'lib/api';\nimport Modal from 'containers/Modals/Modal';\nimport { LTIComponent } from 'containers/LTI';\n\nimport { useTranslate } from 'lib/translate';\n\nconst NDLAFrame = (props) => {\n\tconst translate = useTranslate();\n\tconst iframeElement = useRef();\n\n\tconst handleResize = () => {\n\t\tif (iframeElement.current == null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tiframeElement.current.style.height = window.outerHeight - 295 + 'px';\n\t};\n\n\tconst addResource = (values) => {\n\t\tconst id = values.url.replace(/^\\D+/g, '');\n\n\t\tapi.get(`https://api.ndla.no/article-api/v2/articles/${id}`)\n\t\t\t.then(({ data }) => {\n\t\t\t\tprops.toggleModal();\n\t\t\t\tprops.onSubmit({\n\t\t\t\t\turl: values.url,\n\t\t\t\t\ttitle: data.title.title,\n\t\t\t\t\tintroduction: data.introduction.introduction,\n\t\t\t\t\tid: data.id,\n\t\t\t\t\tarticleType: data.articleType,\n\t\t\t\t\trevision: data.revision,\n\t\t\t\t\trevisionDate: data.revisionDate,\n\t\t\t\t\tupdated: data.updated,\n\t\t\t\t\tmetaImageUrl: data.metaImage.url,\n\t\t\t\t\tmetaImageAlt: data.metaImage.alt,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((reason) => {\n\t\t\t\tprops.toggleModal();\n\t\t\t\tconsole.error('could not fetch article data because', reason);\n\t\t\t});\n\t};\n\n\tuseEffect(() => {\n\t\thandleResize();\n\n\t\twindow.addEventListener('resize', handleResize);\n\n\t\tvar interval = setInterval(() => {\n\t\t\tif (iframeElement.current != null) {\n\t\t\t\thandleResize();\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 150);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', handleResize);\n\t\t\tclearInterval(interval);\n\t\t}\n\t}, []);\n\n\thandleResize();\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n\n};\n\nNDLAFrame.defaultProps = {\n\tonSubmit: () => true,\n\ttoggleModal: () => true,\n\tisOpen: true,\n};\n\nexport default NDLAFrame;","import React from 'react';\nimport DOMPurify from 'dompurify';\nimport { Button, Checkbox, Icon, Expandable, Haldor__Block, addBlockTranslations } from '@haldor/ui';\nimport NDLAFrame from './NDLAFrame';\n\nimport './_NdlaBlock.scss';\n\nclass NDLABlock extends Haldor__Block {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.name = 'Haldor.Blocks.NDLA';\n\t\tthis.order = 48;\n\t\tthis.icon = () => (\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\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}}\n\t\t\t/>\n\t\t);\n\n\t\taddBlockTranslations('sv-se', [\n\t\t\t{\n\t\t\t\toutput: 'NDLA',\n\t\t\t\tid: 'Haldor.Blocks.NDLA',\n\t\t\t}\n\t\t]);\n\n\t\taddBlockTranslations('en-us', [\n\t\t\t{\n\t\t\t\toutput: 'NDLA',\n\t\t\t\tid: 'Haldor.Blocks.NDLA',\n\t\t\t}\n\t\t]);\n\n\t\taddBlockTranslations('nb-no', [\n\t\t\t{\n\t\t\t\toutput: 'NDLA',\n\t\t\t\tid: 'Haldor.Blocks.NDLA',\n\t\t\t}\n\t\t]);\n\n\t\taddBlockTranslations('da-dk', [\n\t\t\t{\n\t\t\t\toutput: 'NDLA',\n\t\t\t\tid: 'Haldor.Blocks.NDLA',\n\t\t\t}\n\t\t]);\n\n\t\taddBlockTranslations('uk', [\n\t\t\t{\n\t\t\t\toutput: 'NDLA',\n\t\t\t\tid: 'Haldor.Blocks.NDLA',\n\t\t\t}\n\t\t]);\n\n\t\tthis.registerResourceType('Haldor.Blocks.NDLA.article', {\n\t\t\tarticleType: 'string',\n\t\t\tid: 'number',\n\t\t\tintroduction: 'string',\n\t\t\tmetaImageAlt: 'string',\n\t\t\tmetaImageUrl: 'string',\n\t\t\trevision: 'number',\n\t\t\trevisionDate: 'string',\n\t\t\ttitle: 'string',\n\t\t\tupdated: 'string',\n\t\t\turl: 'string',\n\t\t});\n\n\t\tthis.registerResourceType('Haldor.Blocks.NDLA.displayType', {\n\t\t\tvalue: 'string',\n\t\t});\n\n\t\tthis.registerResourceType('Haldor.Blocks.NDLA.ShowModal', {\n\t\t\tvisible: 'boolean',\n\t\t});\n\t}\n\n\ttoggleModal = (event) => {\n\t\tif (event != null && event.preventDefault != null) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tconst showModal = this.getResources().find((resource) =>\n\t\t\tresource['@odata.type'] == 'Haldor.Blocks.NDLA.ShowModal'\n\t\t);\n\n\t\tif (showModal != null) {\n\t\t\tthis.removeResource(showModal);\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.addResource('Haldor.Blocks.NDLA.ShowModal', {\n\t\t\tvisible: true,\n\t\t});\n\t}\n\n\ttoggleDisplayType = () => {\n\t\tconst containsIframeResource = this.getResources().find((resource) =>\n\t\t\tresource['@odata.type'] == 'Haldor.Blocks.NDLA.displayType' && resource.value == 'iframe'\n\t\t);\n\n\t\tif (containsIframeResource != null) {\n\t\t\tthis.removeResource(containsIframeResource);\n\t\t} else {\n\t\t\tthis.addResource('Haldor.Blocks.NDLA.displayType', {\n\t\t\t\tvalue: 'iframe',\n\t\t\t});\n\t\t}\n\t};\n\n\tonResourceSubmit = (values) => {\n\t\tthis.addResource('Haldor.Blocks.NDLA.article', values);\n\t};\n\n\trenderResourceCard = (resource, link = false) => {\n\t\tif (resource['@odata.type'] != 'Haldor.Blocks.NDLA.article') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst Elem = (props) => {\n\t\t\treturn link ? :
;\n\t\t};\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t this.removeResource(resource)}>\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\n\t\t\t
\n\t\t);\n\t};\n\n\tedit = (props) => {\n\t\tconst translate = this.api.getEditor().getProp('translate');\n\t\tconst showModal = props.resources.find((resource) =>\n\t\t\tresource['@odata.type'] == 'Haldor.Blocks.NDLA.ShowModal'\n\t\t);\n\n\t\tconst containsIframeResource = props.resources.find((resource) =>\n\t\t\tresource['@odata.type'] == 'Haldor.Blocks.NDLA.displayType' && resource.value == 'iframe'\n\t\t);\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{showModal != null ?\n\t\t\t\t\t\n\t\t\t\t\t: null}\n\n\t\t\t\t
\n\t\t\t\t\t{props.resources.map((resource) => {\n\t\t\t\t\t\treturn this.renderResourceCard(resource);\n\t\t\t\t\t})}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t};\n\n\tconsume = (props) => {\n\t\tconst containsIframeResource = props.resources.find((resource) =>\n\t\t\tresource['@odata.type'] == 'Haldor.Blocks.NDLA.displayType' && resource.value == 'iframe'\n\t\t);\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{props.resources.map((resource) => {\n\t\t\t\t\t\tif (resource['@odata.type'] != 'Haldor.Blocks.NDLA.article') {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (containsIframeResource != null) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t