{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/index.ts","webpack:///./src/styles/base/_colours.scss?d829","webpack:///./src/api/route.ts","webpack:///./src/store/modules/route.ts","webpack:///./src/components/ErrorPage.vue?14b6","webpack:///./src/common/utils/date.ts","webpack:///./src/store/modules/tracking.ts","webpack:///./src/assets/images/logo-primary.png","webpack:///./src/assets/images/logo-secondary.png","webpack:///./src/styles/index.scss?1737","webpack:///./src/components/ErrorPage.vue?b4ca","webpack:///./src/components/ErrorPage.vue","webpack:///./src/components/ErrorPage.vue?f3f9","webpack:///./src/components/ErrorPage.vue?737f","webpack:///./src/App.vue?8d6d","webpack:///./src/components/NavBar.vue?ddd2","webpack:///./src/types/clock.ts","webpack:///./src/components/NavBar.vue","webpack:///./src/components/NavBar.vue?6c7f","webpack:///./src/components/NavBar.vue?cd0a","webpack:///src/App.vue","webpack:///./src/App.vue?a7d1","webpack:///./src/App.vue","webpack:///./src/auth/types/user.ts","webpack:///./src/api/webpubsub.ts","webpack:///./src/store/modules/auth.ts","webpack:///./src/common/utils/jwt.ts","webpack:///./src/auth/VueAuth.ts","webpack:///./src/auth/auth.ts","webpack:///./src/auth/permission.ts","webpack:///./src/services/PermissionService.ts","webpack:///./src/router/guards.ts","webpack:///./src/router/index.ts","webpack:///./src/plugins/vuetify.ts","webpack:///./src/plugins/auth0.ts","webpack:///./src/common/tenants.ts","webpack:///./src/common/AppTheme.ts","webpack:///./src/main.ts","webpack:///./src/components/NavBar.vue?36b4"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","Vue","use","Vuex","Store","state","mutations","actions","GetRoutes","routeQueryParameters","axios","process","params","GetRoute","deliveryRunReference","initialState","routes","selectedRouteTrackingData","RouteModule","this","route","index","findIndex","x","searchFilters","startDateTimeUtc","date","startOfDay","Date","dateFrom","endDateTimeUtc","endOfDay","dateTo","searchTerm","searchText","Remote","SET_ROUTES","reference","find","item","ADD_ROUTE","SET_SELECTED_ROUTE_TRACKING_DATA","trackableAssetStateChangedMessage","trackable","trackingDeviceIdentifier","travelledPath","concat","trackableAssetStates","SET_ROUTE","VuexModule","__decorate","Mutation","Action","Module","namespaced","dynamic","store","routeMod","getModule","toDateFormatted","format","dayjs","toLocalDateFormatted","utc","local","toDateIsoString","toISOString","startOf","endOf","setFilterOptionDateByName","filterOptions","subtract","checkValidDateRange","validDayRange","dateRange","diff","toString","parseInt","extend","timezone","advancedFormat","trackingModule","heading","locationDateTimeUtc","latitude","longitude","payload","set","trackableAssetState","SET_TRACKABLE_ASSET_STATE","rawError","trackingMod","ErrorCode","render","_vm","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","title","body","helperText","_e","staticRenderFns","errors","NotAuthorized","NotFound","InvalidOrganisation","ErrorPage","default","Prop","required","Component","component","VContainer","style","$tenant","$theme","logoPrimaryPath","clock","time","timeZoneName","utcOffset","$auth","loading","isAuthenticated","on","logout","user","picture","login","Clock","dateTime","NavBar","update","timer","setInterval","updateClock","clearInterval","loginWithRedirect","returnTo","location","origin","VAppBar","VBtn","VIcon","VImg","components","computed","theme","cssProps","mounted","VApp","User","auth0User","objectId","Auth0User","GetClientAccessUri","uri","AuthModule","authAccessToken","permissions","authMod","getParsedJwt","token","JSON","parse","atob","split","VueAuth","auth0Client","getUser","getIdTokenClaims","getTokenSilently","accessToken","decodedToken","defaults","headers","common","setPermissions","setAuthAccessToken","onRedirectCallback","redirectUri","auth0Options","options","domain","client_id","clientId","audience","redirect_uri","organizationId","organization","createAuth0Client","search","includes","handleRedirectCallback","appState","auth0Error","error_description","errorCode","webpubsub","response","ws","WebSocket","onmessage","setTrackableAssetState","updateRouteTrackableAssetStates","log","instance","PermissionType","DEFAULT_REDIRECT_CALLBACK","history","replaceState","pathname","getInstance","useAuth0","init","interceptors","config","Authorization","hasAllPermissions","permToCheck","getPermissions","every","permission","authRouterGuard","to","from","next","authService","fn","unwatch","setUserPermission","meta","isPublic","targetUrl","fullPath","$watch","permissionRouterGuard","requiredPermission","appAccess","filter","HomePage","VueRouter","path","props","redirect","router","beforeEach","opts","dark","customProperties","variations","Vuetify","install","Tenant","tenantData","tenantName","tenantCode","externalId","settings","themeSetting","setting","StaticTenantLoader","tenantId","domains","host","tenants","tenant","ConfigurationServiceTenantLoader","configurationServiceApiUrl","tenantConfigPath","fetch","tenantResult","json","defaultThemeProperties","assets","logoPrimary","logoSecondary","colours","primary","secondary","accent","brand","textBrand","AppTheme","themeProperties","_defaultsDeep","logoSecondaryPath","Color","alpha","string","apiUrl","tenantLoader","getTenantForHost","hostname","VueGoogleMaps","load","v","map_ids","GmapCluster","Auth0","vuetify","h","App","$mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,CAAC,KAAO,QAAQ9B,IAAUA,GAAW,IAAM,CAAC,KAAO,YAAYA,GAAW,MAInH,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,KAAO,GACrBR,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,CAAC,KAAO,QAAQxC,IAAUA,GAAW,IAAM,CAAC,KAAO,YAAYA,GAAW,OAC3FyC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,IAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAApBiD,QAAQjC,MAAMhB,GAAYA,GAEnE,IAAIkD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWjG,KAAK2F,KAAKM,GAC5CA,EAAWjG,KAAOf,EAClBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6EC1QT,4BAGA+F,OAAIC,IAAIC,QAEO,WAAIA,OAAKC,MAAM,CAC5BC,MAAO,GACPC,UAAW,GACXC,QAAS,GACT1G,QAAS,M,uBCRXmB,EAAOD,QAAU,CAAC,QAAU,UAAU,UAAY,UAAU,QAAU,OAAO,OAAS,UAAU,MAAQ,OAAO,UAAY,S,wQCE5GyF,E,gGAAf,WAAyBC,GAAzB,kHAE2BC,IAAM9B,IAAN,UAAa+B,6BAAb,kBAAyE,CAC9FC,OAAQH,IAHd,uBAEY3H,EAFZ,EAEYA,KAFZ,kBAMWA,GANX,0CAQI8G,QAAQjC,MAAR,MARJ,kBASW,IATX,yD,iCAaekD,E,gGAAf,WAAwBC,GAAxB,kHAE2BJ,IAAM9B,IAAN,UAClB+B,6BADkB,0BAC0CG,IAHrE,uBAEYhI,EAFZ,EAEYA,KAFZ,kBAMWA,GANX,0CAQI8G,QAAQjC,MAAR,MARJ,4E,wBAae,OACbkD,WACAL,a,wBCxBF,SAASO,IACP,MAAO,CACLC,OAAQ,GACRC,0BAA2B,MAU/B,IAAqBC,EAAW,8PACZH,IAAeC,QADH,6DAEYD,IAAeE,2BAF3B,gDAI9B,WACE,OAAOE,KAAKH,SALgB,wCAQ9B,WACE,OAAOG,KAAKF,4BATgB,8CAatB,SAAiCG,GACvCD,KAAKF,0BAA4BG,IAdL,uBAkBtB,SAAUA,GAChBD,KAAKH,OAAOpH,KAAKwH,KAnBW,wBAuBtB,SAAWJ,GACjBG,KAAKH,OAASA,IAxBc,uBA4BtB,SAAUI,GAChB,IAAMC,EAAQF,KAAKH,OAAOM,WAAU,SAACC,GAAD,OAAOA,EAAET,uBAAyBM,EAAMN,wBAE5EK,KAAKH,OAAOK,GAASD,IA/BO,0BAmCvB,WACLD,KAAKH,OAASD,IAAeC,OAC7BG,KAAKF,0BAA4BF,IAAeE,4BArCpB,kFAyCvB,WAAkBO,GAAlB,gGACCf,EAAwC,CAC5CgB,iBAAkBC,OAAKC,WAAW,IAAIC,KAAKJ,EAAcK,WACzDC,eAAgBJ,OAAKK,SAAS,IAAIH,KAAKJ,EAAcQ,SACrDC,WAAYT,EAAcU,YAJvB,SAOgBC,EAAO3B,UAAUC,GAPjC,OAOCO,EAPD,OAQLG,KAAKiB,WAAWpB,GARX,gDAzCuB,2IAqDvB,WAAiBqB,GAAjB,uGACeF,EAAOtB,SAASwB,GAD/B,OACCjB,EADD,OAECA,IAAUD,KAAKH,OAAOsB,MAAK,SAACC,GAAD,OAAUA,EAAKzB,wBAAL,OAA8BM,QAA9B,IAA8BA,OAA9B,EAA8BA,EAAON,0BAC9EK,KAAKqB,UAAUpB,GAHZ,gDArDuB,oGA6DvB,SAA6BiB,GAClC,IAAMjB,EAAQD,KAAKH,OAAOsB,MAAK,SAACC,GAAD,OAAUA,EAAKzB,uBAAyBuB,KAEnEA,GAAajB,EACfD,KAAKsB,iCAAiCrB,GAEtCD,KAAKsB,iCAAiC,QAnEZ,6CAwEvB,SAAgCC,GACrC,IAAMtB,EAAQD,KAAKH,OAAOsB,MACxB,SAAClB,GAAD,OAAWA,EAAMuB,UAAUC,2BAA6BF,EAAkCE,4BAGvFxB,IAELA,EAAMyB,cAAgBzB,EAAMyB,cAAcC,OAAOJ,EAAkCK,sBAEnF5B,KAAK6B,UAAU5B,QAjFa,GAAS6B,QAavCC,gBADCC,QACD,qDAKAD,gBADCC,QACD,8BAKAD,gBADCC,QACD,+BAKAD,gBADCC,QACD,8BAOAD,gBADCC,QACD,iCAMAD,gBADCE,QACD,gCAYAF,gBADCE,QACD,+BAQAF,gBADCE,QACD,iDAWAF,gBADCE,QACD,oDAxEmBlC,EAAW,gBAN/BmC,eAAO,CACNC,YAAY,EACZrF,KAAM,WACNsF,SAAS,EACTC,gBAEmBtC,OAqFRuC,EAAWC,eAAUxC,I,6DCzGlC,W,wTCgBM,SAAUyC,EAAgBjC,EAAYkC,GAC1C,OAAOC,IAAMnC,GAAMkC,OAAOA,GAStB,SAAUE,EAAqBpC,EAAYkC,GAC/C,OAAKlC,EAEEmC,IAAME,IAAIrC,GAAMsC,QAAQJ,OAAOA,GAFpB,MAUd,SAAUK,EAAgBvC,GAC9B,OAAOmC,IAAMnC,GAAMwC,cAQf,SAAUvC,EAAWD,GACzB,OAAOmC,IAAMnC,GAAMyC,QAAQ,OAAOJ,MAAMH,SAQpC,SAAU7B,EAASL,GACvB,OAAOmC,IAAMnC,GAAM0C,MAAM,OAAOL,MAAMH,SAIlC,SAAUS,EAA0BpG,GACxC,IAAMqG,EAAiC,CACrC7C,iBAAkB,GAClBK,eAAgB,GAChBG,WAAY,MAEd,OAAQhE,GACN,IAAK,QACHqG,EAAc7C,iBAAmBoC,MAAQK,cACzCI,EAAcxC,eAAiB+B,MAAQK,cACvC,MACF,IAAK,YACHI,EAAc7C,iBAAmBoC,MAAQU,SAAS,EAAG,OAAOL,cAC5DI,EAAcxC,eAAiB+B,MAAQU,SAAS,EAAG,OAAOL,cAC1D,MACF,IAAK,cACHI,EAAc7C,iBAAmBoC,MAAQU,SAAS,EAAG,OAAOL,cAC5DI,EAAcxC,eAAiB+B,MAAQK,cACvC,MAEJ,OAAOI,EAUH,SAAUE,EAAoB3C,EAAkBG,EAAgByC,GACpE,IAAMC,EAAYb,IAAM7B,GAAQ2C,KAAK9C,EAAU,OAAO+C,WACtD,OAAOC,SAASH,GAAaD,EAtF/BZ,IAAMiB,OAAOf,KACbF,IAAMiB,OAAOC,KACblB,IAAMiB,OAAOE,KAsFE,QAAErB,kBAAiBG,uBAAsBG,kBAAiBtC,aAAYI,a,8MCnFhEkD,EAAc,4QACmD,IADnD,+DAGjC,WAA4B,WAC1B,OAAO,SAACrC,GAAmD,MACzD,iBAAO,EAAKG,qBAAqBH,UAAjC,aAAO,EAAqDsC,WAL/B,mCASjC,WAA2B,WACzB,OAAO,SAACtC,GAAiD,MACvD,iBAAO,EAAKG,qBAAqBH,UAAjC,aAAO,EAAqDuC,uBAX/B,qCAejC,WAA6B,WAC3B,OAAO,SAACvC,GACN,OAAK,EAAKG,qBAAqBH,GAExB,CACLwC,SAAU,EAAKrC,qBAAqBH,GAA0BwC,SAC9DC,UAAW,EAAKtC,qBAAqBH,GAA0ByC,WAJA,QAjBpC,uCA2BzB,SAA0BC,GAChCrF,OAAIsF,IAAIpE,KAAK4B,qBAAsBuC,EAAQhG,IAAKgG,EAAQE,uBA5BzB,oCAgCjC,SAAuB9C,GACrBvB,KAAKsE,0BAA0B,CAC7BnG,IAAKoD,EAAkCE,yBACvC4C,oBACE9C,EAAkCK,qBAChCL,EAAkCK,qBAAqBzJ,OAAS,SArCvC,GAAS2J,QA2B1CC,gBADCC,QACD,8CAKAD,gBADCE,eAAO,CAAEsC,UAAU,KACpB,2CAhCmBT,EAAc,gBANlC5B,eAAO,CACNC,YAAY,EACZrF,KAAM,cACNsF,SAAS,EACTC,gBAEmByB,OA2CRU,EAAcjC,eAAUuB,I,qBCtDrCjK,EAAOD,QAAU,IAA0B,iC,mBCA3CC,EAAOD,QAAU,8pF,qBCCjBC,EAAOD,QAAU,CAAC,QAAU,UAAU,UAAY,UAAU,QAAU,OAAO,OAAS,UAAU,MAAQ,OAAO,UAAY,S,mFCD3H,I,ECqBY6K,EDrBRC,EAAS,WAAa,IAAIC,EAAI3E,KAAS4E,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACE,YAAY,qBAAqBC,MAAM,CAAC,MAAQ,KAAK,CAACH,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,KAAK,CAACE,YAAY,qBAAqB,CAACL,EAAIO,GAAG,IAAIP,EAAIQ,GAAGR,EAAInI,MAAM4I,OAAO,OAAON,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACL,EAAIO,GAAG,IAAIP,EAAIQ,GAAGR,EAAInI,MAAM6I,MAAM,OAAQV,EAAInI,MAAgB,WAAEsI,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAACL,EAAIO,GAAG,IAAIP,EAAIQ,GAAGR,EAAInI,MAAM8I,YAAY,OAAOX,EAAIY,YAC7iBC,EAAkB,G,6GCoBtB,SAAYf,GACVA,oCACAA,0BACAA,iDAHF,CAAYA,MAAS,KAMrB,IAAMgB,GAAM,sBACThB,EAAUiB,cAAgB,CACzBN,MAAO,gBACPC,KAAM,oDAHE,iBAKTZ,EAAUkB,SAAW,CACpBP,MAAO,iBACPC,KAAM,iDAPE,iBASTZ,EAAUmB,oBAAsB,CAC/BR,MAAO,gBACPC,KAAM,yGACNC,WAAY,mFAZJ,2BAcD,CACPF,MAAO,QACPC,KAAM,0BAhBE,GAqBSQ,EAAS,gTAI5B,WACE,OAAI7F,KAAKtE,MAAQ+J,EAAOzF,KAAKtE,MACpB+J,EAAOzF,KAAKtE,MAEZ+J,EAAOK,YARU,GAAShH,QAErCiD,gBADCgE,eAAK,CAAEC,UAAU,KAClB,2BAFmBH,EAAS,gBAD7BI,eAAU,KACUJ,WChD+W,I,yDCQhYK,EAAY,eACd,EACAxB,EACAc,GACA,EACA,KACA,KACA,MAIa,aAAAU,EAAiB,QAKhC,IAAkBA,EAAW,CAACC,aAAA,Q,yHCxB1B,EAAS,WAAa,IAAIxB,EAAI3E,KAAS4E,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACsB,MAAOzB,EAAS,OAAG,CAACG,EAAG,UAAUA,EAAG,eAAe,IAC3JU,EAAkB,GCDlB,EAAS,WAAa,IAAIb,EAAI3E,KAAS4E,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,QAAQ,CAACE,YAAY,cAAcC,MAAM,CAAC,IAAQN,EAAI0B,QAAkB,WAAI,QAAS,QAAU,GAAG,IAAM1B,EAAI2B,OAAOC,gBAAgB,WAAa,mBAAmB,MAAQ,SAASzB,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACL,EAAIO,GAAGP,EAAIQ,GAAGR,EAAI6B,MAAMC,WAAW3B,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACL,EAAIO,GAAG,QAAQP,EAAIQ,GAAGR,EAAI6B,MAAME,gBAAgB,OAAO5B,EAAG,OAAO,CAACH,EAAIO,GAAG,IAAIP,EAAIQ,GAAGR,EAAI6B,MAAMG,aAAa,SAAWhC,EAAIiC,MAAMC,QAA6iBlC,EAAIY,KAAxiBT,EAAG,MAAM,CAAGH,EAAIiC,MAAME,gBAA6MhC,EAAG,QAAQ,CAACE,YAAY,OAAOC,MAAM,CAAC,KAAO,IAAI8B,GAAG,CAAC,MAAQpC,EAAIqC,SAAS,CAAErC,EAAIiC,MAAMK,KAAY,QAAEnC,EAAG,QAAQ,CAACE,YAAY,YAAYC,MAAM,CAAC,IAAMN,EAAIiC,MAAMK,KAAKC,QAAQ,OAAS,KAAK,MAAQ,QAAQpC,EAAG,SAAS,CAACH,EAAIO,GAAG,wBAAwBJ,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACL,EAAIO,GAAG,eAAe,GAAtfJ,EAAG,QAAQ,CAACE,YAAY,OAAOC,MAAM,CAAC,KAAO,IAAI8B,GAAG,CAAC,MAAQpC,EAAIwC,QAAQ,CAACrC,EAAG,SAAS,CAACH,EAAIO,GAAG,wBAAwBJ,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACL,EAAIO,GAAG,cAAc,IAAiU,IAAa,IAAI,IACtpC,EAAkB,G,wHCCTkC,EAAb,WAGE,aAA6B,IAAjB7G,EAAiB,uDAAV,IAAIE,KAAM,8DAC3BT,KAAKqH,SAAW9G,EAJpB,6CAOE,SAAOA,GACLP,KAAKqH,SAAW9G,IARpB,kBAWE,WACE,OAAOiC,eAAgBxC,KAAKqH,SAAU,cAZ1C,0BAeE,WACE,OAAO7E,eAAgBxC,KAAKqH,SAAU,OAhB1C,uBAmBE,WACE,OAAO7E,eAAgBxC,KAAKqH,SAAU,WApB1C,KCsCqBC,EAAM,6PACF,IAAIF,GADF,yCAEJ,MAFI,oDAIjB,WACNpH,KAAKwG,MAAMe,OAAO,IAAI9G,QALC,qBAQjB,WACNT,KAAKwH,MAAQC,YAAYzH,KAAK0H,YAAa,OATpB,2BAYjB,WACNC,cAAc3H,KAAKwH,SAbI,mBAgBjB,WACNxH,KAAK4G,MAAMgB,kBAAkB,MAjBN,oBAoBjB,WACN5H,KAAK4G,MAAMI,OAAO,CAChBa,SAAUlJ,OAAOmJ,SAASC,aAtBL,GAASjJ,QAAfwI,EAAM,gBAH1BrB,eAAU,CACTnJ,KAAM,YAEawK,WCxC4W,I,6FCQ7XpB,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,MAIa,EAAAA,EAAiB,QAQhC,IAAkBA,EAAW,CAAC8B,UAAA,KAAQC,OAAA,KAAKC,QAAA,KAAMC,OAAA,OChBlC,OACbrL,KAAMA,WACNsL,WAAYA,CACVd,OAAJA,GAGEe,SAAUA,CACRC,MADJ,WAEM,OAAOtI,KAAKsG,OAAOiC,WAIvBC,QAZF,WAYA,MACIhO,SAASA,MAAQA,GAArBA,mFCxB8T,I,YCO1T,EAAY,eACd,EACA,EACAgL,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAKhC,IAAkB,EAAW,CAACiD,OAAA,O,2KCrBjBC,EAAb,wDAGE,WAAYC,GAAqB,MAG/B,GAH+B,uBAC/B,eAD+B,qDAG1BA,EAAW,yBAEhB,IAAK,IAAMxK,KAAOwK,EAChB,EAAKxK,GAAOwK,EAAUxK,GANO,OAS/B,EAAKyK,SAAWD,EAAU,8CATK,EAHnC,0BAA0BE,Q,8BCAXC,I,6FAAf,+HAE2BvJ,IAAM9B,IAAN,UAAa+B,6BAAb,6BAF3B,uBAEY7H,EAFZ,EAEYA,KAFZ,kBAIWA,EAAKoR,KAJhB,mCAMItK,QAAQjC,MAAR,MANJ,yD,wBAUe,OACbsM,sB,gDCHmBE,EAAU,uQACH,IADG,+CAEW,IAFX,yDAI7B,WACE,OAAOhJ,KAAKiJ,kBALe,0BAQ7B,WACE,OAAOjJ,KAAKkJ,cATe,gCAa7B,SAAmBD,GACjBjJ,KAAKiJ,gBAAkBA,IAdI,4BAkB7B,SAAeC,GACblJ,KAAKkJ,YAAcA,MAnBQ,GAASpH,QAatCC,gBADCC,QACD,uCAKAD,gBADCC,QACD,mCAlBmBgH,EAAU,gBAN9B9G,eAAO,CACNC,YAAY,EACZrF,KAAM,UACNsF,SAAS,EACTC,gBAEmB2G,OAuBRG,EAAU5G,eAAUyG,G,kDCxB3B,SAAUI,EAAkEC,GAChF,IACE,OAAOC,KAAKC,MAAMC,KAAKH,EAAMI,MAAM,KAAK,KACxC,SACA,QCUJ,IAAaC,GAAO,gQACR,GADQ,oDAEC,GAFD,qMAMmB,MANnB,yGAQlB,gHACahB,EADb,mBACwB1I,KAAK2J,mBAD7B,aACwB,EAAkBC,UAD1C,4GARkB,wFAalB,SAAkBtM,GAAuB,MACvC,iBAAO0C,KAAK2J,mBAAZ,aAAO,EAAkB/B,kBAAkBtK,KAd3B,8BAkBlB,SAAiBA,GAA0B,MACzC,iBAAO0C,KAAK2J,mBAAZ,aAAO,EAAkBE,iBAAiBvM,KAnB1B,8BAuBlB,SAAiBA,GAA0B,MACzC,iBAAO0C,KAAK2J,mBAAZ,aAAO,EAAkBG,iBAAiBxM,KAxB1B,oBA4BlB,SAAOA,GAAgB,MACrB,iBAAO0C,KAAK2J,mBAAZ,aAAO,EAAkB3C,OAAO1J,KA7BhB,wFAgCX,sHACqB0C,KAAK4G,MAAMkD,iBAAiB,IADjD,cACCC,EADD,OAECC,EAAeZ,EAAkBW,GACvCxK,IAAM0K,SAASC,QAAQC,OAAO,iBAAmB,UAAYJ,EAHxD,SAKCZ,EAAQiB,eAAeJ,EAAad,aALrC,uBAMCC,EAAQkB,mBAAmBN,GAN5B,gDAhCW,+IAyCX,uHACE/J,KAAKiH,KAAM2B,UADb,gDAzCW,oIA8ClB,WAAW0B,EAAsCC,EAAqBC,GAAtE,8GACQC,EAA8B,CAClCC,OAAQF,EAAaE,OACrBC,UAAWH,EAAaI,SACxBC,SAAUL,EAAaK,SACvBC,aAAcP,GAGZC,EAAaO,iBACfN,EAAQO,aAAeR,EAAaO,gBATxC,SAa2BE,eAAkBR,GAb7C,UAaEzK,KAAK2J,YAbP,kBAmBMhL,OAAOmJ,SAASoD,OAAOC,SAAS,WAC/BxM,OAAOmJ,SAASoD,OAAOC,SAAS,UAAYxM,OAAOmJ,SAASoD,OAAOC,SAAS,WApBnF,2CAuBkCnL,KAAK2J,mBAvBvC,aAuBkC,EAAkByB,yBAvBpD,sJAuBiF,CACzEC,cAAUtO,GAxBlB,eAuBcsO,EAvBd,EAuBcA,SAMRf,EAAmBe,GA7BzB,6DAgCQ,gBAAa5P,MACX,UAAW,EAAX,IACI6P,EADU,KAGO,kBAArBA,EAAW9O,OACX8O,EAAWC,kBAAkBJ,SAAS,2BAEtCnL,KAAKwL,UAAY,uBACa,kBAArBF,EAAW9O,MACpBwD,KAAKwL,UAAY,gBAEjBxL,KAAKwL,UAAY,gBAEnBxL,KAAKxD,MAAL,OAEAwD,KAAKwL,UAAY,gBACjBxL,KAAKxD,MAAL,MAEoB,kBAAN,EAAP,IACTwD,KAAKwL,UAAY,gBACjBxL,KAAKxD,MAAQ,IAAIf,MAAJ,QAEbuE,KAAKwL,UAAY,gBACjBxL,KAAKxD,MAAQ,IAAIf,MAAM,yBAvD7B,6CA2DiCuE,KAAK2J,mBA3DtC,aA2DiC,EAAkB7C,kBA3DnD,eA2DI9G,KAAK8G,gBA3DT,iBA4DsB9G,KAAK4J,UA5D3B,eA4DI5J,KAAKiH,KA5DT,OA6DIjH,KAAK6G,SAAU,EA7DnB,UA+D2B4E,EAAU3C,qBA/DrC,eA+DU4C,EA/DV,OAiEUC,EAAK,IAAIC,UAAUF,GAEzBC,EAAGE,UAAY,SAAUhP,GACvB,IAAMlF,EAA0C2R,KAAKC,MAAM1M,EAAQlF,MAEnE6M,OAAYsH,uBAAuBnU,GACnC2K,OAASyJ,gCAAgCpU,IAG3CgU,EAAGxQ,QAAU,SAAUxD,GACrB8G,QAAQuN,IAAIrU,IA3ElB,6EA9CkB,mEAASmH,QAAhB4K,GAAO,gBADnBzD,eAAU,KACEyD,I,ICfTuC,GCRQC,G,wCDKNC,GAA4B,SAACd,GAAD,OAChC1M,OAAOyN,QAAQC,aAAa,GAAI7R,SAAS4K,MAAOzG,OAAOmJ,SAASwE,WAKrDC,GAAc,kBAAMN,IAGpBO,GAAW,SAAC,GAIpB,QAHHlC,0BAGG,MAHkB6B,GAGlB,MAFH5B,mBAEG,MAFW5L,OAAOmJ,SAASC,OAE3B,EADA0C,EACA,qBACH,OAAIwB,KAGJA,GAAW,IAAIvC,GACfuC,GAASQ,KAAKnC,EAAoBC,EAAaE,GAE/ClL,IAAMmN,aAAarR,QAAQ0D,IAA3B,yDACE,WAAgB4N,GAAhB,iGACoDV,GAASnC,iBAAiB,IAD9E,0BACE6C,EAAOzC,QAAQ0C,cAAgB,UADjC,uBAGSD,GAHT,2CADF,uDAME,SAAUnQ,GAER,OAAOtC,QAAQE,OAAOoC,MAInByP,KE3BH,SAAUY,GAAkBC,GAChC,QAAI3D,EAAQ4D,gBACHD,EAAYE,OAAM,SAACC,GAAD,OAAgB9D,EAAQ4D,eAAe5B,SAAS8B,ODZ7E,SAAYf,GACVA,iCACAA,mCAFF,CAAYA,QAAc,K,iBEOnB,SAAegB,GAAtB,uC,gEAAO,WAA+BC,EAAWC,EAAaC,GAAvD,8FACCC,EAAcf,KAEdgB,EAHD,yDAGM,uGACTC,GAAWA,KAEPF,EAAYxG,gBAHP,qBAIHqC,EAAQ4D,eAAe5U,OAAS,GAJ7B,gCAKCmV,EAAYG,oBALb,OAOPJ,IAPO,sBAQF,UAAIF,EAAGO,YAAP,OAAI,EAASC,SAClBN,IACmC,yBAA1BC,EAAY9B,UACrB6B,EAAK,CAAEvQ,KAAM,aAAc2C,OAAQ,CAAE/D,KAAM+I,gBAAUmB,oBAAoBnC,cAEzE6J,EAAY1F,kBAAkB,CAC5ByD,SAAU,CAAEuC,UAAWT,EAAGU,YAdrB,2CAHN,qDAuBAP,EAAYzG,QAvBZ,gCAwBU0G,IAxBV,+CA4BCC,EAAUF,EAAYQ,OAAO,UAAnB,yDAA8B,WAAOjH,GAAP,qFAC5B,IAAZA,EADwC,gCAE7B0G,IAF6B,mFAA9B,uDA5BX,2C,yBAmCD,SAAUQ,GAAsBZ,EAAWC,EAAaC,GAAyB,MACrF,aAAIF,EAAGO,YAAP,OAAI,EAASC,SACXN,QACK,OACCW,EAAqB,CAAC9B,GAAe+B,UAAhB,UAA2Bd,EAAGO,YAA9B,aAA2B,EAAST,YAAYiB,QAAO,SAACvU,GAAD,OAAOA,KAEpFkT,GAAkBmB,GAGrBX,IAFAA,EAAK,CAAEvQ,KAAM,aAAc2C,OAAQ,CAAE/D,KAAM+I,gBAAUiB,cAAcjC,eC9CzE,IAAM0K,GAAW,kBAAM,uCACjBtI,GAAY,kBAAM,uCAExB/G,OAAIC,IAAIqP,QAER,IAAMvO,GAAwB,CAC5B,CACEwO,KAAM,IACNnI,UAAWiI,GACXT,KAAM,CACJC,UAAU,IAGd,CACEU,KAAM,gBACNvR,KAAM,aACNoJ,UAAWL,GACXyI,OAAO,EACPZ,KAAM,CACJC,UAAU,IAGd,CACEU,KAAM,IACNE,SAAU,MAIRC,GAAS,IAAIJ,OAAU,CAC3BrQ,KAAM,UACN8B,YAGF2O,GAAOC,WAAWvB,IAClBsB,GAAOC,WAAWV,IAEHS,U,0BCnCTE,GAAmC,CACvCpG,MAAO,CACLqG,MAAM,EAENlE,QAAS,CACPmE,kBAAkB,EAClBC,YAAY,KAKlB/P,OAAIC,IAAI+P,SAEO,WAAIA,QAAQJ,I,wBCbZ,I,UAAA,CACbK,QADa,SACLjQ,EAAqB2L,GAC3B3L,EAAIzG,UAAUuO,MAAQ4F,GAAS/B,MCYtBuE,I,oBAAb,WAGE,WAAYC,GAAsB,gEAChCjP,KAAKiP,WAAaA,EAJtB,+CAOE,WACE,OAAOjP,KAAKiP,WAAWC,aAR3B,sBAWE,WACE,OAAOlP,KAAKiP,WAAWE,aAZ3B,sBAeE,WACE,OAAOnP,KAAKiP,WAAWG,aAhB3B,oBAmBE,WACE,OAAOpP,KAAKiP,WAAWI,WApB3B,2BAuBE,WACE,IAAMC,EAAetP,KAAKqP,SAASlO,MAAK,SAACoO,GAAD,MAA6C,4BAAjBA,EAAQzS,QAE5E,GAAKwS,EAIL,OAAOhG,KAAKC,MAAM+F,EAAazR,WA9BnC,MAsCa2R,GAAb,6EAC0B,CACtB,CACEC,SAAU,IACVP,WAAY,iBACZC,WAAY,GACZC,WAAY,uBACZM,QAAS,CAAC,YAAa,yBAA0B,uBAAwB,yBACzEL,SAAU,IAGZ,CACEI,SAAU,KACVP,WAAY,wBACZC,WAAY,GACZC,WAAY,uBACZM,QAAS,CAAC,iCAAkC,+BAAgC,iCAC5EL,SAAU,IAGZ,CACEI,SAAU,KACVP,WAAY,SACZC,WAAY,GACZC,WAAY,uBACZM,QAAS,CAAC,oBACVL,SAAU,IAGZ,CACEI,SAAU,KACVP,WAAY,gBACZC,WAAY,GACZC,WAAY,uBACZM,QAAS,CAAC,4BACVL,SAAU,MAnChB,gHAuCE,WAAuBM,GAAvB,0FACQV,EAAajP,KAAK4P,QAAQzO,MAAK,SAAC0O,GAAD,OAAYA,EAAOH,QAAQvE,SAASwE,MAEpEV,EAHP,8CAIWlS,GAJX,gCAOS,IAAIiS,GAAOC,IAPpB,gDAvCF,iEAkDaa,GAAb,WAGE,WAAYC,GAAkC,gFAC5C/P,KAAK+P,2BAA6BA,EAJtC,gHAOE,WAAuBJ,GAAvB,kGACQK,EADR,wCAC4DL,EAD5D,4BAE6BM,MAAM,GAAD,OAAIjQ,KAAK+P,4BAAT,OAAsCC,IAFxE,cAEQE,EAFR,gBAG4BA,EAAaC,OAHzC,cAGQlB,EAHR,yBAKS,IAAID,GAAOC,IALpB,gDAPF,iE,wHCpFMmB,GAA0C,CAC9CC,OAAQ,CACN,eAAgBC,KAChB,iBAAkBC,MAEpBC,QAAS,CACP,iBAAkBA,KAAQC,QAC1B,mBAAoBD,KAAQE,UAC5B,gBAAiBF,KAAQG,OACzB,eAAgBH,KAAQI,MACxB,oBAAqBJ,KAAQK,YAIpBC,GAAb,WAGE,WAAYC,GAAsC,qEAChD/Q,KAAK+Q,gBAAkBC,KAAcD,EAAiBX,IAJ1D,oDAOE,WACE,OAAOpQ,KAAK+Q,gBAAgBV,OAAO,kBARvC,6BAWE,WACE,OAAOrQ,KAAK+Q,gBAAgBV,OAAO,oBAZvC,oBAeE,WACE,IAAMG,EAAUxQ,KAAK+Q,gBAAgBP,QAErC,MAAO,CACL,oCAA8BxQ,KAAKuG,gBAAnC,KACA,sCAAgCvG,KAAKiR,kBAArC,KAEA,wBAAyBT,EAAQ,kBACjC,uBAAwBA,EAAQ,iBAChC,sBAAuBA,EAAQ,gBAC/B,sBAAuBA,EAAQ,qBAE/B,6BAA8BU,KAAMV,EAAQ,mBAAmBW,MAAM,IAAKC,cA3BhF,KCvBA,wCAAC,+GAEOC,EAAS7R,4BACX6R,GAAqB,KAAXA,GACZ5S,QAAQuN,IAAI,6CACZsF,EAAe,IAAIxB,GAAiCuB,KAEpD5S,QAAQuN,IAAI,qCACZsF,EAAe,IAAI9B,IARtB,SAWsB8B,EAAaC,iBAAiB5S,OAAOmJ,SAAS0J,UAXpE,OAWO3B,EAXP,OAYC/Q,OAAIzG,UAAUgO,QAAUwJ,EACxB/Q,OAAIzG,UAAUiO,OAAS,IAAIwK,IAAe,OAANjB,QAAM,IAANA,OAAA,EAAAA,EAAQkB,kBAAmB,IAE/DjS,OAAIC,IAAI0S,GAAe,CACrBC,KAAM,CACJC,EAAG,OACHxT,IAAKqB,0BACLoS,QAASpS,8BAIbV,OAAIC,IAAIC,QAERF,OAAIoH,UAAU,cAAe2L,MAE7B/S,OAAIC,IAAI+S,GAAO,CACbpH,OAAQlL,mBACRoL,SAAUpL,sBACVqL,SAAUrL,qBACVuL,eAAc,OAAE8E,QAAF,IAAEA,OAAF,EAAEA,EAAQT,WACxB9E,mBAAoB,SAACe,GAAiB,MACpCmD,GAAO/V,KAAP,iBAAY4S,QAAZ,IAAYA,OAAZ,EAAYA,EAAUuC,iBAAtB,QAAmCjP,OAAOmJ,SAASwE,aAIvD,IAAIxN,OAAI,CACN0P,UACAnM,aACA0P,WACArN,OAAQ,SAACsN,GAAD,OAAOA,EAAEC,MAChBC,OAAO,QA1CX,2CAAD,I,kCCbA,W","file":"js/app.b65c1ecb.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"home\":\"home\"}[chunkId]||chunkId) + \".\" + {\"home\":\"3b2db470\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"home\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"home\":\"home\"}[chunkId]||chunkId) + \".\" + {\"home\":\"af6868d5\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n state: {},\n mutations: {},\n actions: {},\n modules: {}\n});\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#36ae6c\",\"secondary\":\"#3a3a3c\",\"surface\":\"#fff\",\"accent\":\"#40fe96\",\"brand\":\"#000\",\"textBrand\":\"#fff\"};","import { QueryParameters, Route } from '@/api/types';\nimport axios from 'axios';\n\nasync function GetRoutes(routeQueryParameters: QueryParameters): Promise {\n try {\n const { data } = await axios.get(`${process.env.VUE_APP_FLEET_TRACKING_API_URL}/api/v1/Routes`, {\n params: routeQueryParameters\n });\n\n return data;\n } catch (err: unknown) {\n console.error(err);\n return [];\n }\n}\n\nasync function GetRoute(deliveryRunReference: string): Promise {\n try {\n const { data } = await axios.get(\n `${process.env.VUE_APP_FLEET_TRACKING_API_URL}/api/v1/routes/${deliveryRunReference}`\n );\n\n return data;\n } catch (err: unknown) {\n console.error(err);\n return;\n }\n}\n\nexport default {\n GetRoute,\n GetRoutes\n};\n","import { Action, Module, Mutation, VuexModule, getModule } from 'vuex-module-decorators';\nimport Remote from '@/api/route';\nimport store from '@/store/index';\nimport date from '@/common/utils/date';\nimport { QueryParameters, Route, TrackableAssetStateChangedMessage } from '@/api/types';\nimport { SearchFilters } from '@/types/search';\n\nfunction initialState() {\n return {\n routes: [],\n selectedRouteTrackingData: null\n };\n}\n\n@Module({\n namespaced: true,\n name: 'routeMod',\n dynamic: true,\n store\n})\nexport default class RouteModule extends VuexModule {\n routes: Route[] = initialState().routes;\n selectedRouteTrackingData: Route | null = initialState().selectedRouteTrackingData;\n\n get getRoutes(): Route[] {\n return this.routes;\n }\n\n get getSelectedRouteTrackingData(): Route | null {\n return this.selectedRouteTrackingData;\n }\n\n @Mutation\n private SET_SELECTED_ROUTE_TRACKING_DATA(route: Route | null): void {\n this.selectedRouteTrackingData = route;\n }\n\n @Mutation\n private ADD_ROUTE(route: Route): void {\n this.routes.push(route);\n }\n\n @Mutation\n private SET_ROUTES(routes: Route[]): void {\n this.routes = routes;\n }\n\n @Mutation\n private SET_ROUTE(route: Route): void {\n const index = this.routes.findIndex((x) => x.deliveryRunReference === route.deliveryRunReference);\n\n this.routes[index] = route;\n }\n\n @Mutation\n public RESET_ROUTES(): void {\n this.routes = initialState().routes;\n this.selectedRouteTrackingData = initialState().selectedRouteTrackingData;\n }\n\n @Action\n public async fetchRoutes(searchFilters: SearchFilters): Promise {\n const routeQueryParameters: QueryParameters = {\n startDateTimeUtc: date.startOfDay(new Date(searchFilters.dateFrom)),\n endDateTimeUtc: date.endOfDay(new Date(searchFilters.dateTo)),\n searchTerm: searchFilters.searchText\n };\n\n const routes = await Remote.GetRoutes(routeQueryParameters);\n this.SET_ROUTES(routes);\n }\n\n @Action\n public async fetchRoute(reference: string): Promise {\n const route = await Remote.GetRoute(reference);\n if (!!route && !this.routes.find((item) => item.deliveryRunReference === route?.deliveryRunReference)) {\n this.ADD_ROUTE(route);\n }\n }\n\n @Action\n public setSelectedRouteTrackingData(reference: string | null): void {\n const route = this.routes.find((item) => item.deliveryRunReference === reference);\n\n if (reference && route) {\n this.SET_SELECTED_ROUTE_TRACKING_DATA(route);\n } else {\n this.SET_SELECTED_ROUTE_TRACKING_DATA(null);\n }\n }\n\n @Action\n public updateRouteTrackableAssetStates(trackableAssetStateChangedMessage: TrackableAssetStateChangedMessage): void {\n const route = this.routes.find(\n (route) => route.trackable.trackingDeviceIdentifier === trackableAssetStateChangedMessage.trackingDeviceIdentifier\n );\n\n if (!route) return;\n\n route.travelledPath = route.travelledPath.concat(trackableAssetStateChangedMessage.trackableAssetStates);\n\n this.SET_ROUTE(route);\n }\n}\n\nexport const routeMod = getModule(RouteModule);\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorPage.vue?vue&type=style&index=0&lang=scss&\"","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport { QueryParameters } from '@/api/types/index';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(advancedFormat);\n\n/**\n * Converts a date/time into a formatted string representation.\n * @param date The date/time.\n * @param format The output format pattern.\n * @returns A string representation of the date/time in the requested format.\n */\nexport function toDateFormatted(date: Date, format: string): string {\n return dayjs(date).format(format);\n}\n\n/**\n * Converts a UTC date/time into a formatted local date/time.\n * @param date The date/time in UTC.\n * @param format The output format pattern.\n * @returns A string representation of the date/time in the requested format.\n */\nexport function toLocalDateFormatted(date: Date, format: string): string {\n if (!date) return 'N/A';\n\n return dayjs.utc(date).local().format(format);\n}\n\n/**\n * Converts a date/time into a ISO 8601 string representation.\n * @param date The date/time.\n * @returns A string representation of the date/time in ISO 8601 format.\n */\nexport function toDateIsoString(date: Date): string {\n return dayjs(date).toISOString();\n}\n\n/**\n * Converts the begining of the day of a local date/time into a UTC date/time.\n * @param date The date/time in local timezone.\n * @returns A string representation of the date/time in UTC for the begining of `date`.\n */\nexport function startOfDay(date: Date): string {\n return dayjs(date).startOf('day').utc().format();\n}\n\n/**\n * Converts the end of the day of a local date/time into a UTC date/time.\n * @param date The date/time in local timezone.\n * @returns A string representation of the date/time in UTC for the end of `date`.\n */\nexport function endOfDay(date: Date): string {\n return dayjs(date).endOf('day').utc().format();\n}\n\n// TODO: Refactor to only include date related functionality\nexport function setFilterOptionDateByName(name: string): QueryParameters {\n const filterOptions: QueryParameters = {\n startDateTimeUtc: '',\n endDateTimeUtc: '',\n searchTerm: null\n };\n switch (name) {\n case 'Today':\n filterOptions.startDateTimeUtc = dayjs().toISOString();\n filterOptions.endDateTimeUtc = dayjs().toISOString();\n break;\n case 'Yesterday':\n filterOptions.startDateTimeUtc = dayjs().subtract(1, 'day').toISOString();\n filterOptions.endDateTimeUtc = dayjs().subtract(1, 'day').toISOString();\n break;\n case 'Last 7 days':\n filterOptions.startDateTimeUtc = dayjs().subtract(6, 'day').toISOString();\n filterOptions.endDateTimeUtc = dayjs().toISOString();\n break;\n }\n return filterOptions;\n}\n\n/**\n * Converts the end of the day of a local date/time into a UTC date/time.\n * @param dateFrom The date/time in local timezone of From date picker.\n * @param dateTo The date/time in local timezone of To date picker.\n * @param validDayRange The validation date range in days.\n * @returns A boolean represents the dateTo value and dateFrom range is valid or not.\n */\nexport function checkValidDateRange(dateFrom: string, dateTo: string, validDayRange: number): boolean {\n const dateRange = dayjs(dateTo).diff(dateFrom, 'day').toString();\n return parseInt(dateRange) < validDayRange;\n}\nexport default { toDateFormatted, toLocalDateFormatted, toDateIsoString, startOfDay, endOfDay };\n","import { GeoCoordinate, TrackableAssetState, TrackableAssetStateChangedMessage } from '@/api/types';\nimport store from '@/store/index';\nimport { Action, getModule, Mutation, VuexModule, Module } from 'vuex-module-decorators';\nimport Vue from 'vue';\n\n@Module({\n namespaced: true,\n name: 'trackingMod',\n dynamic: true,\n store\n})\nexport default class trackingModule extends VuexModule {\n trackableAssetStates: { [trackingDeviceIdentifier: string]: TrackableAssetState } = {};\n\n get getTrackableAssetHeading() {\n return (trackingDeviceIdentifier: string): number | null => {\n return this.trackableAssetStates[trackingDeviceIdentifier]?.heading;\n };\n }\n\n get getTrackableDateTimeUtc() {\n return (trackingDeviceIdentifier: string): Date | null => {\n return this.trackableAssetStates[trackingDeviceIdentifier]?.locationDateTimeUtc;\n };\n }\n\n get getTrackableAssetLocation() {\n return (trackingDeviceIdentifier: string): GeoCoordinate | null => {\n if (!this.trackableAssetStates[trackingDeviceIdentifier]) return null;\n\n return {\n latitude: this.trackableAssetStates[trackingDeviceIdentifier].latitude,\n longitude: this.trackableAssetStates[trackingDeviceIdentifier].longitude\n };\n };\n }\n\n @Mutation\n private SET_TRACKABLE_ASSET_STATE(payload: { key: string; trackableAssetState: TrackableAssetState }) {\n Vue.set(this.trackableAssetStates, payload.key, payload.trackableAssetState);\n }\n\n @Action({ rawError: true })\n setTrackableAssetState(trackableAssetStateChangedMessage: TrackableAssetStateChangedMessage) {\n this.SET_TRACKABLE_ASSET_STATE({\n key: trackableAssetStateChangedMessage.trackingDeviceIdentifier,\n trackableAssetState:\n trackableAssetStateChangedMessage.trackableAssetStates[\n trackableAssetStateChangedMessage.trackableAssetStates.length - 1\n ]\n });\n }\n}\n\nexport const trackingMod = getModule(trackingModule);\n","module.exports = __webpack_public_path__ + \"img/logo-primary.deac9e51.png\";","module.exports = \"data:image/png;base64,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\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#36ae6c\",\"secondary\":\"#3a3a3c\",\"surface\":\"#fff\",\"accent\":\"#40fe96\",\"brand\":\"#000\",\"textBrand\":\"#fff\"};","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"error-page-wrapper\",attrs:{\"fluid\":\"\"}},[_c('div',{staticClass:\"error-page__content-wrapper\"},[_c('div',{staticClass:\"error-page__content\"},[_c('h1',{staticClass:\"error-page__title\"},[_vm._v(\" \"+_vm._s(_vm.error.title)+\" \")]),_c('div',{staticClass:\"error-page__body\"},[_vm._v(\" \"+_vm._s(_vm.error.body)+\" \")]),(_vm.error.helperText)?_c('div',{staticClass:\"error-page__helper-test\"},[_vm._v(\" \"+_vm._s(_vm.error.helperText)+\" \")]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\n\ninterface Error {\n title: string;\n body: string;\n helperText?: string;\n}\n\nexport enum ErrorCode {\n NotAuthorized = 'not-authorised',\n NotFound = 'not-found',\n InvalidOrganisation = 'invalid-organisation'\n}\n\nconst errors: Record = {\n [ErrorCode.NotAuthorized]: {\n title: `Access denied`,\n body: `You do not have permission to access this page.`\n },\n [ErrorCode.NotFound]: {\n title: 'Page not found',\n body: `The page you are looking for does not exist.`\n },\n [ErrorCode.InvalidOrganisation]: {\n title: 'Access denied',\n body: `You do not have access to the application because you are not a member of the associated organisation.`,\n helperText: 'Please make sure the url you used is correct, and that you have a valid login.'\n },\n default: {\n title: 'Error',\n body: `Something went wrong.`\n }\n} as const;\n\n@Component({})\nexport default class ErrorPage extends Vue {\n @Prop({ required: false })\n private code!: keyof typeof errors | undefined;\n\n get error(): Error {\n if (this.code && errors[this.code]) {\n return errors[this.code];\n } else {\n return errors.default;\n }\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorPage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ErrorPage.vue?vue&type=template&id=30ed05fb&\"\nimport script from \"./ErrorPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./ErrorPage.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ErrorPage.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VContainer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VContainer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{style:(_vm.theme)},[_c('NavBar'),_c('RouterView')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-app-bar',{attrs:{\"dark\":\"\"}},[_c('v-img',{staticClass:\"shrink ml-5\",attrs:{\"alt\":((_vm.$tenant.tenantName) + \" Logo\"),\"contain\":\"\",\"src\":_vm.$theme.logoPrimaryPath,\"transition\":\"scale-transition\",\"width\":\"160\"}}),_c('div',{staticClass:\"title-clock\"},[_c('span',{staticClass:\"title-clock-time mr-2\"},[_vm._v(_vm._s(_vm.clock.time()))]),_c('span',{staticClass:\"mr-1\"},[_vm._v(\" UTC(\"+_vm._s(_vm.clock.timeZoneName())+\")\")]),_c('span',[_vm._v(\" \"+_vm._s(_vm.clock.utcOffset())+\" \")])]),(!_vm.$auth.loading)?_c('div',[(!_vm.$auth.isAuthenticated)?_c('v-btn',{staticClass:\"mx-2\",attrs:{\"text\":\"\"},on:{\"click\":_vm.login}},[_c('v-icon',[_vm._v(\"mdi-account-circle\")]),_c('span',{staticClass:\"ml-2 sign-out-text\"},[_vm._v(\"Sign In\")])],1):_c('v-btn',{staticClass:\"mx-2\",attrs:{\"text\":\"\"},on:{\"click\":_vm.logout}},[(_vm.$auth.user.picture)?_c('v-img',{staticClass:\"user-icon\",attrs:{\"src\":_vm.$auth.user.picture,\"height\":\"32\",\"width\":\"32\"}}):_c('v-icon',[_vm._v(\"mdi-account-circle\")]),_c('span',{staticClass:\"ml-2 sign-out-text\"},[_vm._v(\"Sign Out\")])],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { toDateFormatted } from '@/common/utils/date';\n\nexport class Clock {\n dateTime: Date;\n\n constructor(date = new Date()) {\n this.dateTime = date;\n }\n\n update(date: Date) {\n this.dateTime = date;\n }\n\n time() {\n return toDateFormatted(this.dateTime, 'HH:mm:ss');\n }\n\n timeZoneName() {\n return toDateFormatted(this.dateTime, 'Z');\n }\n\n utcOffset() {\n return toDateFormatted(this.dateTime, 'zzz');\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport { Clock } from '@/types/clock';\n\n@Component({\n name: 'NavBar'\n})\nexport default class NavBar extends Vue {\n private clock: Clock = new Clock();\n private timer: any = null;\n\n private updateClock(): void {\n this.clock.update(new Date());\n }\n\n private mounted(): void {\n this.timer = setInterval(this.updateClock, 1000);\n }\n\n private beforeDestroy() {\n clearInterval(this.timer);\n }\n\n private login() {\n this.$auth.loginWithRedirect({});\n }\n\n private logout() {\n this.$auth.logout({\n returnTo: window.location.origin\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NavBar.vue?vue&type=template&id=07f5a46d&scoped=true&\"\nimport script from \"./NavBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./NavBar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./NavBar.vue?vue&type=style&index=0&id=07f5a46d&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07f5a46d\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VImg})\n","\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=a9a80512&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\ninstallComponents(component, {VApp})\n","import { User as Auth0User } from '@auth0/auth0-spa-js';\n\nexport class User extends Auth0User {\n objectId?: string;\n\n constructor(auth0User?: Auth0User) {\n super();\n\n if (!auth0User) return;\n\n for (const key in auth0User) {\n this[key] = auth0User[key];\n }\n\n this.objectId = auth0User['http://onsend.com/identity/claims/objectid'] as string;\n }\n}\n","import axios from 'axios';\n\nasync function GetClientAccessUri(): Promise {\n try {\n const { data } = await axios.get(`${process.env.VUE_APP_FLEET_TRACKING_API_URL}/api/v1/client/negotiate`);\n\n return data.uri;\n } catch (err: unknown) {\n console.error(err);\n }\n}\n\nexport default {\n GetClientAccessUri\n};\n","import { getModule, Mutation, VuexModule, Module } from 'vuex-module-decorators';\nimport store from '@/store/index';\nimport { PermissionType } from '@/auth/permission';\n\n@Module({\n namespaced: true,\n name: 'authMod',\n dynamic: true,\n store\n})\nexport default class AuthModule extends VuexModule {\n private authAccessToken = '';\n private permissions: PermissionType[] = [];\n\n get getAuthAccessToken(): string {\n return this.authAccessToken;\n }\n\n get getPermissions(): PermissionType[] {\n return this.permissions;\n }\n\n @Mutation\n setAuthAccessToken(authAccessToken: string): void {\n this.authAccessToken = authAccessToken;\n }\n\n @Mutation\n setPermissions(permissions: PermissionType[]): void {\n this.permissions = permissions;\n }\n}\n\nexport const authMod = getModule(AuthModule);\n","/**\n * Returns a JS object representation of a Javascript Web Token from its common encoded\n * string form.\n *\n * @template T the expected shape of the parsed token\n * @param {string} token a Javascript Web Token in base64 encoded, `.` separated form\n * @returns {(T | undefined)} an object-representation of the token\n * or undefined if parsing failed\n */\nexport function getParsedJwt(token: string): T | undefined {\n try {\n return JSON.parse(atob(token.split('.')[1]));\n } catch {\n return undefined;\n }\n}\n","import { Vue, Component } from 'vue-property-decorator';\nimport createAuth0Client, {\n Auth0Client,\n RedirectLoginOptions,\n GetIdTokenClaimsOptions,\n GetTokenSilentlyOptions,\n LogoutOptions,\n Auth0ClientOptions\n} from '@auth0/auth0-spa-js';\nimport type { GenericError } from '@auth0/auth0-spa-js/dist/typings/errors';\nimport { User } from './types/user';\nimport axios from 'axios';\nimport { Auth0Options } from '@/auth/types/auth0Options';\nimport { RedirectCallback } from '@/auth/types/auth0PluginOptions';\nimport webpubsub from '@/api/webpubsub';\nimport { trackingMod } from '@/store/modules/tracking';\nimport { routeMod } from '@/store/modules/route';\nimport { TrackableAssetStateChangedMessage } from '@/api/types';\nimport { authMod } from '@/store/modules/auth';\nimport { getParsedJwt } from '@/common/utils/jwt';\nimport { IVueAuth, VueAuthErrorCode } from '@/auth/index';\n\n@Component({})\nexport class VueAuth extends Vue implements IVueAuth {\n loading = true;\n isAuthenticated? = false;\n user?: User;\n auth0Client?: Auth0Client;\n error?: Error;\n errorCode: VueAuthErrorCode | null = null;\n\n async getUser() {\n return new User(await this.auth0Client?.getUser());\n }\n\n /** Authenticates the user using the redirect method */\n loginWithRedirect(o: RedirectLoginOptions) {\n return this.auth0Client?.loginWithRedirect(o);\n }\n\n /** Returns all the claims present in the ID token */\n getIdTokenClaims(o: GetIdTokenClaimsOptions) {\n return this.auth0Client?.getIdTokenClaims(o);\n }\n\n /** Returns the access token. If the token is invalid or missing, a new one is retrieved */\n getTokenSilently(o: GetTokenSilentlyOptions) {\n return this.auth0Client?.getTokenSilently(o);\n }\n\n /** Logs the user out and removes their session on the authorization server */\n logout(o: LogoutOptions) {\n return this.auth0Client?.logout(o);\n }\n\n public async setUserPermission(): Promise {\n const accessToken = await this.$auth.getTokenSilently({});\n const decodedToken = getParsedJwt(accessToken!);\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + accessToken;\n\n await authMod.setPermissions(decodedToken.permissions);\n await authMod.setAuthAccessToken(accessToken!);\n }\n\n public async getUserObjectId(): Promise {\n return this.user!.objectId;\n }\n\n /** Use this lifecycle method to instantiate the SDK client */\n async init(onRedirectCallback: RedirectCallback, redirectUri: string, auth0Options: Auth0Options) {\n const options: Auth0ClientOptions = {\n domain: auth0Options.domain,\n client_id: auth0Options.clientId,\n audience: auth0Options.audience,\n redirect_uri: redirectUri\n };\n\n if (auth0Options.organizationId) {\n options.organization = auth0Options.organizationId;\n }\n\n // Create a new instance of the SDK client using members of the given options object\n this.auth0Client = await createAuth0Client(options);\n\n try {\n // If the user is returning to the app after authentication..\n\n if (\n window.location.search.includes('error=') ||\n (window.location.search.includes('code=') && window.location.search.includes('state='))\n ) {\n // handle the redirect and retrieve tokens\n const { appState } = (await this.auth0Client?.handleRedirectCallback()) ?? {\n appState: undefined\n };\n\n // Notify subscribers that the redirect callback has happened, passing the appState\n // (useful for retrieving any pre-authentication state)\n onRedirectCallback(appState);\n }\n } catch (e: unknown) {\n if (e instanceof Error) {\n if ('error' in e) {\n const auth0Error = e as GenericError;\n if (\n auth0Error.error === 'access_denied' &&\n auth0Error.error_description.includes('is not part of the org_')\n ) {\n this.errorCode = 'invalid_organisation';\n } else if (auth0Error.error === 'invalid_state') {\n this.errorCode = 'invalid_state';\n } else {\n this.errorCode = 'generic_error';\n }\n this.error = e;\n } else {\n this.errorCode = 'generic_error';\n this.error = e;\n }\n } else if (typeof e === 'string') {\n this.errorCode = 'generic_error';\n this.error = new Error(e);\n } else {\n this.errorCode = 'generic_error';\n this.error = new Error('Something went wrong');\n }\n } finally {\n // Initialize our internal authentication state when the page is reloaded\n this.isAuthenticated = await this.auth0Client?.isAuthenticated();\n this.user = await this.getUser();\n this.loading = false;\n\n const response = await webpubsub.GetClientAccessUri();\n\n const ws = new WebSocket(response);\n\n ws.onmessage = function (message) {\n const data: TrackableAssetStateChangedMessage = JSON.parse(message.data);\n\n trackingMod.setTrackableAssetState(data);\n routeMod.updateRouteTrackableAssetStates(data);\n };\n\n ws.onerror = function (data) {\n console.log(data);\n };\n }\n }\n}\n","import { VueAuth } from './VueAuth';\nimport axios from 'axios';\nimport { Auth0Options } from '@/auth/types/auth0Options';\n\n/** Define a default action to perform after authentication */\nconst DEFAULT_REDIRECT_CALLBACK = (appState: any) =>\n window.history.replaceState({}, document.title, window.location.pathname);\n\nlet instance: VueAuth;\n\n/** Returns the current instance of the SDK */\nexport const getInstance = () => instance;\n\n/** Creates an instance of the Auth0 SDK. If one has already been created, it returns that instance */\nexport const useAuth0 = ({\n onRedirectCallback = DEFAULT_REDIRECT_CALLBACK,\n redirectUri = window.location.origin,\n ...options\n}) => {\n if (instance) return instance;\n\n // The 'instance' is simply a Vue object\n instance = new VueAuth();\n instance.init(onRedirectCallback, redirectUri, options as Auth0Options);\n\n axios.interceptors.request.use(\n async function (config) {\n config.headers.Authorization = 'Bearer ' + (await instance.getTokenSilently({}));\n\n return config;\n },\n function (error) {\n // Do something with request error\n return Promise.reject(error);\n }\n );\n\n return instance;\n};\n","export enum PermissionType {\n appAccess = 'Access.TRACKING',\n maintain = 'Tracking.MAINTAIN'\n}\n","import { PermissionType } from '@/auth/permission';\nimport { authMod } from '@/store/modules/auth';\n\nexport function hasAnyPermissions(permToCheck: PermissionType[]): boolean {\n if (authMod.getPermissions) {\n return permToCheck.some((permission) => authMod.getPermissions.includes(permission));\n }\n return false;\n}\n\nexport function hasAllPermissions(permToCheck: PermissionType[]): boolean {\n if (authMod.getPermissions) {\n return permToCheck.every((permission) => authMod.getPermissions.includes(permission));\n }\n return false;\n}\n","import { NavigationGuardNext, Route } from 'vue-router';\nimport { getInstance } from '@/auth';\nimport { hasAllPermissions } from '@/services/PermissionService';\nimport { PermissionType } from '@/auth/permission';\nimport { authMod } from '@/store/modules/auth';\nimport { ErrorCode } from '@/components/ErrorPage.vue';\n\nexport async function authRouterGuard(to: Route, from: Route, next: any) {\n const authService = getInstance();\n\n const fn = async () => {\n unwatch && unwatch();\n\n if (authService.isAuthenticated) {\n if (authMod.getPermissions.length < 1) {\n await authService.setUserPermission();\n }\n next();\n } else if (to.meta?.isPublic) {\n next();\n } else if (authService.errorCode === 'invalid_organisation') {\n next({ name: 'errorRoute', params: { code: ErrorCode.InvalidOrganisation.toString() } });\n } else {\n authService.loginWithRedirect({\n appState: { targetUrl: to.fullPath }\n });\n }\n };\n\n // If loading has already finished, check our auth state using `fn()`\n if (!authService.loading) {\n return await fn();\n }\n\n // Watch for the loading property to change before we check isAuthenticated\n const unwatch = authService.$watch('loading', async (loading: boolean) => {\n if (loading === false) {\n return await fn();\n }\n });\n}\n\nexport function permissionRouterGuard(to: Route, from: Route, next: NavigationGuardNext): void {\n if (to.meta?.isPublic) {\n next();\n } else {\n const requiredPermission = [PermissionType.appAccess, to.meta?.permission].filter((p) => p);\n\n if (!hasAllPermissions(requiredPermission)) {\n next({ name: 'errorRoute', params: { code: ErrorCode.NotAuthorized.toString() } });\n } else {\n next();\n }\n }\n}\n","import Vue from 'vue';\nimport VueRouter, { RouteConfig } from 'vue-router';\nimport { authRouterGuard, permissionRouterGuard } from '@/router/guards';\nconst HomePage = () => import(/* webpackChunkName: 'home' */ '@/components/HomePage.vue');\nconst ErrorPage = () => import(/* webpackChunkName: 'home' */ '@/components/ErrorPage.vue');\n\nVue.use(VueRouter);\n\nconst routes: RouteConfig[] = [\n {\n path: '/',\n component: HomePage,\n meta: {\n isPublic: false\n }\n },\n {\n path: '/error/:code?',\n name: 'errorRoute',\n component: ErrorPage,\n props: true,\n meta: {\n isPublic: true\n }\n },\n {\n path: '*',\n redirect: '/'\n }\n];\n\nconst router = new VueRouter({\n mode: 'history',\n routes\n});\n\nrouter.beforeEach(authRouterGuard);\nrouter.beforeEach(permissionRouterGuard);\n\nexport default router;\n","import Vue from 'vue';\nimport { UserVuetifyPreset } from 'vuetify';\nimport Vuetify from 'vuetify/lib';\n\nconst opts: Partial = {\n theme: {\n dark: false,\n // disable: true, TODO: Enable this setting\n options: {\n customProperties: true,\n variations: false\n }\n }\n};\n\nVue.use(Vuetify);\n\nexport default new Vuetify(opts);\n","import { useAuth0 } from '@/auth';\nimport { Auth0PluginOptions } from '@/auth/types/auth0PluginOptions';\nimport { VueConstructor } from 'vue';\n\nexport default {\n install(Vue: VueConstructor, options: Auth0PluginOptions) {\n Vue.prototype.$auth = useAuth0(options);\n }\n};\n","import { PublicThemeProperties } from '@/common/AppTheme';\n\ninterface TenantSetting {\n id: number;\n name: string;\n value: string;\n isClientSettings: boolean;\n}\n\nexport interface TenantData {\n tenantId: number;\n tenantName: string;\n tenantCode: string;\n externalId: string;\n domains: string[];\n settings: TenantSetting[];\n}\n\nexport class Tenant {\n private tenantData: TenantData;\n\n constructor(tenantData: TenantData) {\n this.tenantData = tenantData;\n }\n\n get tenantName(): string {\n return this.tenantData.tenantName;\n }\n\n get tenantCode(): string {\n return this.tenantData.tenantCode;\n }\n\n get externalId(): string {\n return this.tenantData.externalId;\n }\n\n get settings(): TenantSetting[] {\n return this.tenantData.settings;\n }\n\n get themeProperties(): PublicThemeProperties | undefined {\n const themeSetting = this.settings.find((setting: TenantSetting) => setting.name === 'Client.Theme.Properties');\n\n if (!themeSetting) {\n return undefined;\n }\n\n return JSON.parse(themeSetting.value) as PublicThemeProperties;\n }\n}\n\nexport interface ITenantLoader {\n getTenantForHost(host: string): Promise;\n}\n\nexport class StaticTenantLoader implements ITenantLoader {\n tenants: TenantData[] = [\n {\n tenantId: 1000,\n tenantName: 'OnSend-devtest',\n tenantCode: '',\n externalId: 'org_YI7SFVOmL9DAtr9Z',\n domains: ['localhost', 'track-local.onsend.com', 'track-dev.onsend.com', 'track-test.onsend.com'],\n settings: []\n },\n\n {\n tenantId: 1001,\n tenantName: 'DragonFreight-devtest',\n tenantCode: '',\n externalId: 'org_nZSFcRT5Wny4EL2m',\n domains: ['track-local.dragon-freight.com', 'track-dev.dragon-freight.com', 'track-test.dragon-freight.com'],\n settings: []\n },\n\n {\n tenantId: 1002,\n tenantName: 'OnSend',\n tenantCode: '',\n externalId: 'org_J143vxecuSAqCmjo',\n domains: ['track.onsend.com'],\n settings: []\n },\n\n {\n tenantId: 1003,\n tenantName: 'DragonFreight',\n tenantCode: '',\n externalId: 'org_X3RcDMUYo1rvZhuK',\n domains: ['track.dragon-freight.com'],\n settings: []\n }\n ];\n\n async getTenantForHost(host: string): Promise {\n const tenantData = this.tenants.find((tenant) => tenant.domains.includes(host));\n\n if (!tenantData) {\n return undefined;\n }\n\n return new Tenant(tenantData);\n }\n}\n\nexport class ConfigurationServiceTenantLoader implements ITenantLoader {\n configurationServiceApiUrl: string;\n\n constructor(configurationServiceApiUrl: string) {\n this.configurationServiceApiUrl = configurationServiceApiUrl;\n }\n\n async getTenantForHost(host: string): Promise {\n const tenantConfigPath = `/api/v1/configuration/tenants/${host}/clientSettings`;\n const tenantResult = await fetch(`${this.configurationServiceApiUrl}${tenantConfigPath}`);\n const tenantData = (await tenantResult.json()) as TenantData;\n\n return new Tenant(tenantData);\n }\n}\n","import _defaultsDeep from 'lodash/defaultsDeep';\nimport Color from 'color';\nimport colours from '@/styles/base/_colours.scss';\nimport logoPrimary from '@/assets/images/logo-primary.png';\nimport logoSecondary from '@/assets/images/logo-secondary.png';\n\nexport interface ThemeProperties {\n assets: {\n 'logo-primary': string;\n 'logo-secondary': string;\n };\n colours: {\n 'primary-colour': string;\n 'secondary-colour': string;\n 'accent-colour': string;\n 'brand-colour': string;\n 'text-brand-colour': string;\n };\n}\n\nexport type PublicThemeProperties = Partial;\n\nconst defaultThemeProperties: ThemeProperties = {\n assets: {\n 'logo-primary': logoPrimary,\n 'logo-secondary': logoSecondary\n },\n colours: {\n 'primary-colour': colours.primary,\n 'secondary-colour': colours.secondary,\n 'accent-colour': colours.accent,\n 'brand-colour': colours.brand,\n 'text-brand-colour': colours.textBrand\n }\n};\n\nexport class AppTheme {\n themeProperties: ThemeProperties;\n\n constructor(themeProperties: PublicThemeProperties) {\n this.themeProperties = _defaultsDeep(themeProperties, defaultThemeProperties);\n }\n\n get logoPrimaryPath(): string {\n return this.themeProperties.assets['logo-primary'];\n }\n\n get logoSecondaryPath(): string {\n return this.themeProperties.assets['logo-secondary'];\n }\n\n get cssProps(): Record {\n const colours = this.themeProperties.colours;\n\n return {\n '--logo-primary-path': `url(${this.logoPrimaryPath})`,\n '--logo-secondary-path': `url(${this.logoSecondaryPath})`,\n\n '--base-primary-colour': colours['primary-colour']!,\n '--base-accent-colour': colours['accent-colour']!,\n '--base-brand-colour': colours['brand-colour']!,\n '--text-brand-colour': colours['text-brand-colour']!,\n\n '--highlight-primary-colour': Color(colours['primary-colour']).alpha(0.2).string()\n };\n }\n}\n","import Vue from 'vue';\nimport App from './App.vue';\nimport Vuex from 'vuex';\nimport router from './router';\nimport * as VueGoogleMaps from 'gmap-vue';\nimport vuetify from './plugins/vuetify';\nimport store from './store';\nimport GmapCluster from 'gmap-vue/dist/components/cluster';\nimport './styles/index.scss';\nimport Auth0 from './plugins/auth0';\nimport { ConfigurationServiceTenantLoader, ITenantLoader, StaticTenantLoader } from '@/common/tenants';\nimport { AppTheme } from '@/common/AppTheme';\n\n(async (): Promise => {\n let tenantLoader: ITenantLoader;\n const apiUrl = process.env.VUE_APP_CONFIGURATION_API_URL;\n if (apiUrl && apiUrl !== '') {\n console.log('Using configuration service tenant loader');\n tenantLoader = new ConfigurationServiceTenantLoader(apiUrl);\n } else {\n console.log('Using static tenant configuration');\n tenantLoader = new StaticTenantLoader();\n }\n\n const tenant = await tenantLoader.getTenantForHost(window.location.hostname);\n Vue.prototype.$tenant = tenant;\n Vue.prototype.$theme = new AppTheme(tenant?.themeProperties || {});\n\n Vue.use(VueGoogleMaps, {\n load: {\n v: 'beta',\n key: process.env.VUE_APP_GOOGLE_MAPS_API_KEY,\n map_ids: process.env.VUE_APP_GOOGLE_MAPS_STYLE_ID\n }\n });\n\n Vue.use(Vuex);\n\n Vue.component('GmapCluster', GmapCluster);\n\n Vue.use(Auth0, {\n domain: process.env.VUE_APP_AUTH0_DOMAIN,\n clientId: process.env.VUE_APP_AUTH0_CLIENT_ID,\n audience: process.env.VUE_APP_AUTH0_AUDIENCE,\n organizationId: tenant?.externalId,\n onRedirectCallback: (appState: any) => {\n router.push(appState?.targetUrl ?? window.location.pathname);\n }\n });\n\n new Vue({\n router,\n store,\n vuetify,\n render: (h) => h(App)\n }).$mount('#app');\n})();\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=style&index=0&id=07f5a46d&lang=scss&scoped=true&\""],"sourceRoot":""}