{"version":3,"sources":["vendor/ember-cli/app-prefix.js","garage/adapters/location.js","garage/app.js","garage/application/adapter.js","garage/authenticators/auth0-base.js","garage/authenticators/auth0-lock-passwordless.js","garage/authenticators/auth0-lock.js","garage/authenticators/auth0-url-hash.js","garage/authorizers/jwt.js","garage/capacity-unit/model.js","garage/components/address-complete/component.js","garage/components/address-complete/template.js","garage/components/array-path-layer.js","garage/components/base-layer.js","garage/components/basic-dropdown.js","garage/components/basic-dropdown/content-element.js","garage/components/basic-dropdown/content.js","garage/components/basic-dropdown/trigger.js","garage/components/bootstrap-datepicker-inline.js","garage/components/bootstrap-datepicker.js","garage/components/capacity-row/component.js","garage/components/capacity-row/template.js","garage/components/circle-layer.js","garage/components/circle-marker-layer.js","garage/components/container-layer.js","garage/components/custom-translate/component.js","garage/components/custom-translate/template.js","garage/components/div-overlay-layer.js","garage/components/ember-wormhole.js","garage/components/form-control.js","garage/components/geojson-layer.js","garage/components/image-layer.js","garage/components/import-data/component.js","garage/components/import-data/template.js","garage/components/import-panel/component.js","garage/components/import-panel/template.js","garage/components/leaflet-map.js","garage/components/marker-layer.js","garage/components/path-layer.js","garage/components/point-path-layer.js","garage/components/polygon-layer.js","garage/components/polyline-layer.js","garage/components/popup-layer.js","garage/components/quill-wrapper/component.js","garage/components/quill-wrapper/template.js","garage/components/select-dropdown-group.js","garage/components/select-dropdown-option.js","garage/components/select-dropdown.js","garage/components/tile-layer.js","garage/components/tooltip-layer.js","garage/components/validatable-form.js","garage/components/vehicle-menu-tabs/component.js","garage/components/vehicle-menu-tabs/template.js","garage/components/vinka-button/component.js","garage/components/vinka-button/template.js","garage/components/vinka-common-tabs/component.js","garage/components/vinka-common-tabs/template.js","garage/components/vinka-dropdown/component.js","garage/components/vinka-dropdown/template.js","garage/components/vinka-menu/component.js","garage/components/vinka-menu/template.js","garage/components/vinka-password/component.js","garage/components/vinka-password/template.js","garage/components/vinka-sort-sign/component.js","garage/components/vinka-sort-sign/template.js","garage/components/vinka-table/component.js","garage/components/vinka-table/template.js","garage/components/vinka-toggle/component.js","garage/components/vinka-toggle/template.js","garage/components/welcome-page.js","garage/components/wms-tile-layer.js","garage/components/x-select.js","garage/current-user/service.js","garage/dispatch-area/transform.js","garage/driver/driver/index/route.js","garage/driver/driver/index/template.js","garage/driver/driver/route.js","garage/driver/driver/template.js","garage/driver/index/route.js","garage/driver/index/template.js","garage/driver/model.js","garage/driver/route.js","garage/driver/template.js","garage/exporter/service.js","garage/field-config/route.js","garage/field-config/template.js","garage/fleet/model.js","garage/garage/model.js","garage/helpers/and.js","garage/helpers/api-error-handler.js","garage/helpers/app-version.js","garage/helpers/div-icon.js","garage/helpers/eq.js","garage/helpers/field-access.js","garage/helpers/get-property.js","garage/helpers/gt.js","garage/helpers/gte.js","garage/helpers/has-permission.js","garage/helpers/icon.js","garage/helpers/is-array.js","garage/helpers/is-current-tab.js","garage/helpers/is-current.js","garage/helpers/is-empty.js","garage/helpers/is-equal.js","garage/helpers/is-hidden.js","garage/helpers/json.js","garage/helpers/lat-lng-bounds.js","garage/helpers/localize-if.js","garage/helpers/lt.js","garage/helpers/lte.js","garage/helpers/not-eq.js","garage/helpers/not.js","garage/helpers/or.js","garage/helpers/permission-utils.js","garage/helpers/pluralize.js","garage/helpers/point.js","garage/helpers/route-action.js","garage/helpers/singularize.js","garage/helpers/t.js","garage/helpers/text-counter.js","garage/helpers/translate-option-key.js","garage/helpers/utils.js","garage/helpers/vehicle-title-classes.js","garage/helpers/xor.js","garage/index/route.js","garage/initializers/app-version.js","garage/initializers/application.js","garage/initializers/container-debug-adapter.js","garage/initializers/data-adapter.js","garage/initializers/ember-cli-mirage.js","garage/initializers/ember-data.js","garage/initializers/ember-i18n.js","garage/initializers/ember-simple-auth.js","garage/initializers/export-application-global.js","garage/initializers/html5-validation.js","garage/initializers/injectStore.js","garage/initializers/leaflet-assets.js","garage/initializers/simple-auth-token.js","garage/initializers/store.js","garage/initializers/transforms.js","garage/initializers/user-locale.js","garage/instance-initializers/ember-cli-mirage-autostart.js","garage/instance-initializers/ember-data.js","garage/instance-initializers/ember-i18n.js","garage/instance-initializers/ember-simple-auth.js","garage/license-settings/route.js","garage/license-settings/template.js","garage/license/model.js","garage/locales/en/translations.js","garage/locales/fi/config.js","garage/locales/fi/translations.js","garage/location/model.js","garage/login/route.js","garage/login/template.js","garage/logout/route.js","garage/logout/template.js","garage/mbr-vehicles-parser/service.js","garage/mirage/config.js","garage/mirage/fixtures/capacity-units.js","garage/mirage/fixtures/fleets.js","garage/mirage/fixtures/operators.js","garage/mirage/fixtures/shift-groups.js","garage/mirage/fixtures/vehicle-attribute.js","garage/mirage/fixtures/vehicles.js","garage/mirage/fixtures/vehicletype.js","garage/mirage/scenarios/default.js","garage/mirage/serializers/application.js","garage/mixins/application-route-mixin.js","garage/mixins/restricted-route-mixin.js","garage/modal-message/service.js","garage/models/attribute.js","garage/models/capacity.js","garage/models/contract.js","garage/models/option-set.js","garage/models/permission.js","garage/operator/import/route.js","garage/operator/import/template.js","garage/operator/index/route.js","garage/operator/index/template.js","garage/operator/model.js","garage/operator/operator/driver/route.js","garage/operator/operator/driver/template.js","garage/operator/operator/index/route.js","garage/operator/operator/index/template.js","garage/operator/operator/report/route.js","garage/operator/operator/report/template.js","garage/operator/operator/reports/route.js","garage/operator/operator/reports/template.js","garage/operator/operator/route.js","garage/operator/operator/template.js","garage/operator/operator/vehicle/route.js","garage/operator/operator/vehicle/template.js","garage/operator/route.js","garage/operator/service.js","garage/operator/template.js","garage/resolver.js","garage/router.js","garage/routes/application.js","garage/serializers/application.js","garage/serializers/permission.js","garage/serializers/user.js","garage/services/ajax.js","garage/services/auth0.js","garage/services/cookies.js","garage/services/i18n.js","garage/services/session.js","garage/session-stores/application.js","garage/settings/route.js","garage/settings/template.js","garage/shift-group/model.js","garage/shift-template/adapter.js","garage/shift-template/model.js","garage/templates/application.js","garage/tests/mirage/mirage.lint-test.js","garage/user/model.js","garage/user/route.js","garage/user/template.js","garage/utils/create-session-data-object.js","garage/utils/i18n/compile-template.js","garage/utils/i18n/missing-message.js","garage/utils/semver.js","garage/utils/tree.js","garage/utils/view.js","garage/vehicle-attribute/model.js","garage/vehicle-export/service.js","garage/vehicle-import/service.js","garage/vehicle/import/route.js","garage/vehicle/import/template.js","garage/vehicle/index/route.js","garage/vehicle/index/template.js","garage/vehicle/model.js","garage/vehicle/route.js","garage/vehicle/template.js","garage/vehicle/vehicle/attribute/route.js","garage/vehicle/vehicle/attribute/template.js","garage/vehicle/vehicle/capacity/route.js","garage/vehicle/vehicle/capacity/template.js","garage/vehicle/vehicle/garage/route.js","garage/vehicle/vehicle/garage/template.js","garage/vehicle/vehicle/index/route.js","garage/vehicle/vehicle/index/template.js","garage/vehicle/vehicle/route.js","garage/vehicle/vehicle/shift/route.js","garage/vehicle/vehicle/shift/template.js","garage/vehicle/vehicle/template.js","garage/vehicle/vehicle/terminal/route.js","garage/vehicle/vehicle/terminal/template.js","garage/vehicletype/model.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["\"use strict\";\n\n\n","define('garage/adapters/location', ['exports', 'ember-data', 'garage/config/environment'], function (exports, _emberData, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.JSONAPIAdapter.extend({\n\n        host: _environment.default.APP.geo.host + ':' + _environment.default.APP.geo.port,\n\n        pathForType: function pathForType() /*type*/{\n            return _environment.default.APP.geo.path;\n        }\n    });\n});","define('garage/app', ['exports', 'garage/resolver', 'ember-load-initializers', 'garage/config/environment'], function (exports, _resolver, _emberLoadInitializers, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var App = void 0;\n\n    App = Ember.Application.extend({\n        modulePrefix: _environment.default.modulePrefix,\n        podModulePrefix: _environment.default.podModulePrefix,\n        Resolver: _resolver.default\n    });\n\n    (0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);\n\n    exports.default = App;\n});","define('garage/application/adapter', ['exports', 'ember-data', 'garage/config/environment', 'ember-simple-auth/mixins/data-adapter-mixin'], function (exports, _emberData, _environment, _dataAdapterMixin) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.JSONAPIAdapter.extend(_dataAdapterMixin.default, {\n        // namespace: 'api',\n        session: Ember.inject.service('session'),\n        host: '' + _environment.default.APP.api.host,\n\n        authorize: function authorize(xhr) {\n            var accessToken = this.get('session.data.authenticated.accessToken');\n            xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);\n        },\n\n\n        // response handler for converting api errors into form, that ember DS accepts\n        // (otherwise error shows as string \"[object object]\")\n        handleResponse: function handleResponse(status, headers, payload) {\n            if (status >= 400 && status < 500) {\n                var errors = payload.errors ? payload.errors : [payload];\n                if (status === 401) {\n                    console.log('should redirect to login route');\n                    this.get('session').invalidate();\n                }\n                return new _emberData.default.InvalidError(errors);\n            }\n\n            return this._super.apply(this, arguments);\n        }\n    });\n});","define('garage/authenticators/auth0-base', ['exports', 'ember-simple-auth-auth0/authenticators/auth0-lock'], function (exports, _auth0Lock) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _auth0Lock.default;\n    }\n  });\n});","define('garage/authenticators/auth0-lock-passwordless', ['exports', 'ember-simple-auth-auth0/authenticators/auth0-lock-passwordless'], function (exports, _auth0LockPasswordless) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _auth0LockPasswordless.default;\n    }\n  });\n});","define('garage/authenticators/auth0-lock', ['exports', 'ember-simple-auth-auth0/authenticators/auth0-lock'], function (exports, _auth0Lock) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _auth0Lock.default;\n    }\n  });\n});","define('garage/authenticators/auth0-url-hash', ['exports', 'ember-simple-auth-auth0/authenticators/auth0-url-hash'], function (exports, _auth0UrlHash) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _auth0UrlHash.default;\n    }\n  });\n});","define('garage/authorizers/jwt', ['exports', 'ember-simple-auth-auth0/authorizers/jwt'], function (exports, _jwt) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _jwt.default;\n    }\n  });\n});","define('garage/capacity-unit/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        value: _emberData.default.attr('number'),\n        loadTime: _emberData.default.attr('number'),\n        unloadTime: _emberData.default.attr('number')\n    });\n});","define('garage/components/address-complete/component', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            var elem = this.$('input[type=\"search\"]');\n            var cache = {};\n\n            elem.autocomplete({\n                autoFocus: true,\n                minLength: 3,\n                delay: 500,\n                source: function source(input, cb) {\n                    if (input.term in cache) {\n                        return cb(cache[input.term]);\n                    }\n\n                    Ember.$.get(_environment.default.APP.geo.host + '/search/2/geocode/' + input.term + '.json?countrySet=' + _environment.default.APP.geo.countrySet + '&key=' + _environment.default.APP.geo.key).then(function (response) {\n                        var result = response.results.map(function (i) {\n                            return {\n                                label: i.type + ': ' + i.address.freeformAddress,\n                                value: i.type + ': ' + i.address.freeformAddress,\n                                data: i\n                            };\n                        });\n\n                        cache[input.term] = result;\n\n                        cb(result);\n                    }).catch(function (err) {\n                        return Ember.Logger.error('auto-complete failed to query the API', err);\n                    });\n                },\n\n                select: function select(event, ui) {\n                    _this.get('selected')(ui.item.data);\n                }\n            });\n\n            elem.keydown(function (event) {\n                if (event.keyCode === 13) {\n                    event.preventDefault();\n                    return false;\n                }\n            });\n        }\n    });\n});","define(\"garage/components/address-complete/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"tHkFFIXQ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"placeholder\\\",\\\"value\\\"],[\\\"form-control input-invalid-data\\\",\\\"search\\\",[25,\\\"t\\\",[\\\"form.placeholder.lookup\\\"],null],[20,[\\\"value\\\"]]]]],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/address-complete/template.hbs\" } });\n});","define('garage/components/array-path-layer', ['exports', 'ember-leaflet/components/array-path-layer'], function (exports, _arrayPathLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _arrayPathLayer.default;\n    }\n  });\n});","define('garage/components/base-layer', ['exports', 'ember-leaflet/components/base-layer'], function (exports, _baseLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _baseLayer.default;\n    }\n  });\n});","define('garage/components/basic-dropdown', ['exports', 'ember-basic-dropdown/components/basic-dropdown'], function (exports, _basicDropdown) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _basicDropdown.default;\n    }\n  });\n});","define('garage/components/basic-dropdown/content-element', ['exports', 'ember-basic-dropdown/components/basic-dropdown/content-element'], function (exports, _contentElement) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _contentElement.default;\n    }\n  });\n});","define('garage/components/basic-dropdown/content', ['exports', 'ember-basic-dropdown/components/basic-dropdown/content'], function (exports, _content) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _content.default;\n    }\n  });\n});","define('garage/components/basic-dropdown/trigger', ['exports', 'ember-basic-dropdown/components/basic-dropdown/trigger'], function (exports, _trigger) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _trigger.default;\n    }\n  });\n});","define('garage/components/bootstrap-datepicker-inline', ['exports', 'ember-cli-bootstrap-datepicker/components/bootstrap-datepicker-inline'], function (exports, _bootstrapDatepickerInline) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _bootstrapDatepickerInline.default;\n});","define('garage/components/bootstrap-datepicker', ['exports', 'ember-cli-bootstrap-datepicker/components/bootstrap-datepicker'], function (exports, _bootstrapDatepicker) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _bootstrapDatepicker.default;\n});","define('garage/components/capacity-row/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        tagName: 'div',\n        classNames: ['capacity-row'],\n        capacityInputs: null,\n        capacityConfigs: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (this.get('capacityConfigs') === null) {\n                this.set('capacityConfigs', []);\n            }\n        },\n        _isAddMode: function _isAddMode() {\n            return !!this.get('addCapacityRow');\n        },\n        _initInputs: function _initInputs() {\n            var _this = this;\n\n            var items = this.get('capacityOptions').map(function (i) {\n                return Ember.Object.create({\n                    value: _this._getCapacityValue(i.id),\n                    id: i.id\n                });\n            });\n            this.set('capacityInputs', items);\n        },\n        _getCapacityValue: function _getCapacityValue(id) {\n            var caps = this.get('capacityConfigs');\n            var found = caps.find(function (i) {\n                return i.unitId === id;\n            });\n            if (found) {\n                return found.count;\n            }\n            return 0;\n        },\n        didReceiveAttrs: function didReceiveAttrs() {\n            this._initInputs();\n        },\n\n\n        actions: {\n            capacityChanged: function capacityChanged() {\n                var inputs = this.get('capacityInputs');\n                var capacityConfigs = this.get('capacityConfigs');\n                var newCapacities = [];\n                var hasChanges = false;\n\n                // compare if something changed, if is: update values and send event for marking changed\n                inputs.forEach(function (i) {\n                    var val = parseInt(i.value, 10);\n                    val = !isNaN(val) ? val : 0;\n\n                    if (val > 0) {\n                        newCapacities.push({ unitId: i.id, count: val });\n                    }\n\n                    var foundIndex = capacityConfigs.findIndex(function (c) {\n                        return c.unitId === i.id;\n                    });\n                    if (foundIndex !== -1 && capacityConfigs[foundIndex].count !== val) {\n                        // old value changed (modify or remove) -> update\n                        hasChanges = true;\n                    } else if (foundIndex === -1 && i.value > 0) {\n                        // add\n                        hasChanges = true;\n                    }\n                });\n                if (hasChanges && !this._isAddMode()) {\n                    // notify with old, new values\n                    this.get('capacitiesChanged')(capacityConfigs, newCapacities);\n                }\n            },\n            removeThis: function removeThis() {\n                this.get('removeCapacityRow')(this.get('capacityConfigs'));\n            },\n            addThis: function addThis() {\n                var inputs = this.get('capacityInputs');\n                var newCapacities = [];\n                inputs.forEach(function (i) {\n                    var val = parseInt(i.value, 10);\n                    val = !isNaN(val) ? val : 0;\n\n                    if (val > 0) {\n                        newCapacities.push({ unitId: i.id, count: val });\n                    }\n                });\n                this.get('addCapacityRow')(newCapacities);\n\n                // revert this form\n                this.set('capacityConfigs', []);\n                this._initInputs();\n            }\n        }\n    });\n});","define(\"garage/components/capacity-row/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ASCnedjH\", \"block\": \"{\\\"symbols\\\":[\\\"capacity\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-table\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-tr\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"capacityInputs\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-td\\\"],[7],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"focus-out\\\",\\\"min\\\",\\\"class\\\"],[\\\"number\\\",[19,1,[\\\"value\\\"]],\\\"capacityChanged\\\",\\\"0\\\",\\\"tiny\\\"]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"addCapacityRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"addThis\\\"]],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-plus\\\"],[7],[8],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"removeThis\\\"]],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-trash\\\"],[7],[8],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/capacity-row/template.hbs\" } });\n});","define('garage/components/circle-layer', ['exports', 'ember-leaflet/components/circle-layer'], function (exports, _circleLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _circleLayer.default;\n    }\n  });\n});","define('garage/components/circle-marker-layer', ['exports', 'ember-leaflet/components/circle-marker-layer'], function (exports, _circleMarkerLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _circleMarkerLayer.default;\n    }\n  });\n});","define('garage/components/container-layer', ['exports', 'ember-leaflet/components/container-layer'], function (exports, _containerLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _containerLayer.default;\n    }\n  });\n});","define('garage/components/custom-translate/component', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        i18n: Ember.inject.service(),\n\n        translation: Ember.computed('key', 'i18n.locale', function () {\n            var customer = _environment.default.i18n.customerLocale;\n            var text = '';\n            var loc = this.get('key');\n            if (customer && customer !== 'default') {\n                text = this.get('i18n').t('customerLocale.' + customer + '.' + loc, {\n                    default: loc\n                });\n            } else {\n                text = this.get('i18n').t(loc);\n            }\n\n            return text;\n        })\n    });\n});","define(\"garage/components/custom-translate/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"M5+oVLO5\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[18,\\\"translation\\\"],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/custom-translate/template.hbs\" } });\n});","define('garage/components/div-overlay-layer', ['exports', 'ember-leaflet/components/div-overlay-layer'], function (exports, _divOverlayLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _divOverlayLayer.default;\n    }\n  });\n});","define('garage/components/ember-wormhole', ['exports', 'ember-wormhole/components/ember-wormhole'], function (exports, _emberWormhole) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _emberWormhole.default;\n    }\n  });\n});","define('garage/components/form-control', ['exports', 'ember-cli-html5-validation/components/form-control'], function (exports, _formControl) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _formControl.default;\n    }\n  });\n});","define('garage/components/geojson-layer', ['exports', 'ember-leaflet/components/geojson-layer'], function (exports, _geojsonLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _geojsonLayer.default;\n    }\n  });\n});","define('garage/components/image-layer', ['exports', 'ember-leaflet/components/image-layer'], function (exports, _imageLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _imageLayer.default;\n    }\n  });\n});","define('garage/components/import-data/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        actions: {\n            selectImportedItem: function selectImportedItem(item) {\n                this.selectImportedItem(item);\n            },\n            saveAll: function saveAll() {\n                this.saveAll();\n            },\n            clear: function clear() {\n                this.clearUnsaved();\n                this.refresh();\n            }\n        }\n    });\n});","define(\"garage/components/import-data/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"KoOzV//m\", \"block\": \"{\\\"symbols\\\":[\\\"importedItem\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"card\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"card-block\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"table-wrapper\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"importedItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"list-group-item list-group-item-action \\\",[25,\\\"is-hidden\\\",[[19,1,[\\\"filtered\\\"]]],null],\\\" \\\",[25,\\\"is-current\\\",[[19,1,[\\\"id\\\"]],[20,[\\\"model\\\",\\\"selected\\\",\\\"id\\\"]]],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"selectImportedItem\\\",[19,1,[]]]],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"dirty\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"if\\\",[[25,\\\"eq\\\",[[20,[\\\"type\\\"]],\\\"vehicle\\\"],null],[19,1,[\\\"name\\\"]]],null],false],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"if\\\",[[25,\\\"eq\\\",[[20,[\\\"type\\\"]],\\\"operator\\\"],null],[19,1,[\\\"companyName\\\"]]],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"import-buttons\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-sm btn-primary\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveAll\\\"]],[7],[1,[25,\\\"t\\\",[\\\"import.save\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-sm btn-primary\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"clear\\\"]],[7],[1,[25,\\\"t\\\",[\\\"import.clear\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/import-data/template.hbs\" } });\n});","define('garage/components/import-panel/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        classNames: ['import-area'],\n        classNameBindings: ['dragClass'],\n\n        dragActive: false,\n\n        dragClass: Ember.computed('dragActive', function () {\n            if (this.get('dragActive')) {\n                return 'drag-active';\n            } else {\n                return '';\n            }\n        }),\n\n        dragEnter: function dragEnter(e) {\n            e.preventDefault();\n            this.set('dragActive', true);\n        },\n        dragLeave: function dragLeave() /*e*/{\n            // e.preventDefault();\n            this.set('dragActive', false);\n        },\n        dragEnd: function dragEnd(e) {\n            e.preventDefault();\n            this.set('dragActive', false);\n        },\n        dragOver: function dragOver(e) {\n            e.preventDefault();\n        },\n        drop: function drop(e /*, a*/) {\n            e.preventDefault();\n            this.set('dragActive', false);\n            this.dropped(e);\n        }\n    });\n});","define(\"garage/components/import-panel/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"D2tPWFJG\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/import-panel/template.hbs\" } });\n});","define('garage/components/leaflet-map', ['exports', 'ember-leaflet/components/leaflet-map'], function (exports, _leafletMap) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _leafletMap.default;\n    }\n  });\n});","define('garage/components/marker-layer', ['exports', 'ember-leaflet/components/marker-layer'], function (exports, _markerLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _markerLayer.default;\n    }\n  });\n});","define('garage/components/path-layer', ['exports', 'ember-leaflet/components/path-layer'], function (exports, _pathLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _pathLayer.default;\n    }\n  });\n});","define('garage/components/point-path-layer', ['exports', 'ember-leaflet/components/point-path-layer'], function (exports, _pointPathLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _pointPathLayer.default;\n    }\n  });\n});","define('garage/components/polygon-layer', ['exports', 'ember-leaflet/components/polygon-layer'], function (exports, _polygonLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _polygonLayer.default;\n    }\n  });\n});","define('garage/components/polyline-layer', ['exports', 'ember-leaflet/components/polyline-layer'], function (exports, _polylineLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _polylineLayer.default;\n    }\n  });\n});","define('garage/components/popup-layer', ['exports', 'ember-leaflet/components/popup-layer'], function (exports, _popupLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _popupLayer.default;\n    }\n  });\n});","define('garage/components/quill-wrapper/component', ['exports', 'quill'], function (exports, _quill) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var defaultSettings = {\n        modules: {\n            toolbar: [[{ header: [1, 2, 3, 4, false] }], ['bold', 'italic', 'underline', 'link']]\n        },\n        placeholder: '...',\n        theme: 'snow'\n    };\n\n    /**\n     * A WYSIWYG text editor component, in essence a wrapper for the quill library.\n     * \n     * The editor is customizable with the same options available for a Quill instance,\n     * with the prop \"settings\". See the available settings at https://quilljs.com/docs/configuration/.\n     *  A default configuration is used if one is not provided.\n     * \n     * It calls the onTextChange callback given as a prop, every time the contents within the editor\n     * change. The contents are the actuar inner HTML produced within the editor. HTML is used because \n     * Quill only supports a non-standard markup.\n     * \n     * The initial HTML content for the editor can be provided with prop intialContent.\n     */\n    exports.default = Ember.Component.extend({\n        didReceiveAttrs: function didReceiveAttrs() {\n            this._super.apply(this, arguments);\n            if (this.get('editor')) {\n                this.get('editor').root.innerHTML = this.get('initialContent') || '';\n            }\n        },\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set('editor', new _quill.default('#editor', this.get('settings') || defaultSettings));\n            this.get('editor').root.setAttribute('spellcheck', false);\n\n            if (this.get('initialContent')) {\n                this.get('editor').root.innerHTML = this.get('initialContent');\n            }\n\n            this.get('editor').on('text-change', function () {\n                return _this.send('sendTextChange');\n            });\n        },\n        getInnerHTML: function getInnerHTML() {\n            return this.get('editor').root.innerHTML;\n        },\n        setInnerHTML: function setInnerHTML(html) {\n            this.get('editor').root.innerHTML = html;\n        },\n\n\n        actions: {\n            sendTextChange: function sendTextChange() {\n                this.get('onTextChange')(this.getInnerHTML());\n            }\n        }\n    });\n});","define(\"garage/components/quill-wrapper/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xFh1jupc\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"id\\\",\\\"editor\\\"],[9,\\\"class\\\",\\\"quill-wrapper-editor\\\"],[7],[0,\\\"\\\\n\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/quill-wrapper/template.hbs\" } });\n});","define('garage/components/select-dropdown-group', ['exports', 'ember-select/components/select-dropdown-group'], function (exports, _selectDropdownGroup) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _selectDropdownGroup.default;\n    }\n  });\n});","define('garage/components/select-dropdown-option', ['exports', 'ember-select/components/select-dropdown-option'], function (exports, _selectDropdownOption) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _selectDropdownOption.default;\n    }\n  });\n});","define('garage/components/select-dropdown', ['exports', 'ember-select/components/select-dropdown'], function (exports, _selectDropdown) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _selectDropdown.default;\n    }\n  });\n});","define('garage/components/tile-layer', ['exports', 'ember-leaflet/components/tile-layer'], function (exports, _tileLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _tileLayer.default;\n    }\n  });\n});","define('garage/components/tooltip-layer', ['exports', 'ember-leaflet/components/tooltip-layer'], function (exports, _tooltipLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _tooltipLayer.default;\n    }\n  });\n});","define('garage/components/validatable-form', ['exports', 'ember-cli-html5-validation/components/validatable-form'], function (exports, _validatableForm) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _validatableForm.default;\n    }\n  });\n});","define('garage/components/vehicle-menu-tabs/component', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        hideShiftTab: !_environment.default.APP.ui.showShiftTab\n    });\n});","define(\"garage/components/vehicle-menu-tabs/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"x/CVhXiG\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"ul\\\"],[9,\\\"class\\\",\\\"nav nav-tabs\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"li\\\"],[9,\\\"class\\\",\\\"nav-item\\\"],[7],[0,\\\"\\\\n        \\\"],[4,\\\"link-to\\\",[\\\"vehicle.vehicle.index\\\",[20,[\\\"model\\\",\\\"id\\\"]]],[[\\\"class\\\"],[\\\"nav-link {{is-current-tab 'index'}}\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Vehicle\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"li\\\"],[9,\\\"class\\\",\\\"nav-item\\\"],[7],[0,\\\"\\\\n        \\\"],[4,\\\"link-to\\\",[\\\"vehicle.vehicle.capacity\\\",[20,[\\\"model\\\",\\\"id\\\"]]],[[\\\"class\\\"],[\\\"nav-link {{is-current-tab 'capacity'}}\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Capacity\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"li\\\"],[9,\\\"class\\\",\\\"nav-item\\\"],[7],[0,\\\"\\\\n        \\\"],[4,\\\"link-to\\\",[\\\"vehicle.vehicle.attribute\\\",[20,[\\\"model\\\",\\\"id\\\"]]],[[\\\"class\\\"],[\\\"nav-link {{is-current-tab 'attribute'}}\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Attributes\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"li\\\"],[9,\\\"class\\\",\\\"nav-item\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"link-to\\\",[\\\"vehicle.vehicle.shift\\\",[20,[\\\"model\\\",\\\"id\\\"]]],[[\\\"disabled\\\",\\\"class\\\"],[[20,[\\\"hideShiftTab\\\"]],[25,\\\"concat\\\",[\\\"nav-link {{is-current-tab 'shift'}}\\\",\\\" \\\",[25,\\\"if\\\",[[20,[\\\"hideShiftTab\\\"]],\\\"disabled\\\"],null],\\\" \\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[25,\\\"t\\\",[\\\"tab.Shift\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"li\\\"],[9,\\\"class\\\",\\\"nav-item\\\"],[7],[0,\\\"\\\\n        \\\"],[4,\\\"link-to\\\",[\\\"vehicle.vehicle.garage\\\",[20,[\\\"model\\\",\\\"id\\\"]]],[[\\\"class\\\"],[\\\"nav-link {{is-current-tab 'garage'}}\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Garage\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[2,\\\"\\\\n    <li class=\\\\\\\"nav-item\\\\\\\">\\\\n        {{#link-to \\\\\\\"vehicle.vehicle.terminal\\\\\\\" model.id class=\\\\\\\"nav-link {{is-current-tab 'terminal'}}\\\\\\\"}}{{t 'tab.Terminal'}}{{/link-to}}\\\\n    </li>\\\\n    \\\"],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vehicle-menu-tabs/template.hbs\" } });\n});","define('garage/components/vinka-button/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    /**\n     * A button with automatic translation and disabling.\n     *\n     * Example:\n     *\n     * {{vinka-button \"Name\" model.buttonOn}}\n     *\n     * Title is automatically translated from `button.name` string.\n     * If second argument changes, the it enables when it turns to true.\n     * Additional argument `style` is used as CSS class for the button if given.\n     * Handler action can be defined as `onClick` action attribute.\n     */\n    var Button = Ember.Component.extend({\n\n        title: null,\n\n        i18n: Ember.inject.service(),\n\n        disabled: Ember.computed('params.@each', function () {\n            return !this.get('params') || !this.get('params')[1];\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set('title', this.get('i18n').t('button.' + this.get('params')[0]).string);\n            var style = this.get('style');\n            if (!style) {\n                style = 'btn btn-secondary pull-left';\n            }\n            this.set('style', style);\n        },\n\n\n        actions: {\n            buttonClick: function buttonClick() {\n                var onClick = this.get('onClick');\n                if (onClick) {\n                    onClick();\n                }\n            }\n        }\n    });\n\n    Button.reopenClass({\n        positionalParams: 'params'\n    });\n\n    exports.default = Button;\n});","define(\"garage/components/vinka-button/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"d3vBhC7Q\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[10,\\\"disabled\\\",[18,\\\"disabled\\\"],null],[10,\\\"class\\\",[26,[[18,\\\"style\\\"]]]],[3,\\\"action\\\",[[19,0,[]],\\\"buttonClick\\\"]],[7],[1,[18,\\\"title\\\"],false],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-button/template.hbs\" } });\n});","define('garage/components/vinka-common-tabs/component', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({});\n});","define(\"garage/components/vinka-common-tabs/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sep0SVYB\", \"block\": \"{\\\"symbols\\\":[\\\"tab\\\"],\\\"statements\\\":[[6,\\\"ul\\\"],[9,\\\"class\\\",\\\"nav nav-tabs\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"tabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"li\\\"],[9,\\\"class\\\",\\\"nav-item\\\"],[7],[4,\\\"link-to\\\",[[19,1,[\\\"link\\\"]],[20,[\\\"model\\\",\\\"id\\\"]]],[[\\\"class\\\"],[\\\"nav-link\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[[19,1,[\\\"name\\\"]]],null],false]],\\\"parameters\\\":[]},null],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-common-tabs/template.hbs\" } });\n});","define('garage/components/vinka-dropdown/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    var count = 0;\n\n    /**\n     * A dropdown selector that can handle both promise based value lists or direct arrays.\n     * For promise lists, we assume that `id` is used as the current value and `name` as\n     * display text in the option list.\n     *\n     * Optional argument `style` can be used to give additional CSS-classes to the top level\n     * component.\n     *\n     * Example:\n     *\n     *    {{vinka-dropdown options=\"[1,2,3,4]\" current=\"model.number\" onSelect=\"changeNumber\"}}\n     *\n     */\n    exports.default = Ember.Component.extend({\n\n        name: null,\n        id: null,\n        hasPromise: null,\n\n        i18n: Ember.inject.service(),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            count++;\n            this.set('id', 'vinka-dropdown-' + count);\n        },\n        didReceiveAttrs: function didReceiveAttrs() {\n            var _this = this;\n\n            var opts = this.get('options');\n            var current = this.get('current');\n\n            if (opts) {\n                // Handle promise version.\n                if (opts.then) {\n                    this.set('hasPromise', true);\n                    opts.then(function (data) {\n                        _this.set('name', null);\n                        data.forEach(function (v) {\n                            if (current && parseInt(v.get('id')) === parseInt(current)) {\n                                _this.set('name', v.get('name'));\n                                return;\n                            }\n                        });\n                        return data;\n                    });\n                } else {\n                    // Handle straight data array.\n                    this.set('hasPromise', false);\n                    this.set('name', null);\n                    opts.forEach(function (option, index) {\n                        if (_typeof(opts[index]) !== 'object') {\n                            opts[index] = { name: option, id: option };\n                            if (option === current) {\n                                _this.set('name', option);\n                            }\n                        } else {\n                            // Note, ID here is just a storage for any value to make template handling easier.\n                            if (option.id === current) {\n                                _this.set('name', option.id);\n                                return;\n                            }\n                        }\n                    });\n                }\n            }\n        },\n\n\n        actions: {\n            select: function select(val) {\n                if (val === '') {\n                    val = null;\n                } else if (this.get('hasPromise')) {\n                    val = Ember.Object.create({ id: val });\n                }\n\n                // This is done so the view using this component can revert the selection\n                // Something like this can't be easily done within the onSelect function,\n                // because the dropdown doesn't seem to re-render and revert back to the old value.\n                var oldVal = this.get('current');\n                this.set('current', val);\n                this.get('onSelect')(val, oldVal);\n\n                this.set('name', this.get('current'));\n            }\n        }\n    });\n});","define(\"garage/components/vinka-dropdown/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"AIr/AHmY\", \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"dropdown \\\",[18,\\\"style\\\"]]]],[7],[0,\\\"\\\\n    \\\"],[6,\\\"select\\\"],[10,\\\"id\\\",[26,[[18,\\\"id\\\"]]]],[10,\\\"onchange\\\",[25,\\\"action\\\",[[19,0,[]],\\\"select\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[10,\\\"disabled\\\",[18,\\\"disabled\\\"],null],[10,\\\"class\\\",[26,[[25,\\\"if\\\",[[20,[\\\"asBootstrap\\\"]],\\\"form-control\\\",\\\"dropdown-toggle\\\"],null]]]],[7],[0,\\\"\\\\n        \\\"],[6,\\\"option\\\"],[9,\\\"value\\\",\\\"\\\"],[10,\\\"selected\\\",[25,\\\"eq\\\",[[20,[\\\"name\\\"]],null],null],null],[7],[1,[25,\\\"t\\\",[\\\"dropdown.select\\\"],null],false],[0,\\\"       \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"options\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"option\\\"],[9,\\\"class\\\",\\\"dropdown-item\\\"],[10,\\\"value\\\",[26,[[19,1,[\\\"id\\\"]]]]],[10,\\\"selected\\\",[25,\\\"eq\\\",[[19,1,[\\\"name\\\"]],[20,[\\\"name\\\"]]],null],null],[7],[1,[19,1,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-dropdown/template.hbs\" } });\n});","define('garage/components/vinka-menu/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n        actions: {\n            setLocale: function setLocale(locale) {\n                var onLocale = this.get('onLocale');\n\n                if (onLocale) {\n                    onLocale(locale);\n                }\n            }\n        }\n    });\n});","define(\"garage/components/vinka-menu/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"yVQaFxMP\", \"block\": \"{\\\"symbols\\\":[\\\"locale\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[9,\\\"id\\\",\\\"collapse-vinka-menu\\\"],[7],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[6,\\\"a\\\"],[9,\\\"class\\\",\\\"menu-item\\\"],[7],[1,[25,\\\"app-version\\\",null,[[\\\"hideSha\\\"],[false]]],false],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"hr\\\"],[9,\\\"class\\\",\\\"menu-hr\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"locales\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"a\\\"],[9,\\\"class\\\",\\\"menu-item\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"setLocale\\\",[19,1,[\\\"lang\\\"]]]],[7],[1,[19,1,[\\\"title\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n    \\\"],[6,\\\"hr\\\"],[9,\\\"class\\\",\\\"menu-hr\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[4,\\\"link-to\\\",[\\\"license-settings\\\"],[[\\\"class\\\"],[\\\"menu-item\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.LicenseSettings\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n        \\\"],[4,\\\"link-to\\\",[\\\"field-config\\\"],[[\\\"class\\\"],[\\\"menu-item\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.FieldConfig\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"hr\\\"],[9,\\\"class\\\",\\\"menu-hr\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"session\\\",\\\"isAuthenticated\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[4,\\\"link-to\\\",[\\\"logout\\\"],[[\\\"class\\\"],[\\\"menu-item\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"button.Logout\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[4,\\\"link-to\\\",[\\\"login\\\"],[[\\\"class\\\"],[\\\"menu-item\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"button.Login\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-menu/template.hbs\" } });\n});","define('garage/components/vinka-password/component', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({});\n});","define(\"garage/components/vinka-password/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"hZekEi/y\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"password-wrap\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"input\\\",[[25,\\\"-input-type\\\",[[25,\\\"if\\\",[[20,[\\\"showPassword\\\"]],\\\"text\\\",\\\"password\\\"],null]],null]],[[\\\"autocomplete\\\",\\\"class\\\",\\\"value\\\",\\\"required\\\",\\\"placeholder\\\",\\\"type\\\"],[\\\"off\\\",\\\"form-control\\\",[20,[\\\"value\\\"]],[20,[\\\"required\\\"]],[20,[\\\"placeholder\\\"]],[25,\\\"if\\\",[[20,[\\\"showPassword\\\"]],\\\"text\\\",\\\"password\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"password-eye fa fa-eye input-icon\\\"],[10,\\\"onclick\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"showPassword\\\"]]],null],[25,\\\"not\\\",[[20,[\\\"showPassword\\\"]]],null]],null],null],[7],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-password/template.hbs\" } });\n});","define('garage/components/vinka-sort-sign/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n\n        isMainSort: Ember.computed('columnSorters', function () {\n            var sorters = this.get('columnSorters');\n            var column = this.get('column');\n            if (sorters && sorters.length > 0) {\n                return column.name === sorters[0].fn.column;\n            }\n            return false;\n        }),\n\n        sortDirCls: Ember.computed('columnSorters', function () {\n            var sorters = this.get('columnSorters');\n            var column = this.get('column');\n            if (column && sorters) {\n                var exists = sorters.find(function (s) {\n                    return s.fn.column === column.name;\n                });\n                if (exists) {\n                    return exists.direction === 1 ? 'fa-sort-asc' : 'fa-sort-desc';\n                }\n            }\n            return 'fa-sort';\n        }),\n\n        actions: {\n            sortCol: function sortCol() {\n                this.get('sortCol')();\n            }\n        }\n    });\n});","define(\"garage/components/vinka-sort-sign/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"HPpuJQGK\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[6,\\\"span\\\"],[10,\\\"class\\\",[26,[\\\"control fa \\\",[18,\\\"sortDirCls\\\"],\\\" \\\",[25,\\\"if\\\",[[20,[\\\"isMainSort\\\"]],\\\"main-sort\\\"],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"sortCol\\\"]],[7],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-sort-sign/template.hbs\" } });\n});","define('garage/components/vinka-table/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n\n        i18n: Ember.inject.service(),\n\n        output: Ember.A([]),\n\n        sorters: Ember.A([]),\n\n        days: null,\n\n        didReceiveAttrs: function didReceiveAttrs() {\n            this.resetSelection();\n        },\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.days = {};\n\n            // Translate all titles.\n            var name = this.get('name');\n            if (name) {\n                this.get('columns').forEach(function (col) {\n                    Ember.set(col, 'title', _this.get('i18n').t(name + '.' + col.name).string || 'Translation missing: ' + name + '.' + col.name);\n                });\n            }\n\n            // Construct an object of localized days and their order numbers for sorting.\n            var days = {};\n            ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].forEach(function (day, index) {\n                days[_this.get('i18n').t('weekday.' + day).string] = index;\n            });\n            this.set('days', days);\n\n            // Create default sorters.\n            var defaultSorting = {};\n            this.get('columns').forEach(function (col) {\n                if (col.defaultSort !== undefined && col.defaultSort !== null) {\n                    defaultSorting[col.defaultSort] = col;\n                }\n            });\n            var sorters = Ember.A([]);\n            Object.keys(defaultSorting).forEach(function (i) {\n                sorters.push(_this.makeSorter(1, defaultSorting[i]));\n            });\n            this.set('sorters', sorters);\n\n            // Fill in output data from source.\n            this.sort();\n        },\n\n\n        /**\n         * Sort the content of the table and copy it to the version used by the template.\n         */\n        sort: function sort() {\n            var _this2 = this;\n\n            var data = this.get('data');\n            var output = Ember.A([]);\n\n            data.forEach(function (item) {\n                return output.push(item);\n            });\n            output.sort(function (a, b) {\n\n                // Go through the list of sorting functions and apply until a difference is found.\n                var sorters = _this2.get('sorters');\n                for (var i = 0; i < sorters.length; i++) {\n                    var fn = sorters.objectAt(i).fn;\n                    var a1 = a[fn.column],\n                        b1 = b[fn.column];\n                    var res = fn(a1, b1);\n                    if (res < 0 || res > 0) {\n                        return res;\n                    }\n                }\n\n                return 0;\n            });\n\n            this.set('output', output);\n        },\n\n\n        /**\n         * Generate a sorting function for a column.\n         *\n         * @param dir Either +1 or -1 for ascending or descending order.\n         * @oaram column A column description for the table.\n         *\n         * @return A sorting function with extra field `column` containing name of the target column.\n         */\n        makeSorter: function makeSorter(dir, column) {\n\n            var fn = null;\n            var days = this.get('days');\n\n            switch (column.sortAs) {\n\n                case 'day':\n                    fn = function fn(a, b) {\n                        if (a === b) {\n                            return 0;\n                        } else if (a === null || days[a] > days[b]) {\n                            return dir;\n                        }\n                        return -dir;\n                    };\n                    break;\n\n                case 'time': // At the moment time and date format can be sorted as a string.\n                case 'date':\n                case 'string':\n                    fn = function fn(a, b) {\n                        if (a === b) {\n                            return 0;\n                        } else if (a === null || a > b) {\n                            return dir;\n                        }\n                        return -dir;\n                    };\n                    break;\n\n                default:\n                    console.log('Invalid sorting criteria:', column.sortAs);\n                    return null;\n            }\n\n            fn.column = column.name;\n\n            return { fn: fn, direction: dir, type: column.sortAs };\n        },\n\n\n        /**\n         * Follow original data and update table content, if changed.\n         */\n        dataChanged: Ember.observer('data', function () {\n            this.sort();\n        }),\n\n        resetSelection: function resetSelection() {\n            this.get('data').forEach(function (line) {\n                var styles = line.get('style');\n                styles = styles && styles.split ? styles.split(' ') : [];\n\n                if (styles.indexOf('table-active') >= 0) {\n                    delete styles[styles.indexOf('table-active')];\n                }\n\n                line.set('style', styles.join(' '));\n            });\n        },\n\n\n        /**\n         * Mark the selected line with style `table-active`.\n         */\n        select: function select(selected) {\n            this.get('data').forEach(function (line) {\n\n                if (!line.get) {\n                    // Non-Ember object.\n                    return;\n                }\n\n                var styles = line.get('style');\n                styles = styles && styles.split ? styles.split(' ') : [];\n\n                if (styles.indexOf('table-active') >= 0) {\n                    delete styles[styles.indexOf('table-active')];\n                }\n                if (line.id === selected.id) {\n                    styles.push('table-active');\n                }\n\n                line.set('style', styles.join(' '));\n            });\n        },\n\n\n        actions: {\n            onTableClick: function onTableClick(line) {\n                if (this.get('selectable')) {\n                    this.select(line);\n                    var onTableClick = this.get('onTableClick');\n                    if (onTableClick) {\n                        onTableClick(line);\n                    }\n                }\n            },\n\n\n            /**\n             * Delete sorter function for the column and re-insert it to the front as ascending sorter.\n             */\n            sortCol: function sortCol(index) {\n                var sorters = this.get('sorters');\n                var column = this.get('columns').objectAt(index);\n                var filterExists = sorters.find(function (s) {\n                    return s.fn.column === column.name;\n                });\n                var dir = filterExists ? filterExists.direction * -1 : 1;\n                sorters = sorters.filter(function (s) {\n                    return s.fn.column !== column.name;\n                });\n\n                var fn = this.makeSorter(dir, column);\n                if (fn) {\n                    sorters.splice(0, 0, fn);\n                }\n                this.set('sorters', sorters);\n                this.sort();\n            }\n        }\n    });\n});","define(\"garage/components/vinka-table/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"7ja9fH2d\", \"block\": \"{\\\"symbols\\\":[\\\"line\\\",\\\"column\\\",\\\"index\\\",\\\"column\\\"],\\\"statements\\\":[[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-bordered table-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"not\\\",[[20,[\\\"noheading\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"columns\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"th\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[19,4,[\\\"title\\\"]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[19,4,[\\\"sortAs\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"sorting\\\"],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"vinka-sort-sign\\\",null,[[\\\"sortCol\\\",\\\"columnSorters\\\",\\\"column\\\"],[[25,\\\"action\\\",[[19,0,[]],\\\"sortCol\\\",[19,3,[]]],null],[20,[\\\"sorters\\\"]],[19,4,[]]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"output\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",[26,[[19,1,[\\\"style\\\"]]]]],[3,\\\"action\\\",[[19,0,[]],\\\"onTableClick\\\",[19,1,[]]]],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"td\\\"],[7],[1,[25,\\\"localize-if\\\",[[19,2,[\\\"localize\\\"]],\\\"weekday\\\",[25,\\\"get-property\\\",[[19,2,[\\\"name\\\"]],[19,1,[]]],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-table/template.hbs\" } });\n});","define('garage/components/vinka-toggle/component', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend({\n\n        i18n: Ember.inject.service(),\n\n        isChecked: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set('isChecked', this.get('current'));\n            this.set('label', this.get('i18n').t('toggle.' + this.get('name')).string || 'Translation missing: ' + 'toggle.' + this.get('name'));\n            if (this.get('disabled')) {\n                this.set('isDisabled', true);\n            }\n        },\n\n\n        currentChanged: Ember.observer('current', function (state) {\n            this.set('isChecked', state.get('current'));\n        }),\n\n        disabledChanged: Ember.observer('disabled', function (state) {\n            this.set('isDisabled', state.get('disabled'));\n        }),\n\n        actions: {\n            click: function click() {\n                var state = !this.get('isChecked');\n                this.set('isChecked', state);\n                this.set('current', state);\n                var toggleFn = this.get('onToggle');\n                if (toggleFn) {\n                    toggleFn(state);\n                }\n            }\n        }\n    });\n});","define(\"garage/components/vinka-toggle/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ykvfe7QF\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"isDisabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"input\\\"],[9,\\\"type\\\",\\\"checkbox\\\"],[10,\\\"checked\\\",[18,\\\"isChecked\\\"],null],[9,\\\"disabled\\\",\\\"true\\\"],[10,\\\" onclick\\\",[25,\\\"action\\\",[[19,0,[]],\\\"click\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]],null],[7],[8],[0,\\\" \\\"],[1,[18,\\\"label\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"input\\\"],[9,\\\"type\\\",\\\"checkbox\\\"],[10,\\\"checked\\\",[18,\\\"isChecked\\\"],null],[10,\\\"onclick\\\",[25,\\\"action\\\",[[19,0,[]],\\\"click\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]],null],[7],[8],[0,\\\" \\\"],[1,[18,\\\"label\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/components/vinka-toggle/template.hbs\" } });\n});","define('garage/components/welcome-page', ['exports', 'ember-welcome-page/components/welcome-page'], function (exports, _welcomePage) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _welcomePage.default;\n    }\n  });\n});","define('garage/components/wms-tile-layer', ['exports', 'ember-leaflet/components/wms-tile-layer'], function (exports, _wmsTileLayer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _wmsTileLayer.default;\n    }\n  });\n});","define('garage/components/x-select', ['exports', 'ember-select/components/x-select'], function (exports, _xSelect) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _xSelect.default;\n    }\n  });\n});","define('garage/current-user/service', ['exports', 'ember-simple-auth-token/authenticators/jwt', 'garage/helpers/permission-utils'], function (exports, _jwt, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _defineProperty(obj, key, value) {\n        if (key in obj) {\n            Object.defineProperty(obj, key, {\n                value: value,\n                enumerable: true,\n                configurable: true,\n                writable: true\n            });\n        } else {\n            obj[key] = value;\n        }\n\n        return obj;\n    }\n\n    exports.default = Ember.Service.extend({\n        session: Ember.inject.service(),\n\n        // TODO: make sure that permissions are updated when token changes!\n        permissions: Ember.computed('session.data.authenticated.accessToken', function () {\n            var token = this.get('session.data.authenticated.accessToken');\n\n            if (token) {\n                var jwt = new _jwt.default();\n                var tokenData = jwt.getTokenData(token);\n\n                return tokenData.permissions.reduce(function (a, i) {\n                    return Object.assign(a, _defineProperty({}, i, 1));\n                }, {});\n            }\n\n            return {};\n        }),\n\n        getLandingPage: function getLandingPage(def) {\n            if (this.hasPermission(_permissionUtils.roleNames.admin) || this.hasPermission(_permissionUtils.roleNames.super)) {\n                return 'vehicle';\n            } else if (this.hasPermission(_permissionUtils.roleNames.operator)) {\n                return 'operator';\n            }\n\n            return def;\n        },\n        hasPermission: function hasPermission(permission) {\n            return this.get('permissions').hasOwnProperty(permission);\n        },\n        isPlainOperator: function isPlainOperator() {\n            var _this = this;\n\n            var convertedOperatorPerms = (0, _permissionUtils.convertToSiteRoles)(['role:operator']);\n            var convertedAdminPerms = (0, _permissionUtils.convertToSiteRoles)(['role:admin', 'role:super']);\n            var isOperator = convertedOperatorPerms.some(function (i) {\n                return _this.hasPermission(i);\n            });\n            return !isOperator ? false : !convertedAdminPerms.some(function (i) {\n                return _this.hasPermission(i);\n            });\n        }\n    });\n});","define('garage/dispatch-area/transform', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Transform.extend({\n        deserialize: function deserialize(serialized) {\n            return serialized ? JSON.stringify(serialized).replace(/\"/g, '').replace('[', '').replace(']', '') : serialized;\n        },\n        serialize: function serialize(deserialized) {\n            return deserialized ? deserialized.replace(/(^\\s*,)|(,\\s*$)/g, '').split(',') : null;\n        }\n    });\n});","define('garage/driver/driver/index/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    exports.default = Ember.Route.extend({\n        viewData: Ember.Object.create({\n            filterText: '',\n            operators: [],\n            filteredOperators: [],\n            selectedOperator: null,\n            driver: null,\n            driverStatus: ['active', 'inactive'],\n            trainings: [], // options formatted for select box\n            driverTrainings: [] // driver selections\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.set('viewData.driver', this.modelFor('driver.driver').driver);\n\n            this.get('store').findAll('operator').then(function (result) {\n                var driver = _this.get('viewData.driver');\n\n                _this.set('viewData.operators', result);\n\n                // for a new driver preselect the operator if ony one is available\n                if (driver.get('id').startsWith('new') && !driver.get('operator') && _this.get('viewData.operators').get('length') === 1) {\n                    var operator = _this.get('viewData.operators').get('firstObject');\n\n                    driver.set('operator', +operator.get('id'));\n                    driver.set('operatorName', operator.get('name'));\n                }\n\n                _this.set('viewData.filteredOperators', _this.get('viewData.operators').filter(Boolean));\n                _this.set('viewData.selectedOperator', result.find(function (i) {\n                    return driver.get('operator') === +i.get('id');\n                }));\n\n                _this.get('store').findRecord('optionSet', 'driver-trainings').then(function (optionSet) {\n                    // map optionsSet to select options\n                    var trainings = optionSet.get('options').map(function (c) {\n                        return { key: c.key, name: c.value };\n                    });\n                    _this.set('viewData.trainings', trainings);\n                });\n            });\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            selectOperator: function selectOperator(dropdown, operator) {\n                dropdown.actions.close();\n\n                this.set('viewData.selectedOperator', operator);\n\n                this.set('viewData.driver.operator', operator ? +operator.get('id') : null);\n            },\n            statusSelect: function statusSelect(select) {\n                this.set('viewData.driver.status', select.target.value);\n            },\n            onTrainingSelect: function onTrainingSelect(value) {\n                if (!this.get('viewData.driver.training')) {\n                    this.get('viewData.driver').set('training', []);\n                }\n\n                if (!this.get('viewData.driver.training').find(function (i) {\n                    return i === value;\n                })) {\n                    this.get('viewData.driver').set('training', [].concat(_toConsumableArray(this.get('viewData.driver.training')), [value]));\n                }\n            },\n            onTrainingRemove: function onTrainingRemove(value) {\n                var removeValue = value.key || value;\n                this.get('viewData.driver').set('training', this.get('viewData.driver.training').filter(function (i) {\n                    return i !== removeValue;\n                }));\n            },\n            onTrainingClear: function onTrainingClear() {\n                this.get('viewData.driver').set('training', []);\n            }\n        },\n\n        filterObserver: Ember.observer('viewData.filterText', function () {\n            var _this2 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredOperators', this.get('viewData.operators').filter(function (i) {\n                return _this2._filterOperator(i, filter);\n            }));\n        }),\n\n        driverTrainingObserver: Ember.observer('viewData.driver.training', 'viewData.trainings', function () {\n            var choices = this.get('viewData.trainings') || [];\n            var driverTrainings = this.get('viewData.driver.training') || [];\n            var selectedOnes = driverTrainings.map(function (vc) {\n                return choices.find(function (c) {\n                    return c.key === vc;\n                }) || vc;\n            });\n\n            this.set('viewData.driverTrainings', selectedOnes);\n        }),\n\n        _filterOperator: function _filterOperator(operator, filter) {\n            return ('' + operator.get('companyName')).toLowerCase().includes(filter) || ('' + operator.get('companyAddress')).toLowerCase().includes(filter) || ('' + operator.get('userEmail')).toLowerCase().includes(filter) || ('' + operator.get('contactName')).toLowerCase().includes(filter) || ('' + operator.get('contactPhone')).toLowerCase().includes(filter) || ('' + operator.get('contactEmail')).toLowerCase().includes(filter) || ('' + operator.get('businessId')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/driver/driver/index/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6m1i2yGt\", \"block\": \"{\\\"symbols\\\":[\\\"status\\\",\\\"training\\\",\\\"dd\\\",\\\"operator\\\",\\\"error\\\"],\\\"statements\\\":[[6,\\\"form\\\"],[9,\\\"class\\\",\\\"needs-validation\\\"],[9,\\\"novalidate\\\",\\\"\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"form-control\\\",null,null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"required\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Name\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n            \\\"],[4,\\\"if\\\",[[19,5,[]]],null,{\\\"statements\\\":[[6,\\\"p\\\"],[9,\\\"class\\\",\\\"error\\\"],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"form.errors.\\\",[19,5,[]]],null]],null],false],[8]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"required\\\"],[[20,[\\\"model\\\",\\\"driver\\\",\\\"name\\\"]],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Phone\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"driver\\\",\\\"phone\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Email\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"driver\\\",\\\"email\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.PinCode\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"type\\\"],[[20,[\\\"model\\\",\\\"driver\\\",\\\"pinCode\\\"]],\\\"\\\",\\\"number\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-fix-dropdown\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Operator\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"verticalPosition\\\",\\\"renderInPlace\\\",\\\"matchTriggerWidth\\\"],[\\\"below\\\",true,true]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"dropdown\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,3,[\\\"trigger\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"readonly\\\"],[[25,\\\"if\\\",[[20,[\\\"model\\\",\\\"selectedOperator\\\"]],[20,[\\\"model\\\",\\\"selectedOperator\\\",\\\"companyName\\\"]],\\\"\\\"],null],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,3,[\\\"content\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-content vinka-flex-column\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-head\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.filter\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-body\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectOperator\\\",[19,3,[]],null]],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[0,\\\"--no operator--\\\"],[8],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredOperators\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectOperator\\\",[19,3,[]],[19,4,[]]]],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[19,4,[\\\"id\\\"]],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[19,4,[\\\"companyName\\\"]],false],[8],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.DriverExternalId\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"driver\\\",\\\"externalId\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.driver.training\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[25,\\\"x-select\\\",null,[[\\\"placeholder\\\",\\\"freeText\\\",\\\"model\\\",\\\"labelKey\\\",\\\"valueKey\\\",\\\"values\\\",\\\"onSelect\\\",\\\"onRemove\\\",\\\"onClear\\\"],[\\\"\\\",false,[20,[\\\"model\\\",\\\"trainings\\\"]],\\\"name\\\",\\\"key\\\",[20,[\\\"model\\\",\\\"driverTrainings\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onTrainingSelect\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onTrainingRemove\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onTrainingClear\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"custom-input-container\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"driver\\\",\\\"training\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[25,\\\"translate-option-key\\\",[[19,2,[]],[20,[\\\"model\\\",\\\"trainings\\\"]],false],null],false],[4,\\\"unless\\\",[[25,\\\"eq\\\",[[19,2,[]],[20,[\\\"model\\\",\\\"driver\\\",\\\"training\\\",\\\"lastObject\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\",\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.driver.additionalInfo\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[25,\\\"textarea\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"maxlength\\\"],[[20,[\\\"model\\\",\\\"driver\\\",\\\"additionalInfo\\\"]],\\\"\\\",250]]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"text-counter\\\",[[20,[\\\"model\\\",\\\"driver\\\",\\\"additionalInfo\\\"]],250],null],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"custom-input-container\\\"],[7],[1,[20,[\\\"model\\\",\\\"driver\\\",\\\"additionalInfo\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"status\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Status\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"select\\\"],[9,\\\"id\\\",\\\"status\\\"],[10,\\\"onchange\\\",[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"statusSelect\\\"],null],null],[9,\\\"class\\\",\\\"form-select\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"driverStatus\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"option\\\"],[10,\\\"value\\\",[19,1,[]],null],[10,\\\"selected\\\",[25,\\\"is-equal\\\",[[19,1,[]],[20,[\\\"model\\\",\\\"driver\\\",\\\"status\\\"]]],null],null],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"form.label.driver.status.\\\",[19,1,[]]],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"form-check\\\"],[7],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"id\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"form-check-input\\\",\\\"licenseAccepted\\\",\\\"licenseAccepted\\\",[20,[\\\"model\\\",\\\"driver\\\",\\\"licenseAccepted\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"form-check-label\\\"],[9,\\\"for\\\",\\\"licenseAccepted\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.LicenseAccepted\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/driver/driver/index/template.hbs\" } });\n});","define('garage/driver/driver/route', ['exports', 'garage/helpers/api-error-handler', 'garage/helpers/utils'], function (exports, _apiErrorHandler, _utils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var NEW_PREFIX = 'new';\n\n    exports.default = Ember.Route.extend({\n\n        modalMessage: Ember.inject.service(),\n        i18n: Ember.inject.service(),\n        currentUser: Ember.inject.service(),\n        viewData: Ember.Object.create({\n            tabs: [{ name: 'tab.Info', link: 'driver.driver.index' }],\n            driver: null,\n            showSaveButtons: true\n        }),\n\n        model: function model(_ref) {\n            var _this = this;\n\n            var id = _ref.id;\n\n\n            if (id.startsWith(NEW_PREFIX)) {\n                // new unsaved\n                var allDrivers = this.get('store').peekAll('driver');\n                var newItem = allDrivers.find(function (v) {\n                    return v.get('id') === id;\n                });\n                if (!newItem) {\n                    // Handle invalid ID.\n                    this.transitionTo('driver.index');\n                }\n                this.set('viewData.driver', newItem);\n                this.modelFor('driver').set('selected', newItem);\n                return this.get('viewData');\n            } else {\n                // existing saved record\n                return this.get('store').findRecord('driver', id).then(function (v) {\n                    _this.set('viewData.driver', v);\n                    _this.modelFor('driver').set('selected', v);\n                    return _this.get('viewData');\n                }).catch(function () {\n                    // Handle invalid ID.\n                    _this.transitionTo('driver.index');\n                });\n            }\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // solution to manage showing save buttons\n                // Showing save buttons by default when current or sub route changes. Enables shift sub-route to hide buttons by sending event.\n                // If sub route would override didTransition it should either manage button showing by events or\n                // bubble this didTransition by returning true.\n                this.set('viewData.showSaveButtons', true);\n            },\n            hideSaveButtons: function hideSaveButtons() {\n                this.set('viewData.showSaveButtons', false);\n            },\n            save: function save() {\n                var _this2 = this;\n\n                var onlyOperator = this.get('currentUser').isPlainOperator();\n                var driver = this.get('viewData.driver');\n\n                var pincode = driver.get('pinCode');\n                if (typeof pincode === 'string' && pincode.trim().length === 0) {\n                    driver.set('pinCode', null);\n                }\n\n                // operator user needs to set driver's operator\n                if (onlyOperator && !driver.get('operator')) {\n                    this.get('modalMessage').showDialog(this.get('i18n').t('message.text.driver.save.failure'), this.get('i18n').t('message.text.driver.save.operatorMandatory'));\n                    return;\n                }\n\n                this.get('modalMessage').show(this.get('i18n').t('message.title.saving'), this.get('i18n').t('message.text.wait'));\n\n                var originalId = driver.get('id');\n                if (originalId.startsWith(NEW_PREFIX)) {\n                    driver.set('id', null);\n                }\n                (0, _utils.setEmptyAsNull)('externalId', driver);\n                driver.save().then(function (result) {\n                    _this2.get('modalMessage').remove();\n                    if (originalId.startsWith(NEW_PREFIX)) {\n                        // change route to match created id in url\n                        _this2.transitionTo('driver.driver.index', result.get('id'));\n                    }\n                    _this2.send('driverSaved', result.get('id'));\n                }, function (err) {\n                    // failed\n                    if (originalId.startsWith(NEW_PREFIX)) {\n                        driver.set('id', originalId);\n                    }\n                    _this2.get('modalMessage').remove();\n                    var title = _this2.get('i18n').t('message.title.failure');\n                    var text = _this2.get('i18n').t('message.text.driver.save.failure');\n                    text = (0, _apiErrorHandler.formatApiError)(err, _this2.get('i18n'), 'driver');\n                    _this2.get('modalMessage').showDialog(title, text);\n                });\n            },\n            revert: function revert() {\n                var _this3 = this;\n\n                var title = this.get('i18n').t('dialog.revert.title');\n                var text = this.get('i18n').t('dialog.revert.text');\n                this.get('modalMessage').confirm(title, text, function () {\n                    _this3.get('viewData.driver').rollbackAttributes();\n                });\n            }\n        }\n    });\n});","define(\"garage/driver/driver/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"dAME8X/T\", \"block\": \"{\\\"symbols\\\":[\\\"form\\\"],\\\"statements\\\":[[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Drivers\\\"],null],false],[0,\\\" / \\\"],[1,[20,[\\\"model\\\",\\\"driver\\\",\\\"name\\\"]],false],[8],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"data-form\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"vinka-common-tabs\\\",null,[[\\\"model\\\",\\\"tabs\\\"],[[20,[\\\"model\\\",\\\"driver\\\"]],[20,[\\\"model\\\",\\\"tabs\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"validatable-form\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"tab-content\\\"],[7],[0,\\\"\\\\n        \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"showSaveButtons\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Save\\\",[25,\\\"and\\\",[[25,\\\"not\\\",[[19,1,[\\\"errors\\\",\\\"length\\\"]]],null],[20,[\\\"model\\\",\\\"driver\\\",\\\"hasDirtyAttributes\\\"]]],null]],[[\\\"onClick\\\",\\\"style\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"save\\\"],null],\\\"btn btn-outline-primary pull-right\\\"]]],false],[0,\\\"\\\\n        \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Revert\\\",[25,\\\"and\\\",[[20,[\\\"model\\\",\\\"driver\\\",\\\"hasDirtyAttributes\\\"]],[25,\\\"not\\\",[[20,[\\\"model\\\",\\\"driver\\\",\\\"isUnsaved\\\"]]],null]],null]],[[\\\"onClick\\\",\\\"style\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"revert\\\"],null],\\\"btn btn-outline-primary pull-right\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/driver/driver/template.hbs\" } });\n});","define('garage/driver/index/route', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({});\n});","define(\"garage/driver/index/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"E/AtvQTv\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Drivers\\\"],null],false],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/driver/index/template.hbs\" } });\n});","define('garage/driver/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend(Ember.Copyable, {\n        name: _emberData.default.attr('string'),\n        phone: _emberData.default.attr('string'),\n        email: _emberData.default.attr('string'),\n        pinCode: _emberData.default.attr('string'),\n        operator: _emberData.default.attr('number'),\n        operatorName: _emberData.default.attr('string'),\n        licenseAccepted: _emberData.default.attr('boolean'),\n        status: _emberData.default.attr('string'),\n        externalId: _emberData.default.attr('string'),\n        training: _emberData.default.attr(),\n        additionalInfo: _emberData.default.attr('string'),\n\n        isUnsaved: Ember.computed('id', function () {\n            return this.get('id') && this.get('id').startsWith('new');\n        }),\n\n        copy: function copy() {\n            return this.get('store').createRecord('driver', {\n                name: 'Copy of ' + this.get('name'),\n                phone: this.get('phone'),\n                email: this.get('email'),\n                pinCode: this.get('pinCode'),\n                operator: this.get('operator'),\n                licenseAccepted: false,\n                status: this.get('status'),\n                externalId: this.get('externalId'),\n                training: this.get('training'),\n                additionalInfo: this.get('additionalInfo')\n            });\n        }\n    });\n});","define('garage/driver/route', ['exports', 'garage/mixins/restricted-route-mixin', 'garage/helpers/permission-utils', 'garage/helpers/utils'], function (exports, _restrictedRouteMixin, _permissionUtils, _utils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var NEW_PREFIX = 'new';\n\n    exports.default = Ember.Route.extend(_restrictedRouteMixin.default, {\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n\n        // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n        restrictions: [_permissionUtils.roleNames.operator, _permissionUtils.roleNames.admin, _permissionUtils.roleNames.super],\n\n        viewData: Ember.Object.create({\n            drivers: [],\n            selected: null,\n            hasDirty: false,\n            savingAll: false,\n            search: ''\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            return this.get('store').findAll('driver').then(function () {\n                return _this.loadDriversToViewData().then(function () {\n                    return _this.get('viewData');\n                });\n            });\n        },\n        loadDriversToViewData: function loadDriversToViewData() {\n            var _this2 = this;\n\n            return Promise.resolve(this.get('store').peekAll('driver')).then(function (result) {\n                var drivers = result.sortBy('name');\n                _this2.set('viewData.drivers', drivers);\n                _this2.set('viewData.hasDirty', drivers.any(function (i) {\n                    return i.get('hasDirtyAttributes');\n                }));\n\n                return drivers;\n            });\n        },\n        draftDriver: function draftDriver() {\n            var driver = this.get('store').createRecord('driver');\n            driver.set('id', this.getNextNewId());\n            driver.set('name', 'New Driver');\n            driver.set('status', 'active');\n\n            return driver;\n        },\n        addDriver: function addDriver() {\n            var driver = this.get('store').createRecord('driver');\n            driver.set('id', this.getNextNewId());\n            driver.set('name', 'New Driver');\n\n            return driver;\n        },\n        saveAll: function saveAll() {\n            var _this3 = this;\n\n            var unsavedDrivers = this.get('store').peekAll('driver').filterBy('hasDirtyAttributes', true);\n\n            var success = [];\n            var failed = [];\n            var chain = Promise.resolve();\n            this.set('viewData.savingAll', true);\n\n            var _loop = function _loop(i) {\n                var driver = unsavedDrivers[i];\n                if (driver.get('id') && driver.get('id').startsWith(NEW_PREFIX)) {\n                    driver.set('id', null);\n                }\n                (0, _utils.setEmptyAsNull)('externalId', driver);\n\n                chain = chain.then(function () {\n                    return driver.save().then(function () {\n                        success.push(driver.get('id'));\n                    }).catch(function (e) {\n                        failed.push('\\n\\r' + driver.get('id') + ' (' + e.errors[0].title + ')');\n                    }).catch(function (e) {\n                        failed.push('\\n\\r' + driver.get('id') + '(' + e.message + ')');\n                    });\n                });\n            };\n\n            for (var i = 0; i < unsavedDrivers.length; i++) {\n                _loop(i);\n            }\n            chain.then(function () {\n                _this3.set('viewData.savingAll', false);\n                var title = _this3.get('i18n').t('dialog.saved.title');\n                var text = _this3.get('i18n').t('dialog.saved.text.driver', {\n                    success: success.join(', ') || '-',\n                    totalSuccess: success.length,\n                    failed: failed.join(', ') || '-'\n                });\n                _this3.get('modalMessage').showDialog(title, text);\n                _this3.refresh();\n            });\n        },\n        getNextNewId: function getNextNewId() {\n            // find highest new number\n            var allDrivers = this.get('store').peekAll('driver');\n\n            var highestId = allDrivers.reduce(function (prev, v) {\n                var currId = v.get('id');\n                if (currId && currId.startsWith(NEW_PREFIX)) {\n                    var components = currId.split('-');\n                    var number = parseInt(components[1], 10);\n                    prev = isNaN(number) ? prev : number;\n                }\n                return prev;\n            }, 0);\n\n            return NEW_PREFIX + '-' + ++highestId;\n        },\n\n\n        actions: {\n            search: function search() {\n                var filter = this.get('viewData.search').toLowerCase();\n                this.get('viewData.drivers').forEach(function (driver) {\n                    driver.set('filtered', filter && driver.get('name').toLowerCase().indexOf(filter) < 0);\n                });\n            },\n            selectDriver: function selectDriver(driver) {\n                // search current route name to maintain selected tab with the new selected driver\n                var route = Ember.getOwner(this).lookup('controller:application').currentRouteName;\n                this.set('viewData.selected', driver);\n                if (route === 'driver.index') {\n                    route = 'driver.driver.index';\n                }\n                this.transitionTo(route, driver.id);\n            },\n            deleteDriver: function deleteDriver(driver) {\n                var _this4 = this;\n\n                var title = this.get('i18n').t('dialog.delete.title', { name: driver.get('name') });\n                var text = this.get('i18n').t('dialog.delete.text');\n                this.get('modalMessage').confirm(title, text, function () {\n                    driver.deleteRecord();\n                    driver.save().then(function () {\n                        _this4.transitionTo('driver.index');\n                        title = _this4.get('i18n').t('message.title.success');\n                        text = _this4.get('i18n').t('message.text.driver.delete.success');\n                        _this4.get('modalMessage').showDialog(title, text);\n                        _this4.refresh();\n                    }, function () {\n                        title = _this4.get('i18n').t('message.title.failure');\n                        text = _this4.get('i18n').t('message.text.driver.delete.failure');\n                        _this4.get('modalMessage').showDialog(title, text);\n                    });\n                });\n            },\n            copyDriver: function copyDriver(driver) {\n                var copy = driver.copy();\n                copy.set('id', this.getNextNewId());\n                this.transitionTo('driver.driver.index', copy.get('id'));\n            },\n            newDriver: function newDriver() {\n                var driver = this.draftDriver();\n                this.transitionTo('driver.driver.index', driver.get('id'));\n            },\n            addDriver: function addDriver(json) {\n                var store = this.get('store');\n                var driver = store.hasRecordForId('driver', json.id) ? store.peekRecord('driver', json.id) : this.draftDriver();\n                driver.setProperties(json);\n                this.loadDriversToViewData();\n            },\n            saveAll: function saveAll() {\n                this.saveAll();\n            },\n            clearUnsaved: function clearUnsaved() {\n                // En jumalauta kemsinyt miten emberissä saa hienosti rollbäckattyä dirty recordit\n                // unloadAll toimi jossain tilanteissa mutta joskus tuli poikkeuksia mitä ei tietenkään\n                // mitenkään pysty helposti debuggaan. Ember data on susi tuote.\n                window.location.reload(true);\n            },\n\n\n            // receives id as parameter\n            driverSaved: function driverSaved() {\n                this.refresh();\n            }\n        }\n    });\n});","define(\"garage/driver/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"79Y0SXko\", \"block\": \"{\\\"symbols\\\":[\\\"driver\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-4 vehicle-list side-view\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"search\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group-prepend\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"input-group-text\\\"],[9,\\\"id\\\",\\\"basic-addon1\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"fa fa-search\\\"],[7],[8],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"key-up\\\"],[[20,[\\\"model\\\",\\\"search\\\"]],\\\"form-control\\\",\\\"search\\\"]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"drivers\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"list-group-item list-group-item-action \\\",[25,\\\"is-hidden\\\",[[19,1,[\\\"filtered\\\"]]],null],\\\" \\\",[25,\\\"is-current\\\",[[19,1,[\\\"id\\\"]],[20,[\\\"model\\\",\\\"selected\\\",\\\"id\\\"]]],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"selectDriver\\\",[19,1,[]]]],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[19,1,[\\\"hasDirtyAttributes\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"dirty\\\"],[7],[1,[19,1,[\\\"name\\\"]],false],[4,\\\"if\\\",[[19,1,[\\\"operatorName\\\"]]],null,{\\\"statements\\\":[[0,\\\" (\\\"],[1,[19,1,[\\\"operatorName\\\"]],false],[0,\\\")\\\"]],\\\"parameters\\\":[]},null],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[19,1,[\\\"name\\\"]],false],[4,\\\"if\\\",[[19,1,[\\\"operatorName\\\"]]],null,{\\\"statements\\\":[[0,\\\" (\\\"],[1,[19,1,[\\\"operatorName\\\"]],false],[0,\\\")\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"buttons\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:operator\\\",\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"deleteDriver\\\",[20,[\\\"model\\\",\\\"selected\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"copyDriver\\\",[20,[\\\"model\\\",\\\"selected\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"newDriver\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.New\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveAll\\\"]],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"t\\\",[\\\"button.SaveAll\\\"],null],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"savingAll\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-spinner fa-spin fa-fw\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-8 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/driver/template.hbs\" } });\n});","define('garage/exporter/service', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    var EXCEL_URI = 'data:application/vnd.ms-excel;base64,';\n    var CSV_URI = 'data:text/csv;charset=utf-8,';\n    var EXCEL_TEMPLATE = '<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv=\"content-type\" content=\"text/plain; charset=UTF-8\"/></head><body><table>{table}</table></body></html>';\n\n    exports.default = Ember.Service.extend({\n        toCSV: function toCSV(fileName, tableId) {\n            var separator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ',';\n\n            var prepareCell = function prepareCell(cell) {\n                return cell.innerText\n                // replace all possible whitespaces and linebreaks with a regular space\n                .replace(/\\s+/gm, ' ')\n                // remove leading and trailing spaces\n                .trim()\n                // escape all double-quotes by replacing them with doubled double-quotes\n                .replace(/\"/g, '\"\"')\n                // wrap the string with double-quotes\n                .replace(/^(.*)$/, '\"$1\"');\n            };\n\n            var prepareRow = function prepareRow(row) {\n                return [].concat(_toConsumableArray(row.querySelectorAll('td, th')))\n                // convert cell to a sanitized escaped string\n                .map(prepareCell)\n                // join these strings with a separator (comma by default)\n                .join(separator);\n            };\n\n            var data = [].concat(_toConsumableArray(document.querySelectorAll('table#' + tableId + ' tr')))\n            // convert row to a string of escaped comma separated values\n            .map(prepareRow)\n            // join these strings with a linebreak\n            .join('\\n');\n\n            this.initFileDownload('' + CSV_URI + encodeURIComponent(data), fileName + '.csv');\n        },\n        toExcel: function toExcel(fileName, sheetName, tableId) {\n            var clone = document.getElementById(tableId).cloneNode(true);\n\n            // prevent Spreadsheet apps from auto-formatting the data by wrapping it into the `=\"${...}\"`\n            var cloneCells = clone.getElementsByTagName('td');\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = cloneCells[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var cloneCell = _step.value;\n\n                    cloneCell.innerHTML = '=\"' + cloneCell.innerHTML + '\"';\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n\n            var xlsData = this.populateExcelTemplate({ worksheet: sheetName || 'Worksheet', table: clone.innerHTML });\n\n            this.initFileDownload(EXCEL_URI + this.base64Encode(xlsData), fileName + '.xlsx');\n        },\n        populateExcelTemplate: function populateExcelTemplate(data) {\n            return EXCEL_TEMPLATE.replace(/{(\\w+)}/g, function (m, p) {\n                return data[p];\n            });\n        },\n        base64Encode: function base64Encode(string) {\n            return window.btoa(unescape(encodeURIComponent(string)));\n        },\n        initFileDownload: function initFileDownload(uri, name) {\n            var link = document.createElement('a');\n            link.download = name;\n            link.href = uri;\n            link.click();\n        }\n    });\n});","define('garage/field-config/route', ['exports', 'garage/mixins/restricted-route-mixin', 'garage/helpers/permission-utils', 'garage/helpers/api-error-handler'], function (exports, _restrictedRouteMixin, _permissionUtils, _apiErrorHandler) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend(_restrictedRouteMixin.default, {\n        i18n: Ember.inject.service(),\n\n        modalMessage: Ember.inject.service(),\n\n        // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n        restrictions: [_permissionUtils.roleNames.admin, _permissionUtils.roleNames.super],\n\n        viewData: Ember.Object.create({\n            optionSets: []\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.get('store').findAll('optionSet').then(function (result) {\n                _this.set('viewData.optionSets', result);\n            });\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            addOption: function addOption(optionSet) {\n                var options = optionSet.get('options');\n                options.addObject({ key: '', value: '' });\n            },\n            removeOption: function removeOption(optionSet, optionIndex) {\n                var options = optionSet.get('options');\n                options.removeAt(optionIndex);\n            },\n            save: function save(optionSetName) {\n                var _this2 = this;\n\n                var onConfirm = function onConfirm() {\n                    var optionSets = _this2.get('viewData.optionSets');\n                    var optionSet = optionSets.findBy('name', optionSetName);\n\n                    _this2.get('store').findRecord('optionSet', optionSetName).then(function (_optionSet) {\n                        _optionSet.set('optionSet', optionSet);\n                        _optionSet.save().catch(function (err) {\n                            var title = _this2.get('i18n').t('message.title.failure');\n                            var text = (0, _apiErrorHandler.formatApiError)(err, _this2.get('i18n'));\n                            _this2.get('modalMessage').showDialog(title, text);\n                        });\n                    });\n                };\n\n                var isValid = function isValid() {\n                    var optionSets = _this2.get('viewData.optionSets');\n                    var optionSet = optionSets.findBy('name', optionSetName);\n                    return !(optionSet.get('options') || []).some(function (o) {\n                        return !o.key || !o.value;\n                    });\n                };\n\n                var key = 'table.fieldConfig.title.' + optionSetName;\n                var text = this.get('i18n').exists(key) ? this.get('i18n').t(key) : optionSetName;\n\n                if (!isValid()) {\n                    this.get('modalMessage').showDialog(this.get('i18n').t('dialog.fieldConfig.fieldErrorTitle'), this.get('i18n').t('dialog.fieldConfig.fieldErrorText', {\n                        fieldName: text\n                    }));\n                } else {\n                    this.get('modalMessage').confirm(this.get('i18n').t('dialog.fieldConfig.title', {\n                        fieldName: text\n                    }), this.get('i18n').t('dialog.fieldConfig.text'), onConfirm.bind(this));\n                }\n            }\n        }\n    });\n});","define(\"garage/field-config/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"fgWypzdK\", \"block\": \"{\\\"symbols\\\":[\\\"optionSet\\\",\\\"option\\\",\\\"optionIndex\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-12 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.FieldConfig\\\"],null],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"tab-content\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"optionSets\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"card mb-3\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"card-header\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"h5\\\"],[9,\\\"class\\\",\\\"card-title\\\"],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"table.fieldConfig.title.\\\",[19,1,[\\\"name\\\"]]],null]],null],false],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"card-body\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[9,\\\"scope\\\",\\\"col\\\"],[9,\\\"style\\\",\\\"width: 25%\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.fieldConfig.columns.key\\\"],null],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[9,\\\"scope\\\",\\\"col\\\"],[9,\\\"style\\\",\\\"width: 60%\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.fieldConfig.columns.value\\\"],null],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[9,\\\"scope\\\",\\\"col\\\"],[9,\\\"style\\\",\\\"width: 15%\\\"],[7],[8],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[19,1,[\\\"options\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"title\\\",\\\"placeholder\\\",\\\"value\\\"],[\\\"text\\\",\\\"form-control\\\",[25,\\\"t\\\",[\\\"table.fieldConfig.columns.keyPlaceholder\\\"],null],[25,\\\"t\\\",[\\\"table.fieldConfig.columns.keyPlaceholder\\\"],null],[19,2,[\\\"key\\\"]]]]],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"title\\\",\\\"placeholder\\\",\\\"value\\\"],[\\\"text\\\",\\\"form-control\\\",[25,\\\"t\\\",[\\\"table.fieldConfig.columns.valuePlaceholder\\\"],null],[25,\\\"t\\\",[\\\"table.fieldConfig.columns.valuePlaceholder\\\"],null],[19,2,[\\\"value\\\"]]]]],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[0,\\\"\\\\n                                            \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-danger btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"removeOption\\\",[19,1,[]],[19,3,[]]]],[7],[0,\\\"\\\\n                                                \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-trash\\\"],[7],[8],[0,\\\"\\\\n                                                \\\"],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[0,\\\"\\\\n                                            \\\"],[8],[0,\\\"\\\\n                                        \\\"],[8],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null],[0,\\\"                                \\\"],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-3\\\"],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"addOption\\\",[19,1,[]]]],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-plus\\\"],[7],[8],[0,\\\" \\\"],[1,[25,\\\"t\\\",[\\\"button.AddOption\\\"],null],false],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"card-footer\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-3\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-primary btn-block mb-3\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"save\\\",[19,1,[\\\"name\\\"]]]],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-save\\\"],[7],[8],[0,\\\" \\\"],[1,[25,\\\"t\\\",[\\\"button.Save\\\"],null],false],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/field-config/template.hbs\" } });\n});","define('garage/fleet/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string')\n    });\n});","define('garage/garage/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n\n        name: _emberData.default.attr('string'),\n        location: _emberData.default.attr()\n    });\n});","define('garage/helpers/and', ['exports', 'ember-truth-helpers/helpers/and'], function (exports, _and) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _and.default;\n    }\n  });\n  Object.defineProperty(exports, 'and', {\n    enumerable: true,\n    get: function () {\n      return _and.and;\n    }\n  });\n});","define('garage/helpers/api-error-handler', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.formatApiError = formatApiError;\n    //  -*- coding: utf-8 -*-\n    //  app/helpers/api-error-handler.js\n    //  created: 2019-04-11T17:18:14\n    //\n\n    function formatApiError(error, i18n) {\n        var category = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n        var text = null;\n        var err = null;\n        if (error && error.errors && error.errors.length) {\n            err = error.errors[0];\n        }\n        if (err && err.validation && err.validation.keys && err.validation.keys.length) {\n            var cat = category ? category + '.' : '';\n            var key = 'messages.' + cat + err.validation.keys[0];\n            if (i18n.exists(key)) {\n                text = i18n.t(key);\n            }\n        }\n        if (text === null) {\n            text = err.message;\n            var _key = 'api.errors.' + text;\n            if (i18n.exists(_key)) {\n                text = i18n.t(_key);\n            }\n        }\n        return text ? text : '';\n    }\n});","define('garage/helpers/app-version', ['exports', 'garage/config/environment', 'ember-cli-app-version/utils/regexp'], function (exports, _environment, _regexp) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.appVersion = appVersion;\n  var version = _environment.default.APP.version;\n  function appVersion(_) {\n    var hash = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (hash.hideSha) {\n      return version.match(_regexp.versionRegExp)[0];\n    }\n\n    if (hash.hideVersion) {\n      return version.match(_regexp.shaRegExp)[0];\n    }\n\n    return version;\n  }\n\n  exports.default = Ember.Helper.helper(appVersion);\n});","define('garage/helpers/div-icon', ['exports', 'ember-leaflet/helpers/div-icon'], function (exports, _divIcon) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _divIcon.default;\n    }\n  });\n  Object.defineProperty(exports, 'divIcon', {\n    enumerable: true,\n    get: function () {\n      return _divIcon.divIcon;\n    }\n  });\n});","define('garage/helpers/eq', ['exports', 'ember-truth-helpers/helpers/equal'], function (exports, _equal) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _equal.default;\n    }\n  });\n  Object.defineProperty(exports, 'equal', {\n    enumerable: true,\n    get: function () {\n      return _equal.equal;\n    }\n  });\n});","define('garage/helpers/field-access', ['exports', 'garage/helpers/permission-utils', 'garage/config/environment'], function (exports, _permissionUtils, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    // @todo: this implementation would allow for server returning set of fields names to be disabled\n    var operatorDisabledFields = ['companyAddress', 'contactName', 'contactPhone', 'contactEmail', 'iban', 'bic', 'businessId', 'externalId', 'info'].map(function (i) {\n        return 'operator.' + i;\n    });\n\n    exports.default = Ember.Helper.extend({\n        currentUser: Ember.inject.service(),\n\n        /**\n         * This accepts list of accepted permission names and checks if user has some of those.\n         * If not it is checked if field is part of disabled fieds (for e.g. operator).\n         * For disabling, false is returned.\n         * As a separation to has-permission helper, this may enable fields for operators.\n         *\n         * @param {*} params Must contain array where first item is the field name and rest items are admin permissions\n         *  in which case field is enabled for user. E.g. ['fieldName', 'role:admin', 'role:super']\n         */\n        compute: function compute(params) {\n            var _this = this;\n\n            if (!_environment.default.APP.ui.disableOperatorInfos) {\n                return true;\n            }\n            var fieldName = params[0];\n            var adminPermissions = params.slice(1);\n            var convertedPerms = (0, _permissionUtils.convertToSiteRoles)(adminPermissions);\n\n            var hasAdminPerm = convertedPerms.some(function (i) {\n                return _this.get('currentUser').hasPermission(i);\n            });\n            if (hasAdminPerm) {\n                return true; // enabled for admins\n            }\n\n            // check if one of operator disabled fields\n            return !operatorDisabledFields.includes(fieldName);\n        }\n    });\n});","define('garage/helpers/get-property', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.getProperty = getProperty;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * Get the named property of an object.\n     */\n    function getProperty(_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            name = _ref2[0],\n            obj = _ref2[1];\n\n        if (obj instanceof _emberData.default.Model) {\n            return obj.get(name);\n        }\n        return obj[name];\n    }\n\n    exports.default = Ember.Helper.helper(getProperty);\n});","define('garage/helpers/gt', ['exports', 'ember-truth-helpers/helpers/gt'], function (exports, _gt) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _gt.default;\n    }\n  });\n  Object.defineProperty(exports, 'gt', {\n    enumerable: true,\n    get: function () {\n      return _gt.gt;\n    }\n  });\n});","define('garage/helpers/gte', ['exports', 'ember-truth-helpers/helpers/gte'], function (exports, _gte) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _gte.default;\n    }\n  });\n  Object.defineProperty(exports, 'gte', {\n    enumerable: true,\n    get: function () {\n      return _gte.gte;\n    }\n  });\n});","define('garage/helpers/has-permission', ['exports', 'garage/helpers/permission-utils'], function (exports, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        currentUser: Ember.inject.service(),\n\n        /**\n         * this accepts list of permission names and checks if user has some of those.\n         * if permission is given in old form like: role:admin or role:operator, we use convertToSiteRoles\n         * function to convert them to site specific permissions, like role:demo-operator\n         * @param {*} permissions\n         */\n        compute: function compute(permissions) {\n            var _this = this;\n\n            var convertedPerms = (0, _permissionUtils.convertToSiteRoles)(permissions);\n\n            return convertedPerms.some(function (i) {\n                return _this.get('currentUser').hasPermission(i);\n            });\n        }\n    });\n});","define('garage/helpers/icon', ['exports', 'ember-leaflet/helpers/icon'], function (exports, _icon) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _icon.default;\n    }\n  });\n  Object.defineProperty(exports, 'icon', {\n    enumerable: true,\n    get: function () {\n      return _icon.icon;\n    }\n  });\n});","define('garage/helpers/is-array', ['exports', 'ember-truth-helpers/helpers/is-array'], function (exports, _isArray) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isArray.default;\n    }\n  });\n  Object.defineProperty(exports, 'isArray', {\n    enumerable: true,\n    get: function () {\n      return _isArray.isArray;\n    }\n  });\n});","define('garage/helpers/is-current-tab', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.isCurrentTab = isCurrentTab;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * Return a string `active` if the last part of the current URL is the given name (`index` for numeric ID).\n     */\n    function isCurrentTab(_ref) {\n        var _ref2 = _slicedToArray(_ref, 1),\n            name = _ref2[0];\n\n        var parts = document.location.pathname.split('/');\n        var tab = parts[parts.length - 1];\n\n        if (/^[0-9]+$/.test(tab)) {\n            tab = 'index';\n        }\n\n        return tab === name ? 'active' : '';\n    }\n\n    exports.default = Ember.Helper.helper(isCurrentTab);\n});","define('garage/helpers/is-current', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.isCurrent = isCurrent;\n\n  var _slicedToArray = function () {\n    function sliceIterator(arr, i) {\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = undefined;\n\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n\n          if (i && _arr.length === i) break;\n        }\n      } catch (err) {\n        _d = true;\n        _e = err;\n      } finally {\n        try {\n          if (!_n && _i[\"return\"]) _i[\"return\"]();\n        } finally {\n          if (_d) throw _e;\n        }\n      }\n\n      return _arr;\n    }\n\n    return function (arr, i) {\n      if (Array.isArray(arr)) {\n        return arr;\n      } else if (Symbol.iterator in Object(arr)) {\n        return sliceIterator(arr, i);\n      } else {\n        throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n      }\n    };\n  }();\n\n  /**\n   * Return a string `current` if arguments match.\n   */\n  function isCurrent(_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        a = _ref2[0],\n        b = _ref2[1];\n\n    return a === b ? 'current' : '';\n  }\n\n  exports.default = Ember.Helper.helper(isCurrent);\n});","define('garage/helpers/is-empty', ['exports', 'ember-truth-helpers/helpers/is-empty'], function (exports, _isEmpty) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isEmpty.default;\n    }\n  });\n});","define('garage/helpers/is-equal', ['exports', 'ember-truth-helpers/helpers/is-equal'], function (exports, _isEqual) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isEqual.default;\n    }\n  });\n  Object.defineProperty(exports, 'isEqual', {\n    enumerable: true,\n    get: function () {\n      return _isEqual.isEqual;\n    }\n  });\n});","define('garage/helpers/is-hidden', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.isHidden = isHidden;\n\n  var _slicedToArray = function () {\n    function sliceIterator(arr, i) {\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = undefined;\n\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n\n          if (i && _arr.length === i) break;\n        }\n      } catch (err) {\n        _d = true;\n        _e = err;\n      } finally {\n        try {\n          if (!_n && _i[\"return\"]) _i[\"return\"]();\n        } finally {\n          if (_d) throw _e;\n        }\n      }\n\n      return _arr;\n    }\n\n    return function (arr, i) {\n      if (Array.isArray(arr)) {\n        return arr;\n      } else if (Symbol.iterator in Object(arr)) {\n        return sliceIterator(arr, i);\n      } else {\n        throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n      }\n    };\n  }();\n\n  /**\n   * Return a string `hidden` if arguments is true.\n   */\n  function isHidden(_ref) {\n    var _ref2 = _slicedToArray(_ref, 1),\n        arg = _ref2[0];\n\n    return arg ? 'hidden' : '';\n  }\n\n  exports.default = Ember.Helper.helper(isHidden);\n});","define('garage/helpers/json', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.jsonize = jsonize;\n\n\n    /**\n     * Show arguments as JSON.\n     */\n    function jsonize() {\n        var ret = '';\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n        }\n\n        args[0].forEach(function (arg) {\n            if (ret !== '') {\n                ret += ', ';\n            }\n            ret += JSON.stringify(arg);\n        });\n\n        return '[' + ret + ']';\n    }\n\n    exports.default = Ember.Helper.helper(jsonize);\n});","define('garage/helpers/lat-lng-bounds', ['exports', 'ember-leaflet/helpers/lat-lng-bounds'], function (exports, _latLngBounds) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _latLngBounds.default;\n    }\n  });\n  Object.defineProperty(exports, 'latLngBounds', {\n    enumerable: true,\n    get: function () {\n      return _latLngBounds.latLngBounds;\n    }\n  });\n});","define('garage/helpers/localize-if', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    exports.default = Ember.Helper.extend({\n\n        i18n: Ember.inject.service(),\n\n        compute: function compute(_ref) {\n            var _ref2 = _slicedToArray(_ref, 3),\n                flag = _ref2[0],\n                category = _ref2[1],\n                text = _ref2[2];\n\n            if (flag) {\n                text = this.get('i18n').t(category + '.' + text);\n            }\n            return text;\n        }\n    });\n});","define('garage/helpers/lt', ['exports', 'ember-truth-helpers/helpers/lt'], function (exports, _lt) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _lt.default;\n    }\n  });\n  Object.defineProperty(exports, 'lt', {\n    enumerable: true,\n    get: function () {\n      return _lt.lt;\n    }\n  });\n});","define('garage/helpers/lte', ['exports', 'ember-truth-helpers/helpers/lte'], function (exports, _lte) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _lte.default;\n    }\n  });\n  Object.defineProperty(exports, 'lte', {\n    enumerable: true,\n    get: function () {\n      return _lte.lte;\n    }\n  });\n});","define('garage/helpers/not-eq', ['exports', 'ember-truth-helpers/helpers/not-equal'], function (exports, _notEqual) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _notEqual.default;\n    }\n  });\n  Object.defineProperty(exports, 'notEq', {\n    enumerable: true,\n    get: function () {\n      return _notEqual.notEq;\n    }\n  });\n});","define('garage/helpers/not', ['exports', 'ember-truth-helpers/helpers/not'], function (exports, _not) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _not.default;\n    }\n  });\n  Object.defineProperty(exports, 'not', {\n    enumerable: true,\n    get: function () {\n      return _not.not;\n    }\n  });\n});","define('garage/helpers/or', ['exports', 'ember-truth-helpers/helpers/or'], function (exports, _or) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _or.default;\n    }\n  });\n  Object.defineProperty(exports, 'or', {\n    enumerable: true,\n    get: function () {\n      return _or.or;\n    }\n  });\n});","define('garage/helpers/permission-utils', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.roleNames = undefined;\n    exports.getSiteName = getSiteName;\n    exports.convertToSiteRoles = convertToSiteRoles;\n    exports.operatorRoleName = operatorRoleName;\n    exports.adminRoleName = adminRoleName;\n    exports.superRoleName = superRoleName;\n\n\n    function getDomainName() {\n        return window.location.hostname;\n    }\n\n    /**\n     * Return site name based on application URL\n     * (garage.site-name.vinka.fi or site-name.vinka.fi/garage).\n     * If site name is not in domain format it is assumed to be run at localhost.\n     * Then either default env name ENV.environment (started from command prompt) or null is returned.\n     *\n     * Note: this also affects required role-name. Auth0 should have role corresponding the environment.\n     */\n    //  -*- coding: utf-8 -*-\n    //  app/helpers/permission-utils.js\n    //  created: 2020-08-19T22:02:30\n    //\n\n    function getSiteName() {\n        var domain = getDomainName();\n        var parts = domain.split('.');\n        var envSite = _environment.default.environment;\n\n        if (parts.length === 3) {\n            return [parts[0], '/garage/'];\n        } else if (parts.length === 4) {\n            return [parts[1], '/'];\n        } else if (window.location.pathname.split('/').filter(function (p) {\n            return !!p;\n        })[0] === 'garage') {\n            // localhost/garage/\n            return [envSite || null, '/garage/'];\n        } else {\n            // localhost/\n            return [envSite || null, '/'];\n        }\n    }\n\n    function getSiteNameOrLocalhost() {\n        var siteParams = getSiteName();\n        return siteParams[0] ? siteParams[0] : 'localhost';\n    }\n\n    /**\n     * Converts role:admin and role:operator permissions to site specific permissions.\n     * Other permissions are returned as is.\n     * @param {*} permissions Array of permission names.\n     */\n    function convertToSiteRoles(permissions) {\n        return permissions.map(function (p) {\n            if (p === 'role:admin' || p === 'role:operator') {\n                return p.split('role:').join('role:' + getSiteNameOrLocalhost() + '-');\n            }\n            return p;\n        });\n    }\n\n    function operatorRoleName() {\n        return 'role:' + getSiteNameOrLocalhost() + '-operator';\n    }\n\n    function adminRoleName() {\n        return 'role:' + getSiteNameOrLocalhost() + '-admin';\n    }\n\n    function superRoleName() {\n        return 'role:super';\n    }\n\n    var roleNames = exports.roleNames = {\n        get operator() {\n            return 'role:' + getSiteNameOrLocalhost() + '-operator';\n        },\n        get admin() {\n            return 'role:' + getSiteNameOrLocalhost() + '-admin';\n        },\n        get super() {\n            return 'role:super';\n        }\n    };\n});","define('garage/helpers/pluralize', ['exports', 'ember-inflector/lib/helpers/pluralize'], function (exports, _pluralize) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _pluralize.default;\n});","define('garage/helpers/point', ['exports', 'ember-leaflet/helpers/point'], function (exports, _point) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _point.default;\n    }\n  });\n  Object.defineProperty(exports, 'point', {\n    enumerable: true,\n    get: function () {\n      return _point.point;\n    }\n  });\n});","define('garage/helpers/route-action', ['exports', 'ember-route-action-helper/helpers/route-action'], function (exports, _routeAction) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _routeAction.default;\n    }\n  });\n});","define('garage/helpers/singularize', ['exports', 'ember-inflector/lib/helpers/singularize'], function (exports, _singularize) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _singularize.default;\n});","define('garage/helpers/t', ['exports', 'ember-i18n/helper'], function (exports, _helper) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _helper.default;\n    }\n  });\n});","define('garage/helpers/text-counter', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.textCounter = textCounter;\n\n  var _slicedToArray = function () {\n    function sliceIterator(arr, i) {\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = undefined;\n\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n\n          if (i && _arr.length === i) break;\n        }\n      } catch (err) {\n        _d = true;\n        _e = err;\n      } finally {\n        try {\n          if (!_n && _i[\"return\"]) _i[\"return\"]();\n        } finally {\n          if (_d) throw _e;\n        }\n      }\n\n      return _arr;\n    }\n\n    return function (arr, i) {\n      if (Array.isArray(arr)) {\n        return arr;\n      } else if (Symbol.iterator in Object(arr)) {\n        return sliceIterator(arr, i);\n      } else {\n        throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n      }\n    };\n  }();\n\n  /**\n   * Text counter helper.\n   * Return text length and max length formatted.\n   * @argument[0] text\n   * @argument[1] max length\n   */\n  function textCounter(_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        text = _ref2[0],\n        maxlength = _ref2[1];\n\n    return (text || '').length + ' / ' + maxlength;\n  }\n\n  exports.default = Ember.Helper.helper(textCounter);\n});","define('garage/helpers/translate-option-key', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.translateKey = translateKey;\n\n\n  /**\n   * Helper for translating e.g. contracts and labels from option key choices.\n   *\n   * @param {*} params\n   *   param[0] - key as string text\n   *   param[1] - translations in form: [{key: 'abc', name: 'Abc'}, {key: 'efg', name: 'Efg'}]\n   *   param[2] - boolean for including key in addition to returned value. true - include, false - not, default is false\n   * @returns name as text\n   */\n  function translateKey(params) {\n    var key = params[0];\n    var translations = params[1];\n    var includeKey = !!params[2];\n    var found = (translations || []).find(function (c) {\n      return c.key === key;\n    });\n\n    return found ? '' + found.name + (includeKey ? ' (' + key + ')' : '') : key;\n  }\n\n  exports.default = Ember.Helper.helper(translateKey);\n});","define('garage/helpers/utils', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.setEmptyAsNull = setEmptyAsNull;\n    exports.parseVehicleOption = parseVehicleOption;\n    exports.vehicleOptionsToNumbers = vehicleOptionsToNumbers;\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    /*\n     * Created on Thu Nov 17 2022 15:25:07\n     *\n     * Copyright (c) 2022 Vinka Oy\n     */\n\n    function setEmptyAsNull(key, obj) {\n        if (obj.get(key) === '') {\n            obj.set(key, null);\n        }\n    }\n\n    // vehicle option functions copied from commander\n    function parseVehicleOption(o) {\n        return ('' + o).replace(/(\\d+)\\s+(?=\\d)/g, '$1,') // replace all spaces between two numbers with commas\n        .replace(/\\s+/g, '') // strip ALL spaces/tabs/new lines/etc.\n        .split(',') // split into chunks\n        .filter(function (i) {\n            return (/^\\d+(-\\d+)?$/.test(i)\n            );\n        }); // check if matches the pattern `number` or `number-number`\n    }\n\n    function vehicleOptionsToNumbers(vehicleNumbers, options) {\n        return options\n        // convert strings of numbers and ranges into an array of numbers\n        .reduce(function (a, i) {\n            var numbers = i.split('-')\n            // cast to int\n            .map(function (i) {\n                return +i;\n            })\n            // make sure in ascending order, otherwise we'll have a problem here...\n            .sort(function (a, b) {\n                return a - b;\n            });\n\n            if (numbers.length === 2) {\n                // get an array of numbers from n to m\n                numbers = Array.from({ length: numbers[1] - numbers[0] + 1 }, function (_, i) {\n                    return numbers[0] + i;\n                });\n            }\n\n            return [].concat(_toConsumableArray(a), _toConsumableArray(numbers));\n        }, [])\n        // exclude the numbers that do not belong to existing vehicles\n        .filter(function (i) {\n            return vehicleNumbers.includes(i);\n        });\n    }\n});","define('garage/helpers/vehicle-title-classes', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.vehicleClasses = vehicleClasses;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * Return class attribute values for vehicle title.\n     * @argument[0] boolean vehicle model dirty\n     * @argument[1] boolean vehicle model inactive\n     */\n    function vehicleClasses(_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            hasDirtyAttributes = _ref2[0],\n            inactive = _ref2[1];\n\n        var cls = [];\n        if (hasDirtyAttributes) {\n            cls.push('dirty');\n        }\n        if (inactive) {\n            cls.push('inactive');\n        }\n        return cls.join(' ');\n    }\n\n    exports.default = Ember.Helper.helper(vehicleClasses);\n});","define('garage/helpers/xor', ['exports', 'ember-truth-helpers/helpers/xor'], function (exports, _xor) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _xor.default;\n    }\n  });\n  Object.defineProperty(exports, 'xor', {\n    enumerable: true,\n    get: function () {\n      return _xor.xor;\n    }\n  });\n});","define('garage/index/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        beforeModel: function beforeModel() {\n            this._super.apply(this, arguments);\n            this.replaceWith('vehicle');\n        }\n    });\n});","define('garage/initializers/app-version', ['exports', 'ember-cli-app-version/initializer-factory', 'garage/config/environment'], function (exports, _initializerFactory, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var name = void 0,\n      version = void 0;\n  if (_environment.default.APP) {\n    name = _environment.default.APP.name;\n    version = _environment.default.APP.version;\n  }\n\n  exports.default = {\n    name: 'App Version',\n    initialize: (0, _initializerFactory.default)(name, version)\n  };\n});","define('garage/initializers/application', ['exports', 'garage/config/environment', 'garage/helpers/permission-utils'], function (exports, _environment, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.initialize = initialize;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    function applyConfig(env, config) {\n        function resolve(parts, root) {\n            return parts.reduce(function (p, c) {\n                return p[c];\n            }, root);\n        }\n\n        Object.keys(config).forEach(function (c) {\n            var parts = c.split('.');\n            parts.shift(); // remove the root (ENV)\n            var key = parts.pop();\n            var target = resolve(parts, env);\n            target[key] = config[c];\n        });\n\n        env.contentSecurityPolicy['connect-src'] += ' ' + env.APP.api.host + ':*';\n    }\n\n    function initialize() /* application */{\n        var _getSiteName = (0, _permissionUtils.getSiteName)(),\n            _getSiteName2 = _slicedToArray(_getSiteName, 2),\n            site = _getSiteName2[0],\n            rootURL = _getSiteName2[1];\n\n        console.log('** site: ' + site + ', rootURL: ' + rootURL);\n        if (site) {\n            console.debug('dynamically reading config for ' + site);\n            var conf = _environment.default.APP.envs[site] || {};\n            conf['ENV.rootURL'] = rootURL;\n            if (!conf['ENV.APP.api.host']) {\n                conf['ENV.APP.api.host'] = rootURL === '/' ? 'https://garage-api.' + site + '.vinka.cloud' : 'https://' + site + '.vinka.cloud/garage-api';\n            }\n            applyConfig(_environment.default, conf);\n        }\n    }\n\n    exports.default = {\n        initialize: initialize\n    };\n});","define('garage/initializers/container-debug-adapter', ['exports', 'ember-resolver/resolvers/classic/container-debug-adapter'], function (exports, _containerDebugAdapter) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'container-debug-adapter',\n\n    initialize: function initialize() {\n      var app = arguments[1] || arguments[0];\n\n      app.register('container-debug-adapter:main', _containerDebugAdapter.default);\n      app.inject('container-debug-adapter:main', 'namespace', 'application:main');\n    }\n  };\n});","define('garage/initializers/data-adapter', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'data-adapter',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('garage/initializers/ember-cli-mirage', ['exports', 'garage/config/environment', 'garage/mirage/config', 'ember-cli-mirage/get-rfc232-test-context', 'ember-cli-mirage/start-mirage'], function (exports, _environment, _config, _getRfc232TestContext, _startMirage) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.startMirage = startMirage;\n  exports.default = {\n    name: 'ember-cli-mirage-config',\n    initialize: function initialize(application) {\n      if (_config.default) {\n        application.register('mirage:base-config', _config.default, { instantiate: false });\n      }\n      if (_config.testConfig) {\n        application.register('mirage:test-config', _config.testConfig, { instantiate: false });\n      }\n\n      _environment.default['ember-cli-mirage'] = _environment.default['ember-cli-mirage'] || {};\n      if (_shouldUseMirage(_environment.default.environment, _environment.default['ember-cli-mirage'])) {\n        startMirage(_environment.default);\n      }\n    }\n  };\n  function startMirage() {\n    var env = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _environment.default;\n\n    return (0, _startMirage.default)(null, { env: env, baseConfig: _config.default, testConfig: _config.testConfig });\n  }\n\n  function _shouldUseMirage(env, addonConfig) {\n    if (typeof FastBoot !== 'undefined') {\n      return false;\n    }\n    if ((0, _getRfc232TestContext.default)()) {\n      return false;\n    }\n    var userDeclaredEnabled = typeof addonConfig.enabled !== 'undefined';\n    var defaultEnabled = _defaultEnabled(env, addonConfig);\n\n    return userDeclaredEnabled ? addonConfig.enabled : defaultEnabled;\n  }\n\n  /*\n    Returns a boolean specifying the default behavior for whether\n    to initialize Mirage.\n  */\n  function _defaultEnabled(env, addonConfig) {\n    var usingInDev = env === 'development' && !addonConfig.usingProxy;\n    var usingInTest = env === 'test';\n\n    return usingInDev || usingInTest;\n  }\n});","define('garage/initializers/ember-data', ['exports', 'ember-data/setup-container', 'ember-data'], function (exports, _setupContainer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'ember-data',\n    initialize: _setupContainer.default\n  };\n});","define('garage/initializers/ember-i18n', ['exports', 'ember-i18n/initializers/ember-i18n'], function (exports, _emberI18n) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberI18n.default;\n});","define('garage/initializers/ember-simple-auth', ['exports', 'garage/config/environment', 'ember-simple-auth/configuration', 'ember-simple-auth/initializers/setup-session', 'ember-simple-auth/initializers/setup-session-service', 'ember-simple-auth/initializers/setup-session-restoration'], function (exports, _environment, _configuration, _setupSession, _setupSessionService, _setupSessionRestoration) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'ember-simple-auth',\n\n    initialize: function initialize(registry) {\n      var config = _environment.default['ember-simple-auth'] || {};\n      config.baseURL = _environment.default.rootURL || _environment.default.baseURL;\n      _configuration.default.load(config);\n\n      (0, _setupSession.default)(registry);\n      (0, _setupSessionService.default)(registry);\n      (0, _setupSessionRestoration.default)(registry);\n    }\n  };\n});","define('garage/initializers/export-application-global', ['exports', 'garage/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n    if (_environment.default.exportApplicationGlobal !== false) {\n      var theGlobal;\n      if (typeof window !== 'undefined') {\n        theGlobal = window;\n      } else if (typeof global !== 'undefined') {\n        theGlobal = global;\n      } else if (typeof self !== 'undefined') {\n        theGlobal = self;\n      } else {\n        // no reasonable global, just bail\n        return;\n      }\n\n      var value = _environment.default.exportApplicationGlobal;\n      var globalName;\n\n      if (typeof value === 'string') {\n        globalName = value;\n      } else {\n        globalName = Ember.String.classify(_environment.default.modulePrefix);\n      }\n\n      if (!theGlobal[globalName]) {\n        theGlobal[globalName] = application;\n\n        application.reopen({\n          willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n            delete theGlobal[globalName];\n          }\n        });\n      }\n    }\n  }\n\n  exports.default = {\n    name: 'export-application-global',\n\n    initialize: initialize\n  };\n});","define('garage/initializers/html5-validation', ['exports', 'ember-cli-html5-validation/ext/checkbox', 'ember-cli-html5-validation/ext/text-area', 'ember-cli-html5-validation/ext/text-field'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'ember-cli-html5-validation',\n    initialize: function initialize() {}\n  };\n});","define('garage/initializers/injectStore', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'injectStore',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('garage/initializers/leaflet-assets', ['exports', 'ember-get-config'], function (exports, _emberGetConfig) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  function initialize() /* container, application */{\n    if (typeof FastBoot === 'undefined') {\n      var prefix = '';\n\n      if (!Ember.isNone(_emberGetConfig.default.rootURL)) {\n        prefix = _emberGetConfig.default.rootURL;\n      } else if (!Ember.isNone(_emberGetConfig.default.baseURL)) {\n        prefix = _emberGetConfig.default.baseURL;\n      }\n\n      L.Icon.Default.imagePath = prefix + 'assets/images/';\n    }\n  }\n\n  exports.default = {\n    name: 'leaflet-assets',\n    initialize: initialize\n  };\n});","define('garage/initializers/simple-auth-token', ['exports', 'ember-simple-auth-token/authenticators/token', 'ember-simple-auth-token/authenticators/jwt'], function (exports, _token, _jwt) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'ember-simple-auth-token',\n    before: 'ember-simple-auth',\n    initialize: function initialize(container) {\n      container.register('authenticator:token', _token.default);\n      container.register('authenticator:jwt', _jwt.default);\n    }\n  };\n});","define('garage/initializers/store', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'store',\n    after: 'ember-data',\n    initialize: function initialize() {}\n  };\n});","define('garage/initializers/transforms', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'transforms',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('garage/initializers/user-locale', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.initialize = initialize;\n    function initialize(application) {\n        var userLocale = localStorage.getItem('userLocale');\n        var i18n = application.__container__.lookup('service:i18n');\n\n        if (userLocale) {\n            i18n.set('locale', userLocale);\n        } else {\n            i18n.set('locale', _environment.default.i18n.defaultLocale);\n        }\n    }\n\n    exports.default = {\n        name: 'user-locale',\n        after: 'ember-i18n',\n        initialize: initialize\n    };\n});","define('garage/instance-initializers/ember-cli-mirage-autostart', ['exports', 'ember-cli-mirage/instance-initializers/ember-cli-mirage-autostart'], function (exports, _emberCliMirageAutostart) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _emberCliMirageAutostart.default;\n    }\n  });\n});","define(\"garage/instance-initializers/ember-data\", [\"exports\", \"ember-data/initialize-store-service\"], function (exports, _initializeStoreService) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: \"ember-data\",\n    initialize: _initializeStoreService.default\n  };\n});","define('garage/instance-initializers/ember-i18n', ['exports', 'ember-i18n/instance-initializers/ember-i18n'], function (exports, _emberI18n) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberI18n.default;\n});","define('garage/instance-initializers/ember-simple-auth', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'ember-simple-auth',\n\n    initialize: function initialize() {}\n  };\n});","define('garage/license-settings/route', ['exports', 'garage/mixins/restricted-route-mixin', 'garage/config/environment', 'garage/helpers/permission-utils'], function (exports, _restrictedRouteMixin, _environment, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend(_restrictedRouteMixin.default, {\n\n        i18n: Ember.inject.service(),\n\n        modalMessage: Ember.inject.service(),\n\n        // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n        restrictions: [_permissionUtils.roleNames.admin, _permissionUtils.roleNames.super],\n\n        viewData: Ember.Object.create({\n            // License which is edited in the editor\n            editingLicense: '',\n            // The selected language\n            selectedLanguage: null,\n            // Licenses from the data store\n            licenses: [],\n            // Available languages to create licenses in\n            languages: [],\n            // For finding language code by language name\n            languageCodes: {},\n            // Summary of available languages\n            languageSummary: '',\n            // For quill editor initial contents after language select\n            initialLicenseContent: ''\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.get('store').findAll('license').then(function (result) {\n                _this.set('viewData.licenses', result);\n            }).then(function () {\n                // Set a string summary of languages in which licenses have been created,\n                // if there are any. Appends a translation to the beginning of the string.\n                // Example: \"You have created licenses in the following languages: Finnish, English.\"\n                if (!Ember.isEmpty(_this.viewData.licenses)) {\n                    _this.set('viewData.languageSummary', _this.get('i18n').t('etc.license.createdLicenses', {\n                        languages: _this.get('viewData.licenses').map(function (license) {\n                            return _this.get('i18n').t('languages.' + license.get('language')).string;\n                        }).join(', ')\n                    }));\n                }\n            });\n\n            var languages = [];\n\n            _environment.default.APP.ui.languages.forEach(function (language) {\n                var translation = _this.get('i18n').t('languages.' + language).string;\n                languages.push(translation);\n                _this.viewData.languageCodes[translation] = language;\n            });\n\n            this.set('viewData.languages', languages);\n\n            return this.get('viewData');\n        },\n        getLanguageCodeByName: function getLanguageCodeByName(languageName) {\n            return this.viewData.languageCodes[languageName || this.viewData.selectedLanguage];\n        },\n        getLicenseByLanguage: function getLicenseByLanguage(languageName) {\n            return this.viewData.licenses.findBy('language', this.getLanguageCodeByName(languageName));\n        },\n        getLicenseBySelectedLanguage: function getLicenseBySelectedLanguage() {\n            return this.getLicenseByLanguage(this.viewData.selectedLanguage);\n        },\n        editingLicenseIsEmpty: function editingLicenseIsEmpty() {\n            return this.viewData.editingLicense === '' || this.viewData.editingLicense === '<p><br></p>';\n        },\n\n\n        actions: {\n            onTextChange: function onTextChange(newText) {\n                this.set('viewData.editingLicense', newText);\n            },\n            setLanguage: function setLanguage(language, oldLang) {\n                var _this2 = this;\n\n                var data = this.viewData;\n                var licenseBefore = this.getLicenseByLanguage(oldLang);\n\n                var changeLanguage = function changeLanguage() {\n                    _this2.set('viewData.selectedLanguage', language);\n                    var license = _this2.getLicenseBySelectedLanguage();\n                    _this2.set('viewData.editingLicense', license === undefined ? '' : license.get('license'));\n                    _this2.set('viewData.initialLicenseContent', license === undefined ? '' : license.get('license'));\n                };\n\n                // If license has changed or is new\n                if (!this.editingLicenseIsEmpty() && (licenseBefore === undefined || data.editingLicense !== licenseBefore.get('license'))) {\n                    this.get('modalMessage').confirm(this.get('i18n').t('dialog.changeLangNoSave.title'), this.get('i18n').t('dialog.changeLangNoSave.text'), changeLanguage, function () {\n                        return _this2.viewData.set('selectedLanguage', oldLang);\n                    });\n                } else {\n                    changeLanguage();\n                }\n            },\n            saveLicense: function saveLicense() {\n                var _this3 = this;\n\n                var onConfirm = function onConfirm() {\n                    var license = _this3.getLicenseBySelectedLanguage();\n\n                    try {\n                        if (license === undefined) {\n                            _this3.get('store').createRecord('license', {\n                                license: _this3.viewData.editingLicense,\n                                language: _this3.getLanguageCodeByName(_this3.viewData.selectedLanguage)\n                            }).save();\n                        } else {\n                            _this3.get('store').findRecord('license', license.id).then(function (_license) {\n                                _license.set('license', _this3.viewData.editingLicense);\n                                _license.save();\n                            });\n                        }\n                    } catch (err) {}\n                };\n\n                this.get('modalMessage').confirm(this.get('i18n').t('dialog.saveLicense.title', { language: this.viewData.selectedLanguage }), this.get('i18n').t('dialog.saveLicense.text'), onConfirm);\n            }\n        }\n    });\n});","define(\"garage/license-settings/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Nz88xsLC\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-12 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.LicenseSettings\\\"],null],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"tab-content\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row-sm mb-2\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-2 mb-2\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"vinka-dropdown\\\",null,[[\\\"options\\\",\\\"current\\\",\\\"asBootstrap\\\",\\\"onSelect\\\"],[[20,[\\\"model\\\",\\\"languages\\\"]],[20,[\\\"model\\\",\\\"selectedLanguage\\\"]],true,[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"setLanguage\\\"],null]]]],false],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"languageSummary\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"p\\\"],[7],[1,[20,[\\\"model\\\",\\\"languageSummary\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[25,\\\"if\\\",[[20,[\\\"model\\\",\\\"selectedLanguage\\\"]],null,true],null]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"etc.license.noCreatedLicenses\\\"],null],false],[8],[0,\\\"\\\\n                            \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"selectedLanguage\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-sm mb-2\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"quill-wrapper\\\",null,[[\\\"initialContent\\\",\\\"onTextChange\\\"],[[20,[\\\"model\\\",\\\"initialLicenseContent\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onTextChange\\\"],null]]]],false],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-sm\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveLicense\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Save\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/license-settings/template.hbs\" } });\n});","define('garage/license/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        license: _emberData.default.attr('string'),\n        language: _emberData.default.attr('string')\n    });\n});","define('garage/locales/en/translations', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = {\n        weekday: {\n            Monday: 'Monday',\n            Tuesday: 'Tuesday',\n            Wednesday: 'Wednesday',\n            Thursday: 'Thursday',\n            Friday: 'Friday',\n            Saturday: 'Saturday',\n            Sunday: 'Sunday'\n        },\n\n        languages: {\n            fi: 'Finnish',\n            en: 'English',\n            sv: 'Swedish',\n            de: 'German'\n        },\n\n        dropdown: {\n            select: 'Select...'\n        },\n\n        toggle: {\n            capacity: 'Use vehicle specific values',\n            showInactive: 'Show expired and not yet started shifts.',\n            Alcolock: 'Alcolock',\n            'Easy access': 'Easy access'\n        },\n\n        // ---------------\n\n        button: {\n            Delete: 'Delete',\n            Copy: 'Copy',\n            New: 'New',\n            Revert: 'Revert',\n            Save: 'Save',\n            SaveAsType: 'Save as type',\n            SaveAsGroup: 'Save as group',\n            SaveAll: 'Save all',\n            Join: 'Join',\n            Add: 'Add',\n            Edit: 'Edit',\n            Remove: 'Remove',\n            Cancel: 'Cancel',\n            Login: 'Login',\n            Logout: 'Logout',\n            CopyToVehicle: 'Copy to vehicle',\n            GenQRCode: 'Gen QR-Code',\n            Select: 'Select',\n            AddOption: 'Add option'\n        },\n\n        capacity: {\n            wheelchair: 'Wheelchair',\n            ambulatory: 'Ambulatory',\n            luggage: 'Luggage',\n            walker: 'Walker',\n            dog: 'Dog'\n        },\n\n        tab: {\n            Vehicle: 'Vehicle',\n            Capacity: 'Capacities',\n            Attributes: 'Attributes',\n            Shift: 'Shift',\n            Garage: 'Garage',\n            Terminal: 'Terminal',\n\n            Info: 'Info',\n            Vehicles: 'Vehicles',\n            Operators: 'Operators',\n            Drivers: 'Drivers',\n            VehicleReports: 'Route Report',\n            OperatorReports: 'Vehicle Report',\n            Settings: 'Settings',\n\n            Users: 'Users',\n            UserManagement: 'User management',\n            OtherSettings: 'Some other settings',\n\n            LicenseSettings: 'License Settings',\n            FieldConfig: 'Field Configuration'\n        },\n\n        form: {\n            label: {\n                Name: 'Name',\n                Operator: 'Operator',\n                Fleet: 'Fleet',\n                CallId: 'Vehicle number',\n                ExternalId: 'Ext vehicle number',\n                PaymentTerminalId: 'Payment terminal id',\n                Description: 'Description',\n                DispatchParameters: 'Dispatch',\n                DispatchArea: 'Area',\n                DispatchPriority: 'Priority',\n                LicenceNumber: 'Licence number',\n                Phone: 'Phone',\n                PriceFactor: 'Price Factor',\n                EmissionFactor: 'Emission Factor',\n                CO2: 'CO2',\n                ServiceFactor: 'Service Factor',\n                VehicleType: 'Vehicle type',\n                Attributes: 'Attributes',\n                Capacities: 'Add new capacity',\n                ExistingCapacities: 'Vehicle capacities',\n                ShiftGroups: 'Shift groups',\n                Customization: 'Customization',\n                Username: 'Username',\n                Password: 'Password',\n                ShiftTemplates: 'Shift templates',\n                ShiftTemplateInterval: 'Template timespan',\n                UseShift: 'Use shift',\n                AdditionalInfo: 'Additional info',\n                BrandModel: 'Car brand and model',\n                SetInactive: 'Remove',\n                SetInactiveLabel: 'Remove from use',\n                SetInactiveInstructions: 'Remove from use',\n\n                UserEmail: 'User Email',\n                UserPassword: 'User Password',\n                CompanyName: 'Company Name',\n                CompanyAddress: 'Company Address',\n                ContactName: 'Contact Name',\n                ContactPhone: 'Contact Phone',\n                ContactEmail: 'Contact Email',\n                BusinessId: 'Business Id',\n                OperatorInfo: 'Info (visible for admins only)',\n                OperatorExternalId: 'External Id',\n                Iban: 'Bank Account (IBAN)',\n                Bic: 'Bank identifier (BIC)',\n\n                Email: 'Email',\n                PinCode: 'Pin Code',\n                DriverExternalId: 'External id',\n                LicenseAccepted: 'License agreement accepted',\n                Status: 'Status',\n                Role: 'Role',\n                Permissions: 'Permissions',\n\n                AddUser: 'Add new user',\n                AllUsers: 'All users',\n                Verified: 'Verified',\n                VerifiedText: 'Leave empty if user should verify through received email',\n                Unlink: 'Unlink',\n                Contract: 'Contract',\n                Labels: 'Labels',\n\n                driver: {\n                    status: {\n                        active: 'Active',\n                        inactive: 'Inactive'\n                    },\n                    training: 'Training',\n                    additionalInfo: 'Additional info'\n                }\n            },\n            help: {\n                DispatchArea: 'Vehicle dispatch areas. Empty value=All areas.',\n                DispatchPriority: 'Higher the value then better the change to get a job offer. 0=no job offers, 100=default',\n                PriceFactor: 'Price multiplier for some specific dispatch strategies usage.',\n                EmissionFactor: 'Emission Factor',\n                CO2: 'Carbon dioxide',\n                ServiceFactor: 'Service Factor',\n                UseShift: 'Trips are dispatched only within shift. By default: trips are dispatched always.',\n                SetInactive: 'Remove vehicle from use.'\n            },\n            text: {\n                Passengers: 'Passengers',\n                Wheelchair: 'Wheelchair',\n                WalkingAid: 'Walking aid',\n                SafetySeat: 'Safety seat',\n                Alcolock: 'Alcolock',\n                AllAreas: 'All areas',\n                Inactive: 'Removed'\n            },\n            errors: {\n                'Value is required': 'This value cannot be empty.'\n            },\n            capacities: {\n                ambulatory: 'Ambulatory',\n                wheelchair: 'Wheelchair',\n                luggage: 'Luggage',\n                'assistive-device': 'Assistive Device',\n                stretcher: 'Stretcher',\n                'front-seat': 'Front Seat'\n            },\n            attributes: {\n                'test-vehicle': 'Test vehicle',\n                bus: 'Bus',\n                'station-wagon': 'Station wagon',\n                sedan: 'Sedan',\n                'eco-friendly': 'Environmentally friendly',\n                paratransit: 'Paratransit',\n                lowrider: 'Lowrider',\n                'pet-friendly': 'Pet friendly',\n                'non-smoking': 'Non smoking',\n                stretcher: 'Stretcher',\n                stairclimber: 'Stairclimber',\n                'front-seat': 'Front seat',\n                'wheelchair-lift': 'Wheelchair lift',\n                'multiple-wheelchairs': 'Multiple wheelchairs',\n                'electric-wheelchair': 'Electric wheelchair',\n                alcometer: 'Alcometer'\n            },\n            placeholder: {\n                lookup: 'lookup...',\n                alias: 'alias',\n                filter: 'filter',\n                searchAndAdd: 'search and add',\n                noUser: 'no user'\n            }\n        },\n\n        message: {\n            title: {\n                success: 'Success',\n                failure: 'Failure',\n                saving: 'Saving...'\n            },\n            text: {\n                wait: 'Please wait!',\n\n                vehicle: {\n                    delete: {\n                        success: 'Vehicle was successfully deleted.',\n                        failure: 'Vehicle deletion failed.'\n                    },\n                    save: {\n                        failure: 'Saving vehicle failed.'\n                    },\n                    new: {\n                        failure: 'Creating a new vehicle failed.'\n                    },\n                    copy: {\n                        failure: 'Copying a vehicle failed.'\n                    }\n                },\n                shift: {\n                    new: {\n                        failure: 'Creating a new shift failed.'\n                    }\n                },\n                operator: {\n                    delete: {\n                        success: 'Operator was successfully deleted.',\n                        failure: 'Operator deletion failed.'\n                    },\n                    save: {\n                        failure: 'Saving operator failed.'\n                    },\n                    new: {\n                        failure: 'Creating a new operator failed.'\n                    },\n                    copy: {\n                        failure: 'Copying a operator failed.'\n                    }\n                },\n                driver: {\n                    delete: {\n                        success: 'Driver was successfully deleted.',\n                        failure: 'Driver deletion failed.'\n                    },\n                    save: {\n                        failure: 'Saving driver failed.',\n                        operatorMandatory: 'Operator needs to be set.'\n                    },\n                    new: {\n                        failure: 'Creating a new driver failed.'\n                    },\n                    copy: {\n                        failure: 'Copying a driver failed.'\n                    }\n                },\n                user: {\n                    save: {\n                        success: 'User is successfully saved.',\n                        failure: 'Saving user failed.'\n                    }\n                }\n            }\n        },\n\n        dialog: {\n            button: {\n                yes: 'Yes',\n                no: 'No',\n                close: 'Close'\n            },\n            saved: {\n                title: 'Saved',\n                text: {\n                    success: 'Saved successfully.',\n                    withErrors: 'Encountered the following errors while saving data: {{errors}}',\n                    driverToOperatorError: '<br>-<b>{{name}}</b>: {{error}}',\n                    driver: 'Succeeded for drivers: {{success}} (total: {{totalSuccess}})<br>Failed for drivers: {{failed}}',\n                    vehicle: 'Succeeded for vehicles: {{success}} (total: {{totalSuccess}})<br>Failed for vehicles: {{failed}}',\n                    operator: 'Succeeded for operators: {{success}} (total: {{totalSuccess}})<br>Failed for operators: {{failed}}'\n                }\n            },\n            delete: {\n                title: 'Delete {{name}}',\n                text: 'Are you sure?'\n            },\n            revert: {\n                title: 'Discard all changes',\n                text: 'Are you sure?'\n            },\n            shiftCopy: {\n                copyTitle: 'Copy shift template'\n            },\n            saveLicense: {\n                title: 'Save license in language {{language}}',\n                text: 'Are you sure you want to save?'\n            },\n            changeLangNoSave: {\n                title: 'Exit without saving',\n                text: 'Are you sure you want to switch language? Unsaved changes will be lost.'\n            },\n            vehicleRange: {\n                title: 'Select vehicles',\n                placeholder: 'empty (all), 1000-1200, 1502'\n            },\n            fieldConfig: {\n                title: 'Save options for {{fieldName}}',\n                text: 'Are you sure you want to save?',\n                fieldErrorTitle: 'Incorrect values',\n                fieldErrorText: 'Check field \"{{fieldName}}\".'\n            }\n        },\n\n        messages: {\n            loginFailed: 'Login failed.',\n            vehicle: {\n                'data.attributes.name': 'Name incorrect',\n                'data.attributes.number': 'Vehicle number incorrect'\n            },\n            shiftTpl: {\n                'overlapping.shift.template': 'Overlapping shift template',\n                'no.weekdays.interval': 'Interval too small for the selected days and times',\n                'data.attributes.startTime': 'Start time incorrect',\n                'data.attributes.endTime': 'End time incorrect',\n                'data.attributes.startDay': 'Start day must be given',\n                'data.attributes.endDay': 'End day must be given',\n                overNightShiftCopyError: 'Copying over night shift templates is currently not supported',\n                vehicleHasNoUseShift: \"Vehicle doesn't use shifts\"\n            }\n        },\n\n        table: {\n            shift: {\n                columns: {\n                    startDay: 'Start day',\n                    startTime: 'Start time',\n                    endDay: 'End day',\n                    endTime: 'End time',\n                    from: 'From',\n                    to: 'To',\n                    group: 'Group',\n                    startTimeClock: 'Start time',\n                    endTimeClock: 'End time',\n                    startTimeDate: 'From',\n                    endTimeDate: 'To'\n                }\n            },\n            fieldConfig: {\n                columns: {\n                    key: 'Key',\n                    value: 'Visible name',\n                    keyPlaceholder: 'Small letters or numbers, no whitespace',\n                    valuePlaceholder: 'Visible name'\n                },\n                title: {\n                    'vehicle-contracts': 'Vehicle: Contract',\n                    'vehicle-labels': 'Vehicle: Labels',\n                    'vehicle-dispatch-areas': 'Vehicle: Area',\n                    'driver-trainings': 'Driver: Training'\n                }\n            }\n        },\n\n        import: {\n            operator: {\n                title: 'Operator import',\n                unsaved: 'New or updated operators',\n                instructions: 'Drag and Drop <b><i>mbr-operator*.tsv</i></b> file here'\n            },\n            vehicle: {\n                title: 'Vehicle import',\n                unsaved: 'New or updated vehicles',\n                instructions: 'Drag and Drop <b><i>vehicle*.tsv</i></b> AND <b><i>capacity*.tsv</i></b> files OR vehicles <b><i>*.json</i></b> file here'\n            },\n            button: 'Import',\n            exportButton: 'Export',\n            save: 'Save all',\n            clear: 'Clear imports'\n        },\n\n        role: {\n            super: 'Super admin',\n            admin: 'Admin',\n            operator: 'Operator'\n        },\n\n        report: {\n            noshow: 'No-show',\n            genReport: 'Generate report',\n            routeId: 'Route number',\n            externalRouteId: 'External id',\n            vehicleNumber: 'Vehicle number',\n            vehicleName: 'Vehicle name',\n            driver: 'Driver',\n            date: 'Date',\n            startTime: 'Start',\n            endTime: 'End',\n            startLocation: 'From',\n            endLocation: 'To',\n            noResults: 'No results',\n            noVehicles: '-- No vehicles --',\n            routes: 'Routes',\n            distance: 'Distance',\n            price: {\n                total: 'Price',\n                excess: 'Excesses',\n                extraFees: 'Extra fees',\n                sum: 'Total Price',\n                vat: 'VAT',\n                vatType: 'VAT-%',\n                waitFee: 'Wait fee',\n                transitFee: 'Transit fee'\n            }\n        },\n\n        etc: {\n            license: {\n                createdLicenses: 'You have created licenses for the following languages: {{languages}}.',\n                noCreatedLicenses: 'No licenses created. Please select a language to create one.'\n            }\n        },\n\n        api: {\n            errors: {\n                'Incorrect value in vehicle-labels. Select from available options.': 'Incorrect label. Select from available options.',\n                'Incorrect value in vehicle-contracts. Select from available options.': 'Incorrect contract. Select from available options.',\n                'Incorrect value in vehicle-dispatch-areas. Select from available options.': 'Incorrect area. Select from available options.',\n                'Incorrect value in driver-trainings. Select from available options.': 'Incorrect training. Select from available options.',\n                'Incorrect value in vehicle-labels. Check values.': 'Incorrect label. Check fields.',\n                'Incorrect value in vehicle-contracts. Check values.': 'Incorrect contract. Check fields.',\n                'Incorrect value in vehicle-dispatch-areas. Check values.': 'Incorrect area. Check fields.',\n                'Incorrect value in driver-trainings. Check values.': 'Incorrect training. Check fields.'\n            }\n        }\n    };\n});","define('garage/locales/fi/config', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = {\n\n        rtl: false,\n\n        pluralForm: function pluralForm(count) {\n            if (count === 0) {\n                return 'zero';\n            }\n            if (count === 1) {\n                return 'one';\n            }\n            return 'other';\n        }\n    };\n});","define('garage/locales/fi/translations', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = {\n        weekday: {\n            Monday: 'Maanantai',\n            Tuesday: 'Tiistai',\n            Wednesday: 'Keskiviikko',\n            Thursday: 'Torstai',\n            Friday: 'Perjantai',\n            Saturday: 'Lauantai',\n            Sunday: 'Sunnuntai'\n        },\n\n        languages: {\n            fi: 'Suomi',\n            en: 'Englanti',\n            sv: 'Ruotsi',\n            de: 'Saksa'\n        },\n\n        dropdown: {\n            select: 'Valitse...'\n        },\n\n        toggle: {\n            capacity: 'Use vehicle specific values',\n            showInactive: 'Show expired and not yet started shifts.',\n            Alcolock: 'Alcolock',\n            'Easy access': 'Easy access'\n        },\n\n        // ---------------\n\n        button: {\n            Delete: 'Poista',\n            Copy: 'Kopioi',\n            New: 'Uusi',\n            Revert: 'Palauta',\n            Save: 'Tallenna',\n            SaveAsType: 'Tallenna ajoneuvotyyppinä',\n            SaveAsGroup: 'Tallenna ryhmänä',\n            SaveAll: 'Tallenna',\n            Join: 'Liity',\n            Add: 'Lisää',\n            Edit: 'Muokkaa',\n            Remove: 'Poista',\n            Cancel: 'Peruuta',\n            Login: 'Kirjaudu sisään',\n            Logout: 'Kirjaudu ulos',\n            CopyToVehicle: 'Kopioi autolle',\n            GenQRCode: 'Luo QR-koodi',\n            Select: 'Valitse',\n            AddOption: 'Lisää vaihtoehto'\n        },\n\n        capacity: {\n            wheelchair: 'Pyörätuoli',\n            ambulatory: 'Kävelevä',\n            luggage: 'Matkatavara',\n            walker: 'Rollaattori',\n            dog: 'Koira'\n        },\n\n        tab: {\n            Vehicle: 'Ajoneuvo',\n            Capacity: 'Kapasiteetit',\n            Attributes: 'Attribuutit',\n            Shift: 'Vuorot',\n            Garage: 'Asemapaikka',\n            Terminal: 'Terminaali',\n\n            Info: 'Info',\n            Vehicles: 'Autot',\n            Operators: 'Yritykset',\n            Drivers: 'Kuljettajat',\n            VehicleReports: 'Reittiraportti',\n            OperatorReports: 'Autoraportti',\n            Settings: 'Asetukset',\n\n            Users: 'Käyttäjät',\n            UserManagement: 'Käyttäjien hallinta',\n            OtherSettings: 'Muut asetukset',\n\n            LicenseSettings: 'Lisenssiasetukset',\n            FieldConfig: 'Kenttien Konfigurointi'\n        },\n\n        form: {\n            label: {\n                Name: 'Nimi',\n                Operator: 'Yritys',\n                Fleet: 'Yksikkö',\n                CallId: 'Autonumero',\n                ExternalId: 'Ulkoinen autonumero',\n                PaymentTerminalId: 'Maksupäätetunnus',\n                Description: 'Kuvaus',\n                DispatchParameters: 'Välitys',\n                DispatchArea: 'Alue',\n                DispatchPriority: 'Prioriteetti',\n                LicenceNumber: 'Rekisterinumero',\n                Phone: 'Puhelin',\n                PriceFactor: 'Hintakerroin',\n                EmissionFactor: 'Päästökerroin',\n                CO2: 'CO2',\n                ServiceFactor: 'Palvelukerroin',\n                VehicleType: 'Ajoneuvotyyppi',\n                Attributes: 'Attribuutit',\n                Capacities: 'Lisää uusi kapasiteetti',\n                ExistingCapacities: 'Auton kapasiteetit',\n                ShiftGroups: 'Ajovuororyhmät',\n                Customization: 'Kustomointi',\n                Username: 'Käyttäjä',\n                Password: 'Salasana',\n                ShiftTemplates: 'Ajovuoropohjat',\n                ShiftTemplateInterval: 'Voimassaoloaika',\n                UseShift: 'Käytä ajovuoroa',\n                AdditionalInfo: 'Lisätiedot',\n                BrandModel: 'Automerkki ja malli',\n                SetInactive: 'Poista',\n                SetInactiveLabel: 'Poista käytöstä',\n\n                UserEmail: 'Käyttäjän sähköposti',\n                UserPassword: 'Käyttäjän salasana',\n                CompanyName: 'Yrityksen nimi',\n                CompanyAddress: 'Yrityksen osoite',\n                ContactName: 'Yhteyshenkiön nimi',\n                ContactPhone: 'Yhteyshenkilön puhelin',\n                ContactEmail: 'Yhteyshenkilön sähköposti',\n                BusinessId: 'Y-tunnus',\n                OperatorInfo: 'Lisätiedot (näkyy vain hallinnoijille)',\n                OperatorExternalId: 'Ulkoinen tunniste',\n                Iban: 'Pankkitili (IBAN)',\n                Bic: 'Pankkiosoite (BIC)',\n\n                Email: 'Sähköposti',\n                PinCode: 'PIN-koodi',\n                DriverExternalId: 'Ulkoinen tunniste',\n                LicenseAccepted: 'Käyttösopimus hyväksytty',\n                Status: 'Status',\n                Role: 'Rooli',\n                Permissions: 'Oikeudet',\n\n                AddUser: 'Lisää uusi käyttäjä',\n                AllUsers: 'Kaikki käyttäjät',\n                Verified: 'Varmennettu',\n                VerifiedText: 'Jätä tyhjäksi, mikäli varmennus sähköpostin kautta',\n                Unlink: 'Poista',\n                Contract: 'Sopimus',\n                Labels: 'Tunniste',\n\n                driver: {\n                    status: {\n                        active: 'Aktiivinen',\n                        inactive: 'Ei aktiivinen'\n                    },\n                    training: 'Koulutus',\n                    additionalInfo: 'Lisätiedot'\n                }\n            },\n            help: {\n                DispatchArea: 'Auton toiminta-alueet. Tyhjä arvo=Kaikki alueet.',\n                DispatchPriority: 'Mitä isompi arvo sitä suurempi todennäköisyys saada reittitarjouksia. 0=ei tarjouksia, 100=oletuspriotiteetti',\n                PriceFactor: 'Hintakerroin joitakin autonvalintastrategioita varten.',\n                EmissionFactor: 'Päästökerroin',\n                CO2: 'Hiilidioksidi',\n                ServiceFactor: 'Palvelukerroin',\n                UseShift: 'Tilauksia välitetään vain ajovuorossa. Oletuksena autolle välitetään aina.',\n                SetInactive: 'Poistaa auton näkymästä sovelluksissa.'\n            },\n            text: {\n                Passengers: 'Matkustajia',\n                Wheelchair: 'Pyörätuoleja',\n                WalkingAid: 'Rollaattoreita',\n                SafetySeat: 'Turvaistuimia',\n                Alcolock: 'Alkolukko',\n                AllAreas: 'Kaikki alueet',\n                Inactive: 'Poistettu'\n            },\n            errors: {\n                'Value is required': 'Arvo ei voi olla tyhjä.'\n            },\n            capacities: {\n                ambulatory: 'Matkustaja',\n                wheelchair: 'Pyörätuoli',\n                luggage: 'Matkalaukku',\n                'assistive-device': 'Apuväline',\n                stretcher: 'Paarivarustus',\n                'front-seat': 'Etupenkki'\n            },\n            attributes: {\n                'test-vehicle': 'Testiauto',\n                bus: 'Tila-auto',\n                'station-wagon': 'Farmari',\n                sedan: 'Henkilöauto',\n                'eco-friendly': 'Ympäristöystävällinen',\n                paratransit: 'Paratransit',\n                lowrider: 'Matalalattia',\n                'pet-friendly': 'Kuljettaa eläimiä',\n                'non-smoking': 'Hajusteeton auto',\n                stretcher: 'Paarivarustus',\n                stairclimber: 'Porrasveto',\n                'front-seat': 'Etupenkki',\n                'wheelchair-lift': 'Pyörätuolihissi',\n                'multiple-wheelchairs': 'Tilava auto',\n                'electric-wheelchair': 'Sähköpyörätuoli',\n                alcometer: 'Alkometri'\n            },\n            placeholder: {\n                lookup: 'hae...',\n                alias: 'alias',\n                filter: 'rajaa',\n                searchAndAdd: 'etsi ja lisää',\n                noUser: 'ei käyttäjää'\n            }\n        },\n\n        message: {\n            title: {\n                success: 'Onnistui',\n                failure: 'Virhe',\n                saving: 'Tallentaa...'\n            },\n            text: {\n                wait: 'Ole hyvä ja odota!',\n\n                vehicle: {\n                    delete: {\n                        success: 'Auto poistettiin onnistuneesti.',\n                        failure: 'Auton poistaminen epäonnistui.'\n                    },\n                    save: {\n                        failure: 'Auton tallentaminen epäonnistui.'\n                    },\n                    new: {\n                        failure: 'Uuden auton luominen epäonnistui.'\n                    },\n                    copy: {\n                        failure: 'Auton kopioiminen epäonnistui.'\n                    }\n                },\n                shift: {\n                    new: {\n                        failure: 'Uuden ajovuoron luominen epäonnistui.'\n                    }\n                },\n                operator: {\n                    delete: {\n                        success: 'Yritys poistettiin onnistuneesti.',\n                        failure: 'Yrityksen poistaminen epäonnistui.'\n                    },\n                    save: {\n                        failure: 'Yrityksen tallentaminen epäonnistui.'\n                    },\n                    new: {\n                        failure: 'Uuden yrityksen luominen epäonnistui.'\n                    },\n                    copy: {\n                        failure: 'Yrityksen kopioiminen epäonnistui.'\n                    }\n                },\n                driver: {\n                    delete: {\n                        success: 'Kuljettaja poistettiin onnistuneesti.',\n                        failure: 'Kuljettajan poistaminen epäonnistui.'\n                    },\n                    save: {\n                        failure: 'Kuljettajan tallennus epäonnistui.',\n                        operatorMandatory: 'Kuljettajan yritys asetettava.'\n                    },\n                    new: {\n                        failure: 'Uuden kuljettajan luominen epäonnistui.'\n                    },\n                    copy: {\n                        failure: 'Kuljettajan kopiointi epäonnistui.'\n                    }\n                },\n                user: {\n                    save: {\n                        success: 'Käyttäjä tallennettu.',\n                        failure: 'Käyttäjän tallennus epäonnistui.'\n                    }\n                }\n            }\n        },\n\n        dialog: {\n            button: {\n                yes: 'Kyllä',\n                no: 'Ei',\n                close: 'Sulje'\n            },\n            saved: {\n                title: 'Tallennus',\n                text: {\n                    success: 'Ei virheitä tallennuksessa.',\n                    withErrors: 'Seuraavat virheet havaittiin tallennuksessa: {{errors}}',\n                    driverToOperatorError: '<br>-<b>{{name}}</b>: {{error}}',\n                    driver: 'Onnistui kuljettajille: {{success}} yhteensä: {{totalSuccess}}<br>Epäonnistui kuljettajille {{failed}}',\n                    vehicle: 'Onnistui autoille: {{success}} (yhteensä: {{totalSuccess}})<br>Epäonnistui autoille: {{failed}}',\n                    operator: 'Onnistui yrityksille: {{success}} (yhteensä: {{totalSuccess}})<br>Epäonnistui yrityksille: {{failed}}'\n                }\n            },\n            delete: {\n                title: 'Poista {{name}}',\n                text: 'Oletko varma?'\n            },\n            revert: {\n                title: 'Peruuta kaikki muutokset',\n                text: 'Oletko varma?'\n            },\n            shiftCopy: {\n                copyTitle: 'Kopioi ajovuoropohja'\n            },\n            saveLicense: {\n                title: 'Tallenna käyttöehdot kielellä {{language}}',\n                text: 'Oletko varma että haluat tallentaa?'\n            },\n            changeLangNoSave: {\n                title: 'Poistu tallentamatta',\n                text: 'Oletko varma että haluat vaihtaa kieltä? Tallentamattomat muutoksesi katoavat'\n            },\n            vehicleRange: {\n                title: 'Valitse autot',\n                placeholder: 'tyhjä (kaikki), 1000-1200, 1502'\n            },\n            fieldConfig: {\n                title: 'Tallenna \"{{fieldName}}\"',\n                text: 'Oletko varma että haluat tallentaa?',\n                fieldErrorTitle: 'Virheellisiä arvoja',\n                fieldErrorText: 'Tarkista kenttä \"{{fieldName}}\".'\n            }\n        },\n\n        messages: {\n            loginFailed: 'Kirjautuminen epäonnistui.',\n            vehicle: {\n                'data.attributes.name': 'Nimi virheellinen',\n                'data.attributes.number': 'Autonumero virheellinen'\n            },\n            shiftTpl: {\n                'overlapping.shift.template': 'Päällekkäinen ajovuoropohja',\n                'no.weekdays.interval': 'Yksikään päivä ei osu aikavälille',\n                'data.attributes.startTime': 'Aloituspäivämäärä virheellinen',\n                'data.attributes.endTime': 'Lopetuspäivämäärä virheellinen',\n                'data.attributes.startDay': 'Aloituspäivä annettava',\n                'data.attributes.endDay': 'Lopetuspäivä annettava',\n                overNightShiftCopyError: 'Yön yli ajovuoron kopiointi ei tällä hetkellä tuettu.',\n                vehicleHasNoUseShift: 'Auto ei käytä ajovuoroja'\n            }\n        },\n\n        table: {\n            shift: {\n                columns: {\n                    startDay: 'Aloituspäivä',\n                    startTime: 'Aloitusaika',\n                    endDay: 'Lopetuspäivä',\n                    endTime: 'Lopetusaika',\n                    from: 'Alku',\n                    to: 'Loppu',\n                    group: 'Ryhmä',\n                    startTimeClock: 'Aloitusaika',\n                    endTimeClock: 'Lopetusaika',\n                    startTimeDate: 'Alku',\n                    endTimeDate: 'Loppu'\n                }\n            },\n            fieldConfig: {\n                columns: {\n                    key: 'Avain',\n                    value: 'Näkyvä nimi',\n                    keyPlaceholder: 'Yhdyssana pienillä kirjaimilla tai numeroilla',\n                    valuePlaceholder: 'Näkyvä nimi'\n                },\n                title: {\n                    'vehicle-contracts': 'Ajoneuvo: Sopimus',\n                    'vehicle-labels': 'Ajoneuvo: Tunnisteet',\n                    'vehicle-dispatch-areas': 'Ajoneuvo: Alue',\n                    'driver-trainings': 'Kuljettaja: Koulutukset'\n                }\n            }\n        },\n\n        import: {\n            operator: {\n                title: 'Tuo yritykset',\n                unsaved: 'Uudet tai muuttuneet yritykset',\n                instructions: 'Pudota yritysten <b><i>mbr-operator*.tsv</i></b> tiedosto tähän'\n            },\n            vehicle: {\n                title: 'Tuo tiedot',\n                unsaved: 'Uudet tai muuttuneet autot',\n                instructions: 'Pudota autojen <b><i>vehicle*.tsv</i></b> JA <b><i>capacity*.tsv</i></b> tiedostot TAI autojen <b><i>*.json</i></b> tiedosto tähän'\n            },\n            button: 'Tuo tiedot',\n            exportButton: 'Vie tiedot',\n            save: 'Tallenna kaikki',\n            clear: 'Poista keskeneräiset'\n        },\n\n        role: {\n            super: 'Ylikäyttäjä',\n            admin: 'Hallinnoija',\n            operator: 'Yrittäjä'\n        },\n\n        report: {\n            noshow: 'Hukka-ajo',\n            genReport: 'Luo raportti',\n            routeId: 'Reitin numero',\n            externalRouteId: 'Ulkoinen tunnus',\n            vehicleNumber: 'Auton numero',\n            vehicleName: 'Auton nimi',\n            date: 'Päivämäärä',\n            driver: 'Kuljettaja',\n            startTime: 'Aloitusaika',\n            endTime: 'Lopetusaika',\n            startLocation: 'Lähtöosoite',\n            endLocation: 'Kohdeosoite',\n            noResults: 'Ei tuloksia',\n            noVehicles: '-- Ei autoja --',\n            routes: 'Reittejä',\n            distance: 'Matka',\n            price: {\n                total: 'Hinta',\n                excess: 'Omavastuut',\n                extraFees: 'Lisämaksut',\n                sum: 'Summa',\n                vat: 'ALV:n osuus',\n                vatType: 'ALV-%',\n                waitFee: 'Odotusmaksu',\n                transitFee: 'Luokseajokorvaus'\n            }\n        },\n\n        etc: {\n            license: {\n                createdLicenses: 'Olet luonut käyttöehdot seuraaville kielille: {{languages}}.',\n                noCreatedLicenses: 'Et ole vielä luonut käyttöehtoja. Aloita valitsemalla kieli'\n            }\n        },\n\n        api: {\n            errors: {\n                'Incorrect value in vehicle-labels. Select from available options.': 'Tunniste virheellinen. Tarkista soveltuvat arvot.',\n                'Incorrect value in vehicle-contracts. Select from available options.': 'Sopimus virheellinen. Tarkista soveltuvat arvot.',\n                'Incorrect value in vehicle-dispatch-areas. Select from available options.': 'Alue virheellinen. Tarkista soveltuvat arvot.',\n                'Incorrect value in driver-trainings. Select from available options.': 'Kuljettajan koulutus virheellinen. Tarkista soveltuvat arvot.',\n                'Incorrect value in vehicle-labels. Check values.': 'Tunniste virheellinen. Tarkista kentät.',\n                'Incorrect value in vehicle-contracts. Check values.': 'Sopimus virheellinen. Tarkista kentät.',\n                'Incorrect value in vehicle-dispatch-areas. Check values.': 'Alue virheellinen. Tarkista kentät.',\n                'Incorrect value in driver-trainings. Check values.': 'Koulutus virheellinen. Tarkista kentät.'\n            }\n        },\n\n        customerLocale: {\n            tuomi: {\n                report: {\n                    price: {\n                        excess: 'Asiakasmaksut'\n                    }\n                }\n            }\n        }\n    };\n});","define('garage/location/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend(Ember.Copyable, {\n        street: _emberData.default.attr('string'),\n        streetNumber: _emberData.default.attr('string'),\n        door: _emberData.default.attr('string'),\n        city: _emberData.default.attr('string'),\n        province: _emberData.default.attr('string'),\n        zipcode: _emberData.default.attr('string'),\n        country: _emberData.default.attr('string'),\n        alias: _emberData.default.attr('string'),\n        lat: _emberData.default.attr('number'),\n        lng: _emberData.default.attr('number'),\n        info: _emberData.default.attr('string'),\n\n        nameAndNumber: Ember.computed('street', 'streetNumber', 'city', function () {\n            // @todo should be locale specific\n            return this.get('street') + ' ' + (this.get('streetNumber') || '');\n        }),\n\n        nameNumberCity: Ember.computed('street', 'streetNumber', 'city', function () {\n            // @todo should be locale specific\n            return this.get('street') + ' ' + (this.get('streetNumber') || '') + ' (' + this.get('city') + ')';\n        }),\n\n        cityNameNumber: Ember.computed('street', 'streetNumber', 'city', function () {\n            // @todo should be locale specific\n            return '(' + this.get('city') + ') ' + this.get('street') + ' ' + (this.get('streetNumber') || '');\n        }),\n\n        copy: function copy() {\n            this.get('store').createRecord('location', {\n                street: this.get('street'),\n                streetNumber: this.get('streetNumber'),\n                door: this.get('door'),\n                city: this.get('city'),\n                province: this.get('province'),\n                zipcode: this.get('zipcode'),\n                country: this.get('country'),\n                alias: this.get('alias'),\n                lat: this.get('lat'),\n                lng: this.get('lng'),\n                info: this.get('info')\n            });\n        }\n    });\n});","define('garage/login/route', ['exports', 'garage/config/environment', 'ember-simple-auth/mixins/unauthenticated-route-mixin'], function (exports, _environment, _unauthenticatedRouteMixin) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend(_unauthenticatedRouteMixin.default, {\n\n        session: Ember.inject.service('session'),\n\n        loginDialog: function loginDialog() {\n            var lockOptions = {\n                auth: {\n                    audience: _environment.default['ember-simple-auth'].auth0.audience,\n                    params: {\n                        scope: 'openid user_metadata',\n                        responseType: 'token id_token'\n                    }\n                },\n\n                theme: {\n                    logo: 'vinka.png',\n                    primaryColor: 'gray'\n                },\n\n                languageDictionary: {\n                    title: 'Garage'\n                },\n\n                closable: false,\n                allowSignUp: _environment.default.APP.auth0.allowSignUp,\n                autoclose: true,\n                rememberLastLogin: false,\n                allowedConnections: ['Username-Password-Authentication', 'google-oauth2']\n            };\n\n            this.get('session').authenticate('authenticator:auth0-lock', lockOptions);\n        },\n\n\n        actions: {\n            login: function login() {\n                this.loginDialog();\n            }\n        }\n    });\n});","define(\"garage/login/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"gNbutuCN\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container login-page\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"main-area\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"large-login-btn\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"login\\\"]],[7],[0,\\\"Login\\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/login/template.hbs\" } });\n});","define('garage/logout/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n\n        session: Ember.inject.service('session'),\n\n        actions: {\n            didTransition: function didTransition() {\n                this.get('session').invalidate();\n                this.transitionTo('login');\n            }\n        }\n    });\n});","define(\"garage/logout/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ri0Fw38C\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/logout/template.hbs\" } });\n});","define('garage/mbr-vehicles-parser/service', ['exports', 'papaparse', 'garage/config/environment', 'lodash'], function (exports, _papaparse, _environment, _lodash) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        init: function init() {\n            this._super.apply(this, arguments);\n        },\n\n        modalMessage: Ember.inject.service(),\n\n        mappings: _environment.default.APP.import.capacityMappings,\n        encoding: _environment.default.APP.import.encoding,\n\n        parseFile: function parseFile(file, encoding) {\n            return new Promise(function (res, rej) {\n                _papaparse.default.parse(file, {\n                    encoding: encoding,\n                    header: true,\n                    complete: res,\n                    error: rej\n                });\n            });\n        },\n\n\n        // create capacity string to be used as a \"unique index\" for each capacity\n        // configuration. this is used for filtering out possible duplicates since\n        // we are not bringing over all mobirouter capacities.\n        capstring: function capstring(caps) {\n            return this.mappings.meaningfulMbrCapacities.map(function (capname) {\n                return caps[capname];\n            }).join('-');\n        },\n        emptycapstring: function emptycapstring() {\n            return new Array(this.mappings.meaningfulMbrCapacities.length).fill(0).join('-');\n        },\n        squashCapacities: function squashCapacities(capgroups) {\n            var _this = this;\n\n            var emptycap = this.emptycapstring();\n            Object.values(capgroups).forEach(function (caps) {\n                var cleancaps = _lodash.default.uniqBy(caps, _this.capstring.bind(_this));\n                cleancaps = cleancaps.filter(function (c) {\n                    return _this.capstring(c) !== emptycap;\n                });\n                if (cleancaps.length !== caps.length) {\n                    console.log('WARNING! ' + caps[0].KULKUNEUVO + ' has \"zero capacity row\"');\n                }\n                if (caps[0].KULKUNEUVO) {\n                    capgroups[caps[0].KULKUNEUVO] = cleancaps;\n                } else {\n                    // delete empty lines\n                    delete capgroups[caps[0].KULKUNEUVO];\n                }\n            });\n        },\n\n\n        // group capacities by each vehicle\n        groupCapacities: function groupCapacities(capacities) {\n            var capgroups = _lodash.default.groupBy(capacities, 'KULKUNEUVO');\n            this.squashCapacities(capgroups);\n            return capgroups;\n        },\n        capacityConfigToVinka: function capacityConfigToVinka(cap) {\n            var _this2 = this;\n\n            return this.mappings.meaningfulMbrCapacities.map(function (mbrcapname) {\n                if (parseInt(cap[mbrcapname]) === 0) {\n                    return null;\n                }\n\n                var ret = {\n                    unitId: parseInt(_this2.mappings.capacityMbrMap[mbrcapname]),\n                    count: parseInt(cap[mbrcapname])\n                };\n\n                (true && !(ret.unitId > 0) && Ember.assert('got capa unitId ' + ret.unitId + ' for vehicle ' + cap.KULKUNEUVO, ret.unitId > 0));\n                (true && !(ret.count > 0) && Ember.assert('got capa count ' + ret.count + ' for vehicle ' + cap.KULKUNEUVO, ret.count > 0));\n\n\n                return ret;\n            }).filter(function (cap) {\n                return cap !== null;\n            });\n        },\n        attributeToVinka: function attributeToVinka(attribute) {\n            var id = this.mappings.attributeMap[attribute];\n            return id > 0 ? { id: id } : null;\n        },\n        vehiclesToVinka: function vehiclesToVinka(vehicles, capacities, prefixes, externalIds) {\n            var _this3 = this;\n\n            var capacitiesWithVehcile = {};\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = Object.keys(vehicles)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var vNbr = _step.value;\n\n                    if (capacities[vNbr] && capacities[vNbr].length) {\n                        capacitiesWithVehcile[vNbr] = capacities[vNbr];\n                    }\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n\n            var vehicleDatas = Object.values(capacitiesWithVehcile).map(function (caps) {\n                var number = caps[0].KULKUNEUVO;\n                var vehicle = vehicles[number];\n                if (!vehicle) {\n                    console.log('capacities contain vehicle data which is not found', number);\n                    return null;\n                }\n                (true && !(vehicle) && Ember.assert('vehicle ' + number + ' not found from vehicle file', vehicle));\n\n                var name = (vehicle.NIMI || '').trim();\n                var capacityConfigs = caps.map(function (cap) {\n                    return _this3.capacityConfigToVinka(cap);\n                });\n                var attributes = (vehicle.VARUSTEET || '').trim().split('').map(function (attr) {\n                    return _this3.attributeToVinka(attr);\n                }).filter(function (a) {\n                    return a !== null;\n                });\n\n                var priceFactor = parseFloat((vehicle.HINTAMUUTOS || '').trim().replace(',', '.'));\n                priceFactor = isNaN(priceFactor) ? 1 : priceFactor;\n\n                var emissionFactor = _this3.parseEmissionFactor(vehicle.HIDASAJO_KERROIN);\n\n                var phoneNumber = (vehicle.PUHELINNUMERO || '').trim();\n                phoneNumber = phoneNumber.length > 0 && phoneNumber !== '0' ? phoneNumber : null; // empty phone is not accepted\n\n                var dispatchPriority = parseInt((vehicle.PRIORITEETTI || '').trim(), 10);\n                dispatchPriority = isNaN(dispatchPriority) ? 100 : dispatchPriority;\n\n                var dispatchArea = (vehicle.ALUEET || '').trim();\n                dispatchArea = dispatchArea.length > 0 ? dispatchArea : null;\n\n                var useShift = (vehicle.AJOVUORO || '').trim().length > 0 ? true : false;\n\n                var _ref = [parseFloat(vehicle.GARAGE_LAT), parseFloat(vehicle.GARAGE_LNG), vehicle.GARAGE_ALIAS || ''],\n                    lat = _ref[0],\n                    lng = _ref[1],\n                    alias = _ref[2];\n\n                var garage = isNaN(lat) || isNaN(lng) ? null : { lat: lat, lng: lng, alias: alias };\n\n                // let operator;\n\n                var externalId = (vehicle.ULKOINEN_TUNNUS || '').trim() || null;\n                var paymentTerminalId = (vehicle.MAKSUPAATETUNNUS || '').trim() || null;\n\n                (true && !(number) && Ember.assert('no vehicle number found', number));\n                (true && !(name) && Ember.assert('no name found for vehicle ' + number, name));\n                (true && !(capacityConfigs.length > 0) && Ember.assert('got 0 capacities for vehicle ' + number, capacityConfigs.length > 0));\n\n\n                if (prefixes) {\n                    var numbersz = String(number);\n                    var pref = prefixes.find(function (p) {\n                        return numbersz.startsWith(p.prefix);\n                    });\n                    (true && !(pref) && Ember.assert('prefix not found for ' + numbersz, pref));\n\n                    number = parseInt(numbersz.substring(pref.prefix.length));\n                    // operator = pref.operator;\n                }\n\n                if (externalIds) {}\n                // externalId = name.split(' ')[1];\n\n\n                // return {number, externalId, name, operator, active: false, attributes, capacityConfigs};\n                return { number: number, name: name, priceFactor: priceFactor, emissionFactor: emissionFactor, phoneNumber: phoneNumber, dispatchPriority: dispatchPriority, dispatchArea: dispatchArea, useShift: useShift,\n                    active: false, attributes: attributes, capacityConfigs: capacityConfigs, garage: garage, externalId: externalId, paymentTerminalId: paymentTerminalId };\n            });\n\n            var finals = vehicleDatas.filter(function (i) {\n                return i !== null;\n            });\n\n            return finals;\n        },\n        parse: function parse(vehfile, capfile) {\n            var _this4 = this;\n\n            var capacities = void 0;\n            var vehicles = void 0;\n\n            return this.parseFile(capfile, this.encoding).then(function (parsed) {\n                return _this4.groupCapacities(parsed.data);\n            }).then(function (capas) {\n                capacities = capas;\n                return _this4.parseFile(vehfile, _this4.encoding);\n            }).then(function (parsed) {\n                vehicles = _lodash.default.keyBy(parsed.data, 'KULKUNEUVO');\n            }).then(function () {\n                return _this4.vehiclesToVinka(vehicles, capacities, undefined, false);\n            }).catch(function (e) {\n                console.log(e);\n                _this4.get('modalMessage').showDialog('Import Interrupted', e.message);\n            });\n        },\n\n\n        /**\n         * Answer from customer: HIDASAJO_KERROIN field is good to be used for this. As an exception value 0 should equal to\n         * value 100 in the import values. So let’s convert the values from tsv:\n            100 -> 1\n            98 -> 0,98\n            106 -> 1,06\n            0 -> 1\n         * @param emissionFactor\n         * @returns {null|number}\n         */\n        parseEmissionFactor: function parseEmissionFactor(emissionFactor) {\n            emissionFactor = parseInt(('' + emissionFactor).trim(), 10);\n\n            // if the emission factor column is missing OR the value is missing OR is invalid - return null\n            if (isNaN(emissionFactor)) {\n                return null;\n            }\n\n            return emissionFactor === 0 ? 1 : emissionFactor / 100;\n        }\n    });\n});","define('garage/mirage/config', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    exports.default = function () {\n        this.passthrough(_environment.default.APP.api.host + ':' + _environment.default.APP.api.port + '/**');\n        this.passthrough(_environment.default.APP.auth.host + ':' + _environment.default.APP.auth.port + '/**');\n\n        this.namespace = '/api';\n        this.logging = false;\n\n        function camelize(str) {\n            return str.replace(/-([a-z])/g, function (g) {\n                return g[1].toUpperCase();\n            });\n        }\n\n        /**\n         * Create API services for the given model.\n         *\n         * @param model Name of the model in plural.\n         * @param patch Add also PATCH service, if set.\n         * @param del Add also DELETE service, if set.\n         * @param post Add also POST service, if set.\n         * @param put Add also PUT service, if set.\n         */\n        this.serve = function (model) {\n            var patch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n            var del = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n            var _this = this;\n\n            var post = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n            var put = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\n            this.get('/' + model, function (schema) {\n                return { data: schema.db[model.camelize()].where({}) };\n            });\n\n            this.get('/' + model + '/:id', function (schema, request) {\n                return { data: schema.db[camelize(model)].find(request.params.id) };\n            });\n\n            if (patch) {\n                var url = '/' + model + '/:id';\n                this.patch(url, function (schema, request) {\n                    var data = JSON.parse(request.requestBody).data;\n                    console.log(\"PATCH \" + _this.namespace + '/' + model + '/' + request.params.id, data);\n                    schema.db[camelize(model)].update(request.params.id, data);\n                    return { data: null };\n                });\n            }\n\n            if (del) {\n                var _url = '/' + model + '/:id';\n                this.delete(_url, function (schema, request) {\n                    console.log(\"DELETE \" + _this.namespace + '/' + model + '/' + request.params.id);\n                    schema.db[camelize(model)].remove(request.params.id);\n                    return { data: null };\n                });\n                _url = '/' + model + '/:id/:resource/:rid';\n                this.delete(_url, function (schema, request) {\n                    console.log(\"DELETE \" + _this.namespace + '/' + model + '/' + request.params.id + '/' + request.params.resource + '/' + request.params.rid);\n                    return { data: null };\n                });\n            }\n\n            if (post) {\n                var _url2 = '/' + model;\n                this.post(_url2, function (schema, request) {\n                    var data = JSON.parse(request.requestBody).data;\n                    console.log(\"POST \" + _this.namespace + '/' + model, data);\n                    var obj = schema.db[camelize(model)].insert(data);\n                    console.log(\" => New ID\", obj.id);\n                    return { data: obj };\n                });\n\n                _url2 = '/' + model + '/:id/:action';\n                this.post(_url2, function (schema, request) {\n                    var data = JSON.parse(request.requestBody);\n                    console.log(\"POST \" + _this.namespace + '/' + model + '/' + request.params.id + '/' + request.params.action, data);\n                    return { data: null };\n                });\n            }\n\n            if (put) {\n                var _url3 = '/' + model + '/:id/:action';\n                this.put(_url3, function (schema, request) {\n                    var data = JSON.parse(request.requestBody);\n                    console.log(\"PUT \" + _this.namespace + '/' + model + '/' + request.params.id + '/' + request.params.action, data);\n                    return { data: null };\n                });\n            }\n        };\n\n        this.serve('vehicles', true, true, true, true);\n        this.serve('fleets');\n        this.serve('operators');\n        this.serve('vehicletypes');\n        this.serve('shift-groups');\n        this.serve('vehicle-attributes');\n        this.serve('capacity-units');\n    };\n});","define(\"garage/mirage/fixtures/capacity-units\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 1, type: \"capacity-unit\",\n    \"attributes\": {\n      \"name\": \"Ambulatory\",\n      \"loadTime\": 170,\n      \"unloadTime\": 75\n    }\n  }, {\n    \"id\": 2, type: \"capacity-unit\",\n    \"attributes\": {\n      \"name\": \"Wheelchair\",\n      \"loadTime\": 210,\n      \"unloadTime\": 28\n    }\n  }, {\n    \"id\": 3, type: \"capacity-unit\",\n    \"attributes\": {\n      \"id\": 3,\n      \"name\": \"Walker\",\n      \"loadTime\": 20,\n      \"unloadTime\": 55\n    }\n  }, {\n    \"id\": 4, type: \"capacity-unit\",\n    \"attributes\": {\n      \"name\": \"Dog\",\n      \"loadTime\": 207,\n      \"unloadTime\": 271\n    }\n  }];\n});","define(\"garage/mirage/fixtures/fleets\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 1, type: \"fleet\",\n    \"attributes\": {\n      \"name\": \"Default\"\n    }\n  }];\n});","define(\"garage/mirage/fixtures/operators\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 1, type: \"operator\",\n    \"attributes\": {\n      \"name\": \"Operator 1\"\n    }\n  }, {\n    \"id\": 2, type: \"operator\",\n    \"attributes\": {\n      \"name\": \"Operator 2\"\n    }\n  }];\n});","define(\"garage/mirage/fixtures/shift-groups\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 76395, type: \"shift-group\",\n    \"attributes\": {\n      \"name\": \"weekend\",\n      \"templates\": [{\n        \"id\": 60837,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"12:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"14:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 65716,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"08:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"13:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }]\n    }\n  }, {\n    \"id\": 35430, type: \"shift-group\",\n    \"attributes\": {\n      \"name\": \"morning\",\n      \"templates\": [{\n        \"id\": 27317,\n        \"startDay\": \"Monday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Monday\",\n        \"endTime\": \"14:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 57435,\n        \"startDay\": \"Sunday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Sunday\",\n        \"endTime\": \"13:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 592,\n        \"startDay\": \"Saturday\",\n        \"startTime\": \"09:00\",\n        \"endDay\": \"Saturday\",\n        \"endTime\": \"17:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 72130,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"18:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }]\n    }\n  }, {\n    \"id\": 53770, type: \"shift-group\",\n    \"attributes\": {\n      \"name\": \"evening\",\n      \"templates\": [{\n        \"id\": 16420,\n        \"startDay\": \"Thursday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Thursday\",\n        \"endTime\": \"21:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 44311,\n        \"startDay\": \"Thursday\",\n        \"startTime\": \"11:00\",\n        \"endDay\": \"Thursday\",\n        \"endTime\": \"19:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 77539,\n        \"startDay\": \"Tuesday\",\n        \"startTime\": \"12:00\",\n        \"endDay\": \"Tuesday\",\n        \"endTime\": \"15:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }]\n    }\n  }];\n});","define(\"garage/mirage/fixtures/vehicle-attribute\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 1, type: \"vehicle-attribute\",\n    \"attributes\": {\n      \"name\": \"Alcolock\"\n    }\n  }, {\n    \"id\": 2, type: \"vehicle-attribute\",\n    \"attributes\": {\n      \"name\": \"Easy access\"\n    }\n  }];\n});","define(\"garage/mirage/fixtures/vehicles\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 1, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 2,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 82959,\n      \"name\": \"Kenneth\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }, {\n        \"unitId\": 2,\n        \"count\": 2\n      }, {\n        \"unitId\": 3,\n        \"count\": 3\n      }]],\n      \"shiftTemplates\": [{\n        \"id\": 23362,\n        \"startDay\": \"Monday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Monday\",\n        \"endTime\": \"14:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 95605,\n        \"startDay\": \"Tuesday\",\n        \"startTime\": \"11:00\",\n        \"endDay\": \"Tuesday\",\n        \"endTime\": \"19:00\",\n        \"from\": \"2015-01-01\",\n        \"to\": \"2015-12-31\"\n      }, {\n        \"id\": 63602,\n        \"startDay\": \"Sunday\",\n        \"startTime\": \"11:00\",\n        \"endDay\": \"Sunday\",\n        \"endTime\": \"19:00\",\n        \"from\": \"2016-12-10\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [{\n        \"id\": 76395,\n        \"name\": \"weekend\",\n        \"templates\": [{\n          \"id\": 73928,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"08:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 57434,\n          \"startDay\": \"Thursday\",\n          \"startTime\": \"08:00\",\n          \"endDay\": \"Thursday\",\n          \"endTime\": \"21:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Helsinki\",\n        lat: \"60.161535\",\n        lng: \"24.860269\",\n        street: \"Puistokaari\",\n        streetNumber: 21\n      }\n    }\n  }, {\n    \"id\": 2, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 2,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 24211,\n      \"name\": \"Lillian\",\n      \"capacityConfigs\": [],\n      \"attributes\": [],\n      \"shiftTemplates\": [{\n        \"id\": 78445,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"08:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"21:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 41064,\n        \"startDay\": \"Wednesday\",\n        \"startTime\": \"06:00\",\n        \"endDay\": \"Wednesday\",\n        \"endTime\": \"19:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 1864,\n        \"startDay\": \"Wednesday\",\n        \"startTime\": \"09:00\",\n        \"endDay\": \"Wednesday\",\n        \"endTime\": \"17:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 12547,\n        \"startDay\": \"Wednesday\",\n        \"startTime\": \"08:00\",\n        \"endDay\": \"Wednesday\",\n        \"endTime\": \"14:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 19002,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"15:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }, {\n    \"id\": 3, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 2,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 46292,\n      \"name\": \"Belle\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"attributes\": [{ \"id\": 2 }],\n      \"shiftTemplates\": [{\n        \"id\": 46547,\n        \"startDay\": \"Thursday\",\n        \"startTime\": \"11:00\",\n        \"endDay\": \"Thursday\",\n        \"endTime\": \"17:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 96675,\n        \"startDay\": \"Saturday\",\n        \"startTime\": \"10:00\",\n        \"endDay\": \"Saturday\",\n        \"endTime\": \"20:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 79499,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"11:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"21:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 27516,\n        \"startDay\": \"Wednesday\",\n        \"startTime\": \"12:00\",\n        \"endDay\": \"Wednesday\",\n        \"endTime\": \"16:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 81280,\n        \"startDay\": \"Saturday\",\n        \"startTime\": \"10:00\",\n        \"endDay\": \"Saturday\",\n        \"endTime\": \"19:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [{\n        \"id\": 62978,\n        \"name\": \"weekend\",\n        \"templates\": [{\n          \"id\": 60837,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"12:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 65716,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"08:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 6523,\n        \"name\": \"evening\",\n        \"templates\": [{\n          \"id\": 1274,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 83259,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"06:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 92868,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 2539,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"20:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Järvenpää\",\n        lat: \"60.509755\",\n        lng: \"25.080914\",\n        street: \"Asserinkuja\",\n        streetNumber: 1\n      }\n    }\n  }, {\n    \"id\": 4, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 26762,\n      \"name\": \"Corey\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [],\n      \"shiftGroups\": [],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }, {\n    \"id\": 5, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 61031,\n      \"name\": \"Jeffrey\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [{\n        \"id\": 42652,\n        \"startDay\": \"Sunday\",\n        \"startTime\": \"06:00\",\n        \"endDay\": \"Sunday\",\n        \"endTime\": \"14:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [{\n        \"id\": 35430,\n        \"name\": \"morning\",\n        \"templates\": [{\n          \"id\": 27317,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 57435,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 592,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 72130,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"18:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 80154,\n        \"name\": \"evening\",\n        \"templates\": [{\n          \"id\": 64283,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 22798,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"06:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"15:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }, {\n    \"id\": 6, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 34330,\n      \"name\": \"Sadie\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [],\n      \"shiftGroups\": [{\n        \"id\": 52522,\n        \"name\": \"morning\",\n        \"templates\": []\n      }, {\n        \"id\": 53770,\n        \"name\": \"evening\",\n        \"templates\": [{\n          \"id\": 16420,\n          \"startDay\": \"Thursday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Thursday\",\n          \"endTime\": \"21:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 44311,\n          \"startDay\": \"Thursday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Thursday\",\n          \"endTime\": \"19:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 77539,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"12:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"15:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Ikaalinen\",\n        lat: \"61.906795\",\n        lng: \"22.839255\",\n        street: \"Välikyläntie\",\n        streetNumber: 1\n      }\n    }\n  }, {\n    \"id\": 7, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 22929,\n      \"name\": \"Josie\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [{\n        \"id\": 91114,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"11:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"22:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 64112,\n        \"startDay\": \"Tuesday\",\n        \"startTime\": \"08:00\",\n        \"endDay\": \"Tuesday\",\n        \"endTime\": \"13:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }, {\n        \"id\": 77136,\n        \"startDay\": \"Friday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Friday\",\n        \"endTime\": \"19:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [{\n        \"id\": 27084,\n        \"name\": \"day\",\n        \"templates\": [{\n          \"id\": 58052,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"20:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 97827,\n        \"name\": \"weekend\",\n        \"templates\": [{\n          \"id\": 82206,\n          \"startDay\": \"Wednesday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Wednesday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 6534,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"10:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"19:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 38292,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"10:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"21:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 74957,\n        \"name\": \"day\",\n        \"templates\": [{\n          \"id\": 98561,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"10:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 43674,\n        \"name\": \"morning\",\n        \"templates\": [{\n          \"id\": 61026,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"10:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 75121,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"06:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 93034,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 66988,\n        \"name\": \"weekend\",\n        \"templates\": [{\n          \"id\": 10415,\n          \"startDay\": \"Thursday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Thursday\",\n          \"endTime\": \"16:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 43994,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }, {\n    \"id\": 8, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 1,\n      \"number\": 47587,\n      \"name\": \"Hattie\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [{\n        \"id\": 99715,\n        \"startDay\": \"Thursday\",\n        \"startTime\": \"12:00\",\n        \"endDay\": \"Thursday\",\n        \"endTime\": \"18:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }, {\n    \"id\": 9, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 2,\n      \"number\": 37069,\n      \"name\": \"Lora\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [],\n      \"shiftGroups\": [{\n        \"id\": 9862,\n        \"name\": \"day\",\n        \"templates\": [{\n          \"id\": 30874,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 10929,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"19:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 19631,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 72610,\n          \"startDay\": \"Wednesday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Wednesday\",\n          \"endTime\": \"19:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 36770,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"15:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 59989,\n        \"name\": \"morning\",\n        \"templates\": [{\n          \"id\": 83083,\n          \"startDay\": \"Thursday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Thursday\",\n          \"endTime\": \"22:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 98116,\n          \"startDay\": \"Thursday\",\n          \"startTime\": \"06:00\",\n          \"endDay\": \"Thursday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 40733,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"08:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"19:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 56005,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"10:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 58605,\n        \"name\": \"morning\",\n        \"templates\": [{\n          \"id\": 51689,\n          \"startDay\": \"Wednesday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Wednesday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }, {\n    \"id\": 10, type: \"vehicle\",\n    \"attributes\": {\n      \"operatorId\": 1,\n      \"fleetId\": 1,\n      \"typeId\": 2,\n      \"number\": 10123,\n      \"name\": \"Rosetta\",\n      \"capacityConfigs\": [[{\n        \"unitId\": 1,\n        \"count\": 1\n      }]],\n      \"shiftTemplates\": [{\n        \"id\": 15434,\n        \"startDay\": \"Sunday\",\n        \"startTime\": \"07:00\",\n        \"endDay\": \"Sunday\",\n        \"endTime\": \"17:00\",\n        \"from\": \"2016-01-01\",\n        \"to\": \"2016-12-31\"\n      }],\n      \"shiftGroups\": [{\n        \"id\": 94094,\n        \"name\": \"day\",\n        \"templates\": [{\n          \"id\": 20174,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"20:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 71638,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"12:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"21:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 49302,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"20:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 46556,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"18:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 27992,\n        \"name\": \"day\",\n        \"templates\": [{\n          \"id\": 87850,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"06:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"22:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 55288,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"12:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"20:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 80519,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"21:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 34480,\n        \"name\": \"morning\",\n        \"templates\": []\n      }, {\n        \"id\": 90934,\n        \"name\": \"evening\",\n        \"templates\": [{\n          \"id\": 29660,\n          \"startDay\": \"Tuesday\",\n          \"startTime\": \"07:00\",\n          \"endDay\": \"Tuesday\",\n          \"endTime\": \"21:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 64381,\n          \"startDay\": \"Sunday\",\n          \"startTime\": \"10:00\",\n          \"endDay\": \"Sunday\",\n          \"endTime\": \"14:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 28833,\n          \"startDay\": \"Wednesday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Wednesday\",\n          \"endTime\": \"17:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 44830,\n          \"startDay\": \"Friday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Friday\",\n          \"endTime\": \"13:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 3067,\n          \"startDay\": \"Saturday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Saturday\",\n          \"endTime\": \"15:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }, {\n        \"id\": 48108,\n        \"name\": \"weekend\",\n        \"templates\": [{\n          \"id\": 67223,\n          \"startDay\": \"Wednesday\",\n          \"startTime\": \"11:00\",\n          \"endDay\": \"Wednesday\",\n          \"endTime\": \"16:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 51850,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"09:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"18:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }, {\n          \"id\": 51971,\n          \"startDay\": \"Monday\",\n          \"startTime\": \"06:00\",\n          \"endDay\": \"Monday\",\n          \"endTime\": \"16:00\",\n          \"from\": \"2016-01-01\",\n          \"to\": \"2016-12-31\"\n        }]\n      }],\n      \"description\": \"The Colonial Viper is a fictional spacecraft in the Battlestar Galactica science-fiction franchise.\",\n      \"licenceNumber\": \"313\",\n      \"phoneNumber\": \"0800-VIPER\",\n      \"location\": {\n        city: \"Tampere\",\n        lat: \"61.497478\",\n        lng: \"23.756274\",\n        street: \"Hämeenkatu\",\n        streetNumber: 22\n      }\n    }\n  }];\n});","define(\"garage/mirage/fixtures/vehicletype\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = [{\n    \"id\": 1, type: \"vehicletype\",\n    \"attributes\": {\n      \"name\": \"Car\",\n      \"capacityConfigs\": [[{ \"unitId\": 1, \"count\": 3 }]],\n      \"attributes\": [{ \"id\": 1 }, { \"id\": 2 }]\n    }\n  }, {\n    \"id\": 2, type: \"vehicletype\",\n    \"attributes\": {\n      \"name\": \"Minibus\",\n      \"capacityConfigs\": [[{ \"unitId\": 1, \"count\": 8 }, { \"unitId\": 2, \"count\": 2 }, { \"unitId\": 2, \"count\": 5 }]],\n      \"attributes\": [{ \"id\": 2 }]\n    }\n  }, {\n    \"id\": 3, type: \"vehicletype\",\n    \"attributes\": {\n      \"name\": \"Bus\",\n      \"capacityConfigs\": [[{ \"unitId\": 1, \"count\": 18 }, { \"unitId\": 2, \"count\": 22 }]],\n      \"attributes\": []\n    }\n  }];\n});","define('garage/mirage/scenarios/default', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    exports.default = function (server) {\n\n        server.loadFixtures('vehicles');\n        server.loadFixtures('operators');\n        server.loadFixtures('fleets');\n        server.loadFixtures('vehicletypes');\n        server.loadFixtures('shift-groups');\n        server.loadFixtures('capacity-units');\n        server.loadFixtures('vehicle-attributes');\n    };\n});","define('garage/mirage/serializers/application', ['exports', 'ember-cli-mirage'], function (exports, _emberCliMirage) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberCliMirage.JSONAPISerializer.extend({});\n});","define('garage/mixins/application-route-mixin', ['exports', 'ember-simple-auth-auth0/mixins/application-route-mixin'], function (exports, _applicationRouteMixin) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _applicationRouteMixin.default;\n    }\n  });\n});","define('garage/mixins/restricted-route-mixin', ['exports', 'ember-simple-auth/mixins/authenticated-route-mixin'], function (exports, _authenticatedRouteMixin) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create(_authenticatedRouteMixin.default, {\n        currentUser: Ember.inject.service(),\n\n        restrictions: [],\n\n        beforeModel: function beforeModel() /*transition*/{\n            var _this = this;\n\n            //console.log(`page ristrictions: ${JSON.stringify(this.get('restrictions'))} user permissions: ${JSON.stringify(Object.keys(this.get('currentUser').get('permissions')))}`);\n            if (this.get('currentUser.session.isAuthenticated') && !this.get('restrictions').some(function (i) {\n                return _this.get('currentUser').hasPermission(i);\n            })) {\n                console.error('User does not have permission required for route');\n                this.transitionTo(this.get('currentUser').getLandingPage('logout'));\n            }\n\n            return this._super.apply(this, arguments);\n        }\n\n    });\n});","define('garage/modal-message/service', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        i18n: Ember.inject.service(),\n\n        /**\n         * Create a message box that can be dismissied by calling `remove()` of this service.\n         *\n         * @param title The title text of the message box.\n         * @param text Actual message content as a string.\n         * @param spinner If set, show spinner image.\n         */\n        show: function show(title, text) {\n            var spinner = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n\n            var img = '';\n            if (spinner) {\n                img = '<img src=\"/img/ajax-loader.gif\">';\n            }\n\n            var html = '\\n            <div class=\"small-modal-overlay\">\\n                <div class=\"small-modal-message\">\\n                    ' + img + '\\n                    <div class=\"title\">' + title + '</div>\\n                    <div class=\"text\">' + text + '</div>\\n                </div>\\n            </div>\\n            ';\n            Ember.$('body').append(html);\n        },\n\n\n        /**.small-modal-overlay\n         * Show bootstrap based closable dialog overlay.\n         * @param {*} title\n         * @param {*} text\n         */\n        showDialog: function showDialog(title, text) {\n            var closeLabel = this.get('i18n').t('dialog.button.close');\n\n            var html = '\\n        <div class=\"modal fade\" id=\"garageModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"garageModalLabel\" aria-hidden=\"true\">\\n            <div class=\"modal-dialog\" role=\"document\">\\n                <div class=\"modal-content\">\\n                    <div class=\"modal-header\">\\n                    <h5 class=\"modal-title\" id=\"garageModalLabel\">' + title + '</h5>\\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\\n                        <span aria-hidden=\"true\">&times;</span>\\n                    </button>\\n                    </div>\\n                    <div class=\"modal-body\">\\n                        <div class=\"text\">' + text + '</div>\\n                    </div>\\n                    <div class=\"modal-footer\">\\n                    <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">' + closeLabel + '</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n            ';\n            Ember.$('body').append(html);\n            Ember.$('#garageModal').modal();\n            Ember.$('#garageModal').on('hidden.bs.modal', function () {\n                Ember.run(function () {\n                    Ember.$('#garageModal').remove();\n                });\n            });\n        },\n\n\n        /**\n         * Remove message box from the screen.\n         */\n        remove: function remove() {\n            Ember.$('.small-modal-overlay').remove();\n        },\n\n\n        /**\n         * Show a message box and then automatically remove it after a delay.\n         */\n        message: function message(title, text) {\n            var _this = this;\n\n            this.get('show')(title, text, false);\n            Ember.run.later(function () {\n                return _this.get('remove')();\n            }, 2000);\n        },\n\n\n        /**\n         * Create confirmation dialog and run call back based on the choice.\n         *\n         * @param title The title text of the message box.\n         * @param text Actual message content as a string.\n         * @param yes A function to execute if the `yes` option was selected.\n         * @param no A function to execute if the `no` option was selected or dialog was dismissed with `Esc`.\n         */\n        confirm: function confirm(title, text) {\n            var _yes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n\n            var _no = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {};\n\n            var yesLabel = this.get('i18n').t('dialog.button.yes');\n            var noLabel = this.get('i18n').t('dialog.button.no');\n\n            var html = '\\n  <div class=\"modal\" id=\"small-modal-dialog\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">\\n    <div class=\"small-modal-dialog\">\\n     <div class=\"modal-content\">\\n        <div class=\"modal-header\">\\n          <h4 class=\"modal-title\">' + title + '</h4>\\n        </div>\\n        <div class=\"modal-body\">\\n            ' + text + '\\n        </div>\\n        <div class=\"modal-footer\">\\n          <button type=\"button\" onClick=\"window.VinkaModal.yes()\" class=\"btn btn-secondary\" data-dismiss=\"modal\">' + yesLabel + '</button>\\n          <button type=\"button\" onClick=\"window.VinkaModal.no()\" class=\"btn btn-primary\" data-dismiss=\"modal\">' + noLabel + '</button>\\n        </div>\\n    </div>\\n    </div>\\n</div>\\n';\n            window.VinkaModal = {\n                yes: function yes() {\n                    return _yes();\n                },\n                no: function no() {\n                    return _no();\n                }\n            };\n\n            Ember.$('body').append(html);\n            Ember.$('#small-modal-dialog').modal({ backdrop: 'static', keyboard: true });\n            Ember.$('#small-modal-dialog').on('hidden.bs.modal', function () {\n                return Ember.$('#small-modal-dialog').remove();\n            });\n        }\n    });\n});","define('garage/models/attribute', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        i18n: _emberData.default.attr(),\n        display: _emberData.default.attr()\n    });\n});","define('garage/models/capacity', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        loadTime: _emberData.default.attr('number'),\n        unloadTime: _emberData.default.attr('number'),\n        i18n: _emberData.default.attr(),\n        display: _emberData.default.attr()\n    });\n});","define('garage/models/contract', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        key: _emberData.default.attr('string'),\n        name: _emberData.default.attr('string')\n    });\n});","define('garage/models/option-set', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        options: _emberData.default.attr()\n    });\n});","define('garage/models/permission', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string')\n    });\n});","define('garage/operator/import/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        opService: Ember.inject.service('operator'),\n        hasDirty: false,\n        operators: Ember.Object.create([]),\n        viewData: Ember.Object.create({\n            operatorFile: null\n        }),\n\n        model: function model() {\n            var operators = this.modelFor('operator').operators;\n            this.set('operators', operators.length ? operators.filterBy('hasDirtyAttributes', true) : []);\n            this.set('hasDirty', this.modelFor('operator').hasDirty);\n\n            return Ember.RSVP.hash({\n                viewData: this.get('viewData'),\n                hasDirty: this.get('hasDirty'),\n                operators: this.get('operators')\n            });\n        },\n        doUpload: function doUpload(file) {\n            if (file.name.startsWith('mbr-operator')) {\n                this.set('viewData.operatorFile', file);\n            }\n        },\n\n\n        actions: {\n            dropped: function dropped(e) {\n                var _this = this;\n\n                e.preventDefault();\n\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = e.dataTransfer.files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var file = _step.value;\n\n                        console.log('dropped file', file);\n                        this.doUpload(file);\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n\n                var operatorFile = this.get('viewData.operatorFile');\n\n                if (operatorFile) {\n                    this.get('opService').parse(operatorFile).then(function (operators) {\n                        console.log(operators);\n\n                        (operators || []).forEach(function (operator) {\n                            return _this.send('addOperator', operator);\n                        });\n                        _this.refresh();\n                    });\n                }\n            },\n            selectImportedItem: function selectImportedItem(operator) {\n                this.transitionTo('operator.operator.index', operator.id);\n            },\n            saveAllUnsaved: function saveAllUnsaved() {\n                this.send('saveAll');\n            },\n            clearAllUnsaved: function clearAllUnsaved() {\n                this.send('clearUnsaved');\n            }\n        }\n    });\n});","define(\"garage/operator/import/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"8jWy5rdl\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"flex-container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"h1\\\"],[7],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"import.operator.unsaved\\\"],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"import.operator.title\\\"],null],false]],\\\"parameters\\\":[]}],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"p\\\"],[9,\\\"class\\\",\\\"lead\\\"],[7],[1,[25,\\\"t\\\",[\\\"import.operator.instructions\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"import-container\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[25,\\\"import-data\\\",null,[[\\\"type\\\",\\\"importedItems\\\",\\\"saveAll\\\",\\\"selectImportedItem\\\",\\\"clearUnsaved\\\"],[\\\"operator\\\",[20,[\\\"model\\\",\\\"operators\\\"]],[25,\\\"route-action\\\",[\\\"saveAllUnsaved\\\"],null],[25,\\\"route-action\\\",[\\\"selectImportedItem\\\"],null],[25,\\\"route-action\\\",[\\\"clearAllUnsaved\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"import-panel\\\",null,[[\\\"dropped\\\"],[[25,\\\"route-action\\\",[\\\"dropped\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"text-center fa fa-file-o fa-5x\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/import/template.hbs\" } });\n});","define('garage/operator/index/route', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({});\n});","define(\"garage/operator/index/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"JgMFGs3u\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Operators\\\"],null],false],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/index/template.hbs\" } });\n});","define('garage/operator/model', ['exports', 'ember-data', 'ember-api-actions'], function (exports, _emberData, _emberApiActions) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend(Ember.Copyable, {\n        userId: _emberData.default.attr('string'),\n        userEmail: _emberData.default.attr('string'),\n        companyName: _emberData.default.attr('string'),\n        companyAddress: _emberData.default.attr('string'),\n        contactName: _emberData.default.attr('string'),\n        contactPhone: _emberData.default.attr('string'),\n        contactEmail: _emberData.default.attr('string'),\n        businessId: _emberData.default.attr('string'),\n        userIdEmail: null, // email fetched from user DB in runtime\n        info: _emberData.default.attr('string'),\n        externalId: _emberData.default.attr('string'),\n        iban: _emberData.default.attr('string'),\n        bic: _emberData.default.attr('string'),\n\n        isUnsaved: Ember.computed('id', function () {\n            return this.get('id') && this.get('id').startsWith('new');\n        }),\n\n        copy: function copy() {\n            return this.get('store').createRecord('operator', {\n                userId: this.get('userId'),\n                userEmail: this.get('userEmail'),\n                companyName: 'Copy of ' + this.get('companyName'),\n                companyAddress: this.get('companyAddress'),\n                contactName: this.get('contactName'),\n                contactPhone: this.get('contactPhone'),\n                contactEmail: this.get('contactEmail'),\n                businessId: this.get('businessId'),\n                info: this.get('info'),\n                externalId: this.get('externalId'),\n                iban: this.get('iban'),\n                bic: this.get('bic')\n            });\n        },\n\n\n        // ember-api-actions start here\n\n        genReport: (0, _emberApiActions.memberAction)({ path: 'report', type: 'get' })\n    });\n});","define('garage/operator/operator/driver/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        modalMessage: Ember.inject.service(),\n        i18n: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            filterText: '',\n            allDrivers: Ember.A([]),\n            filteredDrivers: [],\n            operatorDrivers: Ember.A([]),\n            operatorId: null\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            var operatorId = +this.modelFor('operator.operator').operator.get('id');\n\n            this.set('viewData.operatorId', operatorId);\n\n            this.get('store').findAll('driver').then(function (result) {\n                _this.set('viewData.allDrivers', result);\n                _this.set('viewData.operatorDrivers', result.filter(function (i) {\n                    return operatorId === i.get('operator');\n                }));\n            });\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // send event to hide save buttons as those are not needed in this view\n                this.send('hideSaveButtons');\n            },\n            selectDriver: function selectDriver(dropdown, driver) {\n                dropdown.actions.close();\n\n                this.get('viewData.operatorDrivers').addObject(driver);\n\n                this.set('viewData.filterText', '');\n            },\n            unselectDriver: function unselectDriver(driver) {\n                this.get('viewData.operatorDrivers').removeObject(driver);\n            },\n            unlinkDriver: function unlinkDriver(driver) {\n                driver.toggleProperty('isUnlinked');\n            },\n            saveDrivers: function saveDrivers() {\n                var _this2 = this;\n\n                var operatorId = this.get('viewData.operatorId');\n                var chain = Promise.resolve();\n                var errors = [];\n\n                this.get('viewData.operatorDrivers').forEach(function (i) {\n                    if (operatorId !== i.get('operator')) {\n                        i.set('operator', operatorId);\n\n                        chain = chain.then(function () {\n                            return i.save().catch(function (error) {\n                                errors.push({ driver: i, error: error });\n                                i.rollbackAttributes();\n                            });\n                        });\n                    } else if (i.get('isUnlinked')) {\n                        i.set('operator', null);\n\n                        chain = chain.then(function () {\n                            return i.save().then(function () {\n                                return i.set('isUnlinked', false);\n                            }).catch(function (error) {\n                                errors.push({ driver: i, error: error });\n                                i.rollbackAttributes();\n                            });\n                        });\n                    }\n                });\n\n                chain.then(function () {\n                    errors = errors.map(function (i) {\n                        return _this2.get('i18n').t('dialog.saved.text.driverToOperatorError', {\n                            name: i.driver.get('name'),\n                            error: i.error.errors ? i.error.errors.map(function (i) {\n                                return i.message;\n                            }).join('; ') : i.error.message ? i.error.message : 'unknown error'\n                        });\n                    }).join('');\n\n                    var title = _this2.get('i18n').t('dialog.saved.title');\n                    var text = errors.length === 0 ? _this2.get('i18n').t('dialog.saved.text.success') : _this2.get('i18n').t('dialog.saved.text.withErrors', { errors: errors });\n\n                    _this2.get('modalMessage').showDialog(title, new DOMParser().parseFromString(text, 'text/html').documentElement.textContent);\n                    _this2.refresh();\n                });\n            }\n        },\n\n        filterObserver: Ember.observer('viewData.filterText', function () {\n            var _this3 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredDrivers', filter === '' ? [] : this.get('viewData.allDrivers').filter(function (i) {\n                return _this3._filterDriver(i, filter);\n            }));\n        }),\n\n        _filterDriver: function _filterDriver(driver, filter) {\n            return ('' + driver.get('name')).toLowerCase().includes(filter) || ('' + driver.get('phone')).toLowerCase().includes(filter) || ('' + driver.get('email')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/operator/operator/driver/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"e75mq8g6\", \"block\": \"{\\\"symbols\\\":[\\\"driver\\\",\\\"dd\\\",\\\"driver\\\"],\\\"statements\\\":[[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Drivers\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"verticalPosition\\\",\\\"renderInPlace\\\",\\\"matchTriggerWidth\\\"],[\\\"below\\\",true,true]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group input-group-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,2,[\\\"trigger\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[\\\"form-control\\\",[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.searchAndAdd\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,2,[\\\"content\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-content vinka-flex-column\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-body\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredDrivers\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectDriver\\\",[19,2,[]],[19,3,[]]]],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[1,[19,3,[\\\"id\\\"]],false],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[1,[19,3,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-bordered table-sm\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[0,\\\"#\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Name\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Phone\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"th\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"operatorDrivers\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"id\\\"]],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[4,\\\"link-to\\\",[\\\"driver.driver.index\\\",[19,1,[\\\"id\\\"]]],[[\\\"class\\\"],[\\\"menu-item\\\"]],{\\\"statements\\\":[[1,[19,1,[\\\"name\\\"]],false]],\\\"parameters\\\":[]},null],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"phone\\\"]],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"td\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"eq\\\",[[20,[\\\"model\\\",\\\"operatorId\\\"]],[19,1,[\\\"operator\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",[26,[\\\"fa fa-\\\",[25,\\\"if\\\",[[19,1,[\\\"isUnlinked\\\"]],\\\"un\\\"],null],\\\"link\\\"]]],[3,\\\"action\\\",[[19,0,[]],\\\"unlinkDriver\\\",[19,1,[]]]],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[9,\\\"class\\\",\\\"fa fa-times\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"unselectDriver\\\",[19,1,[]]]],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary pull-right\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveDrivers\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Save\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/operator/driver/template.hbs\" } });\n});","define('garage/operator/operator/index/route', ['exports', 'garage/helpers/permission-utils'], function (exports, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        currentUser: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            filterText: '',\n            users: [],\n            filteredUsers: [],\n            operator: null\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            var operator = this.modelFor('operator.operator').operator;\n            this.set('viewData.operator', operator);\n\n            if (this.get('currentUser').hasPermission(_permissionUtils.roleNames.admin) || this.get('currentUser').hasPermission(_permissionUtils.roleNames.super)) {\n                this.get('store').findAll('user').then(function (result) {\n                    _this.set('viewData.users', result);\n\n                    // if user id set, find user email and set to user\n                    if (operator && operator.get('userId')) {\n                        var found = _this.get('viewData.users').find(function (user) {\n                            return user.get('id') === operator.get('userId');\n                        });\n                        if (found) {\n                            operator.set('userIdEmail', found.get('email'));\n                        }\n                    }\n                });\n            } else {\n                operator.set('userIdEmail', operator.get('userEmail'));\n            }\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            selectUser: function selectUser(dropdown, user) {\n                dropdown.actions.close();\n\n                this.set('viewData.operator.userId', user ? user.get('id') : null);\n                this.set('viewData.operator.userIdEmail', user ? user.get('email') : null); // showing in input\n                this.set('viewData.operator.userEmail', user ? user.get('email') : null); // set for DB information\n            }\n        },\n\n        filterObserver: Ember.observer('viewData.users.@each.id', 'viewData.filterText', function () {\n            var _this2 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredUsers', this.get('viewData.users').sortBy('email').filter(function (i) {\n                return _this2._filterUser(i, filter);\n            }));\n        }),\n\n        _filterUser: function _filterUser(user, filter) {\n            return ('' + user.get('name')).toLowerCase().includes(filter) || ('' + user.get('email')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/operator/operator/index/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xkkBpEOR\", \"block\": \"{\\\"symbols\\\":[\\\"error\\\",\\\"error\\\",\\\"dd\\\",\\\"user\\\"],\\\"statements\\\":[[6,\\\"form\\\"],[9,\\\"class\\\",\\\"needs-validation\\\"],[9,\\\"novalidate\\\",\\\"\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-fix-dropdown\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"form-control\\\",null,null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.UserEmail\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[19,2,[]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"p\\\"],[9,\\\"class\\\",\\\"error\\\"],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"form.errors.\\\",[19,2,[]]],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"verticalPosition\\\",\\\"renderInPlace\\\",\\\"matchTriggerWidth\\\"],[\\\"below\\\",true,true]],{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"dropdown\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,3,[\\\"trigger\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"readonly\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"userIdEmail\\\"]],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,3,[\\\"content\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-content vinka-flex-column\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-head\\\"],[7],[0,\\\"\\\\n                                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.filter\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-body\\\"],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectUser\\\",[19,3,[]],null]],[7],[0,\\\"\\\\n                                                \\\"],[6,\\\"td\\\"],[7],[0,\\\"--\\\"],[1,[25,\\\"t\\\",[\\\"form.placeholder.noUser\\\"],null],false],[0,\\\"--\\\"],[8],[0,\\\"\\\\n                                                \\\"],[6,\\\"td\\\"],[7],[8],[0,\\\"\\\\n                                            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredUsers\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectUser\\\",[19,3,[]],[19,4,[]]]],[7],[0,\\\"\\\\n                                                \\\"],[6,\\\"td\\\"],[7],[1,[19,4,[\\\"email\\\"]],false],[8],[0,\\\"\\\\n                                                \\\"],[6,\\\"td\\\"],[7],[1,[19,4,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                                            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                                    \\\"],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"userIdEmail\\\"]],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"form-control\\\",null,null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"required\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.CompanyName\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n            \\\"],[4,\\\"if\\\",[[19,1,[]]],null,{\\\"statements\\\":[[6,\\\"p\\\"],[9,\\\"class\\\",\\\"error\\\"],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"form.errors.\\\",[19,1,[]]],null]],null],false],[8]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"required\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"companyName\\\"]],true,[25,\\\"unless\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null],true,false],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.CompanyAddress\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"companyAddress\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.companyAddress\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ContactName\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"contactName\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.contactName\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ContactPhone\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"contactPhone\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.contactPhone\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ContactEmail\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"contactEmail\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.contactEmail\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Iban\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"iban\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.iban\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Bic\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"bic\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.bic\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.BusinessId\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"businessId\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.OperatorExternalId\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"externalId\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.externalId\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.OperatorInfo\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"operator\\\",\\\"info\\\"]],\\\"\\\",[25,\\\"if\\\",[[25,\\\"field-access\\\",[\\\"operator.info\\\",\\\"role:admin\\\",\\\"role:super\\\"],null],false,true],null]]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/operator/index/template.hbs\" } });\n});","define('garage/operator/operator/report/route', ['exports', 'moment', 'garage/config/environment'], function (exports, _moment, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var formatCurrency = function formatCurrency(value) {\n        var currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'EUR';\n        var locale = arguments[2];\n\n        return Intl.NumberFormat(locale, { style: 'currency', currency: currency }).format(value);\n    };\n\n    var formatRouteFee = function formatRouteFee(fees, feeName, currency, locale) {\n        var found = (fees || []).find(function (f) {\n            return f.name === feeName;\n        });\n        return found ? formatCurrency(found.fee, currency, locale) : '';\n    };\n\n    exports.default = Ember.Route.extend({\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n        exporter: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            filterText: '',\n            vehicles: Ember.A([]),\n            filteredVehicles: [],\n            selectedVehicle: null,\n            startTime: null,\n            endTime: null,\n            report: null\n        }),\n\n        exportFileName: '',\n\n        resetUi: function resetUi() {\n            this.set('viewData.report', null);\n            this.set('viewData.filterText', '');\n            this.set('viewData.filteredVehicles', []);\n            this.set('viewData.selectedVehicle', null);\n            this.set('viewData.showExtraRouteReportColumns', _environment.default.APP.ui.showExtraRouteReportColumns);\n        },\n        model: function model() {\n            var _this = this;\n\n            this.resetUi();\n\n            var operatorId = +this.modelFor('operator.operator').operator.get('id');\n\n            console.log(this.modelFor('operator.operator').operator.get('id'));\n\n            this.get('store').findAll('vehicle').then(function (result) {\n                // filter by operator id because admins receive ALL the vehicles.\n                _this.set('viewData.vehicles', result.filter(function (i) {\n                    return i.get('operator') === operatorId;\n                }));\n                _this.set('viewData.filteredVehicles', _this.get('viewData.vehicles').filter(Boolean));\n            });\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // send event to hide save buttons as those are not needed in this view\n                this.send('hideSaveButtons');\n            },\n            selectVehicle: function selectVehicle(dropdown, vehicle) {\n                dropdown.actions.close();\n\n                this.set('viewData.selectedVehicle', vehicle);\n\n                this.set('viewData.filterText', '');\n            },\n            generateReport: function generateReport() {\n                var _this2 = this;\n\n                this.set('viewData.report', null);\n\n                if (!this.get('viewData.selectedVehicle') || !this.get('viewData.startTime') || !this.get('viewData.endTime')) {\n                    return;\n                }\n\n                var locale = this.get('i18n.locale');\n                var startTime = (0, _moment.default)(this.get('viewData.startTime')).startOf('day');\n                var endTime = (0, _moment.default)(this.get('viewData.endTime')).endOf('day');\n\n                this.exportFileName = this.get('viewData.selectedVehicle.number') + '-route-history-' + startTime.format('YYYY_MM_DD') + '-' + endTime.format('YYYY_MM_DD');\n\n                this.get('viewData.selectedVehicle').genReport({\n                    type: 'route-history',\n                    startTime: startTime.toISOString(),\n                    endTime: endTime.toISOString()\n                }).then(function (result) {\n                    _this2.set('viewData.report', result.data.map(function (r) {\n                        r.date = (0, _moment.default)(r.date).locale(locale).format('L');\n                        r.startTime = r.startTime ? (0, _moment.default)(r.startTime).locale(locale).format('LT') : '';\n                        r.endTime = r.endTime ? (0, _moment.default)(r.endTime).locale(locale).format('LT') : '';\n                        r.distance = r.distance ? (r.distance / 1000).toFixed(1) : 0;\n\n                        // format all currency values\n                        r.total = r.total ? formatCurrency(r.total, r.currency, locale) : '';\n                        r.excess = r.excess ? formatCurrency(r.excess, r.currency, locale) : '';\n                        r.extraFees = r.extraFees ? formatCurrency(r.extraFees, r.currency, locale) : '';\n                        r.vat = r.vat ? formatCurrency(r.vat, r.currency, locale) : '';\n                        r.waitFee = formatRouteFee(r.routeFees, 'wait', r.currency, locale);\n                        r.transitFee = formatRouteFee(r.routeFees, 'transit', r.currency, locale);\n\n                        return r;\n                    }));\n                });\n            },\n            toExcel: function toExcel() {\n                //this.get('exporter').toExcel(this.exportFileName, 'worksheet', 'route-history');\n                this.get('exporter').toCSV(this.exportFileName, 'route-history');\n            }\n        },\n\n        filterObserver: Ember.observer('viewData.filterText', function () {\n            var _this3 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredVehicles', this.get('viewData.vehicles').filter(function (i) {\n                return _this3._filterVehicle(i, filter);\n            }));\n        }),\n\n        _filterVehicle: function _filterVehicle(vehicle, filter) {\n            return ('' + vehicle.get('name')).toLowerCase().includes(filter) || ('' + vehicle.get('phone_number')).toLowerCase().includes(filter) || ('' + vehicle.get('number')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/operator/operator/report/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"P9Bnuem8\", \"block\": \"{\\\"symbols\\\":[\\\"row\\\",\\\"dd\\\",\\\"vehicle\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group col-md-4\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputEmail4\\\"],[7],[0,\\\"Vehicle\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"verticalPosition\\\",\\\"renderInPlace\\\",\\\"matchTriggerWidth\\\"],[\\\"below\\\",true,true]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"dropdown\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,2,[\\\"trigger\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"readonly\\\"],[\\\"form-control form-control-sm form-control-readonly\\\",[25,\\\"if\\\",[[20,[\\\"model\\\",\\\"selectedVehicle\\\"]],[25,\\\"concat\\\",[[20,[\\\"model\\\",\\\"selectedVehicle\\\",\\\"number\\\"]],\\\" - \\\",[20,[\\\"model\\\",\\\"selectedVehicle\\\",\\\"name\\\"]]],null],\\\"\\\"],null],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,2,[\\\"content\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-content vinka-flex-column\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-head\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.filter\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-body\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredVehicles\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectVehicle\\\",[19,2,[]],[19,3,[]]]],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[19,3,[\\\"number\\\"]],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[19,3,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group col-md-4\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputPassword4\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.startTime\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[1,[25,\\\"bootstrap-datepicker\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"format\\\",\\\"weekStart\\\",\\\"autoclose\\\",\\\"todayHighlight\\\"],[\\\"form-control form-control-sm\\\",[20,[\\\"model\\\",\\\"startTime\\\"]],\\\"yyyy-mm-dd\\\",1,true,true]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group col-md-4\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputPassword4\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.endTime\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[1,[25,\\\"bootstrap-datepicker\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"format\\\",\\\"weekStart\\\",\\\"autoclose\\\",\\\"todayHighlight\\\"],[\\\"form-control form-control-sm\\\",[20,[\\\"model\\\",\\\"endTime\\\"]],\\\"yyyy-mm-dd\\\",1,true,true]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-row\\\"],[7],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary mx-auto\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"generateReport\\\"]],[7],[1,[25,\\\"t\\\",[\\\"report.genReport\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"mr-0\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-file-excel-o\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"toExcel\\\"]],[7],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"is-array\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"table-scroll-wrapper\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-bordered table-sm\\\"],[9,\\\"id\\\",\\\"route-history\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.routeId\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.externalRouteId\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.vehicleNumber\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.vehicleName\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.driver\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.date\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.startTime\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.endTime\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.startLocation\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.endLocation\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.noshow\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.total\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"custom-translate\\\",null,[[\\\"key\\\"],[\\\"report.price.excess\\\"]]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.extraFees\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.vat\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.vatType\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"showExtraRouteReportColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"                          \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.distance\\\"],null],false],[8],[0,\\\"\\\\n                          \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.waitFee\\\"],null],false],[8],[0,\\\"\\\\n                          \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.transitFee\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"routeId\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"externalRouteId\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vehicleNumber\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vehicleName\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"driver\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"date\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"startTime\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"endTime\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"startLocation\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"endLocation\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[19,1,[\\\"noshow\\\"]]],null,{\\\"statements\\\":[[0,\\\"                              \\\"],[1,[25,\\\"t\\\",[\\\"report.noshow\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"total\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"excess\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"extraFees\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vat\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vatType\\\"]],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"showExtraRouteReportColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"                          \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"distance\\\"]],false],[8],[0,\\\"\\\\n                          \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"waitFee\\\"]],false],[8],[0,\\\"\\\\n                          \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"transitFee\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[4,\\\"if\\\",[[25,\\\"is-empty\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"tr\\\"],[7],[6,\\\"td\\\"],[9,\\\"class\\\",\\\"text-center\\\"],[9,\\\"colspan\\\",\\\"10\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.noResults\\\"],null],false],[8],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/operator/report/template.hbs\" } });\n});","define('garage/operator/operator/reports/route', ['exports', 'moment'], function (exports, _moment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n        exporter: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            startTime: null,\n            endTime: null,\n            report: null\n        }),\n\n        exportFileName: '',\n\n        resetUi: function resetUi() {\n            this.set('viewData.report', null);\n        },\n        model: function model() {\n            this.resetUi();\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // send event to hide save buttons as those are not needed in this view\n                this.send('hideSaveButtons');\n            },\n            generateReport: function generateReport() {\n                var _this = this;\n\n                this.set('viewData.report', null);\n\n                if (!this.get('viewData.startTime') || !this.get('viewData.endTime')) {\n                    return;\n                }\n\n                var locale = this.get('i18n.locale');\n                var startTime = (0, _moment.default)(this.get('viewData.startTime')).startOf('day');\n                var endTime = (0, _moment.default)(this.get('viewData.endTime')).endOf('day');\n\n                this.exportFileName = 'operator-sums-' + startTime.format('YYYY_MM_DD') + '-' + endTime.format('YYYY_MM_DD');\n\n                this.modelFor('operator.operator').operator.genReport({\n                    type: 'sums',\n                    startTime: startTime.toISOString(),\n                    endTime: endTime.toISOString()\n                }).then(function (result) {\n                    var formatCurrency = function formatCurrency(value) {\n                        var currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'EUR';\n\n                        return Intl.NumberFormat(locale, { style: 'currency', currency: currency }).format(value);\n                    };\n\n                    _this.set('viewData.report', result.data.map(function (r) {\n                        r.startTime = r.startTime ? (0, _moment.default)(r.startTime).locale(locale).format('L') : '';\n                        r.endTime = r.endTime ? (0, _moment.default)(r.endTime).locale(locale).format('L') : '';\n\n                        // format all currency values\n                        r.total = r.total ? formatCurrency(r.total) : '';\n                        r.excess = r.excess ? formatCurrency(r.excess) : '';\n                        r.vat = r.vat ? formatCurrency(r.vat) : '';\n\n                        return r;\n                    }));\n                });\n            },\n            toExcel: function toExcel() {\n                //this.get('exporter').toExcel(this.exportFileName, 'worksheet', 'route-history');\n                this.get('exporter').toCSV(this.exportFileName, 'operator-sums');\n            }\n        }\n    });\n});","define(\"garage/operator/operator/reports/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"do+LyRgv\", \"block\": \"{\\\"symbols\\\":[\\\"row\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group col-md-4\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputPassword4\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.startTime\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[1,[25,\\\"bootstrap-datepicker\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"format\\\",\\\"weekStart\\\",\\\"autoclose\\\",\\\"todayHighlight\\\"],[\\\"form-control form-control-sm\\\",[20,[\\\"model\\\",\\\"startTime\\\"]],\\\"yyyy-mm-dd\\\",1,true,true]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group col-md-4\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputPassword4\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.endTime\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[1,[25,\\\"bootstrap-datepicker\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"format\\\",\\\"weekStart\\\",\\\"autoclose\\\",\\\"todayHighlight\\\"],[\\\"form-control form-control-sm\\\",[20,[\\\"model\\\",\\\"endTime\\\"]],\\\"yyyy-mm-dd\\\",1,true,true]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-row\\\"],[7],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary mx-auto\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"generateReport\\\"]],[7],[1,[25,\\\"t\\\",[\\\"report.genReport\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"mr-0\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-file-excel-o\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"toExcel\\\"]],[7],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"is-array\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"table-scroll-wrapper\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-bordered table-sm\\\"],[9,\\\"id\\\",\\\"operator-sums\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.vehicleNumber\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.vehicleName\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.startTime\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.endTime\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.routes\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.total\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"custom-translate\\\",null,[[\\\"key\\\"],[\\\"report.price.excess\\\"]]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.vat\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.price.vatType\\\"],null],false],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vehicleNumber\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vehicleName\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"startTime\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"endTime\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"number\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"total\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"excess\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vat\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"vatType\\\"]],false],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[4,\\\"if\\\",[[25,\\\"is-empty\\\",[[20,[\\\"model\\\",\\\"report\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"tr\\\"],[7],[6,\\\"td\\\"],[9,\\\"class\\\",\\\"text-center\\\"],[9,\\\"colspan\\\",\\\"9\\\"],[7],[1,[25,\\\"t\\\",[\\\"report.noResults\\\"],null],false],[8],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/operator/reports/template.hbs\" } });\n});","define('garage/operator/operator/route', ['exports', 'garage/helpers/api-error-handler'], function (exports, _apiErrorHandler) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var NEW_PREFIX = 'new';\n\n    exports.default = Ember.Route.extend({\n\n        modalMessage: Ember.inject.service(),\n        i18n: Ember.inject.service(),\n        viewData: Ember.Object.create({\n            tabs: [{ name: 'tab.Info', link: 'operator.operator.index' }, { name: 'tab.Vehicles', link: 'operator.operator.vehicle' }, { name: 'tab.Drivers', link: 'operator.operator.driver' }, { name: 'tab.VehicleReports', link: 'operator.operator.report' }, { name: 'tab.OperatorReports', link: 'operator.operator.reports' }],\n            operator: null,\n            showSaveButtons: true\n        }),\n\n        model: function model(_ref) {\n            var _this = this;\n\n            var id = _ref.id;\n\n\n            if (id.startsWith(NEW_PREFIX)) {\n                // new unsaved\n                var allOperators = this.get('store').peekAll('operator');\n                var newItem = allOperators.find(function (v) {\n                    return v.get('id') === id;\n                });\n                if (!newItem) {\n                    // Handle invalid ID.\n                    this.transitionTo('operator.index');\n                }\n                this.set('viewData.operator', newItem);\n                this.modelFor('operator').set('selected', newItem);\n                return this.get('viewData');\n            } else {\n                // existing saved record\n                return this.get('store').findRecord('operator', id).then(function (v) {\n                    _this.set('viewData.operator', v);\n                    _this.modelFor('operator').set('selected', v);\n                    return _this.get('viewData');\n                }).catch(function () {\n                    // Handle invalid ID.\n                    _this.transitionTo('operator.index');\n                });\n            }\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // solution to manage showing save buttons\n                // Showing save buttons by default when current or sub route changes. Enables shift sub-route to hide buttons by sending event.\n                // If sub route would override didTransition it should either manage button showing by events or\n                // bubble this didTransition by returning true.\n                this.set('viewData.showSaveButtons', true);\n            },\n            hideSaveButtons: function hideSaveButtons() {\n                this.set('viewData.showSaveButtons', false);\n            },\n            save: function save() {\n                var _this2 = this;\n\n                this.get('modalMessage').show(this.get('i18n').t('message.title.saving'), this.get('i18n').t('message.text.wait'));\n\n                var operator = this.get('viewData.operator');\n                var originalId = operator.get('id');\n                if (originalId.startsWith(NEW_PREFIX)) {\n                    operator.set('id', null);\n                }\n                operator.save().then(function (result) {\n                    _this2.get('modalMessage').remove();\n                    if (originalId.startsWith(NEW_PREFIX)) {\n                        // change route to match created id in url\n                        _this2.transitionTo('operator.operator.index', result.get('id'));\n                    }\n                    _this2.send('operatorSaved', result.get('id'));\n                }, function (err) {\n                    // failed\n                    if (originalId.startsWith(NEW_PREFIX)) {\n                        operator.set('id', originalId);\n                    }\n                    _this2.get('modalMessage').remove();\n                    var title = _this2.get('i18n').t('message.title.failure');\n                    var text = _this2.get('i18n').t('message.text.operator.save.failure');\n                    text = (0, _apiErrorHandler.formatApiError)(err, _this2.get('i18n'), 'operator');\n                    _this2.get('modalMessage').showDialog(title, text);\n                });\n            },\n            revert: function revert() {\n                var _this3 = this;\n\n                var title = this.get('i18n').t('dialog.revert.title');\n                var text = this.get('i18n').t('dialog.revert.text');\n                this.get('modalMessage').confirm(title, text, function () {\n                    _this3.get('viewData.operator').rollbackAttributes();\n                });\n            }\n        }\n    });\n});","define(\"garage/operator/operator/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BOOxnjxA\", \"block\": \"{\\\"symbols\\\":[\\\"form\\\"],\\\"statements\\\":[[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Operators\\\"],null],false],[0,\\\" / \\\"],[1,[20,[\\\"model\\\",\\\"operator\\\",\\\"companyName\\\"]],false],[0,\\\" \\\"],[8],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"data-form\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"vinka-common-tabs\\\",null,[[\\\"model\\\",\\\"tabs\\\"],[[20,[\\\"model\\\",\\\"operator\\\"]],[20,[\\\"model\\\",\\\"tabs\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"validatable-form\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"tab-content\\\"],[7],[0,\\\"\\\\n            \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"showSaveButtons\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Save\\\",[25,\\\"and\\\",[[25,\\\"not\\\",[[19,1,[\\\"errors\\\",\\\"length\\\"]]],null],[20,[\\\"model\\\",\\\"operator\\\",\\\"hasDirtyAttributes\\\"]]],null]],[[\\\"onClick\\\",\\\"style\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"save\\\"],null],\\\"btn btn-outline-primary pull-right\\\"]]],false],[0,\\\"\\\\n            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Revert\\\",[25,\\\"and\\\",[[20,[\\\"model\\\",\\\"operator\\\",\\\"hasDirtyAttributes\\\"]],[25,\\\"not\\\",[[20,[\\\"model\\\",\\\"operator\\\",\\\"isUnsaved\\\"]]],null]],null]],[[\\\"onClick\\\",\\\"style\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"revert\\\"],null],\\\"btn btn-outline-primary pull-right\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/operator/template.hbs\" } });\n});","define('garage/operator/operator/vehicle/route', ['exports', 'file-saver'], function (exports, _fileSaver) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        modalMessage: Ember.inject.service(),\n        i18n: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            filterText: '',\n            allVehicles: Ember.A([]),\n            filteredVehicles: [],\n            operatorVehicles: Ember.A([]),\n            operatorId: null,\n            qrCodes: {}\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            var operatorId = +this.modelFor('operator.operator').operator.get('id');\n\n            this.set('viewData.operatorId', operatorId);\n\n            this.get('store').findAll('vehicle').then(function (result) {\n                _this.set('viewData.allVehicles', result);\n\n                _this.set('viewData.operatorVehicles', result.filter(function (i) {\n                    return operatorId === i.get('operator');\n                }));\n            });\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // send event to hide save buttons as those are not needed in this view\n                this.send('hideSaveButtons');\n            },\n            selectVehicle: function selectVehicle(dropdown, vehicle) {\n                dropdown.actions.close();\n\n                this.get('viewData.operatorVehicles').addObject(vehicle);\n\n                this.set('viewData.filterText', '');\n            },\n            unselectVehicle: function unselectVehicle(vehicle) {\n                this.get('viewData.operatorVehicles').removeObject(vehicle);\n            },\n            unlinkVehicle: function unlinkVehicle(vehicle) {\n                vehicle.toggleProperty('isUnlinked');\n            },\n            saveVehicles: function saveVehicles() {\n                var operatorId = this.get('viewData.operatorId');\n\n                this.get('viewData.operatorVehicles').forEach(function (i) {\n                    if (operatorId !== i.get('operator')) {\n                        i.set('operator', operatorId);\n                        i.save(); //console.log(`add new binding for ${i.get('id')}`);\n                    } else if (i.get('isUnlinked')) {\n                        i.set('operator', null);\n                        i.set('isUnlinked', false);\n                        i.save(); //console.log(`remove binding for ${i.get('id')}`);\n                    }\n                });\n\n                this.refresh();\n            },\n            getQRCode: function getQRCode(vehicle) {\n                var _this2 = this;\n\n                var qrCode = this.get('viewData.qrCodes.' + vehicle.get('number'));\n\n                if (qrCode) {\n                    _fileSaver.saveAs(qrCode.data, qrCode.name);\n                } else {\n                    vehicle.genQRCode().then(function (response) {\n                        _this2.set('viewData.qrCodes.' + vehicle.get('number'), response);\n                        var qrCode = _this2.get('viewData.qrCodes.' + vehicle.get('number'));\n\n                        _fileSaver.saveAs(qrCode.data, qrCode.name);\n                    });\n                }\n            }\n        },\n\n        filterObserver: Ember.observer('viewData.filterText', function () {\n            var _this3 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredVehicles', filter === '' ? [] : this.get('viewData.allVehicles').filter(function (i) {\n                return _this3._filterVehicle(i, filter);\n            }));\n        }),\n\n        _filterVehicle: function _filterVehicle(vehicle, filter) {\n            return ('' + vehicle.get('name')).toLowerCase().includes(filter) || ('' + vehicle.get('phone_number')).toLowerCase().includes(filter) || ('' + vehicle.get('number')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/operator/operator/vehicle/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"3scrtD/0\", \"block\": \"{\\\"symbols\\\":[\\\"vehicle\\\",\\\"dd\\\",\\\"vehicle\\\"],\\\"statements\\\":[[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Vehicles\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"verticalPosition\\\",\\\"renderInPlace\\\",\\\"matchTriggerWidth\\\"],[\\\"below\\\",true,true]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group input-group-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,2,[\\\"trigger\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[\\\"form-control\\\",[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.searchAndAdd\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,2,[\\\"content\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-content vinka-flex-column\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-body\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-sm\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredVehicles\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectVehicle\\\",[19,2,[]],[19,3,[]]]],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[1,[19,3,[\\\"id\\\"]],false],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[1,[19,3,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-bordered table-sm\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[0,\\\"#\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Name\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Phone\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.LicenceNumber\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"th\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Unlink\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[6,\\\"th\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"operatorVehicles\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"id\\\"]],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[4,\\\"link-to\\\",[\\\"vehicle.vehicle.index\\\",[19,1,[\\\"id\\\"]]],[[\\\"class\\\"],[\\\"menu-item\\\"]],{\\\"statements\\\":[[1,[19,1,[\\\"name\\\"]],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[19,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"phoneNumber\\\"]],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"licenceNumber\\\"]],false],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"td\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"eq\\\",[[20,[\\\"model\\\",\\\"operatorId\\\"]],[19,1,[\\\"operator\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",[26,[\\\"fa fa-\\\",[25,\\\"if\\\",[[19,1,[\\\"isUnlinked\\\"]],\\\"un\\\"],null],\\\"link\\\"]]],[3,\\\"action\\\",[[19,0,[]],\\\"unlinkVehicle\\\",[19,1,[]]]],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[9,\\\"class\\\",\\\"fa fa-times\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"unselectVehicle\\\",[19,1,[]]]],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[6,\\\"td\\\"],[7],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"getQRCode\\\",[19,1,[]]]],[7],[1,[25,\\\"t\\\",[\\\"button.GenQRCode\\\"],null],false],[8],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary pull-right\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveVehicles\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Save\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/operator/vehicle/template.hbs\" } });\n});","define('garage/operator/route', ['exports', 'garage/config/environment', 'garage/mixins/restricted-route-mixin', 'garage/helpers/permission-utils'], function (exports, _environment, _restrictedRouteMixin, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var NEW_PREFIX = 'new';\n\n    exports.default = Ember.Route.extend(_restrictedRouteMixin.default, {\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n\n        // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n        restrictions: [_permissionUtils.roleNames.operator, _permissionUtils.roleNames.admin, _permissionUtils.roleNames.super],\n\n        viewData: Ember.Object.create({\n            operators: [],\n            selected: null,\n            canImport: false,\n            hasDirty: false,\n            savingAll: false,\n            search: ''\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.set('viewData.canImport', _environment.default.APP.import.enabled); // enable import based on configuration\n            return this.get('store').findAll('operator', { reload: true }).then(function () {\n                return _this.loadOperatorsToViewData().then(function () {\n                    return _this.get('viewData');\n                });\n            });\n        },\n        loadOperatorsToViewData: function loadOperatorsToViewData() {\n            var _this2 = this;\n\n            return Promise.resolve(this.get('store').peekAll('operator')).then(function (result) {\n                var operators = result.sortBy('companyName');\n                _this2.set('viewData.operators', operators);\n                _this2.set('viewData.hasDirty', operators.any(function (i) {\n                    return i.get('hasDirtyAttributes');\n                }));\n\n                return operators;\n            });\n        },\n        getOperatorByBusiness: function getOperatorByBusiness(businessId) {\n            return businessId ? this.get('store').peekAll('operator').find(function (i) {\n                return '' + businessId === '' + i.get('businessId');\n            }) : null;\n        },\n        draftOperator: function draftOperator() {\n            var operator = this.get('store').createRecord('operator');\n            operator.set('id', this.getNextNewId());\n            operator.set('companyName', 'New Operator');\n\n            return operator;\n        },\n        addOperator: function addOperator() {\n            var operator = this.get('store').createRecord('operator');\n            operator.set('id', this.getNextNewId());\n            operator.set('companyName', 'New Operator');\n\n            return operator;\n        },\n        saveAll: function saveAll() {\n            var _this3 = this;\n\n            var unsavedOperators = this.get('store').peekAll('operator').filterBy('hasDirtyAttributes', true);\n\n            var success = [];\n            var failed = [];\n            var chain = Promise.resolve();\n            this.set('viewData.savingAll', true);\n\n            var _loop = function _loop(i) {\n                var operator = unsavedOperators[i];\n                if (operator.get('id') && operator.get('id').startsWith(NEW_PREFIX)) {\n                    operator.set('id', null);\n                }\n                chain = chain.then(function () {\n                    return operator.save().then(function () {\n                        success.push(operator.get('id'));\n                    }).catch(function (e) {\n                        failed.push('\\n\\r' + operator.get('id') + ' (' + e.errors[0].title + ')');\n                    }).catch(function (e) {\n                        failed.push('\\n\\r' + operator.get('id') + '(' + e.message + ')');\n                    });\n                });\n            };\n\n            for (var i = 0; i < unsavedOperators.length; i++) {\n                _loop(i);\n            }\n            chain.then(function () {\n                _this3.set('viewData.savingAll', false);\n                var title = _this3.get('i18n').t('dialog.saved.title');\n                var text = _this3.get('i18n').t('dialog.saved.text.operator', {\n                    success: success.join(', ') || '-',\n                    totalSuccess: success.length,\n                    failed: failed.join(', ') || '-'\n                });\n                _this3.get('modalMessage').showDialog(title, text);\n                _this3.refresh();\n            });\n        },\n        getNextNewId: function getNextNewId() {\n            // find highest new number\n            var allOperators = this.get('store').peekAll('operator');\n\n            var highestId = allOperators.reduce(function (prev, v) {\n                var currId = v.get('id');\n                if (currId && currId.startsWith(NEW_PREFIX)) {\n                    var components = currId.split('-');\n                    var number = parseInt(components[1], 10);\n                    prev = isNaN(number) ? prev : number;\n                }\n                return prev;\n            }, 0);\n\n            return NEW_PREFIX + '-' + ++highestId;\n        },\n\n\n        actions: {\n            search: function search() {\n                var filter = this.get('viewData.search').toLowerCase();\n                this.get('viewData.operators').forEach(function (operator) {\n                    operator.set('filtered', filter && operator.get('companyName').toLowerCase().indexOf(filter) < 0);\n                });\n            },\n            selectOperator: function selectOperator(operator) {\n                // search current route name to maintain selected tab with the new selected operator\n                var route = Ember.getOwner(this).lookup('controller:application').currentRouteName;\n                this.set('viewData.selected', operator);\n                if (route === 'operator.index' || route === 'operator.import') {\n                    route = 'operator.operator.index';\n                }\n                this.transitionTo(route, operator.id);\n            },\n            deleteOperator: function deleteOperator(operator) {\n                var _this4 = this;\n\n                var title = this.get('i18n').t('dialog.delete.title', { name: operator.get('companyName') });\n                var text = this.get('i18n').t('dialog.delete.text');\n                this.get('modalMessage').confirm(title, text, function () {\n                    operator.deleteRecord();\n                    operator.save().then(function () {\n                        _this4.transitionTo('operator.index');\n                        title = _this4.get('i18n').t('message.title.success');\n                        text = _this4.get('i18n').t('message.text.operator.delete.success');\n                        _this4.get('modalMessage').showDialog(title, text);\n                        _this4.refresh();\n                    }, function () {\n                        title = _this4.get('i18n').t('message.title.failure');\n                        text = _this4.get('i18n').t('message.text.operator.delete.failure');\n                        _this4.get('modalMessage').showDialog(title, text);\n                    });\n                });\n            },\n            copyOperator: function copyOperator(operator) {\n                var copy = operator.copy();\n                copy.set('id', this.getNextNewId());\n                this.transitionTo('operator.operator.index', copy.get('id'));\n            },\n            newOperator: function newOperator() {\n                var operator = this.draftOperator();\n                this.transitionTo('operator.operator.index', operator.get('id'));\n            },\n            addOperator: function addOperator(json) {\n                var store = this.get('store');\n                // TODO `store.hasRecordForId()` always returns false, `id` property is never set.\n                var operator = store.hasRecordForId('operator', json.id) ? store.peekRecord('operator', json.id) : this.getOperatorByBusiness(json.businessId) || this.draftOperator();\n                operator.setProperties(json);\n                this.loadOperatorsToViewData();\n            },\n            saveAll: function saveAll() {\n                this.saveAll();\n            },\n            clearUnsaved: function clearUnsaved() {\n                // En jumalauta kemsinyt miten emberissä saa hienosti rollbäckattyä dirty recordit\n                // unloadAll toimi jossain tilanteissa mutta joskus tuli poikkeuksia mitä ei tietenkään\n                // mitenkään pysty helposti debuggaan. Ember data on susi tuote.\n                window.location.reload(true);\n            },\n\n\n            // receives id as parameter\n            operatorSaved: function operatorSaved() {\n                this.refresh();\n            }\n        }\n    });\n});","define('garage/operator/service', ['exports', 'papaparse', 'garage/config/environment'], function (exports, _papaparse, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        modalMessage: Ember.inject.service(),\n\n        parseFile: function parseFile(file) {\n            return new Promise(function (res, rej) {\n                return _papaparse.default.parse(file, {\n                    header: true,\n                    encoding: _environment.default.APP.import.encoding,\n                    complete: res,\n                    error: rej\n                });\n            });\n        },\n        parse: function parse(file) {\n            var _this = this;\n\n            return this.parseFile(file).then(function (parsed) {\n                return _this.handleParsedData(parsed.data);\n            }).catch(function (e) {\n                return console.log(e) || _this.get('modalMessage').showDialog('Import Interrupted', e.message);\n            });\n        },\n        handleParsedData: function handleParsedData() {\n            var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            var dups = {};\n\n            items = items.map(function (item) {\n                // trim all strings\n                Object.keys(item).filter(function (i) {\n                    return typeof item[i] === 'string';\n                }).forEach(function (i) {\n                    return item[i] = item[i].trim() || null;\n                });\n\n                var _ref = [item.USER_EMAIL, item.COMPANY_NAME, item.COMPANY_ADDRESS, item.CONTACT_NAME, item.CONTACT_PHONE, item.CONTACT_EMAIL, item.BUSINESS_ID, item.EXTERNAL_ID, item.INFO],\n                    userEmail = _ref[0],\n                    companyName = _ref[1],\n                    companyAddress = _ref[2],\n                    contactName = _ref[3],\n                    contactPhone = _ref[4],\n                    contactEmail = _ref[5],\n                    businessId = _ref[6],\n                    externalId = _ref[7],\n                    info = _ref[8];\n\n\n                if (businessId) {\n                    dups[businessId] = (dups[businessId] || 0) + 1;\n                }\n\n                return { userEmail: userEmail, companyName: companyName, companyAddress: companyAddress, contactName: contactName, contactPhone: contactPhone, contactEmail: contactEmail, businessId: businessId, externalId: externalId, info: info };\n            });\n\n            if (Object.values(dups).find(function (i) {\n                return i > 1;\n            })) {\n                throw new Error('Conflict! Operators with matching business ids found! Business id should be unique!');\n            }\n\n            return items;\n        }\n    });\n});","define(\"garage/operator/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"I/kxug61\", \"block\": \"{\\\"symbols\\\":[\\\"operator\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-4 vehicle-list side-view\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"search\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group-prepend\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"input-group-text\\\"],[9,\\\"id\\\",\\\"basic-addon1\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"fa fa-search\\\"],[7],[8],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"key-up\\\"],[[20,[\\\"model\\\",\\\"search\\\"]],\\\"form-control\\\",\\\"search\\\"]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"operators\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"list-group-item list-group-item-action \\\",[25,\\\"is-hidden\\\",[[19,1,[\\\"filtered\\\"]]],null],\\\" \\\",[25,\\\"is-current\\\",[[19,1,[\\\"id\\\"]],[20,[\\\"model\\\",\\\"selected\\\",\\\"id\\\"]]],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"selectOperator\\\",[19,1,[]]]],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[19,1,[\\\"hasDirtyAttributes\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"dirty\\\"],[7],[1,[19,1,[\\\"companyName\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[19,1,[\\\"companyName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"buttons\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"deleteOperator\\\",[20,[\\\"model\\\",\\\"selected\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"copyOperator\\\",[20,[\\\"model\\\",\\\"selected\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"newOperator\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.New\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveAll\\\"]],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"t\\\",[\\\"button.SaveAll\\\"],null],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"savingAll\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-spinner fa-spin fa-fw\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"canImport\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[4,\\\"link-to\\\",[\\\"operator.import\\\"],[[\\\"class\\\"],[\\\"btn btn-outline-primary btn-sm\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"import.button\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-8 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/operator/template.hbs\" } });\n});","define('garage/resolver', ['exports', 'ember-resolver'], function (exports, _emberResolver) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberResolver.default;\n});","define('garage/router', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var Router = Ember.Router.extend({\n        location: _environment.default.locationType,\n        rootURL: _environment.default.rootURL\n    });\n\n    Router.map(function () {\n        this.route('vehicle', function () {\n            this.route('vehicle', { path: ':id' }, function () {\n                this.route('capacity');\n                this.route('attribute');\n                this.route('shift');\n                this.route('garage');\n                this.route('terminal');\n            });\n            this.route('import');\n        });\n        this.route('operator', function () {\n            this.route('operator', { path: ':id' }, function () {\n                this.route('vehicle');\n                this.route('driver');\n                this.route('report');\n                this.route('reports');\n            });\n            this.route('import');\n        });\n        this.route('driver', function () {\n            this.route('driver', { path: ':id' }, function () {});\n        });\n        this.route('user');\n        this.route('login');\n        this.route('logout');\n        this.route('license-settings');\n        this.route('field-config');\n    });\n\n    exports.default = Router;\n});","define('garage/routes/application', ['exports', 'ember-simple-auth-auth0/mixins/application-route-mixin'], function (exports, _applicationRouteMixin) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend(_applicationRouteMixin.default, {\n        // authentication\n\n        session: Ember.inject.service('session'),\n        i18n: Ember.inject.service(),\n        currentUser: Ember.inject.service(),\n\n        // override the function implemented in `ember-simple-auth` to perform some custom actions\n        sessionAuthenticated: function sessionAuthenticated() {\n            // here we need to set an appropriate landing page based on permissions.\n            this.set('routeAfterAuthentication', this.get('currentUser').getLandingPage(this.get('routeAfterAuthentication')));\n\n            this._super.apply(this, arguments);\n        },\n\n\n        viewData: Ember.Object.create({\n            session: null,\n            locales: [{ lang: 'en', title: 'English' }, { lang: 'fi', title: 'Finnish' }]\n        }),\n\n        model: function model() {\n            this.set('viewData.session', this.get('session'));\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            setLocale: function setLocale(locale) {\n                localStorage.setItem('userLocale', locale);\n\n                this.set('i18n.locale', locale);\n            }\n        }\n    });\n});","define('garage/serializers/application', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.JSONAPISerializer.extend({\n\n        /**\n         * JSON API adapter expects properties to be in kebab-case. We don't want that.\n         */\n        keyForAttribute: function keyForAttribute(key) {\n            return key;\n        },\n\n\n        /**\n         * JSON API adapter expects properties to be in kebab-case. We don't want that.\n         */\n        keyForRelationship: function keyForRelationship(rawKey) {\n            return rawKey;\n        }\n    });\n});","define('garage/serializers/permission', ['exports', 'garage/serializers/application'], function (exports, _application) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    function normalizePermission(p) {\n        return {\n            type: 'permission',\n            id: '' + p.id,\n            attributes: p\n        };\n    }\n\n    exports.default = _application.default.extend({\n        normalizeArrayResponse: function normalizeArrayResponse(store, primaryModelClass, payload /*, id, requestType*/) {\n            payload.data = payload.data.map(normalizePermission);\n\n            return this._super.apply(this, arguments);\n        },\n        normalizeSingleResponse: function normalizeSingleResponse(store, primaryModelClass, payload /*, id, requestType*/) {\n            payload.data = normalizePermission(payload.data);\n\n            return this._super.apply(this, arguments);\n        }\n    });\n});","define('garage/serializers/user', ['exports', 'garage/serializers/application'], function (exports, _application) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    function normalizeUser(u) {\n        return {\n            type: 'user',\n            id: '' + u.id,\n            attributes: u\n        };\n    }\n\n    exports.default = _application.default.extend({\n        normalizeArrayResponse: function normalizeArrayResponse(store, primaryModelClass, payload /*, id, requestType*/) {\n            payload.data = payload.data.map(normalizeUser);\n\n            return this._super.apply(this, arguments);\n        },\n        normalizeSingleResponse: function normalizeSingleResponse(store, primaryModelClass, payload /*, id, requestType*/) {\n            payload.data = normalizeUser(payload.data);\n\n            return this._super.apply(this, arguments);\n        }\n    });\n});","define('garage/services/ajax', ['exports', 'ember-ajax/services/ajax'], function (exports, _ajax) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _ajax.default;\n    }\n  });\n});","define('garage/services/auth0', ['exports', 'ember-simple-auth-auth0/services/auth0'], function (exports, _auth) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _auth.default;\n    }\n  });\n});","define('garage/services/cookies', ['exports', 'ember-cookies/services/cookies'], function (exports, _cookies) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _cookies.default;\n});","define('garage/services/i18n', ['exports', 'ember-i18n/services/i18n'], function (exports, _i18n) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _i18n.default;\n    }\n  });\n});","define('garage/services/session', ['exports', 'ember-simple-auth/services/session'], function (exports, _session) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _session.default;\n});","define('garage/session-stores/application', ['exports', 'ember-simple-auth/session-stores/adaptive'], function (exports, _adaptive) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _adaptive.default.extend();\n});","define('garage/settings/route', ['exports', 'garage/mixins/restricted-route-mixin', 'garage/helpers/permission-utils'], function (exports, _restrictedRouteMixin, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend(_restrictedRouteMixin.default, {\n        // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n        restrictions: [_permissionUtils.roleNames.admin, _permissionUtils.roleNames.super],\n\n        viewData: Ember.Object.create({\n            selected: null\n        }),\n\n        model: function model() {\n            this.set('viewData.selected', 'users');\n\n            return this.get('viewData');\n        },\n\n\n        actions: {}\n    });\n});","define(\"garage/settings/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"VdGQu7J2\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-4 vehicle-list side-view\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-group\\\"],[7],[0,\\\"\\\\n                    \\\"],[4,\\\"link-to\\\",[\\\"settings.users\\\"],[[\\\"class\\\"],[\\\"list-group-item list-group-item-action\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Users\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-group-item list-group-item-action\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.OtherSettings\\\"],null],false],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-8 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/settings/template.hbs\" } });\n});","define('garage/shift-group/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        templates: _emberData.default.attr(),\n\n        isMember: _emberData.default.attr()\n    });\n});","define('garage/shift-template/adapter', ['exports', 'garage/application/adapter'], function (exports, _adapter) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _adapter.default.extend({\n        _getVehicleId: function _getVehicleId(snapshot, query) {\n            var vehicleId = snapshot && snapshot.adapterOptions ? snapshot.adapterOptions.vehicleId : // fetchAll case\n            query.adapterOptions ? query.adapterOptions.vehicleId : ''; // query case\n            return vehicleId;\n        },\n\n\n        /**\n         * Modifies url to contain hierarchy by vehicle/shift. Extracts vehicle id from given parameters and builds url.\n         * This adapts to all versions: fetchAll, save, query.\n         * @todo: in future might be better to stick to more simple version of urls and not try any hierarchy.\n         */\n        buildURL: function buildURL(modelName, id, snapshot, requestType, query) {\n            var url = this._super.apply(this, arguments);\n            var host = this.get('host');\n\n            var vehicleId = this._getVehicleId(snapshot, query);\n            if (query) {\n                // query exists, delete custom given adapterOptions\n                delete query.adapterOptions;\n            }\n            var newUrl = url;\n            if (vehicleId) {\n                newUrl = url.replace(host, host + ('/vehicles/' + vehicleId));\n            } else {\n                (true && !(false) && Ember.assert('Vehicle id not defined for shift-template adapter, you should set {adapterOptions: {vehicleId: id}}', false));\n            }\n\n            return newUrl;\n        }\n    });\n});","define('garage/shift-template/model', ['exports', 'ember-data', 'moment'], function (exports, _emberData, _moment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        vehicle: _emberData.default.attr('string'),\n        startClock: _emberData.default.attr('string'),\n        startDay: _emberData.default.attr('string'),\n        startTime: _emberData.default.attr('date'),\n        endClock: _emberData.default.attr('string'),\n        endDay: _emberData.default.attr('string'),\n        endTime: _emberData.default.attr('date'),\n\n        startTimeClock: Ember.computed('startTime', 'startClock', function () {\n            return (/^([01]\\d|2[0-3]:[0-5]\\d$)/.test(this.get('startClock')) ? this.get('startClock') : this._getClockTime(this.get('startTime'))\n            );\n        }),\n\n        endTimeClock: Ember.computed('endTime', 'endClock', function () {\n            return (/^([01]\\d|2[0-3]:[0-5]\\d$)/.test(this.get('endClock')) ? this.get('endClock') : this._getClockTime(this.get('endTime'))\n            );\n        }),\n\n        startTimeDate: Ember.computed('startTime', function () {\n            return this.get('startTime').toLocaleDateString();\n        }),\n\n        endTimeDate: Ember.computed('endTime', function () {\n            return this.get('endTime').toLocaleDateString();\n        }),\n\n        startDatePicker: Ember.computed('startTime', function () {\n            return (0, _moment.default)(this.get('startTime')).format('YYYY-MM-DD');\n        }),\n\n        endDatePicker: Ember.computed('endTime', function () {\n            return (0, _moment.default)(this.get('endTime')).format('YYYY-MM-DD');\n        }),\n\n        startTimePicker: Ember.computed('startTime', 'startClock', function () {\n            return (/^([01]\\d|2[0-3]:[0-5]\\d$)/.test(this.get('startClock')) ? this.get('startClock') : (0, _moment.default)(this.get('startTime')).format('HH:mm')\n            );\n        }),\n\n        endTimePicker: Ember.computed('endTime', 'endClock', function () {\n            return (/^([01]\\d|2[0-3]:[0-5]\\d$)/.test(this.get('endClock')) ? this.get('endClock') : (0, _moment.default)(this.get('endTime')).format('HH:mm')\n            );\n        }),\n\n        setStartTime: function setStartTime(uiDate, time) {\n            this.set('startTime', this._createDate(uiDate, time));\n            this.set('startClock', this._createClock(this.get('startTime')));\n        },\n        setEndTime: function setEndTime(uiDate, time) {\n            this.set('endTime', this._createDate(uiDate, time));\n            this.set('endClock', this._createClock(this.get('endTime')));\n        },\n        _createDate: function _createDate(uiDate, time) {\n            var timeComps = time.split(':');\n            timeComps = timeComps.length > 1 ? timeComps : time.split('.');\n            var hour = parseInt(timeComps[0], 10); // Todo:\n            var minute = parseInt(timeComps[1], 10);\n            return (0, _moment.default)(uiDate).set('hour', hour).set('minute', minute).toDate();\n        },\n        _createClock: function _createClock(date) {\n            return (0, _moment.default)(date).format('HH:mm');\n        },\n        _getClockTime: function _getClockTime(d) {\n            var timeopts = {\n                hour: '2-digit',\n                minute: '2-digit',\n                hour12: false };\n            return d.toLocaleTimeString(timeopts).substring(0, 5);\n        }\n    });\n});","define(\"garage/templates/application\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"pwpeJqJC\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container main-container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"application\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"header\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"background\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"nav\\\"],[9,\\\"class\\\",\\\"navbar app-name\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"settings\\\"],[9,\\\"data-toggle\\\",\\\"collapse\\\"],[9,\\\"href\\\",\\\"#collapse-vinka-menu\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"toggle fa fa-cog\\\"],[9,\\\"data-toggle\\\",\\\"collapse\\\"],[9,\\\"href\\\",\\\"#collapse-vinka-menu\\\"],[7],[8],[0,\\\"\\\\n\\\\n                        \\\"],[1,[25,\\\"vinka-menu\\\",null,[[\\\"model\\\",\\\"onLocale\\\"],[[20,[\\\"model\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"setLocale\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"a\\\"],[9,\\\"class\\\",\\\"navbar-brand\\\"],[9,\\\"href\\\",\\\"#\\\"],[7],[0,\\\"\\\\n                        GARAGE\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"session\\\",\\\"isAuthenticated\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"ul\\\"],[9,\\\"class\\\",\\\"navbar-nav mr-auto\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[4,\\\"link-to\\\",[\\\"vehicle\\\"],[[\\\"class\\\",\\\"tagName\\\"],[\\\"nav-link\\\",\\\"li\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Vehicles\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:operator\\\",\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[4,\\\"link-to\\\",[\\\"operator\\\"],[[\\\"class\\\",\\\"tagName\\\"],[\\\"nav-link\\\",\\\"li\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Operators\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:operator\\\",\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[4,\\\"link-to\\\",[\\\"driver\\\"],[[\\\"class\\\",\\\"tagName\\\"],[\\\"nav-link\\\",\\\"li\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Drivers\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[4,\\\"link-to\\\",[\\\"user\\\"],[[\\\"class\\\",\\\"tagName\\\"],[\\\"nav-link\\\",\\\"li\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"tab.Users\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"section\\\"],[9,\\\"class\\\",\\\"page\\\"],[7],[0,\\\"\\\\n            \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"footer\\\"],[7],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/templates/application.hbs\" } });\n});","define('garage/tests/mirage/mirage.lint-test', [], function () {\n  'use strict';\n\n  QUnit.module('ESLint | mirage');\n\n  QUnit.test('mirage/config.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/config.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/capacity-units.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/capacity-units.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/fleets.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/fleets.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/operators.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/operators.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/shift-groups.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/shift-groups.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/vehicle-attribute.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/vehicle-attribute.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/vehicles.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/vehicles.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/fixtures/vehicletype.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/fixtures/vehicletype.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/scenarios/default.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/scenarios/default.js should pass ESLint\\n\\n');\n  });\n\n  QUnit.test('mirage/serializers/application.js', function (assert) {\n    assert.expect(1);\n    assert.ok(true, 'mirage/serializers/application.js should pass ESLint\\n\\n');\n  });\n});","define('garage/user/model', ['exports', 'ember-data', 'garage/helpers/permission-utils'], function (exports, _emberData, _permissionUtils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _defineProperty(obj, key, value) {\n        if (key in obj) {\n            Object.defineProperty(obj, key, {\n                value: value,\n                enumerable: true,\n                configurable: true,\n                writable: true\n            });\n        } else {\n            obj[key] = value;\n        }\n\n        return obj;\n    }\n\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        email: _emberData.default.attr('string'),\n        verified: _emberData.default.attr('boolean'),\n        password: _emberData.default.attr('string'),\n        permissions: _emberData.default.attr(),\n        comment: _emberData.default.attr('string'),\n\n        role: Ember.computed('permissions.@each.id', function () {\n            var p = this.get('permissions').filter(function (i) {\n                return i.id.startsWith('role:');\n            }).reduce(function (a, i) {\n                return Object.assign(a, _defineProperty({}, i.id, 1));\n            }, {});\n\n            if (p.hasOwnProperty('role:super')) {\n                return 'super';\n            }\n\n            if (p.hasOwnProperty(_permissionUtils.roleNames.admin)) {\n                return 'admin';\n            }\n\n            if (p.hasOwnProperty(_permissionUtils.roleNames.operator)) {\n                return 'operator';\n            }\n\n            return 'unknown';\n        })\n    });\n});","define('garage/user/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            newUser: Ember.Object.create({ email: '', password: '', permission: '', verified: true }),\n            filterText: '',\n            sortBy: 'email',\n            users: [],\n            filteredUsers: [],\n            permissions: []\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.get('store').findAll('user').then(function (result) {\n                _this.set('viewData.users', result);\n            });\n\n            this.get('store').findAll('permission').then(function (result) {\n                _this.set('viewData.permissions', result);\n            });\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            setUserPermission: function setUserPermission(value) {\n                this.viewData.newUser.set('permission', value);\n            },\n\n\n            sortBy: function sortBy(newSortBy) {\n                this.set('viewData.sortBy', newSortBy);\n            },\n\n            addUser: function addUser() {\n                var _this2 = this;\n\n                var user = this.get('store').createRecord('user', {\n                    name: this.viewData.newUser.get('email'),\n                    email: this.viewData.newUser.get('email'),\n                    password: this.viewData.newUser.get('password'),\n                    verified: this.viewData.newUser.get('verified'),\n                    permissions: [this.viewData.newUser.get('permission')]\n                });\n\n                user.save().then(function (result) {\n                    // display some custom comment if we received one from the API\n                    if (result.get('comment')) {\n                        _this2.get('modalMessage').showDialog(_this2.get('i18n').t('message.title.success'), result.get('comment'));\n                    } else {\n                        _this2.get('modalMessage').showDialog(_this2.get('i18n').t('message.title.success'), _this2.get('i18n').t('message.text.user.save.success'));\n                    }\n\n                    _this2.viewData.newUser.set('email', '');\n                    _this2.viewData.newUser.set('password', '');\n                    _this2.viewData.newUser.set('verified', true);\n                    _this2.viewData.newUser.set('permission', '');\n\n                    _this2.refresh();\n                }).catch(function (error) {\n                    console.log(error);\n                    // failed to save the user. Remove this draft record from the database\n                    user.destroyRecord();\n\n                    // try to show the modal with an error.\n                    _this2.get('modalMessage').showDialog(_this2.get('i18n').t('message.title.failure'),\n                    //this.get('i18n').t('message.text.user.save.failure')\n                    error.errors ? error.errors.map(function (i) {\n                        return i.message;\n                    }).join('; ') : error.message ? error.message : 'unknown error');\n                });\n            },\n            removeUser: function removeUser(user) {\n                // remove all users with the same email\n                this.get('store').peekAll('user').filter(function (i) {\n                    return i.get('email') === user.get('email');\n                }).forEach(function (i) {\n                    return i.destroyRecord().then(function (r) {\n                        return r.unloadRecord();\n                    });\n                });\n\n                //user.destroyRecord().then( rec => rec.unloadRecord());\n            }\n        },\n\n        filterObserver: Ember.observer('viewData.users.@each.id', 'viewData.filterText', 'viewData.sortBy', function () {\n            var _this3 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredUsers', this.get('viewData.users').sortBy(this.get('viewData.sortBy')).filter(function (i) {\n                return _this3._filterUser(i, filter);\n            }));\n        }),\n\n        _filterUser: function _filterUser(user, filter) {\n            return ('' + user.get('name')).toLowerCase().includes(filter) || ('' + user.get('email')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/user/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"l2qW3RxG\", \"block\": \"{\\\"symbols\\\":[\\\"user\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-12 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.UserManagement\\\"],null],false],[8],[0,\\\"\\\\n\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"tab-content\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.AddUser\\\"],null],false],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"form\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group input-group-sm\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-4\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[\\\"form-control\\\",[20,[\\\"model\\\",\\\"newUser\\\",\\\"email\\\"]],[25,\\\"t\\\",[\\\"form.label.Email\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-4\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"vinka-password\\\",null,[[\\\"value\\\",\\\"placeholder\\\"],[[20,[\\\"model\\\",\\\"newUser\\\",\\\"password\\\"]],[25,\\\"t\\\",[\\\"form.label.Password\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-2\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"vinka-dropdown\\\",null,[[\\\"options\\\",\\\"current\\\",\\\"asBootstrap\\\",\\\"onSelect\\\"],[[20,[\\\"model\\\",\\\"permissions\\\"]],[20,[\\\"model\\\",\\\"newUser\\\",\\\"permission\\\"]],true,[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"setUserPermission\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-2\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-block\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"addUser\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Save\\\"],null],false],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group input-group-sm\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-12\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"form-check\\\"],[7],[0,\\\"\\\\n                                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"id\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"form-check-input\\\",\\\"newUserVerified\\\",\\\"newUserVerified\\\",[20,[\\\"model\\\",\\\"newUser\\\",\\\"verified\\\"]]]]],false],[0,\\\"\\\\n                                    \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"newUserVerified\\\"],[9,\\\"class\\\",\\\"form-check-label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Verified\\\"],null],false],[0,\\\" (\\\"],[1,[25,\\\"t\\\",[\\\"form.label.VerifiedText\\\"],null],false],[0,\\\")\\\"],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"br\\\"],[7],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"label\\\"],[7],[0,\\\"\\\\n                        \\\"],[1,[25,\\\"t\\\",[\\\"form.label.AllUsers\\\"],null],false],[0,\\\"\\\\n                        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.filter\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-bordered table-sm\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"thead\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"th\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"sortBy\\\",\\\"name\\\"]],[7],[1,[25,\\\"t\\\",[\\\"form.label.Name\\\"],null],false],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"th\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"sortBy\\\",\\\"email\\\"]],[7],[1,[25,\\\"t\\\",[\\\"form.label.Email\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"th\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"sortBy\\\",\\\"role\\\"]],[7],[1,[25,\\\"t\\\",[\\\"form.label.Role\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                            \\\"],[6,\\\"th\\\"],[7],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"tbody\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredUsers\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[19,1,[\\\"isNew\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"tr\\\"],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[1,[19,1,[\\\"email\\\"]],false],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"has-permission\\\",[\\\"role:admin\\\",\\\"role:super\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                        \\\"],[6,\\\"td\\\"],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"role.\\\",[19,1,[\\\"role\\\"]]],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-block\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"removeUser\\\",[19,1,[]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/user/template.hbs\" } });\n});","define('garage/utils/create-session-data-object', ['exports', 'ember-simple-auth-auth0/utils/create-session-data-object'], function (exports, _createSessionDataObject) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _createSessionDataObject.default;\n    }\n  });\n});","define('garage/utils/i18n/compile-template', ['exports', 'ember-i18n/utils/i18n/compile-template'], function (exports, _compileTemplate) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _compileTemplate.default;\n    }\n  });\n});","define('garage/utils/i18n/missing-message', ['exports', 'ember-i18n/utils/i18n/missing-message'], function (exports, _missingMessage) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _missingMessage.default;\n    }\n  });\n});","define('garage/utils/semver', ['exports', 'ember-simple-auth-auth0/utils/semver'], function (exports, _semver) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _semver.default;\n    }\n  });\n});","define('garage/utils/tree', ['exports', 'ember-select/utils/tree'], function (exports, _tree) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _tree.default;\n    }\n  });\n});","define('garage/utils/view', ['exports', 'ember-select/utils/view'], function (exports, _view) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _view.default;\n    }\n  });\n});","define('garage/vehicle-attribute/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n        name: _emberData.default.attr('string'),\n        value: _emberData.default.attr('boolean')\n    });\n});","define('garage/vehicle-export/service', ['exports', 'papaparse', 'garage/config/environment', 'lodash'], function (exports, _papaparse, _environment, _lodash) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    function attributesToCSV(attrs) {\n        var ids = attrs.map(function (a) {\n            return a.id;\n        });\n        return ids.join(',');\n    }\n\n    function mapCapacities(caps) {\n        return caps.reduce(function (all, c) {\n            all[c.unitId] = c.count;\n            return all;\n        }, {});\n    }\n\n    var fields = ['id', 'name', 'attributes', 'phoneNumber', 'licenceNumber', 'emissionFactor', 'co2', 'priceFactor', 'dispatchArea', 'dispatchPriority', 'externalId', 'paymentTerminalId', 'contract', 'useShift', 'labels', 'brandModel', 'additionalInfo', 'inactive'];\n    var capFields = ['id'].concat(_toConsumableArray(Array.from(Array(6), function (_, i) {\n        return i + 1;\n    }).map(function (x) {\n        return 'cap_' + x;\n    })));\n\n    exports.default = Ember.Service.extend({\n        init: function init() {\n            this._super.apply(this, arguments);\n        },\n\n        modalMessage: Ember.inject.service(),\n\n        mappings: _environment.default.APP.import.capacityMappings,\n        encoding: _environment.default.APP.import.encoding,\n        vehiclesToCSVObjects: function vehiclesToCSVObjects(vehicles) {\n            return vehicles.map(function (v) {\n                // note: this order must match order in fields array\n                return [v.get('id'), v.get('name'), attributesToCSV(v.get('attributes')), v.get('phoneNumber'), v.get('licenceNumber'), v.get('emissionFactor'), v.get('co2'), v.get('priceFactor'), v.get('dispatchArea'), v.get('dispatchPriority'), v.get('externalId'), v.get('paymentTerminalId'), v.get('contract'), v.get('useShift') ? 'x' : '', v.get('labels'), v.get('brandModel'), v.get('additionalInfo'), v.get('inactive') ? 'x' : ''];\n            }\n            // garage fields missing here\n            );\n        },\n        vehicleCapsToCSVObjects: function vehicleCapsToCSVObjects(vehicles) {\n            var data = vehicles.map(function (v) {\n                return v.get('capacityConfigs').map(function (c) {\n                    var caps = mapCapacities(c);\n                    return [v.id].concat(_toConsumableArray(Array.from(Array(6), function (_, i) {\n                        return i + 1;\n                    }).map(function (x) {\n                        return caps[x] || 0;\n                    })));\n                }\n                // above are caps from 1..6, need more 1000, 1001?\n                );\n            });\n            return _lodash.default.flatten(data);\n        },\n        export: function _export(vehicles, fileTitle, encoding) {\n            var csvData = this.vehiclesToCSVObjects(vehicles);\n\n            var csv = _papaparse.default.unparse({\n                fields: fields,\n                data: csvData\n            }, {\n                delimiter: '\\t'\n            });\n\n            // download\n            var vehiclesFileName = (fileTitle || 'vehicles') + '.tsv';\n            this.downloadFile(csv, vehiclesFileName, encoding);\n\n            var csvCapData = this.vehicleCapsToCSVObjects(vehicles);\n            var csvCaps = _papaparse.default.unparse({\n                fields: capFields,\n                data: csvCapData\n            }, {\n                delimiter: '\\t'\n            });\n\n            // download\n            var capsFileName = (fileTitle || 'capacities') + '.tsv';\n            this.downloadFile(csvCaps, capsFileName, encoding);\n        },\n        downloadFile: function downloadFile(csv, exportedFileName, encoding) {\n            var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n            if (navigator.msSaveBlob) {\n                // IE 10+\n                navigator.msSaveBlob(blob, exportedFileName);\n            } else {\n                var link = document.createElement('a');\n                if (link.download !== undefined) {\n                    // feature detection\n                    // Browsers that support HTML5 download attribute\n                    var url = URL.createObjectURL(blob);\n                    link.setAttribute('href', url);\n                    link.setAttribute('download', exportedFileName);\n                    link.style.visibility = 'hidden';\n                    document.body.appendChild(link);\n                    link.click();\n                    document.body.removeChild(link);\n                }\n            }\n        }\n    });\n});","define('garage/vehicle-import/service', ['exports', 'papaparse', 'garage/config/environment', 'lodash'], function (exports, _papaparse, _environment, _lodash) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var cols = {\n        id: 'id',\n        name: 'name',\n        attributes: 'attributes',\n        phoneNumber: 'phoneNumber',\n        licenceNumber: 'licenceNumber',\n        emissionFactor: 'emissionFactor',\n        priceFactor: 'priceFactor',\n        dispatchArea: 'dispatchArea',\n        dispatchPriority: 'dispatchPriority',\n        useShift: 'useShift',\n        garageLat: 'garageLat',\n        garageLng: 'garageLng',\n        garageAlias: 'garageAlias',\n        externalId: 'externalId',\n        contract: 'contract',\n        paymentTerminalId: 'paymentTerminalId',\n        co2: 'co2',\n        additionalInfo: 'additionalInfo',\n        brandModel: 'brandModel',\n        labels: 'labels',\n        inactive: 'inactive'\n    };\n\n    var capCols = {\n        id: 'id'\n    };\n\n    exports.default = Ember.Service.extend({\n        init: function init() {\n            this._super.apply(this, arguments);\n        },\n\n        modalMessage: Ember.inject.service(),\n\n        mappings: _environment.default.APP.import.capacityMappings,\n        encoding: _environment.default.APP.import.encoding,\n\n        parseFile: function parseFile(file, encoding) {\n            return new Promise(function (res, rej) {\n                _papaparse.default.parse(file, {\n                    encoding: encoding,\n                    header: true,\n                    complete: res,\n                    error: rej,\n                    // @todo: somehow one example, tab delimited file, didn't succeed in parsing\n                    // without this with automatic detection, so setting delimiter\n                    delimiter: '\\t'\n                });\n            });\n        },\n\n\n        // create capacity string to be used as a \"unique index\" for each capacity\n        // configuration. this is used for filtering out possible duplicates since\n        // we are not bringing over all mobirouter capacities.\n        capstring: function capstring(caps) {\n            return this.mappings.meaningfulCapacities.map(function (capname) {\n                return caps[capname];\n            }).join('-');\n        },\n        emptycapstring: function emptycapstring() {\n            return new Array(this.mappings.meaningfulCapacities.length).fill(0).join('-');\n        },\n        squashCapacities: function squashCapacities(capgroups) {\n            var _this = this;\n\n            var emptycap = this.emptycapstring();\n            Object.values(capgroups).forEach(function (caps) {\n                // filter array of caps to unique set of meaningful caps\n                var cleancaps = _lodash.default.uniqBy(caps, _this.capstring.bind(_this));\n                cleancaps = cleancaps.filter(function (c) {\n                    return _this.capstring(c) !== emptycap;\n                });\n                var vehNumber = caps[0][capCols.id];\n                if (cleancaps.length !== caps.length) {\n                    console.log('WARNING! ' + vehNumber + ' has \"zero capacity row\"');\n                }\n                if (vehNumber) {\n                    capgroups[vehNumber] = cleancaps;\n                } else {\n                    // delete empty lines\n                    delete capgroups[vehNumber];\n                }\n            });\n        },\n\n\n        // group capacities by each vehicle\n        // @returns capacity rows grouped by vehicle\n        groupCapacities: function groupCapacities(capacities) {\n            var capgroups = _lodash.default.groupBy(capacities, capCols.id); // grouped by veh id\n            this.squashCapacities(capgroups);\n            return capgroups;\n        },\n        capacityConfigToVinka: function capacityConfigToVinka(cap) {\n            var _this2 = this;\n\n            return this.mappings.meaningfulCapacities.map(function (mbrcapname) {\n                if (parseInt(cap[mbrcapname]) === 0) {\n                    return null;\n                }\n\n                var ret = {\n                    unitId: parseInt(_this2.mappings.capacityMap[mbrcapname]),\n                    count: parseInt(cap[mbrcapname])\n                };\n\n                (true && !(ret.unitId > 0) && Ember.assert('got capa unitId ' + ret.unitId + ' for vehicle ' + cap[capCols.id], ret.unitId > 0));\n                (true && !(ret.count > 0) && Ember.assert('got capa count ' + ret.count + ' for vehicle ' + cap[capCols.id], ret.count > 0));\n\n\n                return ret;\n            }).filter(function (cap) {\n                return cap !== null;\n            });\n        },\n        attributeToVinka: function attributeToVinka(attribute) {\n            var id = parseInt(attribute, 10);\n            return isNaN(id) ? null : { id: id };\n        },\n        vehiclesToVinka: function vehiclesToVinka(vehicles, capacities, prefixes, externalIds) {\n            var _this3 = this;\n\n            var capacitiesWithVehcile = {};\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = Object.keys(vehicles)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var vNbr = _step.value;\n\n                    if (capacities[vNbr] && capacities[vNbr].length) {\n                        capacitiesWithVehcile[vNbr] = capacities[vNbr];\n                    }\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n\n            var vehicleDatas = Object.values(capacitiesWithVehcile).map(function (caps) {\n                var number = caps[0][capCols.id];\n                var vehicle = vehicles[number];\n                if (!vehicle) {\n                    console.log('capacities contain vehicle data which is not found', number);\n                    return null;\n                }\n                (true && !(vehicle) && Ember.assert('vehicle ' + number + ' not found from vehicle file', vehicle));\n\n                var name = (vehicle[cols.name] || '').trim();\n                var capacityConfigs = caps.map(function (cap) {\n                    return _this3.capacityConfigToVinka(cap);\n                });\n                var attributes = (vehicle[cols.attributes] || '').\n                // .trim()\n                replace(/\\s+/g, '') // strip all spaces\n                .split(',').map(function (attr) {\n                    return _this3.attributeToVinka(attr);\n                }).filter(function (a) {\n                    return a !== null;\n                });\n\n                var priceFactor = parseFloat((vehicle[cols.priceFactor] || '').trim().replace(',', '.'));\n                priceFactor = isNaN(priceFactor) ? 1 : priceFactor;\n\n                var emissionFactor = _this3.parseEmissionFactor(vehicle[cols.emissionFactor]);\n\n                var co2 = parseFloat((vehicle[cols.co2] || '').trim().replace(',', '.'));\n                co2 = isNaN(co2) ? 0 : co2;\n\n                var brandModel = (vehicle[cols.brandModel] || '').trim();\n                var additionalInfo = (vehicle[cols.additionalInfo] || '').trim();\n\n                var licenceNumber = (vehicle[cols.licenceNumber] || '').trim() || null;\n\n                var phoneNumber = (vehicle[cols.phoneNumber] || '').trim();\n                phoneNumber = phoneNumber.length > 0 && phoneNumber !== '0' ? phoneNumber : null; // empty phone is not accepted\n\n                var dispatchPriority = parseInt((vehicle[cols.dispatchPriority] || '').trim(), 10);\n                dispatchPriority = isNaN(dispatchPriority) ? 100 : dispatchPriority;\n\n                var dispatchArea = _this3.parseArrayText(vehicle[cols.dispatchArea]);\n\n                var useShift = (vehicle[cols.useShift] || '').trim().length > 0 ? true : false;\n                var inactive = (vehicle[cols.inactive] || '').trim().length > 0 ? true : false;\n\n                var _ref = [parseFloat(vehicle[cols.garageLat]), parseFloat(vehicle[cols.garageLng]), vehicle[cols.garageAlias] || ''],\n                    lat = _ref[0],\n                    lng = _ref[1],\n                    alias = _ref[2];\n\n                var garage = isNaN(lat) || isNaN(lng) ? null : { lat: lat, lng: lng, alias: alias };\n\n                // let operator;\n\n                var externalId = (vehicle[cols.externalId] || '').trim() || null;\n                var paymentTerminalId = (vehicle[cols.paymentTerminalId] || '').trim() || null;\n                var contract = _this3.parseArrayText(vehicle[cols.contract]);\n                var labels = _this3.parseArrayText(vehicle[cols.labels]);\n\n                (true && !(number) && Ember.assert('no vehicle number found', number));\n                (true && !(name) && Ember.assert('no name found for vehicle ' + number, name));\n                (true && !(capacityConfigs.length > 0) && Ember.assert('got 0 capacities for vehicle ' + number, capacityConfigs.length > 0));\n\n\n                if (prefixes) {\n                    var numbersz = String(number);\n                    var pref = prefixes.find(function (p) {\n                        return numbersz.startsWith(p.prefix);\n                    });\n                    (true && !(pref) && Ember.assert('prefix not found for ' + numbersz, pref));\n\n                    number = parseInt(numbersz.substring(pref.prefix.length));\n                    // operator = pref.operator;\n                }\n\n                // return {number, externalId, name, operator, active: false, attributes, capacityConfigs};\n                return {\n                    number: number,\n                    name: name,\n                    licenceNumber: licenceNumber,\n                    priceFactor: priceFactor,\n                    emissionFactor: emissionFactor,\n                    phoneNumber: phoneNumber,\n                    dispatchPriority: dispatchPriority,\n                    dispatchArea: dispatchArea,\n                    useShift: useShift,\n                    active: false,\n                    attributes: attributes,\n                    capacityConfigs: capacityConfigs,\n                    garage: garage,\n                    externalId: externalId,\n                    paymentTerminalId: paymentTerminalId,\n                    contract: contract,\n                    labels: labels,\n                    co2: co2,\n                    brandModel: brandModel,\n                    additionalInfo: additionalInfo,\n                    inactive: inactive\n                };\n            });\n\n            var finals = vehicleDatas.filter(function (i) {\n                return i !== null;\n            });\n\n            return finals;\n        },\n        parse: function parse(vehfile, capfile) {\n            var _this4 = this;\n\n            var capacities = void 0;\n            var vehicles = void 0;\n\n            return this.parseFile(capfile, this.encoding).then(function (parsed) {\n                return _this4.groupCapacities(parsed.data);\n            }).then(function (capas) {\n                capacities = capas;\n                return _this4.parseFile(vehfile, _this4.encoding);\n            }).then(function (parsed) {\n                // vehicles mapped by id as key\n                vehicles = _lodash.default.keyBy(parsed.data, cols.id);\n            }).then(function () {\n                return _this4.vehiclesToVinka(vehicles, capacities, undefined, false);\n            }).catch(function (e) {\n                console.log(e);\n                _this4.get('modalMessage').showDialog('Import Interrupted', e.message);\n            });\n        },\n\n\n        /**\n            Exception in conversion 0 -> 1, otherwise return the number or null.\n         * @param emissionFactor\n         * @returns {null|number}\n         */\n        parseEmissionFactor: function parseEmissionFactor(emissionFactor) {\n            emissionFactor = parseFloat((emissionFactor || '').trim().replace(',', '.'));\n\n            // if the emission factor column is missing OR the value is missing OR is invalid - return null\n            return isNaN(emissionFactor) ? null : emissionFactor;\n        },\n        parseArrayText: function parseArrayText(arrayText) {\n            var items = (arrayText || '').replace(/\\s+/g, '') // strip all spaces\n            .split(',').filter(function (a) {\n                return !!a;\n            });\n            return items.length ? items : null;\n        }\n    });\n});","define('garage/vehicle/import/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        mbrVehiclesParser: Ember.inject.service('mbr-vehicles-parser'),\n        vehiclesParser: Ember.inject.service('vehicle-import'),\n        hasDirty: false,\n        vehicles: Ember.Object.create([]),\n        viewData: Ember.Object.create({\n            vehFile: null,\n            capFile: null,\n            vehicleJsonFile: null\n        }),\n\n        model: function model() {\n            var vehicles = this.modelFor('vehicle').vehicles;\n            this.set('vehicles', vehicles.length ? vehicles.filterBy('hasDirtyAttributes', true) : []);\n            this.set('hasDirty', this.modelFor('vehicle').hasDirty);\n            return Ember.RSVP.hash({\n                viewData: this.get('viewData'),\n                hasDirty: this.get('hasDirty'),\n                vehicles: this.get('vehicles')\n            });\n        },\n        doUpload: function doUpload(file) {\n            if (file.name.endsWith('json')) {\n                this.set('viewData.vehicleJsonFile', file);\n            } else {\n                if (file.name.startsWith('mbr-vehicle') || file.name.startsWith('vehicle')) {\n                    this.set('viewData.vehFile', file);\n                }\n                if (file.name.startsWith('mbr-capacity') || file.name.startsWith('capacit')) {\n                    this.set('viewData.capFile', file);\n                }\n            }\n        },\n\n\n        actions: {\n            dropped: function dropped(e) {\n                var _this = this;\n\n                e.preventDefault();\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = e.dataTransfer.files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var file = _step.value;\n\n                        console.log('dropped file', file);\n                        this.doUpload(file);\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n\n                var vehFile = this.get('viewData.vehFile');\n                var capFile = this.get('viewData.capFile');\n                if (vehFile && capFile) {\n                    (vehFile.name.startsWith('mbr-vehicle') ? this.get('mbrVehiclesParser') : this.get('vehiclesParser')).parse(vehFile, capFile).then(function (vehicles) {\n                        vehicles.forEach(function (vehicle) {\n                            return _this.send('addVehicle', vehicle);\n                        });\n                        _this.refresh();\n                    });\n                }\n                var vehicleJsonFile = this.get('viewData.vehicleJsonFile');\n                if (vehicleJsonFile) {\n                    var reader = new FileReader();\n                    reader.onload = function (event) {\n                        var vehicles = JSON.parse(event.target.result);\n                        console.log('Vehicles:  +', vehicles);\n                        vehicles.forEach(function (vehicle) {\n                            return _this.send('addVehicle', vehicle);\n                        });\n                        _this.refresh();\n                    };\n                    reader.onerror = function (event) {\n                        console.error('Vehicles file could not be read!\\n                         Code ' + event.target.error.code);\n                    };\n                    reader.readAsText(vehicleJsonFile);\n                }\n            },\n            selectImportedItem: function selectImportedItem(vehicle) {\n                this.transitionTo('vehicle.vehicle.index', vehicle.id);\n            },\n            saveAllUnsaved: function saveAllUnsaved() {\n                this.send('saveAll');\n            },\n            clearAllUnsaved: function clearAllUnsaved() {\n                this.send('clearUnsaved');\n            }\n        }\n    });\n});","define(\"garage/vehicle/import/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6UTOpgxS\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"flex-container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"h1\\\"],[7],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"import.vehicle.unsaved\\\"],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"import.vehicle.title\\\"],null],false]],\\\"parameters\\\":[]}],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"p\\\"],[9,\\\"class\\\",\\\"lead\\\"],[7],[1,[25,\\\"t\\\",[\\\"import.vehicle.instructions\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"import-container\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[25,\\\"import-data\\\",null,[[\\\"type\\\",\\\"importedItems\\\",\\\"saveAll\\\",\\\"selectImportedItem\\\",\\\"clearUnsaved\\\"],[\\\"vehicle\\\",[20,[\\\"model\\\",\\\"vehicles\\\"]],[25,\\\"route-action\\\",[\\\"saveAllUnsaved\\\"],null],[25,\\\"route-action\\\",[\\\"selectImportedItem\\\"],null],[25,\\\"route-action\\\",[\\\"clearAllUnsaved\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"import-panel\\\",null,[[\\\"dropped\\\"],[[25,\\\"route-action\\\",[\\\"dropped\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"text-center fa fa-file-o fa-5x\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/import/template.hbs\" } });\n});","define('garage/vehicle/index/route', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({});\n});","define(\"garage/vehicle/index/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"7/eEPd9D\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"h1\\\"],[7],[1,[25,\\\"t\\\",[\\\"tab.Vehicles\\\"],null],false],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/index/template.hbs\" } });\n});","define('garage/vehicle/model', ['exports', 'ember-data', 'ember-api-actions'], function (exports, _emberData, _emberApiActions) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend(Ember.Copyable, {\n        name: _emberData.default.attr('string'),\n        operator: _emberData.default.attr('number'),\n        number: _emberData.default.attr('number'),\n        externalId: _emberData.default.attr('string'),\n        paymentTerminalId: _emberData.default.attr('string'),\n        licenceNumber: _emberData.default.attr('string'),\n        phoneNumber: _emberData.default.attr('string'),\n        location: _emberData.default.attr(),\n        attributes: _emberData.default.attr(),\n        capacityConfigs: _emberData.default.attr(),\n        dispatchPriority: _emberData.default.attr('number'),\n        dispatchArea: _emberData.default.attr(),\n        priceFactor: _emberData.default.attr('number'),\n        emissionFactor: _emberData.default.attr('number'),\n        co2: _emberData.default.attr('number'),\n        serviceFactor: _emberData.default.attr('number'),\n        useShift: _emberData.default.attr('boolean'),\n        garage: _emberData.default.attr(),\n        contract: _emberData.default.attr(),\n        additionalInfo: _emberData.default.attr('string'),\n        brandModel: _emberData.default.attr('string'),\n        labels: _emberData.default.attr(),\n        inactive: _emberData.default.attr('boolean'),\n\n        isUnsaved: Ember.computed('id', function () {\n            return this.get('id') && this.get('id').startsWith('new');\n        }),\n\n        copy: function copy() {\n            var loc = this.get('store').createRecord('location', this.get('location'));\n            return this.get('store').createRecord('vehicle', {\n                name: 'Copy of ' + this.get('name'),\n                number: this.get('number'),\n                paymentTerminalId: this.get('paymentTerminalId'),\n                licenceNumber: this.get('licenceNumber'),\n                phoneNumber: this.get('phoneNumber'),\n                location: loc,\n\n                attributes: JSON.parse(JSON.stringify(this.get('attributes'))),\n                capacityConfigs: JSON.parse(JSON.stringify(this.get('capacityConfigs'))),\n                dispatchPriority: this.get('dispatchPriority'),\n                dispatchArea: this.get('dispatchArea'),\n                priceFactor: this.get('priceFactor'),\n                emissionFactor: this.get('emissionFactor'),\n                co2: this.get('co2'),\n                serviceFactor: this.get('serviceFactor'),\n                useShift: this.get('useShift'),\n                contract: this.get('contract') ? JSON.parse(JSON.stringify(this.get('contract'))) : this.get('contract'),\n                additionalInfo: this.get('additionalInfo'),\n                brandModel: this.get('brandModel'),\n                labels: this.get('labels') ? JSON.parse(JSON.stringify(this.get('labels'))) : this.get('labels'),\n                inactive: this.get('inactive')\n            });\n        },\n\n\n        // ember-api-actions start here\n\n        genReport: (0, _emberApiActions.memberAction)({ path: 'report', type: 'get' }),\n\n        genQRCode: (0, _emberApiActions.memberAction)({ path: 'qr-code', type: 'get' })\n    });\n});","define('garage/vehicle/route', ['exports', 'garage/config/environment', 'garage/mixins/restricted-route-mixin', 'garage/helpers/permission-utils', 'garage/helpers/utils'], function (exports, _environment, _restrictedRouteMixin, _permissionUtils, _utils) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var NEW_PREFIX = 'new';\n\n    exports.default = Ember.Route.extend(_restrictedRouteMixin.default, {\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n        vehicleExport: Ember.inject.service('vehicle-export'),\n\n        // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n        restrictions: [_permissionUtils.roleNames.admin, _permissionUtils.roleNames.super],\n\n        viewData: Ember.Object.create({\n            vehicles: [],\n            selected: null,\n            canImport: false,\n            hasDirty: false,\n            savingAll: false,\n            search: '',\n            vehicleRange: ''\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.set('viewData.canImport', _environment.default.APP.import.enabled); // enable import based on configuration\n\n            return this.get('store').findAll('vehicle').then(function () {\n                return _this.loadVehiclesToViewData().then(function () {\n                    return _this.get('viewData');\n                });\n            });\n        },\n        loadVehiclesToViewData: function loadVehiclesToViewData() {\n            var _this2 = this;\n\n            return Promise.resolve(this.get('store').peekAll('vehicle')).then(function (result) {\n                var vehicles = result.sortBy('number');\n                _this2.set('viewData.vehicles', vehicles);\n                _this2.set('viewData.hasDirty', vehicles.any(function (v) {\n                    return v.get('hasDirtyAttributes');\n                }));\n                return vehicles;\n            });\n        },\n        draftVehicle: function draftVehicle() {\n            var vehicle = this.get('store').createRecord('vehicle');\n            vehicle.set('id', this.getNextNewId());\n            vehicle.set('name', 'New Vehicle');\n            return vehicle;\n        },\n        addVehicle: function addVehicle() {\n            var vehicle = this.get('store').createRecord('vehicle');\n            vehicle.set('id', this.getNextNewId());\n            vehicle.set('name', 'New Vehicle');\n            return vehicle;\n        },\n        saveAll: function saveAll() {\n            var _this3 = this;\n\n            var unsavedVehicles = this.get('store').peekAll('vehicle').filterBy('hasDirtyAttributes', true);\n            var success = [];\n            var failed = [];\n            var chain = Promise.resolve();\n            this.set('viewData.savingAll', true);\n\n            var _loop = function _loop(i) {\n                var vehicle = unsavedVehicles[i];\n                if (vehicle.get('id') && vehicle.get('id').startsWith(NEW_PREFIX)) {\n                    vehicle.set('id', null);\n                }\n                chain = chain.then(function () {\n                    return vehicle.save().then(function () {\n                        success.push(vehicle.get('number'));\n                    }).catch(function (e) {\n                        failed.push('\\n\\r' + vehicle.get('number') + (' (' + (e.errors[0].title || e.errors[0].message) + ')'));\n                    }).catch(function (e) {\n                        failed.push('\\n\\r' + vehicle.get('number') + '(' + e.message + ')');\n                    });\n                });\n            };\n\n            for (var i = 0; i < unsavedVehicles.length; i++) {\n                _loop(i);\n            }\n            chain.then(function () {\n                _this3.set('viewData.savingAll', false);\n                var title = _this3.get('i18n').t('dialog.saved.title');\n                var text = _this3.get('i18n').t('dialog.saved.text.vehicle', {\n                    success: success.join(', ') || '-',\n                    totalSuccess: success.length,\n                    failed: failed.join(', ') || '-'\n                });\n                _this3.get('modalMessage').showDialog(title, text);\n                _this3.refresh();\n            });\n        },\n        getNextNewId: function getNextNewId() {\n            // find highest new number\n            var allVehicles = this.get('store').peekAll('vehicle');\n            var highestId = allVehicles.reduce(function (prev, v) {\n                var currId = v.get('id');\n                if (currId && currId.startsWith(NEW_PREFIX)) {\n                    var components = currId.split('-');\n                    var number = parseInt(components[1], 10);\n                    prev = isNaN(number) ? prev : number;\n                }\n                return prev;\n            }, 0);\n            return NEW_PREFIX + '-' + ++highestId;\n        },\n\n\n        // @filterVehicles Array of vehicle numbers to export, empty or undefined for all\n        exportVehicles: function exportVehicles(filterVehicles) {\n            var vehicles = this.get('viewData.vehicles');\n            var filtered = filterVehicles ? vehicles.filter(function (v) {\n                return filterVehicles.map(function (fv) {\n                    return fv + '';\n                }).includes(v.get('id'));\n            }) : vehicles;\n            this.get('vehicleExport').export(filtered);\n        },\n\n\n        actions: {\n            search: function search() {\n                var filter = this.get('viewData.search').toLowerCase();\n                this.get('viewData.vehicles').forEach(function (vehicle) {\n                    var name = (vehicle.get('name') || '').toLowerCase();\n                    var number = '' + (vehicle.get('number') || '');\n                    var plate = (vehicle.get('licenceNumber') || '').toLowerCase();\n\n                    vehicle.set('filtered', filter && name.indexOf(filter) < 0 && number.indexOf(filter) < 0 && plate.indexOf(filter) < 0);\n                });\n            },\n            selectVehicle: function selectVehicle(vehicle) {\n                // search current route name to maintain selected tab with the new selected vehicle\n                var route = Ember.getOwner(this).lookup('controller:application').currentRouteName;\n                this.set('viewData.selected', vehicle);\n                if (route === 'vehicle.index' || route === 'vehicle.import') {\n                    route = 'vehicle.vehicle.index';\n                }\n                this.transitionTo(route, vehicle.id);\n            },\n\n\n            // prettier-ignore\n            deleteVehicle: function deleteVehicle(vehicle) {\n                var _this4 = this;\n\n                var title = this.get('i18n').t('dialog.delete.title', {\n                    name: vehicle.get('name')\n                });\n                var text = this.get('i18n').t('dialog.delete.text');\n                this.get('modalMessage').confirm(title, text, function () {\n                    vehicle.deleteRecord();\n                    // (prettier just does following wrong)\n                    /* prettier-ignore */\n                    return vehicle.save().then(function () {\n                        _this4.transitionTo('vehicle.index');\n                        title = _this4.get('i18n').t('message.title.success');\n                        text = _this4.get('i18n').t('message.text.vehicle.delete.success');\n                        _this4.get('modalMessage').showDialog(title, text);\n                        _this4.refresh();\n                    }, function () {\n                        title = _this4.get('i18n').t('message.title.failure');\n                        text = _this4.get('i18n').t('message.text.vehicle.delete.failure');\n                        _this4.get('modalMessage').showDialog(title, text);\n                    });\n                });\n            },\n            copyVehicle: function copyVehicle(vehicle) {\n                var copy = vehicle.copy();\n                copy.set('id', this.getNextNewId());\n                this.transitionTo('vehicle.vehicle.index', copy.get('id'));\n            },\n            newVehicle: function newVehicle() {\n                var vehicle = this.draftVehicle();\n                this.transitionTo('vehicle.vehicle.index', vehicle.get('id'));\n            },\n            addVehicle: function addVehicle(json) {\n                var store = this.get('store');\n                var vehicle = store.hasRecordForId('vehicle', json.number) ? store.peekRecord('vehicle', json.number) : this.draftVehicle();\n                vehicle.setProperties(json);\n                this.loadVehiclesToViewData();\n            },\n            saveAll: function saveAll() {\n                this.saveAll();\n            },\n            clearUnsaved: function clearUnsaved() {\n                // En jumalauta kemsinyt miten emberissä saa hienosti rollbäckattyä dirty recordit\n                // unloadAll toimi jossain tilanteissa mutta joskus tuli poikkeuksia mitä ei tietenkään\n                // mitenkään pysty helposti debuggaan. Ember data on susi tuote.\n                window.location.reload(true);\n            },\n\n\n            // receives id as parameter\n            vehicleSaved: function vehicleSaved() {\n                this.refresh();\n            },\n            selectVehicleRange: function selectVehicleRange() {\n                this.set('viewData.vehicleRange', '');\n                $('#vehicleRangeSelect').modal('show');\n            },\n            selectVehicleRangeSet: function selectVehicleRangeSet() {\n                var vehicleOptions = (0, _utils.parseVehicleOption)(this.get('viewData.vehicleRange'));\n                var vehicleNumbers = this.get('store').peekAll('vehicle').map(function (v) {\n                    return v.get('number');\n                });\n                var vehicleItems = (0, _utils.vehicleOptionsToNumbers)(vehicleNumbers, vehicleOptions);\n\n                this.exportVehicles(vehicleItems);\n            },\n            selectVehicleRangeCancel: function selectVehicleRangeCancel() {\n                this.set('viewData.vehicleRange', '');\n            }\n        }\n    });\n});","define(\"garage/vehicle/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"wS03BNE/\", \"block\": \"{\\\"symbols\\\":[\\\"vehicle\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-4 vehicle-list side-view\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"search\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"input-group-prepend\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"input-group-text\\\"],[9,\\\"id\\\",\\\"basic-addon1\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"fa fa-search\\\"],[7],[8],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"key-up\\\"],[[20,[\\\"model\\\",\\\"search\\\"]],\\\"form-control\\\",\\\"search\\\"]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"vehicles\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"list-group-item list-group-item-action \\\",[25,\\\"is-hidden\\\",[[19,1,[\\\"filtered\\\"]]],null],\\\" \\\",[25,\\\"is-current\\\",[[19,1,[\\\"id\\\"]],[20,[\\\"model\\\",\\\"selected\\\",\\\"id\\\"]]],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"selectVehicle\\\",[19,1,[]]]],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",[26,[[25,\\\"vehicle-title-classes\\\",[[19,1,[\\\"hasDirtyAttributes\\\"]],[19,1,[\\\"inactive\\\"]]],null]]]],[7],[1,[19,1,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"buttons\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"deleteVehicle\\\",[20,[\\\"model\\\",\\\"selected\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"copyVehicle\\\",[20,[\\\"model\\\",\\\"selected\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[7],[1,[25,\\\"t\\\",[\\\"button.Delete\\\"],null],false],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"disabled\\\",\\\"\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"newVehicle\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.New\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"hasDirty\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveAll\\\"]],[7],[0,\\\"\\\\n                        \\\"],[1,[25,\\\"t\\\",[\\\"button.SaveAll\\\"],null],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"savingAll\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"fa fa-spinner fa-spin fa-fw\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectVehicleRange\\\"]],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"t\\\",[\\\"import.exportButton\\\"],null],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"canImport\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[4,\\\"link-to\\\",[\\\"vehicle.import\\\"],[[\\\"class\\\"],[\\\"btn btn-outline-primary btn-sm\\\"]],{\\\"statements\\\":[[1,[25,\\\"t\\\",[\\\"import.button\\\"],null],false]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col-8 main-area\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"detail-view\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[2,\\\" modals \\\"],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal fade\\\"],[9,\\\"id\\\",\\\"vehicleRangeSelect\\\"],[9,\\\"tabindex\\\",\\\"-1\\\"],[9,\\\"role\\\",\\\"dialog\\\"],[9,\\\"aria-labelledby\\\",\\\"garageModalLabel\\\"],[9,\\\"aria-hidden\\\",\\\"true\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-dialog\\\"],[9,\\\"role\\\",\\\"document\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-content\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-header\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"h5\\\"],[9,\\\"class\\\",\\\"modal-title\\\"],[9,\\\"id\\\",\\\"garageModalLabel\\\"],[7],[1,[25,\\\"t\\\",[\\\"dialog.vehicleRange.title\\\"],null],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"close\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[9,\\\"aria-label\\\",\\\"Close\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"span\\\"],[9,\\\"aria-hidden\\\",\\\"true\\\"],[7],[0,\\\"×\\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-body\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"text\\\"],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"class\\\",\\\"style\\\",\\\"placeholder\\\"],[\\\"text\\\",[20,[\\\"model\\\",\\\"vehicleRange\\\"]],\\\"w-100\\\",\\\"width: 100%\\\",[25,\\\"t\\\",[\\\"dialog.vehicleRange.placeholder\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-footer\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectVehicleRangeCancel\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Cancel\\\"],null],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectVehicleRangeSet\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Select\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/template.hbs\" } });\n});","define('garage/vehicle/vehicle/attribute/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    function attributesDiffer(newAttrIds, oldAttrs) {\n        if (newAttrIds.length !== oldAttrs.length) {\n            return true;\n        }\n\n        var hasChanges = false;\n        newAttrIds.forEach(function (a) {\n            var found = oldAttrs.find(function (o) {\n                return o.toString() === a.toString();\n            });\n            if (!found) {\n                hasChanges = true;\n            }\n        });\n\n        return hasChanges;\n    }\n\n    var findAttributeLocalization = function findAttributeLocalization(locale, attribute) {\n        if (attribute && attribute.get('i18n') && locale) {\n            return attribute.get('i18n')[locale];\n        }\n        return undefined;\n    };\n\n    exports.default = Ember.Route.extend({\n        i18n: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            attributeUnits: [],\n            vehicleAttributes: [],\n            vehicle: null\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.get('store').findAll('attribute').then(function (result) {\n                _this.set('viewData.attributeUnits', result);\n                _this.initAttributes();\n            });\n            this.set('viewData.vehicle', this.modelFor('vehicle.vehicle').vehicle);\n            return this.get('viewData');\n        },\n        initAttributes: function initAttributes() {\n            var _this2 = this;\n\n            var attrs = this.get('viewData.attributeUnits');\n            var locale = this.get('i18n').locale;\n            if (!attrs || attrs.length === 0) {\n                // cannot set vehicleAttributes if there are no attributes\n                return;\n            }\n            var existingAttrs = this.get('viewData.vehicle.attributes') || [];\n            var attributeMappings = attrs.map(function (a) {\n                // check if attribute in vehicle attributes\n                var found = existingAttrs.find(function (e) {\n                    return e.id.toString() === a.get('id').toString();\n                });\n\n                var attributeLoc = findAttributeLocalization(locale, a);\n                var translationKey = 'form.attributes.' + a.get('name');\n                var translationExists = _this2.get('i18n').exists(translationKey);\n                var obj = Ember.Object.create({\n                    id: a.id,\n                    selected: !!found,\n                    name: a.get('name'),\n                    translation: attributeLoc ? attributeLoc : translationExists ? _this2.get('i18n').t(translationKey) : a.get('name')\n                });\n                return obj;\n            });\n            this.set('viewData.vehicleAttributes', attributeMappings);\n        },\n\n\n        attributeSelectionObserver: Ember.observer('viewData.vehicleAttributes.@each.selected', function () {\n            var _this3 = this;\n\n            if (this.get('viewData.vehicle')) {\n                // if selected attributes have changed re-create vehicle's attribute array\n                var selectedIds = this.getSelectedAttributesIds();\n                var differ = this.isVehicleAttributesDifferent(selectedIds);\n\n                if (differ) {\n                    var newAttrs = selectedIds.map(function (id) {\n                        var attrs = _this3.get('viewData.attributeUnits');\n                        var found = attrs.find(function (a) {\n                            return a.id.toString() === id.toString();\n                        });\n                        return { id: found.get('id'), name: found.get('name') };\n                    });\n                    // need to set whole array so that revert-button can actually revert set value later\n                    this.get('viewData.vehicle').set('attributes', newAttrs);\n                }\n            }\n        }),\n\n        // return ids of the attributes that have been checked selected\n        getSelectedAttributesIds: function getSelectedAttributesIds() {\n            var selectedIds = this.get('viewData.vehicleAttributes').map(function (va) {\n                if (va.get('selected')) {\n                    return va.get('id');\n                }\n                return null;\n            });\n            selectedIds = selectedIds.filter(function (i) {\n                return i !== null;\n            });\n            return selectedIds;\n        },\n\n\n        // compare if\n        isVehicleAttributesDifferent: function isVehicleAttributesDifferent(selectedIds) {\n            var existingAttrs = this.get('viewData.vehicle.attributes') || [];\n            var existingIds = existingAttrs.map(function (a) {\n                return a.id;\n            });\n            var differ = attributesDiffer(selectedIds, existingIds);\n            return differ;\n        },\n\n\n        vehicleObserver: Ember.observer('viewData.vehicle.attributes', function () {\n            var dirty = this.get('viewData.vehicle.hasDirtyAttributes');\n            var selectedIds = this.getSelectedAttributesIds();\n            if (!dirty && this.isVehicleAttributesDifferent(selectedIds)) {\n                this.initAttributes();\n                return;\n            }\n        })\n    });\n});","define(\"garage/vehicle/vehicle/attribute/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"yGDWEx2f\", \"block\": \"{\\\"symbols\\\":[\\\"vehicleAttribute\\\"],\\\"statements\\\":[[6,\\\"form\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Attributes\\\"],null],false],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"vehicleAttributes\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",[19,1,[\\\"name\\\"]],[19,1,[\\\"selected\\\"]]]]],false],[0,\\\"   \\\"],[1,[19,1,[\\\"translation\\\"]],false],[0,\\\"  \\\"],[6,\\\"small\\\"],[7],[0,\\\"(\\\"],[1,[19,1,[\\\"id\\\"]],false],[0,\\\")\\\"],[8],[6,\\\"br\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/attribute/template.hbs\" } });\n});","define('garage/vehicle/vehicle/capacity/route', ['exports', 'garage/config/environment'], function (exports, _environment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var findCapacityLocalization = function findCapacityLocalization(locale, capacity) {\n        if (capacity && capacity.get('i18n') && locale) {\n            return capacity.get('i18n')[locale];\n        }\n        return undefined;\n    };\n\n    exports.default = Ember.Route.extend({\n        i18n: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            vehicletypes: [],\n            capacityUnits: [],\n            vehicleAttributes: [],\n            capacityConfigs: [],\n            vehicle: null,\n            type: null,\n            useCustomCapacity: true\n        }),\n\n        /**\n         * Copy capacities data to the vehicle specific array.\n         */\n        saveCapacities: function saveCapacities() {\n            var configs = [];\n            // Copy current setup to the vehicles.\n            this.get('viewData.capacityConfigs').forEach(function (unit) {\n                var count = parseInt(unit.get('value'));\n                if (count) {\n                    configs.push({\n                        unitId: parseInt(unit.get('id')),\n                        count: count\n                    });\n                }\n            });\n            this.set('viewData.vehicle.capacityConfigs', configs);\n        },\n\n\n        /**\n         * Copy vehicle attributes list to the vehicle.\n         */\n        saveAttributes: function saveAttributes() {\n            var attrs = [];\n            this.get('viewData.vehicleAttributes').forEach(function (attr) {\n                if (attr.get('value')) {\n                    attrs.push({ id: attr.get('id'), name: attr.get('name') });\n                }\n            });\n            this.set('viewData.vehicle.attributes', attrs);\n        },\n\n\n        /**\n         * Copy capacities from vehicle or from type to capacities array.\n         */\n        loadCapacities: function loadCapacities() {\n            var _this = this;\n\n            var counts = {};\n            var capacityConfigs = [];\n            var locale = this.get('i18n').locale;\n            var existingCaps = this.get('viewData.vehicle.capacityConfigs');\n            if (existingCaps && existingCaps.length) {\n                // Init from vehicles own capacities.\n                existingCaps.forEach(function (capacity) {\n                    counts[capacity.unitId] = (counts[capacity.unitId] || 0) + capacity.count;\n                });\n            }\n\n            // Mark counts to the capacity list.\n            this.get('viewData.capacityUnits').forEach(function (unit) {\n                var attributeLoc = findCapacityLocalization(locale, unit);\n                var translationKey = 'form.capacities.' + unit.get('name');\n                var translationExists = _this.get('i18n').exists(translationKey);\n                var id = parseInt(unit.get('id'));\n                var obj = Ember.Object.create({\n                    id: id,\n                    value: counts[id] || 0,\n                    name: unit.get('name'),\n                    translation: attributeLoc ? attributeLoc : translationExists ? _this.get('i18n').t(translationKey) : '' + unit.get('name')\n                });\n                capacityConfigs.push(obj);\n            });\n\n            // sort for UI to show in order\n            capacityConfigs.sort(function (a, b) {\n                return a.id - b.id;\n            });\n\n            this.set('viewData.capacityConfigs', capacityConfigs);\n        },\n\n\n        /**\n         * Copy attributes from vehicle or from type to capacities array.\n         */\n        loadAttributes: function loadAttributes() {\n            var selected = {};\n\n            if (this.get('viewData.vehicle.attributes') && this.get('viewData.vehicle.attributes').length) {\n                // Use vehicles own attributes.\n                this.get('viewData.vehicle.attributes').forEach(function (attr) {\n                    selected[attr.id] = true;\n                });\n                this.set('viewData.useCustomCapacity', true);\n            } else {\n                // Use vehicle type's attributes.\n                this.get('viewData.type.attributes').forEach(function (attr) {\n                    selected[attr.id] = true;\n                });\n            }\n            // Mark selected attributes to the vehicle attribute list.\n            this.get('viewData.vehicleAttributes').forEach(function (attr) {\n                attr.set('value', !!selected[attr.id]);\n            });\n        },\n        model: function model() {\n            var _this2 = this;\n\n            return this.get('store').findAll('capacity').then(function (availableCapacities) {\n                _this2.set('viewData.capacityUnits', availableCapacities.filter(function (unit) {\n                    return !(_environment.default.APP.capacity.ignore || []).includes(+unit.id);\n                }));\n                _this2.set('viewData.vehicle', _this2.modelFor('vehicle.vehicle').vehicle);\n                _this2.loadCapacities();\n                return _this2.get('viewData');\n            });\n        },\n\n\n        actions: {\n            capacityChanged: function capacityChanged() {\n                this.saveCapacities();\n            },\n            toggleAttribute: function toggleAttribute() {\n                this.saveAttributes();\n            },\n            toggleCustomActivator: function toggleCustomActivator(state) {\n                if (!state) {\n                    // Reset vehicle specific values if custom is turned off.\n                    this.set('viewData.vehicle.capacityConfigs', []);\n                    this.set('viewData.vehicle.attributes', []);\n                    this.loadCapacities();\n                    this.loadAttributes();\n                }\n            },\n            capacitiesChanged: function capacitiesChanged(oldCapsRow, newCapsRow) {\n                // need to re-create capacity array and set new capacity item so that rollback works\n                var caps = this.get('viewData.vehicle.capacityConfigs') || [];\n                var items = caps.map(function (i) {\n                    if (i === oldCapsRow) {\n                        return newCapsRow;\n                    }\n                    return i;\n                });\n                this.set('viewData.vehicle.capacityConfigs', items);\n            },\n            removeCapacityRow: function removeCapacityRow(capacityRow) {\n                // need to re-create capacity array and remove capacity item so that rollback works\n                var items = this.get('viewData.vehicle.capacityConfigs').filter(function (i) {\n                    return i !== capacityRow;\n                });\n                this.set('viewData.vehicle.capacityConfigs', items);\n            },\n            addCapacityRow: function addCapacityRow(capacityRow) {\n                // need to re-create capacity array and add new capacity item so that rollback works\n                var caps = this.get('viewData.vehicle.capacityConfigs') || [];\n                var items = caps.map(function (i) {\n                    return i;\n                });\n                items.push(capacityRow);\n                this.set('viewData.vehicle.capacityConfigs', items);\n            }\n        }\n    });\n});","define(\"garage/vehicle/vehicle/capacity/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"0b0Jbzpg\", \"block\": \"{\\\"symbols\\\":[\\\"capacityRow\\\",\\\"capacity\\\",\\\"capacity\\\"],\\\"statements\\\":[[6,\\\"form\\\"],[7],[0,\\\"\\\\n    \\\"],[2,\\\" Add capacity \\\"],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Capacities\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"\\\"],[7],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"capacity-row header\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-table\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-tr\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"capacityConfigs\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-th\\\"],[10,\\\"title\\\",[26,[\\\"id: \\\",[19,3,[\\\"id\\\"]]]]],[7],[1,[19,3,[\\\"translation\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\" \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"capacity-row\\\",null,[[\\\"capacityOptions\\\",\\\"capacitiesChanged\\\",\\\"addCapacityRow\\\"],[[20,[\\\"model\\\",\\\"capacityConfigs\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"capacitiesChanged\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"addCapacityRow\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"br\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ExistingCapacities\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"capacity-row header\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-table\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-tr \\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"capacityConfigs\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"grid-th\\\"],[10,\\\"title\\\",[26,[\\\"id: \\\",[19,2,[\\\"id\\\"]]]]],[7],[1,[19,2,[\\\"translation\\\"]],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\" \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"capacityConfigs\\\"]]],null,{\\\"statements\\\":[[4,\\\"capacity-row\\\",null,[[\\\"capacityConfigs\\\",\\\"capacityOptions\\\",\\\"capacitiesChanged\\\",\\\"removeCapacityRow\\\"],[[19,1,[]],[20,[\\\"model\\\",\\\"capacityConfigs\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"capacitiesChanged\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"removeCapacityRow\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/capacity/template.hbs\" } });\n});","define('garage/vehicle/vehicle/garage/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        viewData: Ember.Object.create({\n            vehicle: null,\n            markerLocation: null,\n            text: null,\n            map: {},\n\n            viewLat: null,\n            viewLng: null,\n            viewAlias: null\n        }),\n\n        mapRef: null,\n\n        model: function model() {\n            var vehicle = this.modelFor('vehicle.vehicle').vehicle;\n\n            this.set('viewData.vehicle', vehicle);\n\n            // Start with full view of Finland, if no location.\n            this.set('viewData.map', Ember.Object.create({\n                lat: vehicle.get('garage.lat') || 64.38537023263848,\n                lng: vehicle.get('garage.lng') || 26.01357060618094,\n                zoom: vehicle.get('garage') ? 15 : 5\n            }));\n\n            this.setMarker(vehicle.get('garage'));\n\n            return this.get('viewData');\n        },\n\n\n        /**\n         * Move map to the given location.\n         */\n        setMarker: function setMarker(location) {\n            var _this = this;\n\n            this.set('viewData.markerLocation', location);\n\n            if (location) {\n                this.set('viewData.viewLat', location.lat);\n                this.set('viewData.viewLng', location.lng);\n                this.set('viewData.viewAlias', location.alias);\n            } else {\n                this.set('viewData.viewLat', null);\n                this.set('viewData.viewLng', null);\n                this.set('viewData.viewAlias', null);\n            }\n\n            if (!this.get('mapRef') || !location) {\n                return;\n            }\n\n            // delay the operation to prevent the internal leaflet error\n            setTimeout(function () {\n                return _this.get('mapRef').setView(location, Math.max(15, _this.get('viewData.map.zoom')));\n            });\n        },\n        clearGarageLocation: function clearGarageLocation() {\n            this.set('viewData.vehicle.garage', null);\n\n            this.setMarker(this.get('viewData.vehicle.garage'));\n        },\n        setGarageLocation: function setGarageLocation(location) {\n            // make sure to trigger attribute change!\n            this.set('viewData.vehicle.garage', Ember.Object.create(Object.assign(this.get('viewData.vehicle.garage') || {}, location)));\n\n            this.setMarker(this.get('viewData.vehicle.garage'));\n        },\n        setGarageAlias: function setGarageAlias(alias) {\n            this.set('viewData.vehicle.garage', Ember.Object.create(Object.assign(this.get('viewData.vehicle.garage') || {}, { alias: alias })));\n        },\n\n\n        actions: {\n            locationSelected: function locationSelected(location) {\n                var _ref = [location.position.lat, location.position.lon, location.type + ': ' + location.address.freeformAddress],\n                    lat = _ref[0],\n                    lng = _ref[1],\n                    alias = _ref[2];\n\n\n                if (lat && lng) {\n                    this.setGarageLocation({ lat: lat, lng: lng, alias: alias });\n                }\n            },\n            mapZoomed: function mapZoomed(e) {\n                this.set('viewData.map.zoom', e.target.getZoom());\n            },\n            mapClicked: function mapClicked(e) {\n                this.setGarageLocation(e.latlng);\n            },\n            mapLoaded: function mapLoaded(e) {\n                this.set('mapRef', e.target);\n\n                this.setMarker(this.get('viewData.vehicle.garage'));\n            },\n            updateAlias: function updateAlias(alias) {\n                this.setGarageAlias(alias);\n            },\n            clearLocation: function clearLocation() {\n                this.clearGarageLocation();\n            }\n        }\n    });\n});","define(\"garage/vehicle/vehicle/garage/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qqspBaaS\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[25,\\\"address-complete\\\",null,[[\\\"value\\\",\\\"selected\\\"],[[20,[\\\"model\\\",\\\"text\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"locationSelected\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"leaflet-map\\\",null,[[\\\"lat\\\",\\\"lng\\\",\\\"zoom\\\",\\\"onClick\\\",\\\"onZoomend\\\",\\\"onLoad\\\"],[[20,[\\\"model\\\",\\\"map\\\",\\\"lat\\\"]],[20,[\\\"model\\\",\\\"map\\\",\\\"lng\\\"]],[20,[\\\"model\\\",\\\"map\\\",\\\"zoom\\\"]],\\\"mapClicked\\\",\\\"mapZoomed\\\",\\\"mapLoaded\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[25,\\\"tile-layer\\\",null,[[\\\"url\\\"],[\\\"http://{s}.tile.osm.org/{z}/{x}/{y}.png\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"markerLocation\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[25,\\\"marker-layer\\\",null,[[\\\"location\\\"],[[20,[\\\"model\\\",\\\"markerLocation\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-row\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"form-group col-md-1\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[10,\\\"disabled\\\",[25,\\\"not\\\",[[20,[\\\"model\\\",\\\"markerLocation\\\"]]],null],null],[3,\\\"action\\\",[[19,0,[]],\\\"clearLocation\\\"]],[7],[0,\\\"X\\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"form-group col-md-3\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"input\\\"],[9,\\\"type\\\",\\\"text\\\"],[9,\\\"class\\\",\\\"form-control\\\"],[9,\\\"placeholder\\\",\\\"lat\\\"],[9,\\\"readonly\\\",\\\"\\\"],[10,\\\"value\\\",[26,[[20,[\\\"model\\\",\\\"viewLat\\\"]]]]],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"form-group col-md-3\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"input\\\"],[9,\\\"type\\\",\\\"text\\\"],[9,\\\"class\\\",\\\"form-control\\\"],[9,\\\"placeholder\\\",\\\"lng\\\"],[9,\\\"readonly\\\",\\\"\\\"],[10,\\\"value\\\",[26,[[20,[\\\"model\\\",\\\"viewLng\\\"]]]]],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"form-group col-md-5\\\"],[7],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"placeholder\\\",\\\"value\\\",\\\"enter\\\"],[\\\"form-control\\\",\\\"text\\\",[25,\\\"t\\\",[\\\"form.placeholder.alias\\\"],null],[20,[\\\"model\\\",\\\"viewAlias\\\"]],\\\"updateAlias\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/garage/template.hbs\" } });\n});","define('garage/vehicle/vehicle/index/route', ['exports', 'file-saver'], function (exports, _fileSaver) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    exports.default = Ember.Route.extend({\n        viewData: Ember.Object.create({\n            filterText: '',\n            fleets: [],\n            operators: [],\n            filteredOperators: [],\n            selectedOperator: null,\n            vehicle: null,\n            qrCode: null,\n            contracts: [],\n            vehicleContracts: [],\n            labels: [],\n            vehicleLabels: [],\n            dispatchAreas: [],\n            vehicleDispatchAreas: []\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            // Todo: disabled for now\n            // this.set('viewData.fleets', this.get('store').findAll('fleet'));\n            this.set('viewData.qrCode', null);\n            this.set('viewData.vehicle', this.modelFor('vehicle.vehicle').vehicle);\n\n            // load contracts first and operators and set to viewData\n            this.get('store').findRecord('optionSet', 'vehicle-contracts').then(function (optionSet) {\n                // map optionsSet to select options and modify names\n                var uiContracts = optionSet.get('options').map(function (c) {\n                    return { key: c.key, name: c.value + ' (' + c.key + ')' };\n                });\n                _this.set('viewData.contracts', uiContracts);\n            });\n\n            this.get('store').findAll('operator').then(function (result) {\n                _this.set('viewData.operators', result);\n                _this.set('viewData.filteredOperators', _this.get('viewData.operators').filter(Boolean));\n                _this.set('viewData.selectedOperator', result.find(function (i) {\n                    return _this.get('viewData.vehicle.operator') === +i.get('id');\n                }));\n            });\n\n            this.get('store').findRecord('optionSet', 'vehicle-labels').then(function (optionSet) {\n                // map optionsSet to select options and modify names\n                var uiLabels = optionSet.get('options').map(function (c) {\n                    return { key: c.key, name: c.value + ' (' + c.key + ')' };\n                });\n                _this.set('viewData.labels', uiLabels);\n            });\n\n            this.get('store').findRecord('optionSet', 'vehicle-dispatch-areas').then(function (optionSet) {\n                // map optionsSet to select options and modify names\n                var uiAreas = optionSet.get('options').map(function (c) {\n                    return { key: c.key, name: c.value + ' (' + c.key + ')' };\n                });\n                _this.set('viewData.dispatchAreas', uiAreas);\n            });\n\n            return this.get('viewData');\n        },\n\n\n        actions: {\n            selectOperator: function selectOperator(dropdown, operator) {\n                dropdown.actions.close();\n\n                this.set('viewData.selectedOperator', operator);\n\n                this.set('viewData.vehicle.operator', operator ? +operator.get('id') : null);\n            },\n            genQRCode: function genQRCode() {\n                var _this2 = this;\n\n                this.get('viewData.vehicle').genQRCode().then(function (response) {\n                    _this2.set('viewData.qrCode', response);\n                    _fileSaver.saveAs(_this2.get('viewData.qrCode.data'), _this2.get('viewData.qrCode.name'));\n                });\n            },\n            saveQRCode: function saveQRCode() {\n                _fileSaver.saveAs(this.get('viewData.qrCode.data'), this.get('viewData.qrCode.name'));\n            },\n            onContractSelect: function onContractSelect(value) {\n                if (!this.get('viewData.vehicle.contract')) {\n                    this.get('viewData.vehicle').set('contract', []);\n                }\n\n                if (!this.get('viewData.vehicle.contract').find(function (i) {\n                    return i === value;\n                })) {\n                    this.get('viewData.vehicle').set('contract', [].concat(_toConsumableArray(this.get('viewData.vehicle.contract')), [value]));\n                }\n            },\n            onContractRemove: function onContractRemove(value) {\n                var removeValue = value.key || value;\n                this.get('viewData.vehicle').set('contract', this.get('viewData.vehicle.contract').filter(function (i) {\n                    return i !== removeValue;\n                }));\n            },\n            onContractClear: function onContractClear() {\n                this.get('viewData.vehicle').set('contract', []);\n            },\n            onLabelSelect: function onLabelSelect(value) {\n                if (!this.get('viewData.vehicle.labels')) {\n                    this.get('viewData.vehicle').set('labels', []);\n                }\n\n                if (!this.get('viewData.vehicle.labels').find(function (i) {\n                    return i === value;\n                })) {\n                    this.get('viewData.vehicle').set('labels', [].concat(_toConsumableArray(this.get('viewData.vehicle.labels')), [value]));\n                }\n            },\n            onLabelRemove: function onLabelRemove(value) {\n                var removeValue = value.key || value;\n                this.get('viewData.vehicle').set('labels', this.get('viewData.vehicle.labels').filter(function (i) {\n                    return i !== removeValue;\n                }));\n            },\n            onLabelClear: function onLabelClear() {\n                this.get('viewData.vehicle').set('labels', []);\n            },\n\n\n            // dispatch area selects\n            onAreaSelect: function onAreaSelect(value) {\n                if (!this.get('viewData.vehicle.dispatchArea')) {\n                    this.get('viewData.vehicle').set('dispatchArea', []);\n                }\n\n                if (!this.get('viewData.vehicle.dispatchArea').find(function (i) {\n                    return i === value;\n                })) {\n                    this.get('viewData.vehicle').set('dispatchArea', [].concat(_toConsumableArray(this.get('viewData.vehicle.dispatchArea')), [value]));\n                }\n            },\n            onAreaRemove: function onAreaRemove(value) {\n                var removeValue = value.key || value;\n                this.get('viewData.vehicle').set('dispatchArea', this.get('viewData.vehicle.dispatchArea').filter(function (i) {\n                    return i !== removeValue;\n                }));\n            },\n            onAreaClear: function onAreaClear() {\n                this.get('viewData.vehicle').set('dispatchArea', []);\n            }\n        },\n\n        vehicleContractObserver: Ember.observer('viewData.vehicle.contract', 'viewData.contracts', function () {\n            var contracts = this.get('viewData.contracts') || [];\n            var vehicleContracts = this.get('viewData.vehicle.contract') || [];\n            var contractObjects = vehicleContracts.map(function (vc) {\n                return contracts.find(function (c) {\n                    return c.key === vc;\n                }) || vc;\n            });\n\n            this.set('viewData.vehicleContracts', contractObjects);\n        }),\n\n        vehicleLabelsObserver: Ember.observer('viewData.vehicle.labels', 'viewData.labels', function () {\n            var labels = this.get('viewData.labels') || [];\n            var vehicleLabels = this.get('viewData.vehicle.labels') || [];\n            var labelObjects = vehicleLabels.map(function (vc) {\n                return labels.find(function (c) {\n                    return c.key === vc;\n                }) || vc;\n            });\n\n            this.set('viewData.vehicleLabels', labelObjects);\n        }),\n\n        vehicleDispatchAreaObserver: Ember.observer('viewData.vehicle.dispatchArea', 'viewData.dispatchAreas', function () {\n            var areas = this.get('viewData.dispatchAreas') || [];\n            var vehicleAreas = this.get('viewData.vehicle.dispatchArea') || [];\n            var areaObjects = vehicleAreas.map(function (vc) {\n                return areas.find(function (c) {\n                    return c.key === vc;\n                }) || vc;\n            });\n            this.set('viewData.vehicleDispatchAreas', areaObjects);\n        }),\n\n        filterObserver: Ember.observer('viewData.filterText', function () {\n            var _this3 = this;\n\n            var filter = this.get('viewData.filterText').toLowerCase();\n\n            this.set('viewData.filteredOperators', this.get('viewData.operators').filter(function (i) {\n                return _this3._filterOperator(i, filter);\n            }));\n        }),\n\n        _filterOperator: function _filterOperator(operator, filter) {\n            return ('' + operator.get('companyName')).toLowerCase().includes(filter) || ('' + operator.get('companyAddress')).toLowerCase().includes(filter) || ('' + operator.get('userEmail')).toLowerCase().includes(filter) || ('' + operator.get('contactName')).toLowerCase().includes(filter) || ('' + operator.get('contactPhone')).toLowerCase().includes(filter) || ('' + operator.get('contactEmail')).toLowerCase().includes(filter) || ('' + operator.get('businessId')).toLowerCase().includes(filter);\n        }\n    });\n});","define(\"garage/vehicle/vehicle/index/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sUukScGO\", \"block\": \"{\\\"symbols\\\":[\\\"dd\\\",\\\"operator\\\",\\\"error\\\"],\\\"statements\\\":[[6,\\\"form\\\"],[9,\\\"class\\\",\\\"needs-validation\\\"],[9,\\\"novalidate\\\",\\\"\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"form-control\\\",null,null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"required\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Name\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n            \\\"],[4,\\\"if\\\",[[19,3,[]]],null,{\\\"statements\\\":[[6,\\\"p\\\"],[9,\\\"class\\\",\\\"error\\\"],[7],[1,[25,\\\"t\\\",[[25,\\\"concat\\\",[\\\"form.errors.\\\",[19,3,[]]],null]],null],false],[8]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"required\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"name\\\"]],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"required\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.CallId\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"disabled\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"number\\\"]],\\\"\\\",[25,\\\"eq\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"isUnsaved\\\"]],false],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ExternalId\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"externalId\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.BrandModel\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"brandModel\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.PaymentTerminalId\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"paymentTerminalId\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-fix-dropdown\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"operatorSelect\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Operator\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"verticalPosition\\\",\\\"renderInPlace\\\",\\\"matchTriggerWidth\\\"],[\\\"below\\\",true,true]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"dropdown\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,1,[\\\"trigger\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"readonly\\\"],[[25,\\\"if\\\",[[20,[\\\"model\\\",\\\"selectedOperator\\\"]],[20,[\\\"model\\\",\\\"selectedOperator\\\",\\\"companyName\\\"]],\\\"\\\"],null],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[19,1,[\\\"content\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-content vinka-flex-column\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-head\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"autocomplete\\\"],[[20,[\\\"model\\\",\\\"filterText\\\"]],[25,\\\"t\\\",[\\\"form.placeholder.filter\\\"],null],\\\"off\\\"]]],false],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"vinka-flex-column-body\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"table\\\"],[9,\\\"class\\\",\\\"table table-sm\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectOperator\\\",[19,1,[]],null]],[7],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"td\\\"],[7],[0,\\\"--no operator--\\\"],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"model\\\",\\\"filteredOperators\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"tr\\\"],[9,\\\"class\\\",\\\"vinka-dropdown-row\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"selectOperator\\\",[19,1,[]],[19,2,[]]]],[7],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[19,2,[\\\"id\\\"]],false],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[7],[1,[19,2,[\\\"companyName\\\"]],false],[8],[0,\\\"\\\\n                                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.LicenceNumber\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"licenceNumber\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Phone\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"phoneNumber\\\"]],\\\"\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Contract\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"x-select\\\",null,[[\\\"placeholder\\\",\\\"freeText\\\",\\\"model\\\",\\\"labelKey\\\",\\\"valueKey\\\",\\\"values\\\",\\\"onSelect\\\",\\\"onRemove\\\",\\\"onClear\\\"],[\\\"\\\",false,[20,[\\\"model\\\",\\\"contracts\\\"]],\\\"name\\\",\\\"key\\\",[20,[\\\"model\\\",\\\"vehicleContracts\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onContractSelect\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onContractRemove\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onContractClear\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.Labels\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"x-select\\\",null,[[\\\"placeholder\\\",\\\"freeText\\\",\\\"model\\\",\\\"labelKey\\\",\\\"valueKey\\\",\\\"values\\\",\\\"onSelect\\\",\\\"onRemove\\\",\\\"onClear\\\"],[\\\"\\\",false,[20,[\\\"model\\\",\\\"labels\\\"]],\\\"name\\\",\\\"key\\\",[20,[\\\"model\\\",\\\"vehicleLabels\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onLabelSelect\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onLabelRemove\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onLabelClear\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.AdditionalInfo\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n            \\\"],[1,[25,\\\"textarea\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"maxlength\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"additionalInfo\\\"]],\\\"\\\",500]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[25,\\\"text-counter\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"additionalInfo\\\"]],500],null],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.DispatchParameters\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"row\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col col-lg-12\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.DispatchArea\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"x-select\\\",null,[[\\\"placeholder\\\",\\\"freeText\\\",\\\"model\\\",\\\"labelKey\\\",\\\"valueKey\\\",\\\"values\\\",\\\"onSelect\\\",\\\"onRemove\\\",\\\"onClear\\\"],[\\\"\\\",false,[20,[\\\"model\\\",\\\"dispatchAreas\\\"]],\\\"name\\\",\\\"key\\\",[20,[\\\"model\\\",\\\"vehicleDispatchAreas\\\"]],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onAreaSelect\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onAreaRemove\\\"],null],[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"onAreaClear\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"dispatchAreaHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.DispatchArea\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputDispatchPriority\\\"],[9,\\\"class\\\",\\\"col-sm-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.DispatchPriority\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"id\\\",\\\"aria-describedby\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"dispatchPriority\\\"]],\\\"\\\",\\\"inputDispatchPriority\\\",\\\"dispatchPriorityHelpBlock\\\"]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"dispatchPriorityHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.DispatchPriority\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputPrice\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.PriceFactor\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"min\\\",\\\"max\\\",\\\"step\\\",\\\"value\\\",\\\"id\\\",\\\"aria-describedby\\\",\\\"class\\\"],[\\\"number\\\",0,1,\\\"0.1\\\",[20,[\\\"model\\\",\\\"vehicle\\\",\\\"priceFactor\\\"]],\\\"inputPrice\\\",\\\"priceFactorHelpBlock\\\",\\\"short\\\"]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"priceFactorHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.PriceFactor\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputEmission\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.EmissionFactor\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"min\\\",\\\"step\\\",\\\"value\\\",\\\"id\\\",\\\"aria-describedby\\\",\\\"class\\\"],[\\\"number\\\",0,\\\"0.01\\\",[20,[\\\"model\\\",\\\"vehicle\\\",\\\"emissionFactor\\\"]],\\\"inputEmission\\\",\\\"emissionFactorHelpBlock\\\",\\\"short\\\"]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"emissionFactorHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.EmissionFactor\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputCO2\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.CO2\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"min\\\",\\\"step\\\",\\\"value\\\",\\\"id\\\",\\\"aria-describedby\\\",\\\"class\\\"],[\\\"number\\\",0,\\\"0.01\\\",[20,[\\\"model\\\",\\\"vehicle\\\",\\\"co2\\\"]],\\\"inputCO2\\\",\\\"co2HelpBlock\\\",\\\"short\\\"]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"co2HelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.CO2\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"inputService\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ServiceFactor\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"min\\\",\\\"step\\\",\\\"value\\\",\\\"id\\\",\\\"aria-describedby\\\",\\\"class\\\"],[\\\"number\\\",0,\\\"0.01\\\",[20,[\\\"model\\\",\\\"vehicle\\\",\\\"serviceFactor\\\"]],\\\"inputService\\\",\\\"serviceFactorHelpBlock\\\",\\\"short\\\"]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"serviceFactorHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.ServiceFactor\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"useShift\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.UseShift\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"useShift\\\",[20,[\\\"model\\\",\\\"vehicle\\\",\\\"useShift\\\"]]]]],false],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"useShiftHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.UseShift\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"col-2 col-form-label text-right\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.SetInactive\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"col\\\"],[7],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"custom-input-container\\\"],[7],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"custom-control custom-switch\\\"],[7],[0,\\\"\\\\n                                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"id\\\",\\\"class\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"inactive\\\",\\\"inactiveSwitch\\\",\\\"custom-control-input\\\",[20,[\\\"model\\\",\\\"vehicle\\\",\\\"inactive\\\"]]]]],false],[0,\\\"\\\\n                                    \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"custom-control-label\\\"],[9,\\\"for\\\",\\\"inactiveSwitch\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.SetInactiveLabel\\\"],null],false],[8],[0,\\\"\\\\n                                \\\"],[8],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"small\\\"],[9,\\\"id\\\",\\\"useShiftHelpBlock\\\"],[9,\\\"class\\\",\\\"form-text text-muted\\\"],[7],[0,\\\"\\\\n                                \\\"],[1,[25,\\\"t\\\",[\\\"form.help.SetInactive\\\"],null],false],[0,\\\"\\\\n                            \\\"],[8],[0,\\\"\\\\n                        \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\\n                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"form-group row\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"qrCode\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"img\\\"],[10,\\\"src\\\",[26,[[20,[\\\"model\\\",\\\"qrCode\\\",\\\"data\\\"]]]]],[10,\\\"alt\\\",[26,[[20,[\\\"model\\\",\\\"qrCode\\\",\\\"name\\\"]]]]],[3,\\\"action\\\",[[19,0,[]],\\\"saveQRCode\\\"]],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-outline-primary btn-sm\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"genQRCode\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.GenQRCode\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/index/template.hbs\" } });\n});","define('garage/vehicle/vehicle/route', ['exports', 'garage/helpers/api-error-handler'], function (exports, _apiErrorHandler) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var NEW_PREFIX = 'new';\n\n    exports.default = Ember.Route.extend({\n\n        modalMessage: Ember.inject.service(),\n        i18n: Ember.inject.service(),\n        viewData: Ember.Object.create({\n            vehicle: null,\n            showSaveButtons: true\n        }),\n\n        model: function model(_ref) {\n            var _this = this;\n\n            var id = _ref.id;\n\n\n            if (id.startsWith(NEW_PREFIX)) {\n                // new unsaved\n                var allVehicles = this.get('store').peekAll('vehicle');\n                var newItem = allVehicles.find(function (v) {\n                    return v.get('id') === id;\n                });\n                if (!newItem) {\n                    // Handle invalid ID.\n                    this.transitionTo('vehicle.index');\n                }\n                this.set('viewData.vehicle', newItem);\n                this.modelFor('vehicle').set('selected', newItem);\n                return this.get('viewData');\n            } else {\n                // existing saved record\n                return this.get('store').findRecord('vehicle', id).then(function (v) {\n                    _this.set('viewData.vehicle', v);\n                    _this.modelFor('vehicle').set('selected', v);\n                    return _this.get('viewData');\n                }).catch(function () {\n                    // Handle invalid ID.\n                    _this.transitionTo('vehicle.index');\n                });\n            }\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // solution to manage showing save buttons\n                // Showing save buttons by default when current or sub route changes. Enables shift sub-route to hide buttons by sending event.\n                // If sub route would override didTransition it should either manage button showing by events or\n                // bubble this didTransition by returning true.\n                this.set('viewData.showSaveButtons', true);\n            },\n            hideSaveButtons: function hideSaveButtons() {\n                this.set('viewData.showSaveButtons', false);\n            },\n            save: function save() {\n                var _this2 = this;\n\n                this.get('modalMessage').show(this.get('i18n').t('message.title.saving'), this.get('i18n').t('message.text.wait'));\n\n                var vehicle = this.get('viewData.vehicle');\n                var originalId = vehicle.get('id');\n                if (originalId.startsWith(NEW_PREFIX)) {\n                    vehicle.set('id', null);\n                }\n                vehicle.save().then(function (result) {\n                    _this2.get('modalMessage').remove();\n                    if (originalId.startsWith(NEW_PREFIX)) {\n                        // change route to match created id in url\n                        _this2.transitionTo('vehicle.vehicle.index', result.get('id'));\n                    }\n                    _this2.send('vehicleSaved', result.get('id'));\n                }, function (err) {\n                    // failed\n                    if (originalId.startsWith(NEW_PREFIX)) {\n                        vehicle.set('id', originalId);\n                    }\n                    _this2.get('modalMessage').remove();\n                    var title = _this2.get('i18n').t('message.title.failure');\n                    var text = _this2.get('i18n').t('message.text.vehicle.save.failure');\n                    text = (0, _apiErrorHandler.formatApiError)(err, _this2.get('i18n'), 'vehicle');\n                    _this2.get('modalMessage').showDialog(title, text);\n                });\n            },\n            revert: function revert() {\n                var _this3 = this;\n\n                var title = this.get('i18n').t('dialog.revert.title');\n                var text = this.get('i18n').t('dialog.revert.text');\n                this.get('modalMessage').confirm(title, text, function () {\n                    _this3.get('viewData.vehicle').rollbackAttributes();\n                });\n            }\n        }\n    });\n});","define('garage/vehicle/vehicle/shift/route', ['exports', 'garage/helpers/api-error-handler', 'moment'], function (exports, _apiErrorHandler, _moment) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n\n        i18n: Ember.inject.service(),\n        modalMessage: Ember.inject.service(),\n        store: Ember.inject.service(),\n\n        viewData: Ember.Object.create({\n            vehicle: null,\n            allvehicles: [],\n            shiftTemplates: [],\n            shiftColumns: Ember.A([{ name: 'startDay', localize: true, sortAs: 'day', defaultSort: 0 }, { name: 'startTimeClock', sortAs: 'time', defaultSort: 1 }, { name: 'endDay', localize: true, sortAs: 'day' }, { name: 'endTimeClock', sortAs: 'time' }, { name: 'startTimeDate', sortAs: 'date' }, { name: 'endTimeDate', sortAs: 'date' }]),\n            days: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],\n            selectedShift: null,\n            editingShift: false,\n            shiftToEdit: null,\n            editingExisting: true,\n            copyToVehicle: '',\n            selectedCopyDay: null\n        }),\n\n        model: function model() {\n            var _this = this;\n\n            this.set('viewData.selectedShift', null);\n            this.set('viewData.vehicle', this.modelFor('vehicle.vehicle').vehicle);\n            this.set('viewData.shiftTemplates', []);\n\n            return this._loadShiftTemplates(this.get('viewData.vehicle')).then(function () {\n                _this.set('viewData.editingShift', false);\n                // get vehicles and convert to vinka-dropdown form\n                return _this.get('store').findAll('vehicle').then(function (result) {\n                    var vehicles = result.sortBy('number').map(function (item) {\n                        return '' + item.get('number');\n                    });\n                    _this.set('viewData.allVehicles', vehicles);\n                    return _this.get('viewData');\n                });\n            });\n        },\n        _getTranslatedDays: function _getTranslatedDays() {\n            return [{ id: 'Monday', name: this.get('i18n').t('weekday.Monday') }, { id: 'Tuesday', name: this.get('i18n').t('weekday.Tuesday') }, { id: 'Wednesday', name: this.get('i18n').t('weekday.Wednesday') }, { id: 'Thursday', name: this.get('i18n').t('weekday.Thursday') }, { id: 'Friday', name: this.get('i18n').t('weekday.Friday') }, { id: 'Saturday', name: this.get('i18n').t('weekday.Saturday') }, { id: 'Sunday', name: this.get('i18n').t('weekday.Sunday') }];\n        },\n        _loadShiftTemplates: function _loadShiftTemplates(vehicle) {\n            var _this2 = this;\n\n            if (vehicle) {\n                return this.get('store').query('shift-template', { adapterOptions: { vehicleId: vehicle.get('id') } }).then(function (ret) {\n                    _this2.set('viewData.shiftTemplates', ret);\n                });\n            } else {\n                return Promise.resolve();\n            }\n        },\n\n\n        /**\n         * Reload the vehicle data after API call has changed it.\n         */\n        refresh: function refresh() {\n            // load shift templates again\n            this._loadShiftTemplates(this.get('viewData.vehicle'));\n        },\n\n\n        /**\n         * Return combined start/end date and time values\n         * @returns object {startTime: null, endTime: null}\n         */\n        getEditStartEndTime: function getEditStartEndTime() {\n            var shift = this.get('viewData.shiftToEdit');\n            var from = shift.get('from');\n            var to = shift.get('to');\n            var ret = {\n                startTime: null,\n                endTime: null\n            };\n\n            if (from) {\n                var time = shift.get('startTime');\n                ret.startTime = this.mergeTime(from, time);\n            }\n            if (to) {\n                var _time = shift.get('endTime');\n                ret.endTime = this.mergeTime(to, _time);\n            }\n            return ret;\n        },\n        mergeTime: function mergeTime(date, time) {\n            var newDate = new Date(date);\n            var comp = time ? time.split(':') : [];\n            if (comp.length !== 2) {\n                return newDate;\n            }\n            newDate.setHours(comp[0]);\n            newDate.setMinutes(comp[1]);\n            return newDate;\n        },\n        copyShiftToVehicle: function copyShiftToVehicle(shift, vehicleId) {\n            var _this3 = this;\n\n            var data = this.copyShift(shift);\n            data.vehicle = vehicleId;\n            this.get('store').createRecord('shift-template', data).save({ adapterOptions: { vehicleId: vehicleId } }).then(function () {\n                // saved\n            }).catch(function (e) {\n                var title = _this3.get('i18n').t('message.title.failure');\n                var text = (0, _apiErrorHandler.formatApiError)(e, _this3.get('i18n'), 'shiftTpl');\n                _this3.get('modalMessage').showDialog(title, text);\n            });\n        },\n\n\n        /**\n         * Copy shift to another day for the same vehicle. Copies only shift containing one day.\n         * @param {*} shift\n         * @param {*} day\n         * @returns null if everything went fine. Failure text otherwise.\n         */\n        copyShiftForDay: function copyShiftForDay(shift, day) {\n            var _this4 = this;\n\n            var data = this.copyShift(shift);\n            data.startDay = day;\n            data.endDay = day;\n            return this.get('store').createRecord('shift-template', data).save({ adapterOptions: { vehicleId: shift.get('vehicle') } }).then(function () {\n                return null;\n            }).catch(function (e) {\n                var text = (0, _apiErrorHandler.formatApiError)(e, _this4.get('i18n'), 'shiftTpl');\n                return text;\n            });\n        },\n        copyShift: function copyShift(shift) {\n            return {\n                startDay: shift.get('startDay'),\n                startTime: shift.get('startTime'),\n                startClock: shift.get('startClock'),\n                endDay: shift.get('endDay'),\n                endTime: shift.get('endTime'),\n                endClock: shift.get('endClock'),\n                vehicle: shift.get('vehicle')\n            };\n        },\n\n\n        actions: {\n            didTransition: function didTransition() {\n                // send event to hide save buttons as those are not needed in this view\n                this.send('hideSaveButtons');\n            },\n            selectShift: function selectShift(shift) {\n                this.set('viewData.selectedShift', shift);\n            },\n            removeSelectedShift: function removeSelectedShift() {\n                var _this5 = this;\n\n                var shift = this.get('viewData.selectedShift');\n                shift.destroyRecord({ adapterOptions: { vehicleId: this.get('viewData.vehicle.id') } }).then(function () {\n                    _this5.refresh();\n                });\n            },\n            copyShift: function copyShift() {\n                this.set('viewData.copyToVehicle', '');\n                Ember.$('#copyShift').modal('show');\n            },\n            copyShiftForDay: function copyShiftForDay() {\n                this.set('viewData.selectedCopyDay', null);\n                Ember.$('#copyShiftForDay').modal('show');\n            },\n            copyDaySelected: function copyDaySelected(dayName) {\n                this.set('viewData.selectedCopyDay', dayName);\n            },\n            copyVehicleSelected: function copyVehicleSelected(veh) {\n                this.set('viewData.copyToVehicle', veh);\n            },\n            doCopyShiftForDay: function doCopyShiftForDay() {\n                var _this6 = this;\n\n                Ember.$('#copyShiftForDay').modal('hide');\n\n                var shift = this.get('viewData.selectedShift');\n                if (shift) {\n                    if (shift.get('startDay') === shift.get('endDay')) {\n                        this.copyShiftForDay(shift, this.get('viewData.selectedCopyDay')).then(function (error) {\n                            if (error !== null) {\n                                // error\n                                var title = _this6.get('i18n').t('message.title.failure');\n                                _this6.get('modalMessage').showDialog(title, error);\n                            } else {\n                                _this6.refresh();\n                            }\n                        });\n                    } else {\n                        // we do not accept over night shift copying (due to simplicity for now)\n                        var title = this.get('i18n').t('message.title.failure');\n                        var error = this.get('i18n').t('messages.shiftTpl.overNightShiftCopyError');\n                        this.get('modalMessage').showDialog(title, error);\n                    }\n                }\n            },\n            doCopyShift: function doCopyShift() {\n                Ember.$('#copyShift').modal('hide');\n                var shift = this.get('viewData.selectedShift');\n                var vehicleId = this.get('viewData.copyToVehicle');\n                if (shift && vehicleId) {\n                    this.copyShiftToVehicle(shift, vehicleId);\n                }\n            },\n            editSelectedShift: function editSelectedShift() {\n                var shift = this.get('viewData.selectedShift');\n                this.set('viewData.shiftToEdit', Ember.Object.create({\n                    startDay: shift.get('startDay'),\n                    startTime: shift.get('startTimePicker'),\n                    endDay: shift.get('endDay'),\n                    endTime: shift.get('endTimePicker'),\n                    from: shift.get('startTime'),\n                    to: shift.get('endTime'),\n                    vehicle: this.get('viewData.vehicle.id')\n                }));\n\n                this.set('viewData.editingShift', true);\n                this.set('viewData.editingExisting', shift);\n            },\n            addShift: function addShift() {\n                var _this7 = this;\n\n                if (this.get('viewData.editingShift')) {\n                    var times = this.getEditStartEndTime(); // get combined start time and date values\n                    var shift = this.get('viewData.shiftToEdit');\n                    var data = {\n                        startDay: shift.get('startDay'),\n                        startTime: times.startTime,\n                        startClock: times.startTime ? (0, _moment.default)(times.startTime).format('HH:mm') : null,\n                        endDay: shift.get('endDay'),\n                        endTime: times.endTime,\n                        endClock: times.endTime ? (0, _moment.default)(times.endTime).format('HH:mm') : null,\n                        vehicle: this.get('viewData.vehicle.id')\n                    };\n                    this.get('store').createRecord('shift-template', data).save({ adapterOptions: { vehicleId: this.get('viewData.vehicle.id') } }).then(function () {\n                        _this7.set('viewData.editingShift', false);\n                        _this7.refresh();\n                    }).catch(function (e) {\n                        var title = _this7.get('i18n').t('message.title.failure');\n                        var text = _this7.get('i18n').t('message.text.shift.new.failure');\n                        text = (0, _apiErrorHandler.formatApiError)(e, _this7.get('i18n'), 'shiftTpl');\n                        _this7.get('modalMessage').showDialog(title, text);\n                    });\n                } else {\n                    this.set('viewData.shiftToEdit', Ember.Object.create({\n                        startDay: null, startTime: null, endDay: null, endTime: null,\n                        to: null, from: null, vehicle: this.get('viewData.vehicle.id') }));\n\n                    this.set('viewData.editingShift', true);\n                    this.set('viewData.editingExisting', null);\n                }\n            },\n            cancelAdding: function cancelAdding() {\n                if (this.get('viewData.selectedShift.hasDirtyAttributes')) {\n                    this.get('viewData.selectedShift').rollbackAttributes();\n                }\n                this.set('viewData.editingShift', false);\n                this.set('viewData.editingExisting', null);\n            },\n            changeStartDay: function changeStartDay(day) {\n                this.set('viewData.shiftToEdit.startDay', day);\n            },\n            changeEndDay: function changeEndDay(day) {\n                this.set('viewData.shiftToEdit.endDay', day);\n            },\n            saveShift: function saveShift() {\n                var _this8 = this;\n\n                var shift = this.get('viewData.editingExisting');\n                shift.setProperties({\n                    startDay: this.get('viewData.shiftToEdit.startDay'),\n                    endDay: this.get('viewData.shiftToEdit.endDay')\n                });\n                try {\n                    // Todo: should add time picker to get constant format\n                    shift.setStartTime(this.get('viewData.shiftToEdit.from'), this.get('viewData.shiftToEdit.startTime'));\n                    shift.setEndTime(this.get('viewData.shiftToEdit.to'), this.get('viewData.shiftToEdit.endTime'));\n                    shift.save({ adapterOptions: { vehicleId: this.get('viewData.vehicle.id') } }).then(function () {\n                        _this8.set('viewData.editingShift', false);\n                        _this8.set('viewData.editingExisting', null);\n                        _this8.refresh();\n                    }).catch(function (err) {\n                        var title = _this8.get('i18n').t('message.title.failure');\n                        var text = _this8.get('i18n').t('message.text.shift.new.failure');\n                        text = (0, _apiErrorHandler.formatApiError)(err, _this8.get('i18n'), 'shiftTpl');\n                        _this8.get('modalMessage').showDialog(title, text);\n                    });\n                } catch (e) {\n                    console.log('error', e);\n                }\n            }\n        }\n    });\n});","define(\"garage/vehicle/vehicle/shift/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jG1rZrot\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"shift-page\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"useShift\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"alert alert-warning\\\"],[9,\\\"style\\\",\\\"padding: 0.50rem 1.25rem\\\"],[9,\\\"role\\\",\\\"alert\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.shiftTpl.vehicleHasNoUseShift\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"shift-table\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"editingShift\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"form\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group half left\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.shift.columns.startDay\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"vinka-dropdown\\\",null,[[\\\"options\\\",\\\"current\\\",\\\"style\\\",\\\"onSelect\\\"],[[20,[\\\"model\\\",\\\"days\\\"]],[20,[\\\"model\\\",\\\"shiftToEdit\\\",\\\"startDay\\\"]],\\\"small\\\",[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"changeStartDay\\\"],null]]]],false],[0,\\\"\\\\n\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group half right\\\"],[7],[0,\\\"\\\\n\\\"],[0,\\\"                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.shift.columns.startTime\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\"],[\\\"time\\\",[20,[\\\"model\\\",\\\"shiftToEdit\\\",\\\"startTime\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n                \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group half left\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.shift.columns.endDay\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"vinka-dropdown\\\",null,[[\\\"options\\\",\\\"current\\\",\\\"style\\\",\\\"onSelect\\\"],[[20,[\\\"model\\\",\\\"days\\\"]],[20,[\\\"model\\\",\\\"shiftToEdit\\\",\\\"endDay\\\"]],\\\"small\\\",[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"changeEndDay\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group half right\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.shift.columns.endTime\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\"],[\\\"time\\\",[20,[\\\"model\\\",\\\"shiftToEdit\\\",\\\"endTime\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n                \\\"],[6,\\\"div\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.label.ShiftTemplateInterval\\\"],null],false],[8],[8],[0,\\\"\\\\n\\\\n                \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group half left\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.shift.columns.from\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"bootstrap-datepicker\\\",null,[[\\\"value\\\",\\\"format\\\",\\\"weekStart\\\",\\\"autoclose\\\"],[[20,[\\\"model\\\",\\\"shiftToEdit\\\",\\\"from\\\"]],\\\"yyyy-mm-dd\\\",1,true]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"fieldset\\\"],[9,\\\"class\\\",\\\"form-group half right\\\"],[7],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"table.shift.columns.to\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"bootstrap-datepicker\\\",null,[[\\\"value\\\",\\\"format\\\",\\\"weekStart\\\",\\\"autoclose\\\"],[[20,[\\\"model\\\",\\\"shiftToEdit\\\",\\\"to\\\"]],\\\"yyyy-mm-dd\\\",1,true]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"editingExisting\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-primary btn-sm pull-left\\\"],[9,\\\"type\\\",\\\"button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveShift\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Save\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-primary btn-sm pull-left\\\"],[9,\\\"type\\\",\\\"button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"addShift\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Add\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary btn-sm pull-left\\\"],[9,\\\"type\\\",\\\"button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"cancelAdding\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Cancel\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n            \\\"],[6,\\\"br\\\"],[7],[8],[0,\\\"\\\\n            \\\"],[6,\\\"br\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[2,\\\" template table \\\"],[0,\\\"\\\\n            \\\"],[1,[25,\\\"vinka-table\\\",null,[[\\\"name\\\",\\\"data\\\",\\\"columns\\\",\\\"selectable\\\",\\\"onTableClick\\\"],[\\\"table.shift.columns\\\",[20,[\\\"model\\\",\\\"shiftTemplates\\\"]],[20,[\\\"model\\\",\\\"shiftColumns\\\"]],true,[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"selectShift\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Add\\\",true],[[\\\"onClick\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"addShift\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Edit\\\",[25,\\\"not-eq\\\",[[20,[\\\"model\\\",\\\"selectedShift\\\"]],null],null]],[[\\\"onClick\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"editSelectedShift\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Remove\\\",[25,\\\"not-eq\\\",[[20,[\\\"model\\\",\\\"selectedShift\\\"]],null],null]],[[\\\"onClick\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"removeSelectedShift\\\"],null]]]],false],[0,\\\"\\\\n\\\\n            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Copy\\\",[25,\\\"not-eq\\\",[[20,[\\\"model\\\",\\\"selectedShift\\\"]],null],null]],[[\\\"onClick\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"copyShiftForDay\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[25,\\\"vinka-button\\\",[\\\"CopyToVehicle\\\",[25,\\\"not-eq\\\",[[20,[\\\"model\\\",\\\"selectedShift\\\"]],null],null]],[[\\\"onClick\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"copyShift\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[2,\\\" modals \\\"],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal fade\\\"],[9,\\\"id\\\",\\\"copyShift\\\"],[9,\\\"tabindex\\\",\\\"-1\\\"],[9,\\\"role\\\",\\\"dialog\\\"],[9,\\\"aria-labelledby\\\",\\\"garageModalLabel\\\"],[9,\\\"aria-hidden\\\",\\\"true\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-dialog\\\"],[9,\\\"role\\\",\\\"document\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-content\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-header\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"h5\\\"],[9,\\\"class\\\",\\\"modal-title\\\"],[9,\\\"id\\\",\\\"garageModalLabel\\\"],[7],[1,[25,\\\"t\\\",[\\\"dialog.shiftCopy.copyTitle\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"close\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[9,\\\"aria-label\\\",\\\"Close\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"span\\\"],[9,\\\"aria-hidden\\\",\\\"true\\\"],[7],[0,\\\"×\\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-body\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"text\\\"],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"vinka-dropdown\\\",null,[[\\\"options\\\",\\\"current\\\",\\\"style\\\",\\\"onSelect\\\"],[[20,[\\\"model\\\",\\\"allVehicles\\\"]],[20,[\\\"model\\\",\\\"copyToVehicle\\\"]],\\\"small\\\",[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"copyVehicleSelected\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-footer\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"doCopyShift\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal fade\\\"],[9,\\\"id\\\",\\\"copyShiftForDay\\\"],[9,\\\"tabindex\\\",\\\"-1\\\"],[9,\\\"role\\\",\\\"dialog\\\"],[9,\\\"aria-labelledby\\\",\\\"garageModalLabel\\\"],[9,\\\"aria-hidden\\\",\\\"true\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-dialog\\\"],[9,\\\"role\\\",\\\"document\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-content\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-header\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"h5\\\"],[9,\\\"class\\\",\\\"modal-title\\\"],[9,\\\"id\\\",\\\"garageModalLabel\\\"],[7],[1,[25,\\\"t\\\",[\\\"dialog.shiftCopy.copyTitle\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"close\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[9,\\\"aria-label\\\",\\\"Close\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"span\\\"],[9,\\\"aria-hidden\\\",\\\"true\\\"],[7],[0,\\\"×\\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-body\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"text\\\"],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"vinka-dropdown\\\",null,[[\\\"options\\\",\\\"current\\\",\\\"style\\\",\\\"onSelect\\\"],[[20,[\\\"model\\\",\\\"days\\\"]],[20,[\\\"model\\\",\\\"selectedCopyDay\\\"]],\\\"small\\\",[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"copyDaySelected\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-footer\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"button\\\"],[9,\\\"class\\\",\\\"btn btn-secondary\\\"],[9,\\\"data-dismiss\\\",\\\"modal\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"doCopyShiftForDay\\\"]],[7],[1,[25,\\\"t\\\",[\\\"button.Copy\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/shift/template.hbs\" } });\n});","define(\"garage/vehicle/vehicle/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"zRl5gZmO\", \"block\": \"{\\\"symbols\\\":[\\\"form\\\"],\\\"statements\\\":[[6,\\\"h1\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"t\\\",[\\\"tab.Vehicles\\\"],null],false],[0,\\\" / \\\"],[1,[20,[\\\"model\\\",\\\"vehicle\\\",\\\"name\\\"]],false],[0,\\\"\\\\n    \\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"inactive\\\"]]],null,{\\\"statements\\\":[[6,\\\"code\\\"],[9,\\\"class\\\",\\\"inactive\\\"],[7],[1,[25,\\\"t\\\",[\\\"form.text.Inactive\\\"],null],false],[8]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"data-form\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"vehicle-menu-tabs\\\",null,[[\\\"model\\\"],[[20,[\\\"model\\\",\\\"vehicle\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"clearfix\\\"],[7],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"validatable-form\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"tab-content \\\",[25,\\\"if\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"inactive\\\"]],\\\"vehicle-inactive\\\"],null]]]],[7],[0,\\\"\\\\n        \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"model\\\",\\\"showSaveButtons\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Save\\\",[25,\\\"and\\\",[[25,\\\"not\\\",[[19,1,[\\\"errors\\\",\\\"length\\\"]]],null],[20,[\\\"model\\\",\\\"vehicle\\\",\\\"hasDirtyAttributes\\\"]]],null]],[[\\\"onClick\\\",\\\"style\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"save\\\"],null],\\\"btn btn-outline-primary pull-right\\\"]]],false],[0,\\\"\\\\n        \\\"],[1,[25,\\\"vinka-button\\\",[\\\"Revert\\\",[25,\\\"and\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"hasDirtyAttributes\\\"]],[25,\\\"not\\\",[[20,[\\\"model\\\",\\\"vehicle\\\",\\\"isUnsaved\\\"]]],null]],null]],[[\\\"onClick\\\",\\\"style\\\"],[[25,\\\"action\\\",[[19,0,[]],[20,[\\\"send\\\"]],\\\"revert\\\"],null],\\\"btn btn-outline-primary pull-right\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"style\\\",\\\"clear: both\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/template.hbs\" } });\n});","define('garage/vehicle/vehicle/terminal/route', ['exports'], function (exports) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        model: function model() {\n            return {\n                vehicle: this.modelFor('vehicle.vehicle').vehicle\n            };\n        }\n    });\n});","define(\"garage/vehicle/vehicle/terminal/template\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"n86iGKtD\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"Terminal page for \\\"],[6,\\\"i\\\"],[7],[1,[20,[\\\"model\\\",\\\"vehicle\\\",\\\"name\\\"]],false],[8],[0,\\\".\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"garage/vehicle/vehicle/terminal/template.hbs\" } });\n});","define('garage/vehicletype/model', ['exports', 'ember-data'], function (exports, _emberData) {\n    'use strict';\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _emberData.default.Model.extend({\n\n        name: _emberData.default.attr('string'),\n        attributes: _emberData.default.attr(),\n        capacityConfigs: _emberData.default.attr()\n    });\n});","\n","define('garage/config/environment', [], function() {\n  var prefix = 'garage';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(unescape(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","if (!runningTests) {\n  require(\"garage/app\")[\"default\"].create({\"api\":{\"host\":\"http://localhost\",\"port\":9400},\"auth\":{\"host\":\"https://es.tre-test.vinka.cloud\",\"port\":443,\"tokenPath\":\"/auth/token\"},\"geo\":{\"host\":\"https://api.tomtom.com\",\"key\":\"TdwfSP0zslFGxYukLTR5dMEOwABAGAEl\",\"countrySet\":\"FI\"},\"auth0\":{\"allowSignUp\":false},\"ui\":{\"showShiftTab\":true,\"showOperatorPage\":true,\"languages\":[\"fi\",\"sv\",\"de\",\"en\"],\"disableOperatorInfos\":false,\"showExtraRouteReportColumns\":true},\"capacity\":{\"ignore\":[1000,1001]},\"import\":{\"enabled\":true,\"encoding\":\"UTF-8\",\"capacityMappings\":{\"attributeMap\":{\"8\":1619,\"C\":1690,\"E\":1618,\"F\":1601,\"H\":1618,\"I\":1615,\"J\":1612,\"K\":1504,\"N\":1621,\"P\":1613,\"R\":1616,\"T\":1632,\"V\":1614,\"X\":1600,\"Z\":1627},\"meaningfulMbrCapacities\":[\"KAPASITEETTI0\",\"KAPASITEETTI3\",\"KAPASITEETTI4\",\"KAPASITEETTI5\",\"KAPASITEETTI8\"],\"capacityMbrMap\":{\"KAPASITEETTI0\":1,\"KAPASITEETTI3\":6,\"KAPASITEETTI4\":4,\"KAPASITEETTI5\":2,\"KAPASITEETTI8\":5},\"meaningfulCapacities\":[\"cap_1\",\"cap_6\",\"cap_4\",\"cap_2\",\"cap_5\",\"cap_3\"],\"capacityMap\":{\"cap_1\":1,\"cap_2\":2,\"cap_3\":3,\"cap_4\":4,\"cap_5\":5,\"cap_6\":6}}},\"envs\":{\"uki-kyyti\":{\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.api.host\":\"https://uki-kyyti.vinka.cloud/garage-api\"},\"tuomi-prod\":{\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.ui.showExtraRouteReportColumns\":false,\"ENV.i18n.customerLocale\":\"tuomi\"},\"tuomi-test\":{\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showExtraRouteReportColumns\":false,\"ENV.i18n.customerLocale\":\"tuomi\"},\"meneva-um\":{\"ENV.APP.auth0.allowSignUp\":true,\"ENV.APP.import.enabled\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"lldkJJa4UEcJ9KSHW9V4uV4sXZEBKVdH\"},\"meneva\":{\"ENV.ember-simple-auth.auth0.clientID\":\"lldkJJa4UEcJ9KSHW9V4uV4sXZEBKVdH\"},\"meneva-test\":{\"ENV.APP.auth0.allowSignUp\":true,\"ENV.APP.import.enabled\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"lldkJJa4UEcJ9KSHW9V4uV4sXZEBKVdH\"},\"jytaksi\":{\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.disableOperatorInfos\":true,\"ENV.i18n.defaultLocale\":\"fi\"},\"lahden-aluetaksi\":{\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.disableOperatorInfos\":true,\"ENV.i18n.defaultLocale\":\"fi\"},\"test\":{\"ENV.locationType\":\"none\",\"ENV.APP.LOG_ACTIVE_GENERATION\":false,\"ENV.APP.LOG_VIEW_LOOKUPS\":false,\"ENV.APP.rootElement\":\"#ember-testing\"},\"development\":{\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showOperatorPage\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"4w87XsceIr6MmE3mzI4pjcRwNRwt8Y8v\",\"ENV.ember-simple-auth.auth0.domain\":\"vinka.eu.auth0.com\"},\"jedi\":{\"ENV.APP.api.host\":\"https://tuomi-test.vinka.cloud/garage-api\",\"ENV.APP.ui.showExtraRouteReportColumns\":true},\"rami\":{\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showOperatorPage\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"4w87XsceIr6MmE3mzI4pjcRwNRwt8Y8v\",\"ENV.ember-simple-auth.auth0.domain\":\"vinka.eu.auth0.com\",\"ENV.APP.api.host\":\"http://localhost:9400\",\"ENV.i18n.customerLocale\":\"tuomi\"},\"wellu\":{\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showOperatorPage\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"4w87XsceIr6MmE3mzI4pjcRwNRwt8Y8v\",\"ENV.ember-simple-auth.auth0.domain\":\"vinka.eu.auth0.com\",\"ENV.APP.api.host\":\"https://garage-api.meneva-test.vinka.cloud\"},\"localhost\":{\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.import.enabled\":true,\"ENV.APP.ui.showOperatorPage\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"4w87XsceIr6MmE3mzI4pjcRwNRwt8Y8v\",\"ENV.ember-simple-auth.auth0.domain\":\"vinka.eu.auth0.com\",\"ENV.APP.api.host\":\"http://localhost:9400\",\"ENV.i18n.customerLocale\":\"tuomi\"},\"vlad\":{\"ENV.APP.api.host\":\"http://localhost\",\"ENV.APP.ui.showShiftTab\":true,\"ENV.APP.ui.showOperatorPage\":true,\"ENV.APP.import.enabled\":true,\"ENV.ember-simple-auth.auth0.clientID\":\"kC0cMvtd5bUSdTehauyxQVZDvUSFtpLv\",\"ENV.ember-simple-auth.auth0.domain\":\"vinka-test.eu.auth0.com\"}},\"name\":\"garage\",\"version\":\"4.2.4+6b5dc22c\"});\n}\n"],"names":[],"mappings":"AAAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3cA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC74BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;","file":"garage.js"}