GE Lua Documentation

Press F to search!

serialize

Definition


-- @/lua/common/utils.lua:1264

function serialize(v)
  return tostring(serializeWorkBuffer(v))
end

Callers

@/lua/vehicle/main.lua
  --log('D', "default.exportPersistentData", d)
  obj:setPersistentData(serialize(d))
end
@/lua/vehicle/energyStorage/fuelTank.lua

local function serialize(storage)
  return {remainingVolume = storage.remainingVolume}
@/lua/ge/extensions/editor/api/history.lua
--- Serialize the history stacks
function C:serialize(data)
  data.history = {}
@/lua/ge/extensions/flowgraph/nodes/vehicle/applyVelocity.lua
  dirVec:setScaled(self.pinIn.coefficient.value or 1)
  veh:queueLuaCommand("thrusters.applyVelocity("..serialize(dirVec)..")")
end
@/lua/ge/extensions/scenario/scenariohelper.lua
local function setAiRoute(vehicleName, waypoints)
  queueLuaCommandByName(vehicleName, 'ai.driveUsingPath({wpTargetList = '..serialize(waypoints)..'})')
  if scenario_scenarios then
  local resetLearning = arg.resetLearning and 'true' or 'false'
  queueLuaCommandByName(vehicleName, 'ai.driveUsingPath({wpTargetList = '..serialize(waypoints)..', routeSpeed = '..routeSpeed..', routeSpeedMode = "'..routeSpeedMode..'", driveInLane = "'..driveInLane..'", wpSpeeds = '..serialize(speeds)..', noOfLaps = '..lapCount..', aggression = '..aggression..', aggressionMode = "'..aggressionMode..'", resetLearning = '..resetLearning..', avoidCars = "'..tostring(avoidCars)..'"})')
  local resetLearning = arg.resetLearning and 'true' or 'false'
  queueLuaCommandByName(vehicleName, 'ai.driveUsingPath({wpTargetList = '..serialize(waypoints)..', routeSpeed = '..routeSpeed..', routeSpeedMode = "'..routeSpeedMode..'", driveInLane = "'..driveInLane..'", wpSpeeds = '..serialize(speeds)..', noOfLaps = '..lapCount..', aggression = '..aggression..', aggressionMode = "'..aggressionMode..'", resetLearning = '..resetLearning..', avoidCars = "'..tostring(avoidCars)..'"})')
@/lua/ge/extensions/gameplay/garageMode.lua
  if vehicle and playerVehicleData then
    local config = serialize(playerVehicleData.config) -- when using "vehicle.partConfig" here, the color of the vehicle will be wrong if you use a custom default config
    local model = vehicle.JBeam
@/lua/ge/extensions/gameplay/traffic/baseRole.lua
  local obj = getObjectByID(self.veh.id)
  obj:queueLuaCommand('ai.setParameters('..serialize(params)..')') ]]--
end
@/lua/ge/extensions/core/cameraModes/unicycle.lua
  -- unicycle guiding
  data.veh:queueLuaCommand("controller.getControllerSafe('playerController').setCameraControlData("..serialize({cameraRotation = rotHorizontal})..")")
  return true
@/lua/vehicle/controller/nitrousOxideInjection.lua

local function serialize()
  return {
@/lua/ge/extensions/gameplay/skidpadTest.lua
      -- Make the AI drive the route
      vehicle:queueLuaCommand('ai.driveUsingPath(' .. serialize(config) .. ')')
      return true
@/lua/ge/ge_utils.lua
  local geluaCommand = string.format('local args = %s; %s(unpack(args, 1, table.maxn(args)))', 'deserialize(%q)', geluaFunctionName)
  local cmd = string.format('obj:queueGameEngineLua(string.format(%q, serialize({%s, unpack(%s)})))', geluaCommand, vluaCommand, serialize({...}))
  veh:queueLuaCommand(cmd)
  local geluaCommand = string.format('local args = %s; %s(unpack(args, 1, table.maxn(args)))', 'deserialize(%q)', geluaFunctionName)
  local cmd = string.format('obj:queueGameEngineLua(string.format(%q, serialize({%s, unpack(%s)})))', geluaCommand, vluaCommand, serialize({...}))
  veh:queueLuaCommand(cmd)
@/lua/ge/extensions/flowgraph/nodes/vehicle/ai/simpleFollowDecalroad.lua
  self.receivedInfo = false
  be:queueAllObjectLua('obj:queueGameEngineLua("extensions.hook(\\"onVehicleSubmitInfo\\","..tostring(objectId)..","..serialize(ai.scriptState())..")")')
end

  veh:queueLuaCommand('ai.startFollowing(' .. serialize(self.path) .. ',nil,'..(self.pinIn.loopCount.value or -1)..',"'..self.data.loopMode..'")')
  --dump('ai.startFollowing(' .. serialize(self.path) .. ',)')
  veh:queueLuaCommand('ai.startFollowing(' .. serialize(self.path) .. ',nil,'..(self.pinIn.loopCount.value or -1)..',"'..self.data.loopMode..'")')
  --dump('ai.startFollowing(' .. serialize(self.path) .. ',)')
  self.running = true
@/lua/ge/extensions/editor/api/guiInstancer.lua

function C:serialize(name, state)
  state[name] = { instances = self.instances, nextInstanceIndex = self.nextInstanceIndex }
@/lua/vehicle/extensions/tech/trailSim.lua
  data[2][2] = yawAV or 0 -- trailer yaw velocity
  BeamEngine:queueAllObjectLua(string.format("if tech_trailSim then tech_trailSim.trailerData(%q,%d) end", serialize(data), objectId))
end
@/lua/vehicle/controller/esc.lua

local function serialize()
  return {escConfigKey = currentESCConfigurationKey}
@/lua/ge/extensions/editor/scriptAIManager.lua

  bo:queueLuaCommand('ai.startFollowing(' .. serialize(recordings[vehId]) .. ')')
  vehState[vehId] = 'playing'
local function stopRecording(bo, vehId)
  bo:queueLuaCommand('obj:queueGameEngineLua("extensions.hook(\\"onVehicleSubmitRecording\\","..tostring(objectId)..","..serialize(ai.stopRecording())..")")')
  vehState[vehId] = 'idle'
  if editor.beginWindow(toolWindowName, "Script AI Manager") then
    be:queueAllObjectLua('obj:queueGameEngineLua("extensions.hook(\\"onVehicleSubmitInfo\\","..tostring(objectId)..","..serialize(ai.scriptState())..")")')
    local objMax = be:getObjectCount()-1
@/lua/ge/extensions/editor/sceneTree.lua
  end
  guiInstancer:serialize("scenetreeInstances", state)
  guiInstancer.instances = instancesCopy
@/lua/ge/extensions/util/calibrateESC.lua

      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("escMeasurement.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")

      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("escMeasurement.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("escMeasurement.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("escMeasurement.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
@/lua/vehicle/powertrain/combustionEngine.lua

  obj:queueGameEngineLua(string.format("core_sounds.initEngineSound(%d,%d,%q,%s,%f,%f)", objectId, soundID, samplePath, serialize(engineNodeIDs), offLoadGain, onLoadGain))
end

  obj:queueGameEngineLua(string.format("core_sounds.initExhaustSound(%d,%d,%q,%s,%f,%f)", objectId, soundID, samplePath, serialize(exhaustNodeIDPairs), offLoadGain, onLoadGain))
end

  obj:queueGameEngineLua(string.format("core_sounds.setExhaustSoundNodes(%d,%d,%s)", objectId, soundID, serialize(exhaustNodeIDPairs)))
end
  device.soundConfiguration[reference].soundID = soundID
  obj:queueGameEngineLua(string.format("core_sounds.setEngineSoundParameterList(%d,%d,%s)", objectId, soundID, serialize(params)))

--local command = "obj:queueGameEngineLua(string.format('scenarios.getScenario().wheelDataCallback(%s)', serialize({wheels.wheels[0].absActive, wheels.wheels[0].angularVelocity, wheels.wheels[0].angularVelocityBrakeCouple}))"
@/lua/ge/extensions/career/modules/partInventory.lua
    core_vehicles.replaceVehicle(carModelToLoad, vehicleData, vehicleObj)
    queueCallbackInVehicle(vehicleObj, "career_modules_partInventory.initConditionsCallback", "partCondition.initConditions(" .. serialize(partConditions) .. ")", inventoryId)
  else
  end
  jsonWriteFile(currentSavePath .. "/career/partInventory.json", {serialize(partInventoryCopy)}, true)
end
@/lua/vehicle/extensions/utRecorder.lua
  }
  obj:queueGameEngineLua("extensions.test_utRecorder.onVehicleData(" .. obj:getId() .. "," .. serialize(d) .. ")")
end
@/lua/ge/extensions/editor/rallyEditor/measurementsTab.lua
-- Serialize measurements to JSON-compatible format
function C:serialize()
  local data = {
  self.updatedAt = os.time()
  local data = self:serialize()
  jsonWriteFile(filePath, data, true)
@/lua/ge/extensions/editor/aiTests.lua

          obj:queueLuaCommand("ai.driveUsingPath({wpTargetList = "..serialize(path)..", avoidCars = 'off'})")
          obj:queueLuaCommand("ai.setAggression("..aiParams.aggression..")")
          obj:queueLuaCommand("ai.setAggression("..aiParams.aggression..")")
          obj:queueLuaCommand(string.format("ai.setParameters(%s)", serialize(aiParams)))
@/lua/vehicle/extensions/core/quickAccess.lua

  obj:queueGameEngineLua("core_quickAccess.vehicleItemsCallback(" .. objectId .. "," .. serialize(level) .. "," .. serialize(menuTreeCopy) .. ")")
  return true

  obj:queueGameEngineLua("core_quickAccess.vehicleItemsCallback(" .. objectId .. "," .. serialize(level) .. "," .. serialize(menuTreeCopy) .. ")")
  return true
    if actionCallbackCountdown <= 0 then
      obj:queueGameEngineLua("core_quickAccess.vehicleItemSelectCallback(" .. obj:getId() .. "," .. serialize(actionCallbackArgs) .. ")")
      actionCallbackCountdown = nil
  end
  obj:queueGameEngineLua("core_quickAccess.vehicleItemSelectCallback(" .. objectId .. "," .. serialize(args) .. ")")
end
@/lua/ge/extensions/flowgraph/nodes/gameplay/race/raceAiParameters.lua

      veh:queueLuaCommand('ai.setParameters('..serialize(aiParams)..')')
      veh:queueLuaCommand('ai.setRacing(true)') -- new mode, improves racing AI
@/lua/ge/extensions/editor/levelValidator.lua
  if obj then
    actionData.serializedData = "[" .. obj:serialize(false, -1) .. "]"
    obj:deleteObject()
        -- Check for duplicate objects
        local data = object:serialize(true, -1)
        data = jsonDecode(data)
        data = prepareData(data)
        local hash = hashStringSHA256(serialize(data))
@/lua/ge/extensions/flowgraph/nodes/vehicle/ai/directlyTo.lua
  local aiPath = {path = path}
  veh:queueLuaCommand('ai.startFollowing(' .. serialize(aiPath) .. ', nil, 0, "neverReset")')
end
@/lua/ge/extensions/career/modules/painting.lua
  if partName then
    vehicleObject:queueLuaCommand(string.format("partCondition.setPartPaints(%s, %s, 0)", partName, serialize(chosenPaints)))
  else
  else
    vehicleObject:queueLuaCommand(string.format("partCondition.setAllPartPaints(%s, 0)", serialize(chosenPaints)))
  end
@/lua/ge/extensions/gameplay/crashTest/scenarioManager.lua
  local veh = getObjectByID(vehId)
  veh:queueLuaCommand('ai.startFollowing(' .. serialize(scriptAiFile.recording) .. ')')
end
@/lua/ge/extensions/career/modules/inventory.lua
    if (vehicle.dirtyDate > oldSaveDate) then
      vehicle.partConditions = serialize(vehicle.partConditions)
@/lua/ge/extensions/scenario/scenarios.lua
          for vek, ve in pairs(vehicleConf.extensions) do
            to.obj:queueLuaCommand('extensions.scenario_' .. vek  .. '.onVehicleScenarioData(' .. serialize(ve) .. ')')
          end
@/lua/ge/extensions/editor/engineAudioDebug.lua
      local data, names = sounds.getEngineSoundData();
      data = serialize(data);
      names = serialize(names);
      data = serialize(data);
      names = serialize(names);
      obj:queueGameEngineLua(string.format('editor_engineAudioDebug.engine.engineSoundData = %s; editor_engineAudioDebug.engine.engineNameStrings = %s', data, names))]])
          local engine = engines[]] .. selectedEngineData.engineIndex .. [[];
          engine:setEngineSoundParameterList(]] .. selectedEngineData.data.soundID .. "," .. serialize(params) .. ",\"" ..
                                              selectedEngineData.reference .. [[");
          local data, names = sounds.getEngineSoundData();
          data = serialize(data);
          names = serialize(names);
          data = serialize(data);
          names = serialize(names);
          obj:queueGameEngineLua(string.format('editor_engineAudioDebug.engine.engineSoundData = %s; editor_engineAudioDebug.engine.engineNameStrings = %s', data, names))]])
@/lua/vehicle/powertrain/electricMotor.lua
  device.soundConfiguration[reference].blendFile = samplePath
  obj:queueGameEngineLua(string.format("core_sounds.initEngineSound(%d,%d,%q,%s,%f,%f)", objectId, soundID, samplePath, serialize(engineNodeIDs), offLoadGain, onLoadGain))
  device.soundConfiguration[reference].soundID = soundID
  obj:queueGameEngineLua(string.format("core_sounds.setEngineSoundParameterList(%d,%d,%s)", objectId, soundID, serialize(params)))
end
@/lua/vehicle/controller/4wd.lua

local function serialize()
  return {
@/lua/vehicle/extensions/gameplayInterface.lua
local function geLuaCallback(callbackString, requestId, data)
  local cmdString = string.format("%s(%d, %d, %q)", callbackString, objectId, requestId, serialize(data))
  obj:queueGameEngineLua(cmdString)
@/lua/ge/extensions/core/hotlapping.lua

      veh:queueLuaCommand('ai.driveUsingPath({wpTargetList = '..serialize(route)..', noOfLaps = 1000, avoidCars = "on"})')
      veh:queueLuaCommand('ai.setParameters({turnForceCoef = 4, awarenessForceCoef = 0.15})') -- slightly improves racing
@/lua/ge/extensions/editor/vehicleEditor/liveEditor/veAeroDebug.lua

    vEditor.vehicle:queueLuaCommand('obj:queueGameEngineLua("vEditor.aeroData =" .. serialize(extensions.aeroDebug.getAeroData()))')
@/lua/vehicle/controller.lua
    if controller.serialize then
      data[controller.name] = controller.serialize()
    end
@/lua/ge/main.lua
  -- jsonWriteFile('persistentData.json', d, true)
  be.persistenceLuaData = serialize(d)
end
@/lua/vehicle/powertrain.lua
  end
  return serialize(serializeInfoRes)
end
@/lua/ge/extensions/editor/main.lua
    --TODO: objects need serializable formats not C++ object refs
    --editor.history:serialize(data)
  end
@/lua/ge/spawn.lua
  elseif type(options.config) == 'table' then
    pc = serialize(options.config)
  end
  veh:setMetallicPaintData(paints)
  veh.paints = serialize(paints)
@/lua/ge/extensions/flowgraph/nodes/vehicle/ai/scriptAI/playRecording.lua
  self.recording.recording.loopType = "firstOnlyTeleport"
  veh:queueLuaCommand('ai.startFollowing(' .. serialize(self.recording.recording) .. ')')
  self.running = true
@/lua/ge/extensions/tech/techCore.lua
  -- Serialize & deserialize to get rid of data MessagePack can't serialize
  local cameraData = deserialize(serialize(core_camera.getCameraDataById(veh:getID())))
  cameraData['unicycle'] = nil
@/lua/ge/extensions/core/vehicle/inplaceEdit.lua
  clearVehicleData()
  vehicle:respawn(serialize(config))
  updateHighlighting()
@/lua/ge/extensions/editor/cosimulationSignalEditor.lua
      }
      be:queueObjectLua(vid, string.format("controller.loadControllerExternal('tech/cosimulationCoupling', 'cosimulationCoupling', %s)", serialize(lpack.encode({cData}))))
@/lua/ge/extensions/core/camera.lua
    if cam.onSerialize then cam:onSerialize() end
    data.globalCameras[k] = serialize(cam)
  end
    for camName,cam in pairs(vdata.cameras) do
      data.vehicleCameras[vid].cameras[camName] = serialize(cam)
    end
@/lua/ge/extensions/editor/vehicleEditor/liveEditor/veTCSDebug.lua
      local tcsData = (#escControllers >= 1) and escControllers[1].debugData.tcs or nil
      obj:queueGameEngineLua("vEditor.tcsData = " .. serialize(tcsData))]])
    if vEditor.tcsData then
@/lua/ge/extensions/career/modules/vehiclePerformance.lua

      getObjectByID(vehId):queueLuaCommand('damageTracker.registerDamageUpdateCallback(function(damageData, damageDataDelta) obj:queueGameEngineLua("career_modules_vehiclePerformance.onVehicleDamaged(" .. serialize(damageData) .. ", " .. serialize(damageDataDelta) .. ")") end)')

      getObjectByID(vehId):queueLuaCommand('damageTracker.registerDamageUpdateCallback(function(damageData, damageDataDelta) obj:queueGameEngineLua("career_modules_vehiclePerformance.onVehicleDamaged(" .. serialize(damageData) .. ", " .. serialize(damageDataDelta) .. ")") end)')
      -- Make the AI drive the route
      vehicle:queueLuaCommand('ai.driveUsingPath(' .. serialize(config) .. ')')
      core_camera.setByName(0, 'orbit')
@/lua/vehicle/partCondition.lua
        result[partId] = getCondition(partId)
        --log("I", "partCondition.getConditions", string.format("Got condition for partId %25s: ", partId) .. string.sub(serialize(result[partId]), 1, 100))
      end,
@/lua/vehicle/beamstate.lua
local function broadcastCouplerVisibility(visibleTags)
  BeamEngine:queueAllObjectLua("beamstate.setCouplerVisiblityExternal(" .. tostring(obj:getId()) .. "," .. serialize(visibleTags) .. ")")
end
local function sendObjectCouplingChange()
  obj:queueGameEngineLua(string.format("onObjectCouplingChange(%s,%s)", objectId, serialize(attachedCouplers)))
end
local function sendExportCouplerData(obj2Id, obj2nodeId, data)
  obj:queueObjectLuaCommand(obj2Id, "beamstate.exportCouplerData(" .. tostring(obj2nodeId) .. ", " .. serialize(data) .. ")")
  M.updateRemoteElectrics = updateRemoteElectrics
    local data = {electrics = n.importElectrics, inputs = n.importInputs}
    --print("couplerAttached -> beamstate.exportCouplerData("..tostring(obj2nodeId)..", "..serialize(data)..")")
    -- obj:queueObjectLuaCommand(obj2id, "beamstate.exportCouplerData(" .. tostring(obj2nodeId) .. ", " .. serialize(data) .. ")")
    --print("couplerAttached -> beamstate.exportCouplerData("..tostring(obj2nodeId)..", "..serialize(data)..")")
    -- obj:queueObjectLuaCommand(obj2id, "beamstate.exportCouplerData(" .. tostring(obj2nodeId) .. ", " .. serialize(data) .. ")")
    -- M.updateRemoteElectrics = updateRemoteElectrics
      end
      obj:queueObjectLuaCommand(coupler.obj2id, string.format("beamstate.importCouplerData(%s, %s)", coupler.obj2nodeId, serialize(data)))
    end
  save.beamCount = tableSizeC(v.data.beams)
  save.luaState = serialize(serializePackages("save"))
  save.hydros = {}
@/inspector/Workers/HeapSnapshot/HeapSnapshotWorker.js

        return {objectId, snapshot: snapshot.serialize()};
    }
        this._objects.set(objectId, snapshotDiff);
        return {objectId, snapshotDiff: snapshotDiff.serialize()};
    }
@/lua/ge/extensions/core/input/bindings.lua
  for _,veh in ipairs(getAllVehicles()) do
    veh:queueLuaCommand("hydros.onFFBConfigChanged("..serialize(getFFBConfig(veh))..")")
  end
@/lua/common/utils.lua
--   dump(d)
--   s = serialize(d)
--   print("serialized data: " .. tostring(s))
--   dump(da)
--   sa = serialize(da)
--   if sa == s then
--   end
--   if deserialize(serialize(nil)) ~= nil then print "serialize with nil fails to work corectly" end
-- end
@/lua/common/libs/xlsxlib/tests/tests.lua

    local content = string.format('// Test args: %s\r\n', serialize(queryArgs))
    content = content .. jsonEncodePretty({data}, 1)
@/lua/ge/extensions/gameplay/race/race.lua

  local str = '{wpTargetList = '..serialize(aiPath)
  str = str..', noOfLaps = '..lapCount
@/lua/ge/extensions/core/busRouteManager.lua
    if veh then
      veh:queueLuaCommand("controller.onGameplayEvent('"..cmd.."',"..serialize(arg)..")")
    else
@/lua/vehicle/controller/driveModes.lua

local function serialize()
  if activeDriveMode then
@/lua/ge/extensions/editor/vehicleEditor/liveEditor/veGeneralData.lua
      data.damage = beamstate.damage
      obj:queueGameEngineLua("vEditor.generalData =" .. serialize(data))]])
@/lua/vehicle/extensions/tech/CANBus/ProjectBavariaController.lua
    local deviceId, deviceInfo = core_input_virtualInput.getDeviceInfo(%d)
    be:queueObjectLua(%d, 'extensions.tech_CANBus_ProjectBavariaController.virtualInputCallback('..(deviceId or 'nil')..','..serialize(deviceInfo)..')')
    ]]
    local deviceId, deviceInfo = core_input_virtualInput.createDevice(%q, %d, %d, %d, %d, true)
    be:queueObjectLua(%d, 'extensions.tech_CANBus_ProjectBavariaController.virtualInputCallback('..deviceId..','..serialize(deviceInfo)..')')
    ]]
@/lua/ge/extensions/editor/gen/test.lua
			lo('?? if_OBJ:'..tostring(inspect)..':'..tostring(m.obj)..':'..tostring(m:getID())..':'..tostring(originalMesh)) --..':'..tostring(nodes)) --..tostring(editor.getNodes(m)))
--			print('?? to_SER:'..serialize(m.obj))
			print(inspect(getmetatable(m.obj)))
@/lua/vehicle/energyStorage/n2oTank.lua

local function serialize(storage)
  return {remainingMass = storage.remainingMass}
@/lua/ge/extensions/util/saveDynamicData.lua

      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")

      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      --log('E', 'XXXXXXXXXXXXXXXXXXXX', "dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
      newVehicle:queueLuaCommand("dynamicVehicleData.performTests(" .. serialize(vehName) .. "," .. serialize(config) .. ")")
@/inspector/Workers/HeapSnapshot/HeapSnapshot.js

    serialize()
    {

    serialize()
    {
        return {
            snapshot1: this._snapshot1.serialize(),
            snapshot2: this._snapshot2.serialize(),
            snapshot1: this._snapshot1.serialize(),
            snapshot2: this._snapshot2.serialize(),
            totalSize: this._totalSize,
@/lua/ge/extensions/flowgraph/modules/vehicleModule.lua
  if veh then
    veh:queueLuaCommand("controller.onGameplayEvent('bus_onRouteChange'," .. serialize(data) .. ")")
  end
  if veh then
    veh:queueLuaCommand("controller.onGameplayEvent('bus_onSetStopRequest'," .. serialize(data) .. ")")
  end
@/lua/ge/extensions/editor/trafficManager.lua
      script = script.recording or script
      veh:queueLuaCommand('ai.startFollowing('..serialize(script)..')')
    end
@/lua/vehicle/energyStorage/pressureTank.lua

local function serialize(storage)
  return {remainingMass = storage.remainingMass}
@/lua/ge/extensions/editor/drivePathEditor/playback.lua
          ]],
            serialize(wpTargetList),
            serialize(wpSpeeds),
            serialize(wpTargetList),
            serialize(wpSpeeds),
            routeSpeed,
@/ui/ui-vue/dist/index.js
      nop(${this.serializeToLua(text)}) -- (actually run the lua check)
    `)}serializeToLua(obj){let tmp;if(obj==null)return`nil`;switch(obj.constructor){case String:return obj.search(/\\|\"|\n|\t|\r/)==-1?`"${obj}"`:`"${obj.replace(/\\/g,`\\\\`).replace(/\"/g,`\\"`).replace(/\n|\r/g,`\\n`).replace(/\t/g,`\\t`)}"`;case Number:return isFinite(obj)?obj.toString():null;case Boolean:return obj?`true`:`false`;case Array:tmp=[];for(let i=0;iLua_default.extensions[LUA_BLUR_EXTENSION].replaceGroup(`uiBlur`,blurRegionList),getNextAvailableId=()=>(highestId<2**53-1?highestId++:highestId=0).toString(),LUA_BLUR_UNLOADED=0,LUA_BLUR_LOADING=1,LUA_BLUR_LOADED=2,blurLoadedState=LUA_BLUR_UNLOADED;function applyBlur(){if(!window.beamng||!window.beamng.ingame||blurLoadedState===LUA_BLUR_LOADING)return;let isEmpty=!Object.keys(blurRegionList).length;blurLoadedState===LUA_BLUR_UNLOADED?isEmpty||(blurLoadedState=LUA_BLUR_LOADING,Lua_default.extensions.load(LUA_BLUR_EXTENSION).then(()=>{blurLoadedState=LUA_BLUR_LOADED,sendBlurListToLua()})):isEmpty?(Lua_default.extensions.unload(LUA_BLUR_EXTENSION),blurLoadedState=LUA_BLUR_UNLOADED):sendBlurListToLua()}var GameBlurrer_default={register(coord){if(coord===void 0)throw Error(`Cannot register bng-blur with coordinates: `+coord);let id=getNextAvailableId();return blurRegionList[id]=coord,applyBlur(),id},unregister(id){id in blurRegionList&&(delete blurRegionList[id],applyBlur())},update(id,coord){if(!(id in blurRegionList))throw Error(`Trying to update bng-blur with an ID that is not registered: ${id} (of ${Object.keys(blurRegionList)})`);blurRegionList[id]=coord,applyBlur()}},handlers={},streamCoordinator;window.streamUpdate=data=>_runHandlers(`stream`,data),window.multihookUpdate=hooksData=>{for(let i in hooksData){let hook=hooksData[i];trigger(hook[0],hook[1])}},window.HookManager={trigger};var skippedStreamUpdate=null,streamUpdateHandler=function(data){if(streamCoordinator?.processing){console.log(`ERROR: streamUpdate cycle is already active, skipping this update of streams`),skippedStreamUpdate=data;return}skippedStreamUpdate=null;let oldFormat={};if(data.globalStreams)for(let sn in data.globalStreams)oldFormat[sn]=data.globalStreams[sn];if(data.vehicleStreams&&data.vehicleStreams.player_0)for(let sn in data.vehicleStreams.player_0)oldFormat[sn]=data.vehicleStreams.player_0[sn];streamCoordinator?.beforeBroadcast(),window.globalAngularRootScope?.$broadcast(`streamsUpdate`,oldFormat),window.vueEventBus?.emit(`onStreamsUpdate`,oldFormat),window.vueGlobalStore&&(window.vueGlobalStore.streams=oldFormat),streamCoordinator?.afterBroadcast(()=>{!streamCoordinator.processing&&skippedStreamUpdate&&streamUpdateHandler(skippedStreamUpdate)})};add$1(`streamMain`,streamUpdateHandler,`stream`);var mainHookHandler=function(hookName,args){args&&!Array.isArray(args)&&console.error(`HookManager.trigger unsupported arguments (needs to be a list): `+JSON.stringify(hookName)+` - `+JSON.stringify(args).substring(0,30)+` ... `),window.vueEventBus?.emit(hookName,...args),window.globalAngularRootScope?.$broadcast(hookName,...args)};add$1(`hooksMain`,mainHookHandler);function add$1(id,func,type=`hook`){handlers[type]||(handlers[type]={}),handlers[type][id]=func}function remove$1(id,type=`hook`){handlers[type]&&delete handlers[type][id]}function trigger(hookName,args){_runHandlers(`hook`,hookName,args)}function _runHandlers(type,...data){if(handlers[type]){let toRun=Object.values(handlers[type]);toRun.length&&toRun.forEach(f=>f(...data))}}var Hooks_default={add:add$1,remove:remove$1,trigger,setStreamCoordinator(manager){streamCoordinator=manager}},scriptRel=`modulepreload`,assetsURL=function(dep){return`/local/ui/ui-vue/`+dep},seen={};const __vitePreload=function(baseModule,deps$1,importerUrl){let promise=Promise.resolve();if(deps$1&&deps$1.length>0){let links=document.getElementsByTagName(`link`),cspNonceMeta=document.querySelector(`meta[property=csp-nonce]`),cspNonce=cspNonceMeta?.nonce||cspNonceMeta?.getAttribute(`nonce`);function allSettled(promises$2){return Promise.all(promises$2.map(p$1=>Promise.resolve(p$1).then(value$1=>({status:`fulfilled`,value:value$1}),reason=>({status:`rejected`,reason}))))}promise=allSettled(deps$1.map(dep=>{if(dep=assetsURL(dep,importerUrl),dep in seen)return;seen[dep]=!0;let isCss=dep.endsWith(`.css`),cssSelector=isCss?`[rel="stylesheet"]`:``;if(importerUrl)for(let i$1=links.length-1;i$1>=0;i$1--){let link$1=links[i$1];if(link$1.href===dep&&(!isCss||link$1.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${dep}"]${cssSelector}`))return;let link=document.createElement(`link`);if(link.rel=isCss?`stylesheet`:scriptRel,isCss||(link.as=`script`),link.crossOrigin=``,link.href=dep,cspNonce&&link.setAttribute(`nonce`,cspNonce),document.head.appendChild(link),isCss)return new Promise((res,rej)=>{link.addEventListener(`load`,res),link.addEventListener(`error`,()=>rej(Error(`Unable to preload CSS for ${dep}`)))})}))}function handlePreloadError(err$2){let e$1=new Event(`vite:preloadError`,{cancelable:!0});if(e$1.payload=err$2,window.dispatchEvent(e$1),!e$1.defaultPrevented)throw err$2}return promise.then(res=>{for(let item of res||[])item.status===`rejected`&&handlePreloadError(item.reason);return baseModule().catch(handlePreloadError)})};var MOCK_DATA_PATH=`../mockdata`;function applyMockInterface(originalObject,mockInterface){let handler$1={mockInterface,get(target,propertyName){return this.mockInterface[propertyName]||target[propertyName]||defaultMockedMethod(propertyName)}};return new Proxy(originalObject,handler$1)}function defaultMockedMethod(name){return{[name]:function(...args){console.log(`Mocked method '${name}' called with:`),console.log(args)}}[name]}function getMockedData(fullPath){const[file$1,...path]=fullPath.split(`.`),filename=`${MOCK_DATA_PATH}/${file$1}.js`,toEval=[`d`,`default`,...path].join(`.`);return __vitePreload(()=>import(filename),[]).then(d=>eval(toEval))}const runInBrowser=fn=>{window.beamng||fn()},sendGUIHook=(name,...params)=>{window.bridge&&window.bridge.events&&window.bridge.events.emit(name,...params),window.globalAngularRootScope&&window.globalAngularRootScope.$broadcast(name,...params)};var withMocked=(sig,getData)=>(sig.mocked=getData,sig),LuaFunctionSignatures_default={dev:{getMockedData:key=>String},getVehicleColor:()=>{},getVehicleColorPalette:index=>Integer,resetGameplay:playerID=>Integer,quit:()=>{},checkFSErrors:()=>{},returnToMainMenu:()=>{},guihooks:{trigger:withMocked(hookName=>String,sendGUIHook)},simTimeAuthority:{togglePause:()=>{},getPause:()=>{},pause:state=>Boolean,pushPauseRequest:id=>String,popPauseRequest:id=>String},commands:{toggleCamera:()=>{}},ui_audio:{playEventSound:(soundClass,type)=>[String,String]},career_career:{closeAllMenus:()=>{},isActive:()=>{},sendAllCareerSaveSlotsData:()=>{},sendCurrentSaveSlotData:()=>{},createOrLoadCareerAndStart:(id,specificAutosave,tutorial)=>[String,Any$1,Boolean]},career_saveSystem:{saveCurrent:()=>{},removeSaveSlot:id=>String,renameSaveSlot:(name,newName)=>[String,String]},career_modules_uiUtils:{getCareerStatusData:withMocked(()=>{},()=>getMockedData(`career.status`)),getCareerSimpleStats:withMocked(()=>{},()=>getMockedData(`career.simpleStats`)),getCareerPauseContextButtons:()=>{},callCareerPauseContextButtons:id=>Number,getCareerCurrentLevelName:()=>{}},career_modules_fuel:{requestRefuelingTransactionData:()=>{},sendUpdateDataToUI:()=>{},uiButtonStartFueling:energyType=>String,uiButtonStopFueling:energyType=>String,onChangeFlowRate:flowRate=>Number,payPrice:()=>{},uiCancelTransaction:()=>{}},career_modules_logbook:{getLogbook:withMocked(()=>{},()=>getMockedData(`logbook.sample`)),setLogbookEntryRead:(id,state)=>[String,Boolean]},career_modules_milestones_milestones:{getMilestones:()=>{},claim:id=>Number,unclaimedMilestonesCount:()=>{}},career_modules_branches_landing:{openBigMapWithMissionSelected:id=>String,getBranchSkillCardData:id=>String,getBranchPageData:id=>String,getLandingPageData:domain=>String,getCargoProgressForUI:()=>{}},career_modules_partShopping:{cancelShopping:()=>{},applyShopping:()=>{},installPartByPartShopId:id=>Number,removePartBySlot:slot=>String,sendShoppingDataToUI:()=>{}},career_modules_vehicleShopping:{showVehicle:id=>Number,navigateToPos:pos=>Object,openShop:(seller,computerId)=>[Any$1,Any$1],cancelShopping:()=>{},quickTravelToVehicle:id=>Number,openPurchaseMenu:(purchaseType,shopId)=>[String,Number],updateInsuranceSelection:insuranceId=>Number,openInventoryMenuForTradeIn:()=>{},buyFromPurchaseMenu:(purchaseType,options)=>[String,Any$1],cancelPurchase:purchaseType=>String,getShoppingData:()=>{},sendPurchaseDataToUi:()=>{},removeTradeInVehicle:()=>{},onShoppingMenuClosed:()=>{}},career_modules_marketplace:{getListings:()=>{},menuOpened:open$1=>Boolean,acceptOffer:(inventoryId,offerIndex)=>[Number,Number],declineOffer:(inventoryId,offerIndex)=>[Number,Number],listVehicles:inventoryIds=>[Array],openMenu:()=>{},removeVehicleListing:inventoryId=>Number,startNegotiateBuyingOffer:(inventoryId,offerIndex)=>[Number,Number],startNegotiateSellingOffer:shopId=>[Number],getNegotiationState:()=>{},makeNegotiationOffer:price=>Number,takeTheirOffer:()=>{},cancelNegotiation:()=>{}},career_modules_testDrive:{stop:()=>{}},career_modules_inspectVehicle:{startTestDrive:()=>{},onInspectScreenChanged:enabled=>Boolean,onPurchaseMenuClosed:()=>{},repairVehicle:()=>{}},career_modules_loanerVehicles:{markForSpawning:loanInfo=>Object,spawnAndLoanVehicle:(vehicleInfo,loanInfo)=>[Object,Object],getLoanedVehiclesByOrg:orgId=>String,returnVehicle:inventoryId=>Number},career_modules_inventory:{sellVehicle:id=>Number,sellVehicleFromInventory:id=>Number,returnLoanedVehicleFromInventory:id=>Number,expediteRepairFromInventory:(inventoryId,price)=>[Number,Number],enterVehicle:id=>Number,openMenuFromComputer:computerId=>String,closeMenu:()=>{},chooseVehicleFromMenu:(vehId,buttonId,repairPrevVeh)=>[Number,Number,Boolean],setFavoriteVehicle:id=>Number,sendDataToUi:()=>{},removeVehicleObject:id=>Number,getVehicle:id=>Number,getVehicleUiData:id=>Number,isEmpty:()=>{},setLicensePlateText:(inventoryId,text)=>[Number,String],purchaseLicensePlateText:(inventoryId,text,money)=>[Number,String,Number],isLicensePlateValid:text=>String,isVehicleNameValid:text=>String,renameVehicle:(inventoryId,name)=>[Number,String],openInventoryMenuForChoosingListing:()=>{}},career_modules_vehiclePerformance:{startDragTest:id=>Number,cancelTest:()=>{}},career_modules_partInventory:{openMenu:computerId=>Any$1,closeMenu:()=>{},sendUIData:()=>{},sellParts:ids=>Array,partInventoryClosed:()=>{}},career_modules_insurance_insurance:{getProposablePoliciesForVehInv:invVehId=>Number,payInsuranceScoreReset:policyId=>Number,purchaseInsurance:id=>Number,calculateRenewalPriceDetails:(policyId,tempPerks)=>[Number,Any$1],changeInvVehInsuranceCoverageOptions:(policyId,changedPerks)=>[Number,Object],changeInvVehInsurance:(invVehId,newInsuranceId)=>[Number,Number],startRepairInGarage:(vehicleInfo,repairOptionData)=>[Object,Object],openRepairMenu:(vehicleInfo,originComputerId)=>[Object,Any$1],closeMenu:()=>{},sendUIData:()=>{},inventoryVehNeedsRepair:inventoryId=>Number,getInvVehHaveFuelDiscount:invVehId=>Object,openChooseInsuranceScreen:()=>{},calculateInsurancePremium:(insuranceId,potentialCoverageOptions,potentialVehiclesCoverageOptions)=>[Number,Object,Object],saveNewInsuranceCoverageOptions:(insuranceId,newCoverageOptions)=>[Number,Object],calculateVehiclePremium:(vehicleId,nonInvVehInfo,potentialCoverageOptions)=>[Number,Object,Object],saveNewVehicleCoverageOptions:(vehicleId,newCoverageOptions)=>[Number,Object],sendChooseInsuranceDataToTheUI:(purchaseType,shopId,defaultInsuranceId)=>[String,Number,Number],sendChangeInsuranceDataToTheUI:vehicleId=>[Number],resetDriverScore:()=>{}},career_modules_insurance_repairScreen:{getRepairData:()=>{},closeMenu:()=>{},startRepairInGarage:(invVehId,repairOptionData)=>[Number,Object],openRepairMenu:(vehicleInfo,originComputerId)=>[Object,Any$1]},career_modules_playerAbstract:{getPlayerAbstractData:()=>{},closePlayerAbstractMenu:()=>{}},career_modules_tuning:{apply:tuningValues=>Object,start:(vehId,origin)=>[Any$1,Any$1],getTuningData:()=>{},close:()=>{},applyShopping:()=>{},cancelShopping:()=>{},removeVarFromShoppingCart:varName=>String},career_modules_painting:{apply:()=>{},start:(vehId,origin)=>[Any$1,Any$1],getPaintData:()=>{},close:()=>{},setPaints:paint=>Object,getFactoryPaint:()=>{},onUIOpened:()=>{}},career_modules_questManager:{setQuestAsNotNew:id=>String,claimRewardsById:id=>String},career_modules_computer:{onMenuClosed:()=>{},getComputerUIData:()=>{},computerButtonCallback:(buttonId,inventoryId)=>[String,Any$1],openComputerMenuById:computerId=>String,closeAllMenus:()=>{}},career_modules_delivery_general:{setAutomaticRoute:enabled=>Boolean,setDetailedDropOff:enabled=>Boolean,setSetting:(key,value)=>[String,Any$1],getSettings:()=>{},setDeliveryTimePaused:paused=>Boolean},career_modules_delivery_cargoScreen:{requestCargoDataForUi:(facilityId,parkingSpotPath,updateMaxTimeStamp)=>[Any$1,Any$1,Any$1],moveCargoFromUi:(cargoId,targetLocation)=>[Number,Object],commitDeliveryConfiguration:()=>{},cancelDeliveryConfiguration:()=>{},exitDeliveryMode:()=>{},exitCargoOverviewScreen:()=>{},showCargoRoutePreview:cargoId=>Any$1,showVehicleOfferRoutePreview:offerId=>Any$1,setCargoRoute:(cargoId,origin)=>[Number,Boolean],showLocationRoutePreview:(location$1,asProvider)=>[Any$1,Boolean],showCargoContainerHelpPopup:()=>{},setBestRoute:()=>{},spawnOffer:(offerId,fadeToBlack)=>[Number,Any$1],abandonAcceptedOffer:vehId=>Number,setCargoScreenTab:tab=>String,unloadCargoPopupClosed:()=>{},moveMaterialFromUi:()=>{},requestDropOffData:()=>{},confirmDropOffData:(data,facId,psPath)=>[Any$1,Any$1,Any$1],dropOffPopupClosed:mode=>String,clearTransientMoveForCargo:cargoId=>Number,clearTransientMovesForStorage:materialType=>String,applyTransientMoves:()=>{},toggleOfferForSpawning:id=>Number,tryLoadAll:cargoIds=>Array,showRoutePreview:route=>Object,deliveryScreenExternalButtonPressed:id=>Any$1},career_modules_delivery_progress:{activateSound:(soundLabel,active)=>[String,Boolean]},career_modules_linearTutorial:{introPopup:(key,force)=>[String,Boolean],wasIntroPopupsSeen:pages=>Array,isLinearTutorialActive:()=>{}},gameplay_drag_dragBridge:{getHistory:id=>Object,screenshotTimeslip:()=>{}},gameplay_crashTest_scenarioManager:{nextStepFromUI:()=>{}},gameplay_discover:{getDiscoverPages:()=>{},startDiscover:discoverId=>String},freeroam_organizations:{getUIData:()=>{},getUIDataForOrg:orgId=>String},core_replay:{onInit:()=>{},loadFile:filename=>String,stop:()=>{},openReplayFolderInExplorer:()=>{},getRecordings:()=>{},removeRecording:filename=>String,togglePlay:()=>{},toggleRecording:()=>{},cancelRecording:()=>{},toggleSpeed:speed=>Number,pause:()=>{},seek:positionPercent=>Number,acceptRename:(oldFilename,newFilename)=>[String,String],saveMissionReplay:filename=>String,removeMissionSavedReplay:filename=>String,openMissionReplayFolder:filename=>String},core_gamestate:{requestGameState:()=>{},loadingScreenActive:()=>{}},core_gameContext:{getGameContext:withMocked(params=>{},params=>getMockedData(`gameContext.gameContextData`))},core_online:{requestState:()=>{}},core_hardwareinfo:{requestState:()=>{},getInfo:()=>{}},gameplay_statistic:{sendGUIState:()=>{}},core_quickAccess:{getUiData:()=>{},selectItem:(id,buttonDown,actionIndex)=>[Number,Boolean,Number],contextAction:(id,buttonDown,actionIndex)=>[Number,Boolean,Number],back:()=>{},setEnabled:(enabled,level$1,force)=>[Boolean,String,Boolean],openDynamicSlotConfigurator:index=>Number,getDynamicSlotConfigurationData:()=>{},setDynamicSlotConfiguration:(key,data)=>[String,Object],toggle:()=>[],tryAction:action=>String},ui_bindingsLegend:{sendDataToUI:forceResetFade=>Boolean,triggerInputAction:(action,value)=>[String,Number],toggleShowApp:()=>{},toggleShowVehicleSpecificActions:()=>{}},freeroam_bigMapMode:{enterBigMap:instant=>Object,exitBigMap:force=>Boolean,setBigmapScreenBounds:(windowBounds,mapBounds)=>[Object,Object],navigateToMission:poiId=>String,selectPoi:poiId=>String,poiHovered:(poiId,active)=>[String,Boolean],teleportToPoi:poiId=>String,setOnlyIdsVisible:poiIds=>Array,deselect:()=>{},openPopupCallback:()=>{},toggleBigMap:()=>{},setUiFocus:focus$1=>Boolean},freeroam_bigMapPoiProvider:{sendMissionLocationsToMinimap:()=>{},sendCurrentLevelMissionsToBigmap:()=>{},toggleGroupVisibility:groupKey=>String},freeroam_freeroamConfigurator:{getConfiguration:()=>{},getButtons:()=>{},triggerButton:buttonId=>Number,updateOption:(key,value)=>[String,Any$1],onSpawnPointTileClick:()=>{},onVehicleTileClick:()=>{},getCurrentSpawnPointTile:()=>{},getCurrentVehicleTile:()=>{},setSpawnPoint:(levelName,spawnPointName,key)=>[String,String,String],setVehicle:(model,config,additionalData,key)=>[String,String,Object,String],doubleClickOverride:item=>[Object]},gameplay_taxi:{startTaxiWithCurrentRoute:()=>{}},freeroam_vueBigMap:{enterBigMap:()=>{},exitBigMap:()=>{},getPoiData:()=>{},getFilters:()=>{},getGroups:()=>{},toggleFiltersByIds:filterIds=>Object,toggleFilterSectionById:sectionId=>Object,getGameStateInfo:()=>{},selectPoiFromList:poiId=>String,hoverPoiFromList:(poiId,active)=>[String,Boolean],executePoiAction:actionId=>Number},freeroam_freeroam:{startTrackBuilder:mapName=>String},extensions:{isExtensionLoaded:extensionName=>Boolean,load:extensionName=>String,unload:extensionName=>String,hook:hook=>String,ui_messagesDebugger:{show:()=>{},hide:()=>{},toggle:()=>{}},tech_license:{requestState:()=>{},isValid:()=>{}},core_input_actionFilter:{addAction:(filter,actionName,filtered)=>[Number,String,Boolean],setGroup:(name,actioNames)=>[String,Any$1]},core_input_bindings:{FFBSafetyDataRequest:()=>{},resetBindings:()=>{},resetBindingsForDevice:deviceName=>String,setMenuActionMapEnabled:state=>Boolean,getMenuActionMapEnabled:()=>{},setMenuActionEnabled:(enabled,actionName)=>[Boolean,String],notifyUI:reason=>String,saveBindingsToDisk:deviceContents=>Object,getRecentDevices:()=>{}},core_vehicle_partmgmt:{getConfigList:()=>{},highlightParts:(parts,vehID)=>[Object,Number],loadLocal:filename=>String,resetPartsToLoadedConfig:()=>{},resetVarsToLoadedConfig:()=>{},resetAllToLoadedConfig:()=>{},openConfigFolderInExplorer:()=>{},removeLocal:configName=>String,savedefault:()=>{},saveLocal:filename=>String,sendDataToUI:()=>{},selectPart:(part,subparts)=>[String,Boolean],selectParts:(parts,vehID)=>[Object,Number],selectReset:()=>{},setConfigVars:vars=>Object,setPartsConfig:config=>Object,setPartsTreeConfig:config=>Object,showHighlightedParts:vehID=>Number,setDynamicTextureMaterials:()=>{},partsSelectorChanged:parts=>Object,sendPartsSelectorStateToUI:()=>{}},core_vehicle_mirror:{getAnglesOffset:()=>{},focusOnMirror:mirror_name=>Any$1,setAngleOffset:(mirrorName,x,z,v,save)=>[String,Number,Number,Boolean,Boolean]},gameplay_drift_general:{onDriftAppMounted:()=>{},onDriftAppUnmounted:()=>{}},gameplay_missions_missionScreen:{getMissionScreenData:withMocked(()=>{},()=>getMockedData(`missionDetails.getMissionScreenData`)),startMissionById:(missionId,userSettings,startingOptions)=>[String,Object,Object],stopMissionById:id=>[String],changeUserSettings:(missionId,userSettings)=>[String,Object],startFromWithinMission:(id,userSettings)=>[String,Object],getActiveStarsForUserSettings:(id,userSettings)=>[String,Object],requestStartingOptionsForUserSettings:(id,userSettings)=>[String,Object],isAnyMissionActive:()=>{},isMissionStartOrEndScreenActive:()=>{},openAPMChallenges:(branch,skill)=>[String,String],navigateToMission:id=>[String],setPreselectedMissionId:id=>[String],showMissionRules:id=>[String],getMissionTiles:()=>{},activateSound:(soundLabel,active,frequency)=>[String,Boolean,Number],activateSoundBlur:active=>{Boolean},openVehicleSelectorForMissionBySetting:(mId,settingKey)=>[String,String]},gameplay_missions_missionManager:{getCurrentTaskdataTypeOrNil:()=>{}},gameplay_garageMode:{start:()=>{},isActive:()=>{},setCamera:view=>String,setLighting:lights=>Array,getLighting:()=>{},setGarageMenuState:state=>String,stop:()=>{},testVehicle:()=>{}},ui_dynamicDecals:{initialize:()=>{},exit:()=>{},requestUpdatedData:()=>{},setupEditor:()=>{},loadSaveFile:path=>String,createSaveFile:()=>{},saveChanges:filename=>String,cancelChanges:()=>{},exportSkin:skinName=>String,moveSelectedLayer:order=>Number,setDecalTexture:filePath=>String,setDecalColor:colorData=>Object,setDecalScale:decalData=>Object,setDecalRotation:decalRotation=>Number,setDecalSkew:decalSkew=>Object,setDecalApplyMultiple:applyMultiple=>Boolean,setDecalResetOnApply:resetOnApply=>Boolean,setDecalPositionX:positionX=>Number,setDecalPositionY:positionY=>Number,updateDecalPosition:(positionX,positionY)=>[Number,Number],toggleApplyingDecal:enable=>Boolean,toggleActionMap:enable=>Boolean,toggleDecalVisibility:enable=>Boolean,redo:()=>{},undo:()=>{},createLayer:layerData=>Object,createFillLayer:fillLayerData=>Object,createGroupLayer:layerData=>Object,updateLayer:layerData=>Object,deleteSelectedLayer:()=>{},selectLayer:layerUid=>String,toggleStampActionMap:enable=>Boolean,toggleLayerHighlight:uid$2=>String,toggleLayerVisibility:uid$2=>String},ui_liveryEditor:{save:filename=>String,setup:()=>{},deactivate:()=>{},setDecalTexture:texturePath=>String,useMousePosition:enable=>Boolean,useSurfaceNormal:enable=>Boolean,requestSettingsData:()=>{}},ui_liveryEditor_colorPresets:{getPresets:()=>{},addPreset:()=>{}},ui_liveryEditor_editor:{setup:()=>{},startEditor:()=>{},exitEditor:()=>{},startSession:()=>{},applyDecal:()=>{},applySkin:()=>{},createNew:()=>{},loadFile:path=>String,save:filename=>String,applyChanges:()=>{}},ui_liveryEditor_editMode:{reapply:()=>{},requestReapply:()=>{},cancelReapply:()=>{},setActiveLayer:layerUid=>String,setActiveLayerDirection:direction$1=>Number,removeAppliedLayer:layerUid=>String,resetCursorProperties:properties=>Array,toggleHighlightActive:()=>{},activate:()=>{},deactivate:()=>{},apply:()=>{},requestApply:()=>{},cancelRequestApply:()=>{},toggleRequestApply:()=>{},saveChanges:params=>Object,cancelChanges:()=>{},duplicateActiveLayer:()=>{}},ui_liveryEditor_camera:{setOrthographicView:view=>String,switchOrthographicViewByDirection:(x,y)=>[Number,Number]},ui_liveryEditor_controls:{toggleUseMousePos:()=>{}},ui_liveryEditor_history:{redo:()=>{},undo:()=>{}},ui_liveryEditor_layerAction:{performAction:action=>String,toggleEnabledByLayerUid:uid$2=>String},ui_liveryEditor_layerEdit:{setup:()=>{},setLayer:layerUid=>String,editNewDecal:params=>Object,translateLayer:(x,y)=>[Number,Number],holdTranslate:(axis,value)=>[String,Number],holdTranslateScalar:(axis,value)=>[String,Number],holdScale:(axis,value)=>[String,Number],holdSkew:(axis,value)=>[String,Number],holdPrecise:enable=>Boolean,scaleLayer:(x,y)=>[Number,Number],skewLayer:(x,y)=>[Number,Number],rotateLayer:(steps,counterClockwise)=>[Number,Boolean],setPosition:(x,y)=>[Number,Number],setScale:(x,y)=>[Number,Number],setRotation:degrees=>Number,setSkew:(x,y)=>[Number,Number],setMirrored:settings$1=>[Boolean,Boolean,Number],setLayerMaterials:properties=>Object,activateStampReapply:()=>{},cancelStampReapply:()=>{},requestLayerMaterials:()=>{},saveChanges:()=>{},cancelChanges:()=>{},requestStateData:()=>{},requestInitialLayerData:()=>{},requestTransform:()=>{},endTransform:()=>{},showCursorOrLayer:show=>Boolean,requestReposition:()=>{},cancelReposition:()=>{},applyReposition:()=>{},toggleUseMouseOrCursor:()=>{},setIsRotationPrecise:value=>Boolean,setAllowRotationAction:value=>Boolean},ui_liveryEditor_layers:{requestInitialData:()=>{}},ui_liveryEditor_layers_cursor:{requestData:()=>{}},ui_liveryEditor_layers_decals:{addLayer:params=>Object,setLayer:uid$2=>String},ui_liveryEditor_layers_decal:{addLayerCentered:params=>Object},ui_liveryEditor_layers_fill:{updateLayer:params=>Object,saveChanges:()=>{},restoreLayer:()=>{},restoreDefault:()=>{},requestLayerData:()=>{}},ui_liveryEditor_resources:{requestData:()=>{},getDecalTextures:()=>{},getTextureCategories:()=>{},getTexturesByCategory:category=>String},ui_liveryEditor_selection:{duplicateSelectedLayer:()=>{},getSelectedLayersData:()=>{},setSelected:layerUid=>String,setMultipleSelected:layerUids=>Array,clearSelection:()=>{},toggleSelection:layerIds=>Array,select:(layerIds,highlight)=>[Array,Boolean],toggleHighlightSelectedLayer:()=>{},requestInitialData:()=>{}},ui_liveryEditor_tools:{useTool:tool=>String,closeCurrentTool:()=>{}},ui_liveryEditor_tools_material:{setColor:rgbaArray=>Array,setMetallicIntensity:metallicIntensity=>Number,setNormalIntensity:normalIntensity=>Number,setRoughnessIntensity:roughnessIntensity=>Number,setDecal:decalTexture=>String},ui_liveryEditor_tools_misc:{duplicate:()=>{}},ui_liveryEditor_tools_group:{moveOrderUp:()=>{},moveOrderDown:()=>{},changeOrderToTop:()=>{},changeOrderToBottom:()=>{},moveOrderUpById:layerUid=>[String],moveOrderDownById:layerUid=>[String],setOrder:order=>Number,changeOrder:(oldOrder,oldParent,newOrder,newParent)=>[Number,String,Number,String],groupLayers:()=>{},ungroupLayer:()=>{}},ui_liveryEditor_tools_transform:{translate:(x,y)=>[Number,Number],setPosition:(x,y)=>[Number,Number],rotate:degrees=>Number,scale:(stepsX,stepsY)=>[Number,Number],setScale:(scaleX,scaleY)=>[Number,Number],setRotation:degrees=>Number,skew:(skewX,skewY)=>[Number,Number],setSkew:(skewX,skewY)=>[Number,Number],useStamp:()=>{},cancelStamp:()=>{}},ui_liveryEditor_tools_settings:{deleteLayer:()=>{},setMirrored:(mirrored,flip$2)=>[Boolean,Boolean],setVisibility:show=>Boolean,toggleVisibility:()=>{},toggleVisibilityById:layerUid=>String,toggleLock:()=>{},toggleLockById:layerUid=>String,setMirrorOffset:offset$2=>Number,setUseMousePos:value=>Boolean,setProjectSurfaceNormal:value=>Boolean,rename:name=>String},ui_liveryEditor_userData:{requestUpdatedData:()=>{},getSaveFiles:()=>{},createSaveFile:filename=>String,renameFile:(filename,newFilename)=>[String,String],deleteSaveFile:filename=>String},ui_gameBlur:{replaceGroup:(groupName,list)=>[String,Object]},ui_fadeScreen:{onScreenFadeStateDelayed:state=>Integer},ui_router:{addOrUpdateRoute:(route,config,options)=>[String,Object,Object],push:(routeName,params)=>[String,Object],back:()=>{},forward:()=>{},loadComplete:uiType=>String,routeChangeComplete:uiType=>String},ui_uiMods:{getVueMods:()=>{}}},ActionMap:{enableBindingCapturing:state=>Boolean},gameplay_markerInteraction:{startMissionById:(missionId,userSettings)=>[Any$1,Object],closeViewDetailPrompt:force=>Boolean,changeUserSettings:(missionId,userSettings)=>[String,Object]},ui_missionInfo:{performActivityAction:id=>Integer,setActivityIndexVisible:index=>Integer,closeDialogue:()=>{}},ui_apps_genericMissionData:{sendAllData:()=>{},setData:args=>Object,clearData:()=>{}},ui_apps_pointsBar:{requestAllData:()=>{}},ui_gameplayAppContainers:{getVisibleApps:containerId=>String,onGameplayAppContainerMounted:()=>{},onGameplayAppContainerUnmounted:()=>{},getAvailableApps:containerId=>String,setAppVisibility:(containerId,appId,visible)=>[String,String,Boolean],getAppVisibility:(containerId,appId)=>[String,String],showApp:(containerId,appId)=>[String,String],hideApp:(containerId,appId)=>[String,String],toggleApp:(containerId,appId)=>[String,String],hideAllApps:containerId=>String,getContainerContext:containerId=>String,setContainerContext:(containerId,context)=>[String,String],resetContainerContext:containerId=>String,getAvailableContexts:containerId=>String},ui_messagesTasksAppContainers:{getVisibleApps:containerId=>String,onMessagesTasksAppContainerMounted:()=>{},onMessagesTasksAppContainerUnmounted:()=>{},getAvailableApps:containerId=>String,setAppVisibility:(containerId,appId,visible)=>[String,String,Boolean],getAppVisibility:(containerId,appId)=>[String,String],showApp:(containerId,appId)=>[String,String],hideApp:(containerId,appId)=>[String,String],toggleApp:(containerId,appId)=>[String,String],hideAllApps:containerId=>String},scenetree:{"maincef:setMaxFPSLimit":fps=>Integer},settings:{notifyUI:()=>{},setState:state=>Object,getValue:value=>String,setValue:(settingName,value)=>[String,Any$1]},core_camera:{setFOV:(playerId,fovDeg)=>[Integer,Number]},core_modmanager:{requestState:()=>{}},core_vehicles:{cloneCurrent:()=>{},getModel:model=>String,getCurrentVehicleDetails:withMocked(()=>{},()=>getMockedData(`vehicle.details`)),getVehicleLicenseText:id=>Number,loadDefault:()=>{},removeAll:()=>{},removeAllExceptCurrent:()=>{},removeCurrent:()=>{},requestList:()=>{},requestListEnd:()=>{},setPlateText:plateText=>String,setMeshVisibility:state=>Number,spawnDefault:()=>{},spawnNewVehicle:(model,args)=>[String,Object],replaceVehicle:(model,args)=>[String,Object],isLicensePlateValid:text=>Any$1,getModelList:()=>{}},ui_gridSelector:{getTiles:(backendName,currentPath,pathChanged)=>[String,Object,Boolean],getFilters:backendName=>String,getActiveFilters:backendName=>String,toggleFilter:(backendName,propName,option)=>[String,String],updateRangeFilter:(backendName,propName,min$1,max$1)=>[String,String,Number,Number],resetRangeFilter:(backendName,propName)=>[String,String],resetSetFilter:(backendName,propName)=>[String,String],getSearchText:backendName=>String,setSearchText:(backendName,searchText$1)=>[String,String],getDisplayDataOptions:backendName=>String,setDisplayDataOption:(backendName,key,value)=>[String,String,Any$1],resetDisplayDataToDefaults:backendName=>String,getScreenHeaderTitleAndPath:(backendName,path)=>[String,Object],profilerFinish:(backendName,tag)=>[String,String],closedFromUI:backendName=>String,onOpenedSelectorWithItemDetails:(backendName,itemDetails)=>[String,Object],getDetails:(backendName,itemDetails)=>[String,Object],executeButton:(backendName,buttonId,additionalData)=>[String,Number,Object],getManagementDetails:backendName=>String,exitCallback:()=>{},executeDoubleClick:(backendName,itemDetails)=>[String,Object],exploreFolder:(backendName,path)=>[String,String],goToMod:(backendName,modId)=>[String,String],toggleFavourite:(backendName,itemDetails)=>[String,Object]},ui_gameplaySelector_general:{openGameplaySelector:()=>{},openChallengesSelector:()=>{},openCampaignsSelector:()=>{},openScenariosSelector:()=>{},openRallySelector:()=>{}},ui_gameplaySelector_tileGenerators_levelTiles:{getSpawningOptions:(levelName,backendName)=>[String,String],changeSpawningOption:(key,value)=>[String,Any$1],setAlwaysShowDialogue:(backendName,newValue)=>[String,Boolean]},ui_vehicleSelector_general:{openVehicleSelectorForFreeroamModal:()=>{}},ui_freeroamSelector_general:{setCustomDetailsButtons:buttons=>Array,getCustomDetailsButtons:()=>{},setManagementButtonsEnabled:enabled=>Boolean,getManagementButtonsEnabled:()=>{},openFreeroamSelectorWithCustomButtons:(buttons,callback)=>[Array,Function],setExitCallback:callback=>Function},ui_topBar:{hide:()=>{},requestData:()=>{},requestEntries:()=>{},setActiveItem:itemId=>String,selectItem:itemId=>String,show:()=>{}},core_vehicle_manager:{reloadAllVehicles:()=>{},toggleDebug:()=>{},getDebug:()=>{}},core_vehicle_colors:{setVehicleColor:(index,value)=>[Integer,Object]},core_recoveryPrompt:{getUIData:()=>{},buttonPressed:id=>[String],uiPopupButtonPressed:index=>[Integer],uiPopupCancelPressed:()=>{},onPopupClosed:()=>{}},core_remoteController:{devicesConnected:()=>Boolean,getQRCode:()=>{}},core_levels:{startLevel:()=>{}},util_screenshotCreator:{startWork:workOptions=>Any$1},util_groundModelDebug:{openWindow:()=>{}},scenario_scenariosLoader:{getList:()=>{},start:scenario=>Object},ui_apps_minimap_minimap:{setDrawTransform:(x,y,width$1,height$1)=>[Number,Number,Number,Number],hide:()=>{},toggleOptions:()=>{},getMode:()=>{},setOcclusionTransform:(id,x,y,width$1,height$1)=>[String,Number,Number,Number,Number],resetOcclusionTransform:id=>[String]},ui_apps_minimap_additionalInfo:{requestAdditionalInfo:()=>{}},WinInput:{setForwardRawEvents:state=>Boolean,setForwardFilteredEvents:state=>Boolean},Engine:{Audio:{playOnce:(channel,sound)=>[String,String]},Render:{getAdapterType:()=>{}},UI:{getUIEngine:()=>{}},Platform:{getFSInfo:()=>{}}},Steam:{showFloatingGamepadTextInput:(type,left,top,width$1,height$1)=>[Number,Number,Number,Number,Number]},setCEFTyping:state=>Boolean},api,loadAPI=()=>api||({api}=useBridge());const Any$1=i=>i,Integer=i=>i|0;var argTransformers={Any:Any$1,Boolean,String,Number,Integer,Object,Array:Any$1};signaturesToWrappers(LuaFunctionSignatures_default);var Lua_default=LuaFunctionSignatures_default;function signaturesToWrappers(sigsObject,prefixes$1=[]){let sigType,sig,funcPath,paramTypes,callName;for(let key in sigsObject)sig=sigsObject[key],sigType=typeof sig,funcPath=[...prefixes$1,key],sigType===`function`&&isArrowFunction(sig)?(paramTypes=normaliseTypes(sig(),sig.length),callName=funcPath.join(`.`),sigsObject[key]=buildWrapper(callName,paramTypes,sig.mocked)):sigType===`object`&&(sigsObject[key]=signaturesToWrappers(sig,funcPath));return sigsObject}function buildWrapper(callName,paramTypes,mockResponse=void 0){return(...args)=>run(callName,args,{argTypes:paramTypes,mockResponse})}function isArrowFunction(func){return(``+func).indexOf(`function(`)!=0}function normaliseTypes(types,paramCount){return types?Array.isArray(types)?types:[types]:Array(paramCount).fill(Any$1)}function run(funcName,args,{argTypes=Array(args.length).fill(Any$1),mockResponse}){if(loadAPI(),args.length(argTypes[i]&&argTransformers[argTypes[i].name]||Any$1)(arg)),runMocked(mockResponse,transformedArgs)):(transformedArgs=args.map((arg,i)=>serialize((argTypes[i]&&argTransformers[argTypes[i].name]||Any$1)(arg))),runRaw(`${funcName}(${transformedArgs})`))}function runRaw(luaCode,withPromise=!0){return loadAPI(),withPromise?new Promise(function(resolve$1){api.engineLua(luaCode,resolve$1)}):api.engineLua(luaCode)}function runMocked(response,args){let ret;return ret=typeof response==`function`?response(...args):response,ret&&ret.then?ret:new Promise(resolve$1=>resolve$1(ret))}function serialize(o){return loadAPI(),api.serializeToLua(o)}function serializeCheck(o){return loadAPI(),api.serializeToLua(o)}var StreamManager_default=class{streamsRefCnt={};gameAPI={};constructor(api$1){this.gameAPI=api$1}_updateSubscriptions(){let reqVehStreams=[];for(let k in this.streamsRefCnt)reqVehStreams.push(k);let subscriptions={vehicles:[{byPlayerId:0,streams:reqVehStreams}]};this.gameAPI.subscribeToEvents(JSON.stringify(subscriptions))}add(streams){for(let i=0;i!!(node.offsetWidth&&node.offsetHeight);function isVisible(node,_style=null){let tmp=node;for(_style||=document.defaultView.getComputedStyle(tmp,null);tmp.tagName!==`HTML`;){if(!tmp.isConnected||tmp.nodeType!==Node.ELEMENT_NODE||(_style=document.defaultView.getComputedStyle(tmp,null),_style.display===`none`||_style.visibility===`hidden`||_style.opacity===`0`))return!1;tmp=tmp.parentNode}return!0}function isOccluded$1(element,rect,dontIgnoreOffscreen){let x=(rect.left+rect.right)/2,y=(rect.top+rect.bottom)/2,topElement=document.elementFromPoint(x,y);if(!topElement)return!!dontIgnoreOffscreen;let tmp=topElement;for(;tmp.tagName!==`HTML`;){if(tmp==element||tmp.tagName===`MD-TOOLTIP`||tmp.noOcclude)return!1;tmp=tmp.parentNode}return!0}function dispatchKey(key,elem=window.document){if(typeof key!=`number`)throw Error(`Invalid key`);let target=elem||document,ev=document.createEvent(`KeyboardEvent`);return Object.defineProperty(ev,`keyCode`,{get:function(){return this.keyCodeVal}}),ev.initKeyboardEvent(`keydown`,!0,!0),ev.keyCodeVal=key,target.dispatchEvent(ev)}const eventDispatcherForElement=element=>(type,extras={})=>(isRef$1(element)?element.value:element).dispatchEvent(Object.assign(new Event(type),extras));function observePosition(element,callback){let trackDiv=document.createElement(`div`);setCss(trackDiv,{position:`fixed`,width:`2px`,height:`2px`,padding:`0`,margin:`0`,border:`0`,outline:`0`,"pointer-events":`none`},!0),element.classList.add(`bng-pos-observed`),trackDiv.className=`bng-pos-observer`,element.children.length?element.insertBefore(trackDiv,element.firstChild):element.appendChild(trackDiv),window.BNG_Logger&&window.BNG_Logger.assert(()=>!isAffectedByCss(trackDiv),`Position observer can break styles inside your element! Please adjust your styles using .bng-pos-observed and/or .bng-pos-observer selectors
`,element);let fixPosition=()=>{let rect=trackDiv.getBoundingClientRect();setCss(trackDiv,{"margin-left":`${parseFloat(trackDiv.style.marginLeft||`0`)-rect.left-1}px`,"margin-top":`${parseFloat(trackDiv.style.marginTop||`0`)-rect.top-1}px`},!0)};fixPosition();let intersectionObserver=new IntersectionObserver(entries=>{Math.round(entries[0].intersectionRatio*4)!==1&&(fixPosition(),callback())},{threshold:[.125,.375,.625,.875]});return intersectionObserver.observe(trackDiv),()=>{intersectionObserver.disconnect(),trackDiv.remove(),element.classList.remove(`bng-pos-observed`)}}window.observePosition=observePosition;function setCss(element,rules,important=void 0){if(window.BNG_Logger&&window.BNG_Logger.assert(()=>!Object.values(rules).some(val=>val.endsWith(` !important`)),`Rule values cannot have !important in them. Please set important flag instead.`,rules),important)for(let key in window.BNG_Logger&&window.BNG_Logger.assert(()=>!Object.keys(rules).some(name=>name!==name.toLowerCase()),`Rule names must be in kebab-case (as in CSS itself)`,rules),rules)element.style.setProperty(key,rules[key],`important`);else Object.assign(element.style,rules)}function isAffectedByCss(element,parent=void 0,fast=!1){if(!element||!element.isConnected||!parent&&!element.parentNode)return!1;parent||=element.parentNode;let clone=element.cloneNode(!fast);parent.insertBefore(clone,element);let orig=window.getComputedStyle(element),cloned=window.getComputedStyle(clone),affected=!1;for(let prop of orig)if(orig[prop]!==cloned[prop]){affected=!0;break}return parent.removeChild(clone),affected}var crossfire_exports=__export({MONITORED_UI_NAV_EVENTS:()=>MONITORED_UI_NAV_EVENTS,NAVIGABLE_ELEMENTS_SELECTOR:()=>NAVIGABLE_ELEMENTS_SELECTOR,NAV_PRIORITY_ATTR:()=>NAV_PRIORITY_ATTR,NAV_PRIORITY_CONTAINER_ATTR:()=>NAV_PRIORITY_CONTAINER_ATTR,NO_CHILD_NAV_ATTR:()=>NO_CHILD_NAV_ATTR,NO_NAV_ATTR:()=>NO_NAV_ATTR,SCROLL_ATTR:()=>SCROLL_ATTR,SCROLL_EVENT_H:()=>SCROLL_EVENT_H,SCROLL_EVENT_V:()=>SCROLL_EVENT_V,SCROLL_FORCE_ATTR:()=>SCROLL_FORCE_ATTR,collectRects:()=>collectRects,findNext:()=>findNext,focusOnElement:()=>focusOnElement,handleUINavEvent:()=>handleUINavEvent,isAvailable:()=>isAvailable,isNavigable:()=>isNavigable$1,isNavigatable:()=>isNavigable$1,isOccluded:()=>isOccluded,isVisibleFast:()=>isVisibleFast,navigate:()=>navigate,navigateScroll:()=>navigateScroll,scrollFix:()=>scrollFix,uncollectRects:()=>uncollectRects});const NAVIGABLE_ELEMENTS_SELECTOR=`[is-bng-panel], [bng-nav-item], [ng-click], [href], [bng-all-clicks], [bng-all-clicks-no-nav], [ui-sref], input, textarea, button, md-option, md-slider, md-select, md-checkbox`,NO_NAV_ATTR=`bng-no-nav`,NO_CHILD_NAV_ATTR=`bng-no-child-nav`,NAV_PRIORITY_CONTAINER_ATTR=`bng-nav-priority-container`,NAV_PRIORITY_ATTR=`bng-nav-priority-item`;var MENU_NAVIGATION_CLASS=`menu-navigation`,IGNORE_TAGS=[`HTML`,`BODY`];const SCROLL_ATTR=`bng-nav-scroll`,SCROLL_FORCE_ATTR=`bng-nav-scroll-force`;var DIR={LEFT:`left`,UP:`up`,RIGHT:`right`,DOWN:`down`},DIR_KEYS={[DIR.LEFT]:37,[DIR.UP]:38,[DIR.RIGHT]:39,[DIR.DOWN]:40},AXIS_H=`horizontal`,AXIS_V=`vertical`;const SCROLL_EVENT_H=`rotate_h_cam`,SCROLL_EVENT_V=`rotate_v_cam`;var UI_SCROLL_EVENT_ACTIONS={[SCROLL_EVENT_H]:AXIS_H,[SCROLL_EVENT_V]:AXIS_V},UI_SCROLL_ACTION_EVENTS={[AXIS_H]:SCROLL_EVENT_H,[AXIS_V]:SCROLL_EVENT_V},SCALAR_EVENT_H=`focus_lr`,SCALAR_EVENT_V=`focus_ud`,UI_SCALAR_EVENT_ACTIONS={[SCALAR_EVENT_H]:AXIS_H,[SCALAR_EVENT_V]:AXIS_V},UI_NAV_EVENT_ACTIONS={focus_u:`up`,focus_d:`down`,focus_l:`left`,focus_r:`right`,ok:`confirm`,tab_l:`tab_l`,tab_r:`tab_r`};const MONITORED_UI_NAV_EVENTS=[...Object.keys(UI_NAV_EVENT_ACTIONS),...Object.keys(UI_SCALAR_EVENT_ACTIONS)];var THUMBSTICK_DEADZONE=.5,lastScalarValue={horizontal:0,vertical:0},TRACKER_ID=`crossfire`;function focusOnElement(elem){let contentEditable=elem.contentEditable,tabIndex=elem.tabIndex;elem.contentEditable=!0,elem.tabIndex=0,elem.focus(),elem.tabIndex=tabIndex,elem.contentEditable=contentEditable}function getNavigableElements(root=null,forceAll=!1){let res=[...(root||document.body).querySelectorAll(NAVIGABLE_ELEMENTS_SELECTOR)];return forceAll||(res=res.filter(elem=>{if(elem.parentNode.closest(`[bng-no-child-nav="1"], [bng-no-child-nav="true"]`))return!1;let noNav=elem.attributes.getNamedItem(NO_NAV_ATTR);return!noNav||noNav.value!==`true`})),res}function isNavigable$1(elem,forceAll=!1){if(!elem||IGNORE_TAGS.includes(elem.nodeName||elem.tagName))return!1;if(elem.classList.contains(MENU_NAVIGATION_CLASS))return!0;let parent=elem.parentNode;if(!parent)return!1;let children=getNavigableElements(parent,forceAll);for(let child of children)if(child===elem)return!0;return!1}function uncollectRects(){let ns=getNavigableElements();for(let node of ns)node.classList.remove(MENU_NAVIGATION_CLASS)}var warnPrioNesting=window.beamng&&!window.beamng.shipping;function collectRects(direction$1,parent,forceAll=!1){let links={};direction$1?links[direction$1]=[]:(links.up=[],links.down=[],links.left=[],links.right=[]);let prioNodes=new WeakSet,ns=getNavigableElements(parent,forceAll);for(let node of ns){if(!isAvailable(node)){node.classList.remove(MENU_NAVIGATION_CLASS);continue}let rectNode=node,prioNode=node.closest(`[${NAV_PRIORITY_CONTAINER_ATTR}]`);if(prioNode&&prioNode!==node&&!prioNodes.has(prioNode)){if(prioNodes.add(prioNode),!warnPrioNesting){let parent$1=prioNode.parentNode.closest(`[${NAV_PRIORITY_CONTAINER_ATTR}]`);parent$1&&(console.warn(`Priority container nesting is not supported. Please remove the nested priority container.
      nop(${this.serializeToLua(text)}) -- (actually run the lua check)
    `)}serializeToLua(obj){let tmp;if(obj==null)return`nil`;switch(obj.constructor){case String:return obj.search(/\\|\"|\n|\t|\r/)==-1?`"${obj}"`:`"${obj.replace(/\\/g,`\\\\`).replace(/\"/g,`\\"`).replace(/\n|\r/g,`\\n`).replace(/\t/g,`\\t`)}"`;case Number:return isFinite(obj)?obj.toString():null;case Boolean:return obj?`true`:`false`;case Array:tmp=[];for(let i=0;iLua_default.extensions[LUA_BLUR_EXTENSION].replaceGroup(`uiBlur`,blurRegionList),getNextAvailableId=()=>(highestId<2**53-1?highestId++:highestId=0).toString(),LUA_BLUR_UNLOADED=0,LUA_BLUR_LOADING=1,LUA_BLUR_LOADED=2,blurLoadedState=LUA_BLUR_UNLOADED;function applyBlur(){if(!window.beamng||!window.beamng.ingame||blurLoadedState===LUA_BLUR_LOADING)return;let isEmpty=!Object.keys(blurRegionList).length;blurLoadedState===LUA_BLUR_UNLOADED?isEmpty||(blurLoadedState=LUA_BLUR_LOADING,Lua_default.extensions.load(LUA_BLUR_EXTENSION).then(()=>{blurLoadedState=LUA_BLUR_LOADED,sendBlurListToLua()})):isEmpty?(Lua_default.extensions.unload(LUA_BLUR_EXTENSION),blurLoadedState=LUA_BLUR_UNLOADED):sendBlurListToLua()}var GameBlurrer_default={register(coord){if(coord===void 0)throw Error(`Cannot register bng-blur with coordinates: `+coord);let id=getNextAvailableId();return blurRegionList[id]=coord,applyBlur(),id},unregister(id){id in blurRegionList&&(delete blurRegionList[id],applyBlur())},update(id,coord){if(!(id in blurRegionList))throw Error(`Trying to update bng-blur with an ID that is not registered: ${id} (of ${Object.keys(blurRegionList)})`);blurRegionList[id]=coord,applyBlur()}},handlers={},streamCoordinator;window.streamUpdate=data=>_runHandlers(`stream`,data),window.multihookUpdate=hooksData=>{for(let i in hooksData){let hook=hooksData[i];trigger(hook[0],hook[1])}},window.HookManager={trigger};var skippedStreamUpdate=null,streamUpdateHandler=function(data){if(streamCoordinator?.processing){console.log(`ERROR: streamUpdate cycle is already active, skipping this update of streams`),skippedStreamUpdate=data;return}skippedStreamUpdate=null;let oldFormat={};if(data.globalStreams)for(let sn in data.globalStreams)oldFormat[sn]=data.globalStreams[sn];if(data.vehicleStreams&&data.vehicleStreams.player_0)for(let sn in data.vehicleStreams.player_0)oldFormat[sn]=data.vehicleStreams.player_0[sn];streamCoordinator?.beforeBroadcast(),window.globalAngularRootScope?.$broadcast(`streamsUpdate`,oldFormat),window.vueEventBus?.emit(`onStreamsUpdate`,oldFormat),window.vueGlobalStore&&(window.vueGlobalStore.streams=oldFormat),streamCoordinator?.afterBroadcast(()=>{!streamCoordinator.processing&&skippedStreamUpdate&&streamUpdateHandler(skippedStreamUpdate)})};add$1(`streamMain`,streamUpdateHandler,`stream`);var mainHookHandler=function(hookName,args){args&&!Array.isArray(args)&&console.error(`HookManager.trigger unsupported arguments (needs to be a list): `+JSON.stringify(hookName)+` - `+JSON.stringify(args).substring(0,30)+` ... `),window.vueEventBus?.emit(hookName,...args),window.globalAngularRootScope?.$broadcast(hookName,...args)};add$1(`hooksMain`,mainHookHandler);function add$1(id,func,type=`hook`){handlers[type]||(handlers[type]={}),handlers[type][id]=func}function remove$1(id,type=`hook`){handlers[type]&&delete handlers[type][id]}function trigger(hookName,args){_runHandlers(`hook`,hookName,args)}function _runHandlers(type,...data){if(handlers[type]){let toRun=Object.values(handlers[type]);toRun.length&&toRun.forEach(f=>f(...data))}}var Hooks_default={add:add$1,remove:remove$1,trigger,setStreamCoordinator(manager){streamCoordinator=manager}},scriptRel=`modulepreload`,assetsURL=function(dep){return`/local/ui/ui-vue/`+dep},seen={};const __vitePreload=function(baseModule,deps$1,importerUrl){let promise=Promise.resolve();if(deps$1&&deps$1.length>0){let links=document.getElementsByTagName(`link`),cspNonceMeta=document.querySelector(`meta[property=csp-nonce]`),cspNonce=cspNonceMeta?.nonce||cspNonceMeta?.getAttribute(`nonce`);function allSettled(promises$2){return Promise.all(promises$2.map(p$1=>Promise.resolve(p$1).then(value$1=>({status:`fulfilled`,value:value$1}),reason=>({status:`rejected`,reason}))))}promise=allSettled(deps$1.map(dep=>{if(dep=assetsURL(dep,importerUrl),dep in seen)return;seen[dep]=!0;let isCss=dep.endsWith(`.css`),cssSelector=isCss?`[rel="stylesheet"]`:``;if(importerUrl)for(let i$1=links.length-1;i$1>=0;i$1--){let link$1=links[i$1];if(link$1.href===dep&&(!isCss||link$1.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${dep}"]${cssSelector}`))return;let link=document.createElement(`link`);if(link.rel=isCss?`stylesheet`:scriptRel,isCss||(link.as=`script`),link.crossOrigin=``,link.href=dep,cspNonce&&link.setAttribute(`nonce`,cspNonce),document.head.appendChild(link),isCss)return new Promise((res,rej)=>{link.addEventListener(`load`,res),link.addEventListener(`error`,()=>rej(Error(`Unable to preload CSS for ${dep}`)))})}))}function handlePreloadError(err$2){let e$1=new Event(`vite:preloadError`,{cancelable:!0});if(e$1.payload=err$2,window.dispatchEvent(e$1),!e$1.defaultPrevented)throw err$2}return promise.then(res=>{for(let item of res||[])item.status===`rejected`&&handlePreloadError(item.reason);return baseModule().catch(handlePreloadError)})};var MOCK_DATA_PATH=`../mockdata`;function applyMockInterface(originalObject,mockInterface){let handler$1={mockInterface,get(target,propertyName){return this.mockInterface[propertyName]||target[propertyName]||defaultMockedMethod(propertyName)}};return new Proxy(originalObject,handler$1)}function defaultMockedMethod(name){return{[name]:function(...args){console.log(`Mocked method '${name}' called with:`),console.log(args)}}[name]}function getMockedData(fullPath){const[file$1,...path]=fullPath.split(`.`),filename=`${MOCK_DATA_PATH}/${file$1}.js`,toEval=[`d`,`default`,...path].join(`.`);return __vitePreload(()=>import(filename),[]).then(d=>eval(toEval))}const runInBrowser=fn=>{window.beamng||fn()},sendGUIHook=(name,...params)=>{window.bridge&&window.bridge.events&&window.bridge.events.emit(name,...params),window.globalAngularRootScope&&window.globalAngularRootScope.$broadcast(name,...params)};var withMocked=(sig,getData)=>(sig.mocked=getData,sig),LuaFunctionSignatures_default={dev:{getMockedData:key=>String},getVehicleColor:()=>{},getVehicleColorPalette:index=>Integer,resetGameplay:playerID=>Integer,quit:()=>{},checkFSErrors:()=>{},returnToMainMenu:()=>{},guihooks:{trigger:withMocked(hookName=>String,sendGUIHook)},simTimeAuthority:{togglePause:()=>{},getPause:()=>{},pause:state=>Boolean,pushPauseRequest:id=>String,popPauseRequest:id=>String},commands:{toggleCamera:()=>{}},ui_audio:{playEventSound:(soundClass,type)=>[String,String]},career_career:{closeAllMenus:()=>{},isActive:()=>{},sendAllCareerSaveSlotsData:()=>{},sendCurrentSaveSlotData:()=>{},createOrLoadCareerAndStart:(id,specificAutosave,tutorial)=>[String,Any$1,Boolean]},career_saveSystem:{saveCurrent:()=>{},removeSaveSlot:id=>String,renameSaveSlot:(name,newName)=>[String,String]},career_modules_uiUtils:{getCareerStatusData:withMocked(()=>{},()=>getMockedData(`career.status`)),getCareerSimpleStats:withMocked(()=>{},()=>getMockedData(`career.simpleStats`)),getCareerPauseContextButtons:()=>{},callCareerPauseContextButtons:id=>Number,getCareerCurrentLevelName:()=>{}},career_modules_fuel:{requestRefuelingTransactionData:()=>{},sendUpdateDataToUI:()=>{},uiButtonStartFueling:energyType=>String,uiButtonStopFueling:energyType=>String,onChangeFlowRate:flowRate=>Number,payPrice:()=>{},uiCancelTransaction:()=>{}},career_modules_logbook:{getLogbook:withMocked(()=>{},()=>getMockedData(`logbook.sample`)),setLogbookEntryRead:(id,state)=>[String,Boolean]},career_modules_milestones_milestones:{getMilestones:()=>{},claim:id=>Number,unclaimedMilestonesCount:()=>{}},career_modules_branches_landing:{openBigMapWithMissionSelected:id=>String,getBranchSkillCardData:id=>String,getBranchPageData:id=>String,getLandingPageData:domain=>String,getCargoProgressForUI:()=>{}},career_modules_partShopping:{cancelShopping:()=>{},applyShopping:()=>{},installPartByPartShopId:id=>Number,removePartBySlot:slot=>String,sendShoppingDataToUI:()=>{}},career_modules_vehicleShopping:{showVehicle:id=>Number,navigateToPos:pos=>Object,openShop:(seller,computerId)=>[Any$1,Any$1],cancelShopping:()=>{},quickTravelToVehicle:id=>Number,openPurchaseMenu:(purchaseType,shopId)=>[String,Number],updateInsuranceSelection:insuranceId=>Number,openInventoryMenuForTradeIn:()=>{},buyFromPurchaseMenu:(purchaseType,options)=>[String,Any$1],cancelPurchase:purchaseType=>String,getShoppingData:()=>{},sendPurchaseDataToUi:()=>{},removeTradeInVehicle:()=>{},onShoppingMenuClosed:()=>{}},career_modules_marketplace:{getListings:()=>{},menuOpened:open$1=>Boolean,acceptOffer:(inventoryId,offerIndex)=>[Number,Number],declineOffer:(inventoryId,offerIndex)=>[Number,Number],listVehicles:inventoryIds=>[Array],openMenu:()=>{},removeVehicleListing:inventoryId=>Number,startNegotiateBuyingOffer:(inventoryId,offerIndex)=>[Number,Number],startNegotiateSellingOffer:shopId=>[Number],getNegotiationState:()=>{},makeNegotiationOffer:price=>Number,takeTheirOffer:()=>{},cancelNegotiation:()=>{}},career_modules_testDrive:{stop:()=>{}},career_modules_inspectVehicle:{startTestDrive:()=>{},onInspectScreenChanged:enabled=>Boolean,onPurchaseMenuClosed:()=>{},repairVehicle:()=>{}},career_modules_loanerVehicles:{markForSpawning:loanInfo=>Object,spawnAndLoanVehicle:(vehicleInfo,loanInfo)=>[Object,Object],getLoanedVehiclesByOrg:orgId=>String,returnVehicle:inventoryId=>Number},career_modules_inventory:{sellVehicle:id=>Number,sellVehicleFromInventory:id=>Number,returnLoanedVehicleFromInventory:id=>Number,expediteRepairFromInventory:(inventoryId,price)=>[Number,Number],enterVehicle:id=>Number,openMenuFromComputer:computerId=>String,closeMenu:()=>{},chooseVehicleFromMenu:(vehId,buttonId,repairPrevVeh)=>[Number,Number,Boolean],setFavoriteVehicle:id=>Number,sendDataToUi:()=>{},removeVehicleObject:id=>Number,getVehicle:id=>Number,getVehicleUiData:id=>Number,isEmpty:()=>{},setLicensePlateText:(inventoryId,text)=>[Number,String],purchaseLicensePlateText:(inventoryId,text,money)=>[Number,String,Number],isLicensePlateValid:text=>String,isVehicleNameValid:text=>String,renameVehicle:(inventoryId,name)=>[Number,String],openInventoryMenuForChoosingListing:()=>{}},career_modules_vehiclePerformance:{startDragTest:id=>Number,cancelTest:()=>{}},career_modules_partInventory:{openMenu:computerId=>Any$1,closeMenu:()=>{},sendUIData:()=>{},sellParts:ids=>Array,partInventoryClosed:()=>{}},career_modules_insurance_insurance:{getProposablePoliciesForVehInv:invVehId=>Number,payInsuranceScoreReset:policyId=>Number,purchaseInsurance:id=>Number,calculateRenewalPriceDetails:(policyId,tempPerks)=>[Number,Any$1],changeInvVehInsuranceCoverageOptions:(policyId,changedPerks)=>[Number,Object],changeInvVehInsurance:(invVehId,newInsuranceId)=>[Number,Number],startRepairInGarage:(vehicleInfo,repairOptionData)=>[Object,Object],openRepairMenu:(vehicleInfo,originComputerId)=>[Object,Any$1],closeMenu:()=>{},sendUIData:()=>{},inventoryVehNeedsRepair:inventoryId=>Number,getInvVehHaveFuelDiscount:invVehId=>Object,openChooseInsuranceScreen:()=>{},calculateInsurancePremium:(insuranceId,potentialCoverageOptions,potentialVehiclesCoverageOptions)=>[Number,Object,Object],saveNewInsuranceCoverageOptions:(insuranceId,newCoverageOptions)=>[Number,Object],calculateVehiclePremium:(vehicleId,nonInvVehInfo,potentialCoverageOptions)=>[Number,Object,Object],saveNewVehicleCoverageOptions:(vehicleId,newCoverageOptions)=>[Number,Object],sendChooseInsuranceDataToTheUI:(purchaseType,shopId,defaultInsuranceId)=>[String,Number,Number],sendChangeInsuranceDataToTheUI:vehicleId=>[Number],resetDriverScore:()=>{}},career_modules_insurance_repairScreen:{getRepairData:()=>{},closeMenu:()=>{},startRepairInGarage:(invVehId,repairOptionData)=>[Number,Object],openRepairMenu:(vehicleInfo,originComputerId)=>[Object,Any$1]},career_modules_playerAbstract:{getPlayerAbstractData:()=>{},closePlayerAbstractMenu:()=>{}},career_modules_tuning:{apply:tuningValues=>Object,start:(vehId,origin)=>[Any$1,Any$1],getTuningData:()=>{},close:()=>{},applyShopping:()=>{},cancelShopping:()=>{},removeVarFromShoppingCart:varName=>String},career_modules_painting:{apply:()=>{},start:(vehId,origin)=>[Any$1,Any$1],getPaintData:()=>{},close:()=>{},setPaints:paint=>Object,getFactoryPaint:()=>{},onUIOpened:()=>{}},career_modules_questManager:{setQuestAsNotNew:id=>String,claimRewardsById:id=>String},career_modules_computer:{onMenuClosed:()=>{},getComputerUIData:()=>{},computerButtonCallback:(buttonId,inventoryId)=>[String,Any$1],openComputerMenuById:computerId=>String,closeAllMenus:()=>{}},career_modules_delivery_general:{setAutomaticRoute:enabled=>Boolean,setDetailedDropOff:enabled=>Boolean,setSetting:(key,value)=>[String,Any$1],getSettings:()=>{},setDeliveryTimePaused:paused=>Boolean},career_modules_delivery_cargoScreen:{requestCargoDataForUi:(facilityId,parkingSpotPath,updateMaxTimeStamp)=>[Any$1,Any$1,Any$1],moveCargoFromUi:(cargoId,targetLocation)=>[Number,Object],commitDeliveryConfiguration:()=>{},cancelDeliveryConfiguration:()=>{},exitDeliveryMode:()=>{},exitCargoOverviewScreen:()=>{},showCargoRoutePreview:cargoId=>Any$1,showVehicleOfferRoutePreview:offerId=>Any$1,setCargoRoute:(cargoId,origin)=>[Number,Boolean],showLocationRoutePreview:(location$1,asProvider)=>[Any$1,Boolean],showCargoContainerHelpPopup:()=>{},setBestRoute:()=>{},spawnOffer:(offerId,fadeToBlack)=>[Number,Any$1],abandonAcceptedOffer:vehId=>Number,setCargoScreenTab:tab=>String,unloadCargoPopupClosed:()=>{},moveMaterialFromUi:()=>{},requestDropOffData:()=>{},confirmDropOffData:(data,facId,psPath)=>[Any$1,Any$1,Any$1],dropOffPopupClosed:mode=>String,clearTransientMoveForCargo:cargoId=>Number,clearTransientMovesForStorage:materialType=>String,applyTransientMoves:()=>{},toggleOfferForSpawning:id=>Number,tryLoadAll:cargoIds=>Array,showRoutePreview:route=>Object,deliveryScreenExternalButtonPressed:id=>Any$1},career_modules_delivery_progress:{activateSound:(soundLabel,active)=>[String,Boolean]},career_modules_linearTutorial:{introPopup:(key,force)=>[String,Boolean],wasIntroPopupsSeen:pages=>Array,isLinearTutorialActive:()=>{}},gameplay_drag_dragBridge:{getHistory:id=>Object,screenshotTimeslip:()=>{}},gameplay_crashTest_scenarioManager:{nextStepFromUI:()=>{}},gameplay_discover:{getDiscoverPages:()=>{},startDiscover:discoverId=>String},freeroam_organizations:{getUIData:()=>{},getUIDataForOrg:orgId=>String},core_replay:{onInit:()=>{},loadFile:filename=>String,stop:()=>{},openReplayFolderInExplorer:()=>{},getRecordings:()=>{},removeRecording:filename=>String,togglePlay:()=>{},toggleRecording:()=>{},cancelRecording:()=>{},toggleSpeed:speed=>Number,pause:()=>{},seek:positionPercent=>Number,acceptRename:(oldFilename,newFilename)=>[String,String],saveMissionReplay:filename=>String,removeMissionSavedReplay:filename=>String,openMissionReplayFolder:filename=>String},core_gamestate:{requestGameState:()=>{},loadingScreenActive:()=>{}},core_gameContext:{getGameContext:withMocked(params=>{},params=>getMockedData(`gameContext.gameContextData`))},core_online:{requestState:()=>{}},core_hardwareinfo:{requestState:()=>{},getInfo:()=>{}},gameplay_statistic:{sendGUIState:()=>{}},core_quickAccess:{getUiData:()=>{},selectItem:(id,buttonDown,actionIndex)=>[Number,Boolean,Number],contextAction:(id,buttonDown,actionIndex)=>[Number,Boolean,Number],back:()=>{},setEnabled:(enabled,level$1,force)=>[Boolean,String,Boolean],openDynamicSlotConfigurator:index=>Number,getDynamicSlotConfigurationData:()=>{},setDynamicSlotConfiguration:(key,data)=>[String,Object],toggle:()=>[],tryAction:action=>String},ui_bindingsLegend:{sendDataToUI:forceResetFade=>Boolean,triggerInputAction:(action,value)=>[String,Number],toggleShowApp:()=>{},toggleShowVehicleSpecificActions:()=>{}},freeroam_bigMapMode:{enterBigMap:instant=>Object,exitBigMap:force=>Boolean,setBigmapScreenBounds:(windowBounds,mapBounds)=>[Object,Object],navigateToMission:poiId=>String,selectPoi:poiId=>String,poiHovered:(poiId,active)=>[String,Boolean],teleportToPoi:poiId=>String,setOnlyIdsVisible:poiIds=>Array,deselect:()=>{},openPopupCallback:()=>{},toggleBigMap:()=>{},setUiFocus:focus$1=>Boolean},freeroam_bigMapPoiProvider:{sendMissionLocationsToMinimap:()=>{},sendCurrentLevelMissionsToBigmap:()=>{},toggleGroupVisibility:groupKey=>String},freeroam_freeroamConfigurator:{getConfiguration:()=>{},getButtons:()=>{},triggerButton:buttonId=>Number,updateOption:(key,value)=>[String,Any$1],onSpawnPointTileClick:()=>{},onVehicleTileClick:()=>{},getCurrentSpawnPointTile:()=>{},getCurrentVehicleTile:()=>{},setSpawnPoint:(levelName,spawnPointName,key)=>[String,String,String],setVehicle:(model,config,additionalData,key)=>[String,String,Object,String],doubleClickOverride:item=>[Object]},gameplay_taxi:{startTaxiWithCurrentRoute:()=>{}},freeroam_vueBigMap:{enterBigMap:()=>{},exitBigMap:()=>{},getPoiData:()=>{},getFilters:()=>{},getGroups:()=>{},toggleFiltersByIds:filterIds=>Object,toggleFilterSectionById:sectionId=>Object,getGameStateInfo:()=>{},selectPoiFromList:poiId=>String,hoverPoiFromList:(poiId,active)=>[String,Boolean],executePoiAction:actionId=>Number},freeroam_freeroam:{startTrackBuilder:mapName=>String},extensions:{isExtensionLoaded:extensionName=>Boolean,load:extensionName=>String,unload:extensionName=>String,hook:hook=>String,ui_messagesDebugger:{show:()=>{},hide:()=>{},toggle:()=>{}},tech_license:{requestState:()=>{},isValid:()=>{}},core_input_actionFilter:{addAction:(filter,actionName,filtered)=>[Number,String,Boolean],setGroup:(name,actioNames)=>[String,Any$1]},core_input_bindings:{FFBSafetyDataRequest:()=>{},resetBindings:()=>{},resetBindingsForDevice:deviceName=>String,setMenuActionMapEnabled:state=>Boolean,getMenuActionMapEnabled:()=>{},setMenuActionEnabled:(enabled,actionName)=>[Boolean,String],notifyUI:reason=>String,saveBindingsToDisk:deviceContents=>Object,getRecentDevices:()=>{}},core_vehicle_partmgmt:{getConfigList:()=>{},highlightParts:(parts,vehID)=>[Object,Number],loadLocal:filename=>String,resetPartsToLoadedConfig:()=>{},resetVarsToLoadedConfig:()=>{},resetAllToLoadedConfig:()=>{},openConfigFolderInExplorer:()=>{},removeLocal:configName=>String,savedefault:()=>{},saveLocal:filename=>String,sendDataToUI:()=>{},selectPart:(part,subparts)=>[String,Boolean],selectParts:(parts,vehID)=>[Object,Number],selectReset:()=>{},setConfigVars:vars=>Object,setPartsConfig:config=>Object,setPartsTreeConfig:config=>Object,showHighlightedParts:vehID=>Number,setDynamicTextureMaterials:()=>{},partsSelectorChanged:parts=>Object,sendPartsSelectorStateToUI:()=>{}},core_vehicle_mirror:{getAnglesOffset:()=>{},focusOnMirror:mirror_name=>Any$1,setAngleOffset:(mirrorName,x,z,v,save)=>[String,Number,Number,Boolean,Boolean]},gameplay_drift_general:{onDriftAppMounted:()=>{},onDriftAppUnmounted:()=>{}},gameplay_missions_missionScreen:{getMissionScreenData:withMocked(()=>{},()=>getMockedData(`missionDetails.getMissionScreenData`)),startMissionById:(missionId,userSettings,startingOptions)=>[String,Object,Object],stopMissionById:id=>[String],changeUserSettings:(missionId,userSettings)=>[String,Object],startFromWithinMission:(id,userSettings)=>[String,Object],getActiveStarsForUserSettings:(id,userSettings)=>[String,Object],requestStartingOptionsForUserSettings:(id,userSettings)=>[String,Object],isAnyMissionActive:()=>{},isMissionStartOrEndScreenActive:()=>{},openAPMChallenges:(branch,skill)=>[String,String],navigateToMission:id=>[String],setPreselectedMissionId:id=>[String],showMissionRules:id=>[String],getMissionTiles:()=>{},activateSound:(soundLabel,active,frequency)=>[String,Boolean,Number],activateSoundBlur:active=>{Boolean},openVehicleSelectorForMissionBySetting:(mId,settingKey)=>[String,String]},gameplay_missions_missionManager:{getCurrentTaskdataTypeOrNil:()=>{}},gameplay_garageMode:{start:()=>{},isActive:()=>{},setCamera:view=>String,setLighting:lights=>Array,getLighting:()=>{},setGarageMenuState:state=>String,stop:()=>{},testVehicle:()=>{}},ui_dynamicDecals:{initialize:()=>{},exit:()=>{},requestUpdatedData:()=>{},setupEditor:()=>{},loadSaveFile:path=>String,createSaveFile:()=>{},saveChanges:filename=>String,cancelChanges:()=>{},exportSkin:skinName=>String,moveSelectedLayer:order=>Number,setDecalTexture:filePath=>String,setDecalColor:colorData=>Object,setDecalScale:decalData=>Object,setDecalRotation:decalRotation=>Number,setDecalSkew:decalSkew=>Object,setDecalApplyMultiple:applyMultiple=>Boolean,setDecalResetOnApply:resetOnApply=>Boolean,setDecalPositionX:positionX=>Number,setDecalPositionY:positionY=>Number,updateDecalPosition:(positionX,positionY)=>[Number,Number],toggleApplyingDecal:enable=>Boolean,toggleActionMap:enable=>Boolean,toggleDecalVisibility:enable=>Boolean,redo:()=>{},undo:()=>{},createLayer:layerData=>Object,createFillLayer:fillLayerData=>Object,createGroupLayer:layerData=>Object,updateLayer:layerData=>Object,deleteSelectedLayer:()=>{},selectLayer:layerUid=>String,toggleStampActionMap:enable=>Boolean,toggleLayerHighlight:uid$2=>String,toggleLayerVisibility:uid$2=>String},ui_liveryEditor:{save:filename=>String,setup:()=>{},deactivate:()=>{},setDecalTexture:texturePath=>String,useMousePosition:enable=>Boolean,useSurfaceNormal:enable=>Boolean,requestSettingsData:()=>{}},ui_liveryEditor_colorPresets:{getPresets:()=>{},addPreset:()=>{}},ui_liveryEditor_editor:{setup:()=>{},startEditor:()=>{},exitEditor:()=>{},startSession:()=>{},applyDecal:()=>{},applySkin:()=>{},createNew:()=>{},loadFile:path=>String,save:filename=>String,applyChanges:()=>{}},ui_liveryEditor_editMode:{reapply:()=>{},requestReapply:()=>{},cancelReapply:()=>{},setActiveLayer:layerUid=>String,setActiveLayerDirection:direction$1=>Number,removeAppliedLayer:layerUid=>String,resetCursorProperties:properties=>Array,toggleHighlightActive:()=>{},activate:()=>{},deactivate:()=>{},apply:()=>{},requestApply:()=>{},cancelRequestApply:()=>{},toggleRequestApply:()=>{},saveChanges:params=>Object,cancelChanges:()=>{},duplicateActiveLayer:()=>{}},ui_liveryEditor_camera:{setOrthographicView:view=>String,switchOrthographicViewByDirection:(x,y)=>[Number,Number]},ui_liveryEditor_controls:{toggleUseMousePos:()=>{}},ui_liveryEditor_history:{redo:()=>{},undo:()=>{}},ui_liveryEditor_layerAction:{performAction:action=>String,toggleEnabledByLayerUid:uid$2=>String},ui_liveryEditor_layerEdit:{setup:()=>{},setLayer:layerUid=>String,editNewDecal:params=>Object,translateLayer:(x,y)=>[Number,Number],holdTranslate:(axis,value)=>[String,Number],holdTranslateScalar:(axis,value)=>[String,Number],holdScale:(axis,value)=>[String,Number],holdSkew:(axis,value)=>[String,Number],holdPrecise:enable=>Boolean,scaleLayer:(x,y)=>[Number,Number],skewLayer:(x,y)=>[Number,Number],rotateLayer:(steps,counterClockwise)=>[Number,Boolean],setPosition:(x,y)=>[Number,Number],setScale:(x,y)=>[Number,Number],setRotation:degrees=>Number,setSkew:(x,y)=>[Number,Number],setMirrored:settings$1=>[Boolean,Boolean,Number],setLayerMaterials:properties=>Object,activateStampReapply:()=>{},cancelStampReapply:()=>{},requestLayerMaterials:()=>{},saveChanges:()=>{},cancelChanges:()=>{},requestStateData:()=>{},requestInitialLayerData:()=>{},requestTransform:()=>{},endTransform:()=>{},showCursorOrLayer:show=>Boolean,requestReposition:()=>{},cancelReposition:()=>{},applyReposition:()=>{},toggleUseMouseOrCursor:()=>{},setIsRotationPrecise:value=>Boolean,setAllowRotationAction:value=>Boolean},ui_liveryEditor_layers:{requestInitialData:()=>{}},ui_liveryEditor_layers_cursor:{requestData:()=>{}},ui_liveryEditor_layers_decals:{addLayer:params=>Object,setLayer:uid$2=>String},ui_liveryEditor_layers_decal:{addLayerCentered:params=>Object},ui_liveryEditor_layers_fill:{updateLayer:params=>Object,saveChanges:()=>{},restoreLayer:()=>{},restoreDefault:()=>{},requestLayerData:()=>{}},ui_liveryEditor_resources:{requestData:()=>{},getDecalTextures:()=>{},getTextureCategories:()=>{},getTexturesByCategory:category=>String},ui_liveryEditor_selection:{duplicateSelectedLayer:()=>{},getSelectedLayersData:()=>{},setSelected:layerUid=>String,setMultipleSelected:layerUids=>Array,clearSelection:()=>{},toggleSelection:layerIds=>Array,select:(layerIds,highlight)=>[Array,Boolean],toggleHighlightSelectedLayer:()=>{},requestInitialData:()=>{}},ui_liveryEditor_tools:{useTool:tool=>String,closeCurrentTool:()=>{}},ui_liveryEditor_tools_material:{setColor:rgbaArray=>Array,setMetallicIntensity:metallicIntensity=>Number,setNormalIntensity:normalIntensity=>Number,setRoughnessIntensity:roughnessIntensity=>Number,setDecal:decalTexture=>String},ui_liveryEditor_tools_misc:{duplicate:()=>{}},ui_liveryEditor_tools_group:{moveOrderUp:()=>{},moveOrderDown:()=>{},changeOrderToTop:()=>{},changeOrderToBottom:()=>{},moveOrderUpById:layerUid=>[String],moveOrderDownById:layerUid=>[String],setOrder:order=>Number,changeOrder:(oldOrder,oldParent,newOrder,newParent)=>[Number,String,Number,String],groupLayers:()=>{},ungroupLayer:()=>{}},ui_liveryEditor_tools_transform:{translate:(x,y)=>[Number,Number],setPosition:(x,y)=>[Number,Number],rotate:degrees=>Number,scale:(stepsX,stepsY)=>[Number,Number],setScale:(scaleX,scaleY)=>[Number,Number],setRotation:degrees=>Number,skew:(skewX,skewY)=>[Number,Number],setSkew:(skewX,skewY)=>[Number,Number],useStamp:()=>{},cancelStamp:()=>{}},ui_liveryEditor_tools_settings:{deleteLayer:()=>{},setMirrored:(mirrored,flip$2)=>[Boolean,Boolean],setVisibility:show=>Boolean,toggleVisibility:()=>{},toggleVisibilityById:layerUid=>String,toggleLock:()=>{},toggleLockById:layerUid=>String,setMirrorOffset:offset$2=>Number,setUseMousePos:value=>Boolean,setProjectSurfaceNormal:value=>Boolean,rename:name=>String},ui_liveryEditor_userData:{requestUpdatedData:()=>{},getSaveFiles:()=>{},createSaveFile:filename=>String,renameFile:(filename,newFilename)=>[String,String],deleteSaveFile:filename=>String},ui_gameBlur:{replaceGroup:(groupName,list)=>[String,Object]},ui_fadeScreen:{onScreenFadeStateDelayed:state=>Integer},ui_router:{addOrUpdateRoute:(route,config,options)=>[String,Object,Object],push:(routeName,params)=>[String,Object],back:()=>{},forward:()=>{},loadComplete:uiType=>String,routeChangeComplete:uiType=>String},ui_uiMods:{getVueMods:()=>{}}},ActionMap:{enableBindingCapturing:state=>Boolean},gameplay_markerInteraction:{startMissionById:(missionId,userSettings)=>[Any$1,Object],closeViewDetailPrompt:force=>Boolean,changeUserSettings:(missionId,userSettings)=>[String,Object]},ui_missionInfo:{performActivityAction:id=>Integer,setActivityIndexVisible:index=>Integer,closeDialogue:()=>{}},ui_apps_genericMissionData:{sendAllData:()=>{},setData:args=>Object,clearData:()=>{}},ui_apps_pointsBar:{requestAllData:()=>{}},ui_gameplayAppContainers:{getVisibleApps:containerId=>String,onGameplayAppContainerMounted:()=>{},onGameplayAppContainerUnmounted:()=>{},getAvailableApps:containerId=>String,setAppVisibility:(containerId,appId,visible)=>[String,String,Boolean],getAppVisibility:(containerId,appId)=>[String,String],showApp:(containerId,appId)=>[String,String],hideApp:(containerId,appId)=>[String,String],toggleApp:(containerId,appId)=>[String,String],hideAllApps:containerId=>String,getContainerContext:containerId=>String,setContainerContext:(containerId,context)=>[String,String],resetContainerContext:containerId=>String,getAvailableContexts:containerId=>String},ui_messagesTasksAppContainers:{getVisibleApps:containerId=>String,onMessagesTasksAppContainerMounted:()=>{},onMessagesTasksAppContainerUnmounted:()=>{},getAvailableApps:containerId=>String,setAppVisibility:(containerId,appId,visible)=>[String,String,Boolean],getAppVisibility:(containerId,appId)=>[String,String],showApp:(containerId,appId)=>[String,String],hideApp:(containerId,appId)=>[String,String],toggleApp:(containerId,appId)=>[String,String],hideAllApps:containerId=>String},scenetree:{"maincef:setMaxFPSLimit":fps=>Integer},settings:{notifyUI:()=>{},setState:state=>Object,getValue:value=>String,setValue:(settingName,value)=>[String,Any$1]},core_camera:{setFOV:(playerId,fovDeg)=>[Integer,Number]},core_modmanager:{requestState:()=>{}},core_vehicles:{cloneCurrent:()=>{},getModel:model=>String,getCurrentVehicleDetails:withMocked(()=>{},()=>getMockedData(`vehicle.details`)),getVehicleLicenseText:id=>Number,loadDefault:()=>{},removeAll:()=>{},removeAllExceptCurrent:()=>{},removeCurrent:()=>{},requestList:()=>{},requestListEnd:()=>{},setPlateText:plateText=>String,setMeshVisibility:state=>Number,spawnDefault:()=>{},spawnNewVehicle:(model,args)=>[String,Object],replaceVehicle:(model,args)=>[String,Object],isLicensePlateValid:text=>Any$1,getModelList:()=>{}},ui_gridSelector:{getTiles:(backendName,currentPath,pathChanged)=>[String,Object,Boolean],getFilters:backendName=>String,getActiveFilters:backendName=>String,toggleFilter:(backendName,propName,option)=>[String,String],updateRangeFilter:(backendName,propName,min$1,max$1)=>[String,String,Number,Number],resetRangeFilter:(backendName,propName)=>[String,String],resetSetFilter:(backendName,propName)=>[String,String],getSearchText:backendName=>String,setSearchText:(backendName,searchText$1)=>[String,String],getDisplayDataOptions:backendName=>String,setDisplayDataOption:(backendName,key,value)=>[String,String,Any$1],resetDisplayDataToDefaults:backendName=>String,getScreenHeaderTitleAndPath:(backendName,path)=>[String,Object],profilerFinish:(backendName,tag)=>[String,String],closedFromUI:backendName=>String,onOpenedSelectorWithItemDetails:(backendName,itemDetails)=>[String,Object],getDetails:(backendName,itemDetails)=>[String,Object],executeButton:(backendName,buttonId,additionalData)=>[String,Number,Object],getManagementDetails:backendName=>String,exitCallback:()=>{},executeDoubleClick:(backendName,itemDetails)=>[String,Object],exploreFolder:(backendName,path)=>[String,String],goToMod:(backendName,modId)=>[String,String],toggleFavourite:(backendName,itemDetails)=>[String,Object]},ui_gameplaySelector_general:{openGameplaySelector:()=>{},openChallengesSelector:()=>{},openCampaignsSelector:()=>{},openScenariosSelector:()=>{},openRallySelector:()=>{}},ui_gameplaySelector_tileGenerators_levelTiles:{getSpawningOptions:(levelName,backendName)=>[String,String],changeSpawningOption:(key,value)=>[String,Any$1],setAlwaysShowDialogue:(backendName,newValue)=>[String,Boolean]},ui_vehicleSelector_general:{openVehicleSelectorForFreeroamModal:()=>{}},ui_freeroamSelector_general:{setCustomDetailsButtons:buttons=>Array,getCustomDetailsButtons:()=>{},setManagementButtonsEnabled:enabled=>Boolean,getManagementButtonsEnabled:()=>{},openFreeroamSelectorWithCustomButtons:(buttons,callback)=>[Array,Function],setExitCallback:callback=>Function},ui_topBar:{hide:()=>{},requestData:()=>{},requestEntries:()=>{},setActiveItem:itemId=>String,selectItem:itemId=>String,show:()=>{}},core_vehicle_manager:{reloadAllVehicles:()=>{},toggleDebug:()=>{},getDebug:()=>{}},core_vehicle_colors:{setVehicleColor:(index,value)=>[Integer,Object]},core_recoveryPrompt:{getUIData:()=>{},buttonPressed:id=>[String],uiPopupButtonPressed:index=>[Integer],uiPopupCancelPressed:()=>{},onPopupClosed:()=>{}},core_remoteController:{devicesConnected:()=>Boolean,getQRCode:()=>{}},core_levels:{startLevel:()=>{}},util_screenshotCreator:{startWork:workOptions=>Any$1},util_groundModelDebug:{openWindow:()=>{}},scenario_scenariosLoader:{getList:()=>{},start:scenario=>Object},ui_apps_minimap_minimap:{setDrawTransform:(x,y,width$1,height$1)=>[Number,Number,Number,Number],hide:()=>{},toggleOptions:()=>{},getMode:()=>{},setOcclusionTransform:(id,x,y,width$1,height$1)=>[String,Number,Number,Number,Number],resetOcclusionTransform:id=>[String]},ui_apps_minimap_additionalInfo:{requestAdditionalInfo:()=>{}},WinInput:{setForwardRawEvents:state=>Boolean,setForwardFilteredEvents:state=>Boolean},Engine:{Audio:{playOnce:(channel,sound)=>[String,String]},Render:{getAdapterType:()=>{}},UI:{getUIEngine:()=>{}},Platform:{getFSInfo:()=>{}}},Steam:{showFloatingGamepadTextInput:(type,left,top,width$1,height$1)=>[Number,Number,Number,Number,Number]},setCEFTyping:state=>Boolean},api,loadAPI=()=>api||({api}=useBridge());const Any$1=i=>i,Integer=i=>i|0;var argTransformers={Any:Any$1,Boolean,String,Number,Integer,Object,Array:Any$1};signaturesToWrappers(LuaFunctionSignatures_default);var Lua_default=LuaFunctionSignatures_default;function signaturesToWrappers(sigsObject,prefixes$1=[]){let sigType,sig,funcPath,paramTypes,callName;for(let key in sigsObject)sig=sigsObject[key],sigType=typeof sig,funcPath=[...prefixes$1,key],sigType===`function`&&isArrowFunction(sig)?(paramTypes=normaliseTypes(sig(),sig.length),callName=funcPath.join(`.`),sigsObject[key]=buildWrapper(callName,paramTypes,sig.mocked)):sigType===`object`&&(sigsObject[key]=signaturesToWrappers(sig,funcPath));return sigsObject}function buildWrapper(callName,paramTypes,mockResponse=void 0){return(...args)=>run(callName,args,{argTypes:paramTypes,mockResponse})}function isArrowFunction(func){return(``+func).indexOf(`function(`)!=0}function normaliseTypes(types,paramCount){return types?Array.isArray(types)?types:[types]:Array(paramCount).fill(Any$1)}function run(funcName,args,{argTypes=Array(args.length).fill(Any$1),mockResponse}){if(loadAPI(),args.length(argTypes[i]&&argTransformers[argTypes[i].name]||Any$1)(arg)),runMocked(mockResponse,transformedArgs)):(transformedArgs=args.map((arg,i)=>serialize((argTypes[i]&&argTransformers[argTypes[i].name]||Any$1)(arg))),runRaw(`${funcName}(${transformedArgs})`))}function runRaw(luaCode,withPromise=!0){return loadAPI(),withPromise?new Promise(function(resolve$1){api.engineLua(luaCode,resolve$1)}):api.engineLua(luaCode)}function runMocked(response,args){let ret;return ret=typeof response==`function`?response(...args):response,ret&&ret.then?ret:new Promise(resolve$1=>resolve$1(ret))}function serialize(o){return loadAPI(),api.serializeToLua(o)}function serializeCheck(o){return loadAPI(),api.serializeToLua(o)}var StreamManager_default=class{streamsRefCnt={};gameAPI={};constructor(api$1){this.gameAPI=api$1}_updateSubscriptions(){let reqVehStreams=[];for(let k in this.streamsRefCnt)reqVehStreams.push(k);let subscriptions={vehicles:[{byPlayerId:0,streams:reqVehStreams}]};this.gameAPI.subscribeToEvents(JSON.stringify(subscriptions))}add(streams){for(let i=0;i!!(node.offsetWidth&&node.offsetHeight);function isVisible(node,_style=null){let tmp=node;for(_style||=document.defaultView.getComputedStyle(tmp,null);tmp.tagName!==`HTML`;){if(!tmp.isConnected||tmp.nodeType!==Node.ELEMENT_NODE||(_style=document.defaultView.getComputedStyle(tmp,null),_style.display===`none`||_style.visibility===`hidden`||_style.opacity===`0`))return!1;tmp=tmp.parentNode}return!0}function isOccluded$1(element,rect,dontIgnoreOffscreen){let x=(rect.left+rect.right)/2,y=(rect.top+rect.bottom)/2,topElement=document.elementFromPoint(x,y);if(!topElement)return!!dontIgnoreOffscreen;let tmp=topElement;for(;tmp.tagName!==`HTML`;){if(tmp==element||tmp.tagName===`MD-TOOLTIP`||tmp.noOcclude)return!1;tmp=tmp.parentNode}return!0}function dispatchKey(key,elem=window.document){if(typeof key!=`number`)throw Error(`Invalid key`);let target=elem||document,ev=document.createEvent(`KeyboardEvent`);return Object.defineProperty(ev,`keyCode`,{get:function(){return this.keyCodeVal}}),ev.initKeyboardEvent(`keydown`,!0,!0),ev.keyCodeVal=key,target.dispatchEvent(ev)}const eventDispatcherForElement=element=>(type,extras={})=>(isRef$1(element)?element.value:element).dispatchEvent(Object.assign(new Event(type),extras));function observePosition(element,callback){let trackDiv=document.createElement(`div`);setCss(trackDiv,{position:`fixed`,width:`2px`,height:`2px`,padding:`0`,margin:`0`,border:`0`,outline:`0`,"pointer-events":`none`},!0),element.classList.add(`bng-pos-observed`),trackDiv.className=`bng-pos-observer`,element.children.length?element.insertBefore(trackDiv,element.firstChild):element.appendChild(trackDiv),window.BNG_Logger&&window.BNG_Logger.assert(()=>!isAffectedByCss(trackDiv),`Position observer can break styles inside your element! Please adjust your styles using .bng-pos-observed and/or .bng-pos-observer selectors
`,element);let fixPosition=()=>{let rect=trackDiv.getBoundingClientRect();setCss(trackDiv,{"margin-left":`${parseFloat(trackDiv.style.marginLeft||`0`)-rect.left-1}px`,"margin-top":`${parseFloat(trackDiv.style.marginTop||`0`)-rect.top-1}px`},!0)};fixPosition();let intersectionObserver=new IntersectionObserver(entries=>{Math.round(entries[0].intersectionRatio*4)!==1&&(fixPosition(),callback())},{threshold:[.125,.375,.625,.875]});return intersectionObserver.observe(trackDiv),()=>{intersectionObserver.disconnect(),trackDiv.remove(),element.classList.remove(`bng-pos-observed`)}}window.observePosition=observePosition;function setCss(element,rules,important=void 0){if(window.BNG_Logger&&window.BNG_Logger.assert(()=>!Object.values(rules).some(val=>val.endsWith(` !important`)),`Rule values cannot have !important in them. Please set important flag instead.`,rules),important)for(let key in window.BNG_Logger&&window.BNG_Logger.assert(()=>!Object.keys(rules).some(name=>name!==name.toLowerCase()),`Rule names must be in kebab-case (as in CSS itself)`,rules),rules)element.style.setProperty(key,rules[key],`important`);else Object.assign(element.style,rules)}function isAffectedByCss(element,parent=void 0,fast=!1){if(!element||!element.isConnected||!parent&&!element.parentNode)return!1;parent||=element.parentNode;let clone=element.cloneNode(!fast);parent.insertBefore(clone,element);let orig=window.getComputedStyle(element),cloned=window.getComputedStyle(clone),affected=!1;for(let prop of orig)if(orig[prop]!==cloned[prop]){affected=!0;break}return parent.removeChild(clone),affected}var crossfire_exports=__export({MONITORED_UI_NAV_EVENTS:()=>MONITORED_UI_NAV_EVENTS,NAVIGABLE_ELEMENTS_SELECTOR:()=>NAVIGABLE_ELEMENTS_SELECTOR,NAV_PRIORITY_ATTR:()=>NAV_PRIORITY_ATTR,NAV_PRIORITY_CONTAINER_ATTR:()=>NAV_PRIORITY_CONTAINER_ATTR,NO_CHILD_NAV_ATTR:()=>NO_CHILD_NAV_ATTR,NO_NAV_ATTR:()=>NO_NAV_ATTR,SCROLL_ATTR:()=>SCROLL_ATTR,SCROLL_EVENT_H:()=>SCROLL_EVENT_H,SCROLL_EVENT_V:()=>SCROLL_EVENT_V,SCROLL_FORCE_ATTR:()=>SCROLL_FORCE_ATTR,collectRects:()=>collectRects,findNext:()=>findNext,focusOnElement:()=>focusOnElement,handleUINavEvent:()=>handleUINavEvent,isAvailable:()=>isAvailable,isNavigable:()=>isNavigable$1,isNavigatable:()=>isNavigable$1,isOccluded:()=>isOccluded,isVisibleFast:()=>isVisibleFast,navigate:()=>navigate,navigateScroll:()=>navigateScroll,scrollFix:()=>scrollFix,uncollectRects:()=>uncollectRects});const NAVIGABLE_ELEMENTS_SELECTOR=`[is-bng-panel], [bng-nav-item], [ng-click], [href], [bng-all-clicks], [bng-all-clicks-no-nav], [ui-sref], input, textarea, button, md-option, md-slider, md-select, md-checkbox`,NO_NAV_ATTR=`bng-no-nav`,NO_CHILD_NAV_ATTR=`bng-no-child-nav`,NAV_PRIORITY_CONTAINER_ATTR=`bng-nav-priority-container`,NAV_PRIORITY_ATTR=`bng-nav-priority-item`;var MENU_NAVIGATION_CLASS=`menu-navigation`,IGNORE_TAGS=[`HTML`,`BODY`];const SCROLL_ATTR=`bng-nav-scroll`,SCROLL_FORCE_ATTR=`bng-nav-scroll-force`;var DIR={LEFT:`left`,UP:`up`,RIGHT:`right`,DOWN:`down`},DIR_KEYS={[DIR.LEFT]:37,[DIR.UP]:38,[DIR.RIGHT]:39,[DIR.DOWN]:40},AXIS_H=`horizontal`,AXIS_V=`vertical`;const SCROLL_EVENT_H=`rotate_h_cam`,SCROLL_EVENT_V=`rotate_v_cam`;var UI_SCROLL_EVENT_ACTIONS={[SCROLL_EVENT_H]:AXIS_H,[SCROLL_EVENT_V]:AXIS_V},UI_SCROLL_ACTION_EVENTS={[AXIS_H]:SCROLL_EVENT_H,[AXIS_V]:SCROLL_EVENT_V},SCALAR_EVENT_H=`focus_lr`,SCALAR_EVENT_V=`focus_ud`,UI_SCALAR_EVENT_ACTIONS={[SCALAR_EVENT_H]:AXIS_H,[SCALAR_EVENT_V]:AXIS_V},UI_NAV_EVENT_ACTIONS={focus_u:`up`,focus_d:`down`,focus_l:`left`,focus_r:`right`,ok:`confirm`,tab_l:`tab_l`,tab_r:`tab_r`};const MONITORED_UI_NAV_EVENTS=[...Object.keys(UI_NAV_EVENT_ACTIONS),...Object.keys(UI_SCALAR_EVENT_ACTIONS)];var THUMBSTICK_DEADZONE=.5,lastScalarValue={horizontal:0,vertical:0},TRACKER_ID=`crossfire`;function focusOnElement(elem){let contentEditable=elem.contentEditable,tabIndex=elem.tabIndex;elem.contentEditable=!0,elem.tabIndex=0,elem.focus(),elem.tabIndex=tabIndex,elem.contentEditable=contentEditable}function getNavigableElements(root=null,forceAll=!1){let res=[...(root||document.body).querySelectorAll(NAVIGABLE_ELEMENTS_SELECTOR)];return forceAll||(res=res.filter(elem=>{if(elem.parentNode.closest(`[bng-no-child-nav="1"], [bng-no-child-nav="true"]`))return!1;let noNav=elem.attributes.getNamedItem(NO_NAV_ATTR);return!noNav||noNav.value!==`true`})),res}function isNavigable$1(elem,forceAll=!1){if(!elem||IGNORE_TAGS.includes(elem.nodeName||elem.tagName))return!1;if(elem.classList.contains(MENU_NAVIGATION_CLASS))return!0;let parent=elem.parentNode;if(!parent)return!1;let children=getNavigableElements(parent,forceAll);for(let child of children)if(child===elem)return!0;return!1}function uncollectRects(){let ns=getNavigableElements();for(let node of ns)node.classList.remove(MENU_NAVIGATION_CLASS)}var warnPrioNesting=window.beamng&&!window.beamng.shipping;function collectRects(direction$1,parent,forceAll=!1){let links={};direction$1?links[direction$1]=[]:(links.up=[],links.down=[],links.left=[],links.right=[]);let prioNodes=new WeakSet,ns=getNavigableElements(parent,forceAll);for(let node of ns){if(!isAvailable(node)){node.classList.remove(MENU_NAVIGATION_CLASS);continue}let rectNode=node,prioNode=node.closest(`[${NAV_PRIORITY_CONTAINER_ATTR}]`);if(prioNode&&prioNode!==node&&!prioNodes.has(prioNode)){if(prioNodes.add(prioNode),!warnPrioNesting){let parent$1=prioNode.parentNode.closest(`[${NAV_PRIORITY_CONTAINER_ATTR}]`);parent$1&&(console.warn(`Priority container nesting is not supported. Please remove the nested priority container.
@/lua/vehicle/bdebugImpl.lua
    for _, geFuncName in ipairs(requestDrawnNodesCallbacks) do
      obj:queueGameEngineLua(geFuncName .. "(" .. serialize(nodesDrawn) .. "," .. nodeScale .. ")")
    end
    for _, geFuncName in ipairs(requestDrawnBeamsCallbacks) do
      obj:queueGameEngineLua(geFuncName .. "(" .. serialize(beamsDrawn) .. "," .. beamScale .. ")")
    end
  -- INTENTIONALLY CALLING FROM GAME ENGINE LUA TO WORKAROUND A BUG
  obj:queueGameEngineLua(string.format("guihooks.trigger('BdebugUpdate',%s,%s)", serialize(M.state), serialize(M.stateNoReset)))
  -- INTENTIONALLY CALLING FROM GAME ENGINE LUA TO WORKAROUND A BUG
  obj:queueGameEngineLua(string.format("guihooks.trigger('BdebugUpdate',%s,%s)", serialize(M.state), serialize(M.stateNoReset)))
  -- This is fine though
  obj:queueGameEngineLua(string.format("extensions.hook('onBDebugUpdate',%s,%s)", serialize(M.state), serialize(M.stateNoReset)))
end
  -- This is fine though
  obj:queueGameEngineLua(string.format("extensions.hook('onBDebugUpdate',%s,%s)", serialize(M.state), serialize(M.stateNoReset)))
end
@/lua/vehicle/extensions/tech/techCore.lua

  local cmd = 'extensions.hook("onVehicleInfoReady", ' .. tostring(obj:getID()) .. ', ' .. serialize(info) .. ')'
  obj:queueGameEngineLua(cmd)
@/lua/ge/extensions/editor/api/object.lua
  if obj then
    memento = obj:serialize(false, -1)
  end
@/lua/vehicle/controller/twoStepLaunch.lua

local function serialize()
  return {
@/lua/ge/extensions/editor/api/objectHistoryActions.lua
    if not obj:isSubClassOf("SimSet") and obj:getClassName() ~= "SimGroup" and obj:getClassName() ~= "SimSet" then
      actionData.serializedData = "[" .. obj:serialize(true, -1) .. "]"
    else
@/gameplay/missionTypes/chase/customNodes/suspectAiNode.lua
        if race.aiPath and race.aiPath[1] then
          veh:queueLuaCommand('ai.driveUsingPath({wpTargetList = '..serialize(race.aiPath)..'})')
        end
        json.recording.loopType = "firstOnlyTeleport"
        veh:queueLuaCommand('ai.startFollowing(' .. serialize(json.recording) .. ')')
        self.aiMode = 'script'
@/lua/ge/extensions/gameplay/taxi.lua
  destinationPos = rp.path[#rp.path].pos
  local str = '{wpTargetList = '..serialize(aiPath)
  str = str..', noOfLaps = 1, aggression = 0.3, avoidCars = "on", driveInLane = "on", speedMode = "limit"}'
@/lua/ge/extensions/editor/inspector.lua
local function onEditorSaveGuiInstancerState(state)
  guiInstancer:serialize("inspectorInstances", state)
end
@/lua/ge/extensions/editor/assetBrowser.lua
  if obj then
    actionData.serializedData = "[" .. obj:serialize(true, -1) .. "]"
    editor.deleteObject(actionData.objectId)
@/lua/ge/extensions/core/quickAccess.lua
            local aiPath = getAiPath(rp.path, i)
            local str = '{wpTargetList = '..serialize(aiPath)
            str = str..', noOfLaps = 1, aggression = 0.3, avoidCars = "on", driveInLane = "on", speedMode = "limit"}'
            local aiPath = getAiPath(rp.path, i)
            local str = '{wpTargetList = '..serialize(aiPath)
            str = str..', noOfLaps = 1, aggression = 0.9, avoidCars = "on"}'
    end
    veh:queueLuaCommand('extensions.core_quickAccess.selectItem(' .. serialize(item.id) .. ', ' .. serialize(buttonDown) .. ', ' .. serialize(actionIndex) .. ')')
    return
    end
    veh:queueLuaCommand('extensions.core_quickAccess.selectItem(' .. serialize(item.id) .. ', ' .. serialize(buttonDown) .. ', ' .. serialize(actionIndex) .. ')')
    return
    end
    veh:queueLuaCommand('extensions.core_quickAccess.selectItem(' .. serialize(item.id) .. ', ' .. serialize(buttonDown) .. ', ' .. serialize(actionIndex) .. ')')
    return
@/ui/lib/ext/angular/angular.js
      var parts = [];
      serialize(params, '', true);
      return parts.join('&');

      function serialize(toSerialize, prefix, topLevel) {
        if (toSerialize === null || isUndefined(toSerialize)) return;
          forEach(toSerialize, function(value, index) {
            serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']');
          });
          forEachSorted(toSerialize, function(value, key) {
            serialize(value, prefix +
                (topLevel ? '' : '[') +
@/lua/vehicle/extensions/tech/CANBus/ButtonBox.lua
    local deviceId, deviceInfo = core_input_virtualInput.getDeviceInfo(%d)
    be:queueObjectLua(%d, 'extensions.tech_CANBus_ButtonBox.virtualInputCallback('..(deviceId or 'nil')..','..serialize(deviceInfo)..')')
    ]]
    local deviceId, deviceInfo = core_input_virtualInput.createDevice(%q, %d, %d, %d, %d, true)
    be:queueObjectLua(%d, 'extensions.tech_CANBus_ButtonBox.virtualInputCallback('..deviceId..','..serialize(deviceInfo)..')')
    ]]
@/lua/ge/map.lua
  -- local aiData = {subjectName = args.subjectName, triggerName = args.triggerName, event = args.event, mode = args.mode}
  -- args.subject:queueLuaCommand('ai.onWaypoint(' .. serialize(aiData) .. ')')
      if signalsDict and next(signalsDict) then
        be:queueObjectLua(objId, string.format("mapmgr.setSignals(%s)", serialize(signalsDict)))
      end
@/lua/vehicle/energyStorage.lua
    if storage.serialize then
      data[storage.name] = storage:serialize()
    end
@/lua/ge/extensions/editor/suspensionAudioDebug.lua
  if editor.beginWindow(wndName, wndName) then
    veh:queueLuaCommand('obj:queueGameEngineLua("editor_suspensionAudioDebug.beamSounds =" .. serialize(sounds.getBeamSounds()))')
@/lua/ge/extensions/flowgraph/nodes/vehicle/ai/scriptAI/followPath.lua
  --dumpz(path, 3)
  veh:queueLuaCommand('ai.startFollowing(' .. serialize({path=path}) .. ',nil,'..loopCount..',"'..loopType..'")')
  --dump('ai.startFollowing(' .. serialize(self.path) .. ',)')
  veh:queueLuaCommand('ai.startFollowing(' .. serialize({path=path}) .. ',nil,'..loopCount..',"'..loopType..'")')
  --dump('ai.startFollowing(' .. serialize(self.path) .. ',)')
end
    end
    be:queueAllObjectLua('obj:queueGameEngineLua("extensions.hook(\\"onVehicleSubmitInfo\\","..tostring(objectId)..","..serialize(ai.scriptState())..",'..self.id..')")')
  end
@/lua/ge/extensions/flowgraph/nodes/vehicle/special/customVehicleGetter.lua
function C:getCmd()
  return 'obj:queueGameEngineLua("local n = core_flowgraphManager.getManagerGraphNode('..self.mgr.id..', '..self.graph.id..', '..self.id..') if n then n:returnValue(\'"..serialize('..self.data.fun..').."\') end")'
end
@/lua/ge/extensions/core/vehicle/partmgmt.lua
    if playerVehicle then
      queueCallbackInVehicle(playerVehicle, "extensions.core_vehicle_partmgmt.savePartConfigFileStage2", "partCondition.getConditions("..serialize(filename)..")")
    end
    --dump{"RESPAWN: ", playerVehicle.config}
    veh:respawn(serialize(playerVehicle.config))
  else
    end
    veh:setField('partConfig', '', serialize(playerVehicle.config))
  end
  end
  vehObj:queueLuaCommand(string.format('bdebug.setPartsSelected(%s)', serialize(partNames)))
end
@/inspector/External/three.js/three.js

            function serialize( library, element ) {

                object.geometry = serialize( meta.geometries, this.geometry );

                            serialize( meta.shapes, shape );

                        serialize( meta.shapes, shapes );

                        uuids.push( serialize( meta.materials, this.material[ i ] ) );

                    object.material = serialize( meta.materials, this.material );
@/ui/ui-vue/src/bridge/libs/Lua.js

  transformedArgs = args.map((arg, i) => serialize((argTypes[i] && argTransformers[argTypes[i].name] || Any)(arg)))
  return runRaw(`${funcName}(${transformedArgs})`)
 */
export function serialize(o) {
  loadAPI()
@/lua/vehicle/controller/controllerTemplate.lua

-- local function serialize()
--   return {
@/lua/ge/extensions/editor/vehicleEditor/staticEditor/vePartTree.lua
          --veh:setPositionRotation(pos.x, pos.y, pos.z, 0,0,0,1) -- > bad > physics reset
          --veh:respawn(serialize(vehicleConfig)) -- > bad > not resetting the pos/rot
          veh.partConfig = serialize(vehicleConfig)
          --veh:respawn(serialize(vehicleConfig)) -- > bad > not resetting the pos/rot
          veh.partConfig = serialize(vehicleConfig)
          veh:spawnObjectWithPosRot(pos.x, pos.y, pos.z, 0,0,0,1, true)
@/lua/ge/extensions/flowgraph/modules/aiRecordingModule.lua
      -- schedule the recording to be stopped and be sent from the vehicle to this module
      veh:queueLuaCommand('obj:queueGameEngineLua("extensions.hook(\\"onVehicleSubmitRecordingForMission\\","..tostring(objectId)..","..serialize(ai.stopRecording())..")")')
    end
      vehicleStates[veh:getId()] = 'recording'
      veh:queueLuaCommand('ai.startFollowing('..serialize(self.mgr.activity.startingOptions.aiPath)..', nil, nil, "noReset", true)')
    end
@/lua/ge/extensions/flowgraph/nodes/vehicle/ai/followWaypoints.lua

  veh:queueLuaCommand('ai.driveUsingPath({wpTargetList = ' .. serialize(aiPath) .. ', wpSpeeds = ' .. serialize(wpSpeeds) .. ', noOfLaps = ' .. self.lapCount .. ', aggression = 1})')

  veh:queueLuaCommand('ai.driveUsingPath({wpTargetList = ' .. serialize(aiPath) .. ', wpSpeeds = ' .. serialize(wpSpeeds) .. ', noOfLaps = ' .. self.lapCount .. ', aggression = 1})')
@/lua/vehicle/controller/couplings/kingpin.lua
        controller.getControllerSafe(%q).kingpinDataCallback(%d, %s)
      ]], controllerName, objectId, serialize(data))
    --dump(fifthwheelCmd)
@/ui/lib/ext/chartist.min.js

!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.0"};return function(a,b,c){"use strict";c.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){var b,d,e;for(a=a||{},b=1;b":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(c.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e),f._node.style.width=b,f._node.style.height=d,a.appendChild(f._node),f},c.normalizeData=function(a,b,d){var e,f={raw:a,normalized:{}};return f.normalized.series=c.getDataArray({series:a.series||[]},b,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,c.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),b&&c.reverseData(f.normalized),f},c.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},c.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},c.isNumeric=function(a){return null!==a&&isFinite(a)},c.isFalseyButZero=function(a){return!a&&0!==a},c.getNumberOrUndefined=function(a){return c.isNumeric(a)?+a:void 0},c.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},c.getMultiValue=function(a,b){return c.isMultiValue(a)?c.getNumberOrUndefined(a[b||"y"]):c.getNumberOrUndefined(a)},c.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},c.getBounds=function(a,b,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:b.high,low:b.low};k.valueRange=k.high-k.low,k.oom=c.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=c.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&c.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(c.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=c.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.quantity(b.width).value||0,i=a.height()||c.quantity(b.height).value||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},c.createLabel=function(a,d,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=d,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=b.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",c.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,c.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",c.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(b[h/2]));return f}}(window,document,a),function(a,b,c){"use strict";c.Interpolation={},c.Interpolation.none=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(b=h[0].pathCoordinates,g=h[0].valueData,b.length<=4)return c.Interpolation.none()(b,g);for(var j,k=(new c.Svg.Path).move(b[0],b[1],!1,g[0]),l=0,m=b.length;m-2*!j>l;l+=2){var n=[{x:+b[l-2],y:+b[l-1]},{x:+b[l],y:+b[l+1]},{x:+b[l+2],y:+b[l+3]},{x:+b[l+4],y:+b[l+5]}];j?l?m-4===l?n[3]={x:+b[0],y:+b[1]}:m-2===l&&(n[2]={x:+b[0],y:+b[1]},n[3]={x:+b[2],y:+b[3]}):n[0]={x:+b[m-2],y:+b[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+b[l],y:+b[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return c.Interpolation.none()([])}},c.Interpolation.monotoneCubic=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function d(b,e){var f=c.splitIntoSegments(b,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(g)}if(b=f[0].pathCoordinates,e=f[0].valueData,b.length<=4)return c.Interpolation.none()(b,e);var h,i,j=[],k=[],l=b.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new c.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(c){var h=i.elem("path",{d:c.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:b.normalized.series[g],path:c.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d;a.distributeSeries?(b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),b.normalized.series=b.normalized.series.map(function(a){return[a]})):b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars&&0!==b.normalized.series.length){var i=c.serialMap(b.normalized.series,function(){
return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=c.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=c.getHighLow(b.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?b.normalized.labels.slice(0,1):b.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,b.normalized.series,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,b.normalized.series,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&c.createGridBackground(e,o,a.classNames.gridBackground,this.eventEmitter),b.raw.series.forEach(function(d,e){var f,h,i=e-(b.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/b.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/b.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":c.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),b.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,b.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,b.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,b.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,b.normalized.series[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=c.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(c.isNumeric).join(","),"ct:meta":c.serialize(w)}),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=c.normalizeData(this.data),k=[],l=a.startAngle;this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=c.quantity(a.donutWidth);"%"===m.unit&&(m.value*=f/100),f-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?f:"center"===a.labelPosition?0:a.donutSolid?f-m.value/2:f/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(b=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,g){if(0!==j.normalized.series[g]||!a.ignoreEmptyValues){k[g].attr({"ct:series-name":e.name}),k[g].addClass([a.classNames.series,e.className||a.classNames.series+"-"+c.alphaNumerate(g)].join(" "));var p=i>0?l+j.normalized.series[g]/i*360:0,q=Math.max(0,l-(0===g||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=c.polarToCartesian(n.x,n.y,f,q),v=c.polarToCartesian(n.x,n.y,f,p),w=new c.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(f,f,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=f-m.value,r=c.polarToCartesian(n.x,n.y,t,l-(0===g||o?0:.2)),s=c.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[g].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[g],"ct:meta":c.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[g],totalDataSum:i,index:g,meta:e.meta,series:e,group:k[g],element:y,path:w.clone(),center:n,radius:f,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:c.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!c.isFalseyButZero(j.normalized.labels[g])?j.normalized.labels[g]:j.normalized.series[g];var B=a.labelInterpolationFnc(A,g);if(B||0===B){var C=b.elem("text",{dx:z.x,dy:z.y,"text-anchor":d(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:g,group:b,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});

!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.0"};return function(a,b,c){"use strict";c.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){var b,d,e;for(a=a||{},b=1;b":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(c.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e),f._node.style.width=b,f._node.style.height=d,a.appendChild(f._node),f},c.normalizeData=function(a,b,d){var e,f={raw:a,normalized:{}};return f.normalized.series=c.getDataArray({series:a.series||[]},b,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,c.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),b&&c.reverseData(f.normalized),f},c.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},c.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},c.isNumeric=function(a){return null!==a&&isFinite(a)},c.isFalseyButZero=function(a){return!a&&0!==a},c.getNumberOrUndefined=function(a){return c.isNumeric(a)?+a:void 0},c.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},c.getMultiValue=function(a,b){return c.isMultiValue(a)?c.getNumberOrUndefined(a[b||"y"]):c.getNumberOrUndefined(a)},c.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},c.getBounds=function(a,b,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:b.high,low:b.low};k.valueRange=k.high-k.low,k.oom=c.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=c.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&c.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(c.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=c.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.quantity(b.width).value||0,i=a.height()||c.quantity(b.height).value||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},c.createLabel=function(a,d,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=d,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=b.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",c.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,c.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",c.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(b[h/2]));return f}}(window,document,a),function(a,b,c){"use strict";c.Interpolation={},c.Interpolation.none=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(b=h[0].pathCoordinates,g=h[0].valueData,b.length<=4)return c.Interpolation.none()(b,g);for(var j,k=(new c.Svg.Path).move(b[0],b[1],!1,g[0]),l=0,m=b.length;m-2*!j>l;l+=2){var n=[{x:+b[l-2],y:+b[l-1]},{x:+b[l],y:+b[l+1]},{x:+b[l+2],y:+b[l+3]},{x:+b[l+4],y:+b[l+5]}];j?l?m-4===l?n[3]={x:+b[0],y:+b[1]}:m-2===l&&(n[2]={x:+b[0],y:+b[1]},n[3]={x:+b[2],y:+b[3]}):n[0]={x:+b[m-2],y:+b[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+b[l],y:+b[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return c.Interpolation.none()([])}},c.Interpolation.monotoneCubic=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function d(b,e){var f=c.splitIntoSegments(b,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(g)}if(b=f[0].pathCoordinates,e=f[0].valueData,b.length<=4)return c.Interpolation.none()(b,e);var h,i,j=[],k=[],l=b.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new c.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(c){var h=i.elem("path",{d:c.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:b.normalized.series[g],path:c.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d;a.distributeSeries?(b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),b.normalized.series=b.normalized.series.map(function(a){return[a]})):b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars&&0!==b.normalized.series.length){var i=c.serialMap(b.normalized.series,function(){
return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=c.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=c.getHighLow(b.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?b.normalized.labels.slice(0,1):b.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,b.normalized.series,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,b.normalized.series,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&c.createGridBackground(e,o,a.classNames.gridBackground,this.eventEmitter),b.raw.series.forEach(function(d,e){var f,h,i=e-(b.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/b.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/b.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":c.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),b.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,b.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,b.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,b.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,b.normalized.series[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=c.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(c.isNumeric).join(","),"ct:meta":c.serialize(w)}),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=c.normalizeData(this.data),k=[],l=a.startAngle;this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=c.quantity(a.donutWidth);"%"===m.unit&&(m.value*=f/100),f-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?f:"center"===a.labelPosition?0:a.donutSolid?f-m.value/2:f/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(b=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,g){if(0!==j.normalized.series[g]||!a.ignoreEmptyValues){k[g].attr({"ct:series-name":e.name}),k[g].addClass([a.classNames.series,e.className||a.classNames.series+"-"+c.alphaNumerate(g)].join(" "));var p=i>0?l+j.normalized.series[g]/i*360:0,q=Math.max(0,l-(0===g||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=c.polarToCartesian(n.x,n.y,f,q),v=c.polarToCartesian(n.x,n.y,f,p),w=new c.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(f,f,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=f-m.value,r=c.polarToCartesian(n.x,n.y,t,l-(0===g||o?0:.2)),s=c.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[g].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[g],"ct:meta":c.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[g],totalDataSum:i,index:g,meta:e.meta,series:e,group:k[g],element:y,path:w.clone(),center:n,radius:f,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:c.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!c.isFalseyButZero(j.normalized.labels[g])?j.normalized.labels[g]:j.normalized.series[g];var B=a.labelInterpolationFnc(A,g);if(B||0===B){var C=b.elem("text",{dx:z.x,dy:z.y,"text-anchor":d(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:g,group:b,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});
!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.0"};return function(a,b,c){"use strict";c.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){var b,d,e;for(a=a||{},b=1;b":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(c.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e),f._node.style.width=b,f._node.style.height=d,a.appendChild(f._node),f},c.normalizeData=function(a,b,d){var e,f={raw:a,normalized:{}};return f.normalized.series=c.getDataArray({series:a.series||[]},b,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,c.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),b&&c.reverseData(f.normalized),f},c.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},c.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},c.isNumeric=function(a){return null!==a&&isFinite(a)},c.isFalseyButZero=function(a){return!a&&0!==a},c.getNumberOrUndefined=function(a){return c.isNumeric(a)?+a:void 0},c.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},c.getMultiValue=function(a,b){return c.isMultiValue(a)?c.getNumberOrUndefined(a[b||"y"]):c.getNumberOrUndefined(a)},c.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},c.getBounds=function(a,b,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:b.high,low:b.low};k.valueRange=k.high-k.low,k.oom=c.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=c.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&c.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(c.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=c.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.quantity(b.width).value||0,i=a.height()||c.quantity(b.height).value||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},c.createLabel=function(a,d,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=d,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=b.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",c.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,c.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",c.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(b[h/2]));return f}}(window,document,a),function(a,b,c){"use strict";c.Interpolation={},c.Interpolation.none=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(b=h[0].pathCoordinates,g=h[0].valueData,b.length<=4)return c.Interpolation.none()(b,g);for(var j,k=(new c.Svg.Path).move(b[0],b[1],!1,g[0]),l=0,m=b.length;m-2*!j>l;l+=2){var n=[{x:+b[l-2],y:+b[l-1]},{x:+b[l],y:+b[l+1]},{x:+b[l+2],y:+b[l+3]},{x:+b[l+4],y:+b[l+5]}];j?l?m-4===l?n[3]={x:+b[0],y:+b[1]}:m-2===l&&(n[2]={x:+b[0],y:+b[1]},n[3]={x:+b[2],y:+b[3]}):n[0]={x:+b[m-2],y:+b[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+b[l],y:+b[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return c.Interpolation.none()([])}},c.Interpolation.monotoneCubic=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function d(b,e){var f=c.splitIntoSegments(b,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(g)}if(b=f[0].pathCoordinates,e=f[0].valueData,b.length<=4)return c.Interpolation.none()(b,e);var h,i,j=[],k=[],l=b.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new c.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(c){var h=i.elem("path",{d:c.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:b.normalized.series[g],path:c.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d;a.distributeSeries?(b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),b.normalized.series=b.normalized.series.map(function(a){return[a]})):b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars&&0!==b.normalized.series.length){var i=c.serialMap(b.normalized.series,function(){
return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=c.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=c.getHighLow(b.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?b.normalized.labels.slice(0,1):b.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,b.normalized.series,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,b.normalized.series,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&c.createGridBackground(e,o,a.classNames.gridBackground,this.eventEmitter),b.raw.series.forEach(function(d,e){var f,h,i=e-(b.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/b.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/b.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":c.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),b.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,b.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,b.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,b.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,b.normalized.series[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=c.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(c.isNumeric).join(","),"ct:meta":c.serialize(w)}),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=c.normalizeData(this.data),k=[],l=a.startAngle;this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=c.quantity(a.donutWidth);"%"===m.unit&&(m.value*=f/100),f-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?f:"center"===a.labelPosition?0:a.donutSolid?f-m.value/2:f/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(b=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,g){if(0!==j.normalized.series[g]||!a.ignoreEmptyValues){k[g].attr({"ct:series-name":e.name}),k[g].addClass([a.classNames.series,e.className||a.classNames.series+"-"+c.alphaNumerate(g)].join(" "));var p=i>0?l+j.normalized.series[g]/i*360:0,q=Math.max(0,l-(0===g||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=c.polarToCartesian(n.x,n.y,f,q),v=c.polarToCartesian(n.x,n.y,f,p),w=new c.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(f,f,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=f-m.value,r=c.polarToCartesian(n.x,n.y,t,l-(0===g||o?0:.2)),s=c.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[g].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[g],"ct:meta":c.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[g],totalDataSum:i,index:g,meta:e.meta,series:e,group:k[g],element:y,path:w.clone(),center:n,radius:f,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:c.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!c.isFalseyButZero(j.normalized.labels[g])?j.normalized.labels[g]:j.normalized.series[g];var B=a.labelInterpolationFnc(A,g);if(B||0===B){var C=b.elem("text",{dx:z.x,dy:z.y,"text-anchor":d(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:g,group:b,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});
//# ssourceMappingURL=chartist.min.js.map
!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.0"};return function(a,b,c){"use strict";c.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){var b,d,e;for(a=a||{},b=1;b":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(c.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e),f._node.style.width=b,f._node.style.height=d,a.appendChild(f._node),f},c.normalizeData=function(a,b,d){var e,f={raw:a,normalized:{}};return f.normalized.series=c.getDataArray({series:a.series||[]},b,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,c.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),b&&c.reverseData(f.normalized),f},c.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},c.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},c.isNumeric=function(a){return null!==a&&isFinite(a)},c.isFalseyButZero=function(a){return!a&&0!==a},c.getNumberOrUndefined=function(a){return c.isNumeric(a)?+a:void 0},c.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},c.getMultiValue=function(a,b){return c.isMultiValue(a)?c.getNumberOrUndefined(a[b||"y"]):c.getNumberOrUndefined(a)},c.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},c.getBounds=function(a,b,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:b.high,low:b.low};k.valueRange=k.high-k.low,k.oom=c.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=c.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&c.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(c.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=c.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.quantity(b.width).value||0,i=a.height()||c.quantity(b.height).value||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},c.createLabel=function(a,d,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=d,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=b.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",c.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,c.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",c.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(b[h/2]));return f}}(window,document,a),function(a,b,c){"use strict";c.Interpolation={},c.Interpolation.none=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(b=h[0].pathCoordinates,g=h[0].valueData,b.length<=4)return c.Interpolation.none()(b,g);for(var j,k=(new c.Svg.Path).move(b[0],b[1],!1,g[0]),l=0,m=b.length;m-2*!j>l;l+=2){var n=[{x:+b[l-2],y:+b[l-1]},{x:+b[l],y:+b[l+1]},{x:+b[l+2],y:+b[l+3]},{x:+b[l+4],y:+b[l+5]}];j?l?m-4===l?n[3]={x:+b[0],y:+b[1]}:m-2===l&&(n[2]={x:+b[0],y:+b[1]},n[3]={x:+b[2],y:+b[3]}):n[0]={x:+b[m-2],y:+b[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+b[l],y:+b[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return c.Interpolation.none()([])}},c.Interpolation.monotoneCubic=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function d(b,e){var f=c.splitIntoSegments(b,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(g)}if(b=f[0].pathCoordinates,e=f[0].valueData,b.length<=4)return c.Interpolation.none()(b,e);var h,i,j=[],k=[],l=b.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new c.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(c){var h=i.elem("path",{d:c.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:b.normalized.series[g],path:c.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d;a.distributeSeries?(b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),b.normalized.series=b.normalized.series.map(function(a){return[a]})):b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars&&0!==b.normalized.series.length){var i=c.serialMap(b.normalized.series,function(){
return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=c.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=c.getHighLow(b.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?b.normalized.labels.slice(0,1):b.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,b.normalized.series,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,b.normalized.series,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&c.createGridBackground(e,o,a.classNames.gridBackground,this.eventEmitter),b.raw.series.forEach(function(d,e){var f,h,i=e-(b.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/b.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/b.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":c.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),b.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,b.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,b.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,b.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,b.normalized.series[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=c.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(c.isNumeric).join(","),"ct:meta":c.serialize(w)}),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=c.normalizeData(this.data),k=[],l=a.startAngle;this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=c.quantity(a.donutWidth);"%"===m.unit&&(m.value*=f/100),f-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?f:"center"===a.labelPosition?0:a.donutSolid?f-m.value/2:f/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(b=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,g){if(0!==j.normalized.series[g]||!a.ignoreEmptyValues){k[g].attr({"ct:series-name":e.name}),k[g].addClass([a.classNames.series,e.className||a.classNames.series+"-"+c.alphaNumerate(g)].join(" "));var p=i>0?l+j.normalized.series[g]/i*360:0,q=Math.max(0,l-(0===g||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=c.polarToCartesian(n.x,n.y,f,q),v=c.polarToCartesian(n.x,n.y,f,p),w=new c.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(f,f,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=f-m.value,r=c.polarToCartesian(n.x,n.y,t,l-(0===g||o?0:.2)),s=c.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[g].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[g],"ct:meta":c.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[g],totalDataSum:i,index:g,meta:e.meta,series:e,group:k[g],element:y,path:w.clone(),center:n,radius:f,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:c.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!c.isFalseyButZero(j.normalized.labels[g])?j.normalized.labels[g]:j.normalized.series[g];var B=a.labelInterpolationFnc(A,g);if(B||0===B){var C=b.elem("text",{dx:z.x,dy:z.y,"text-anchor":d(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:g,group:b,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});
//# ssourceMappingURL=chartist.min.js.map
!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.0"};return function(a,b,c){"use strict";c.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){var b,d,e;for(a=a||{},b=1;b":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(c.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e),f._node.style.width=b,f._node.style.height=d,a.appendChild(f._node),f},c.normalizeData=function(a,b,d){var e,f={raw:a,normalized:{}};return f.normalized.series=c.getDataArray({series:a.series||[]},b,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,c.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),b&&c.reverseData(f.normalized),f},c.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},c.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},c.isNumeric=function(a){return null!==a&&isFinite(a)},c.isFalseyButZero=function(a){return!a&&0!==a},c.getNumberOrUndefined=function(a){return c.isNumeric(a)?+a:void 0},c.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},c.getMultiValue=function(a,b){return c.isMultiValue(a)?c.getNumberOrUndefined(a[b||"y"]):c.getNumberOrUndefined(a)},c.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},c.getBounds=function(a,b,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:b.high,low:b.low};k.valueRange=k.high-k.low,k.oom=c.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=c.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&c.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(c.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=c.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.quantity(b.width).value||0,i=a.height()||c.quantity(b.height).value||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},c.createLabel=function(a,d,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=d,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=b.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",c.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,c.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",c.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(b[h/2]));return f}}(window,document,a),function(a,b,c){"use strict";c.Interpolation={},c.Interpolation.none=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(b=h[0].pathCoordinates,g=h[0].valueData,b.length<=4)return c.Interpolation.none()(b,g);for(var j,k=(new c.Svg.Path).move(b[0],b[1],!1,g[0]),l=0,m=b.length;m-2*!j>l;l+=2){var n=[{x:+b[l-2],y:+b[l-1]},{x:+b[l],y:+b[l+1]},{x:+b[l+2],y:+b[l+3]},{x:+b[l+4],y:+b[l+5]}];j?l?m-4===l?n[3]={x:+b[0],y:+b[1]}:m-2===l&&(n[2]={x:+b[0],y:+b[1]},n[3]={x:+b[2],y:+b[3]}):n[0]={x:+b[m-2],y:+b[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+b[l],y:+b[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return c.Interpolation.none()([])}},c.Interpolation.monotoneCubic=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function d(b,e){var f=c.splitIntoSegments(b,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(g)}if(b=f[0].pathCoordinates,e=f[0].valueData,b.length<=4)return c.Interpolation.none()(b,e);var h,i,j=[],k=[],l=b.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new c.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(c){var h=i.elem("path",{d:c.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:b.normalized.series[g],path:c.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d;a.distributeSeries?(b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),b.normalized.series=b.normalized.series.map(function(a){return[a]})):b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars&&0!==b.normalized.series.length){var i=c.serialMap(b.normalized.series,function(){
return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=c.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=c.getHighLow(b.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?b.normalized.labels.slice(0,1):b.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,b.normalized.series,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,b.normalized.series,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&c.createGridBackground(e,o,a.classNames.gridBackground,this.eventEmitter),b.raw.series.forEach(function(d,e){var f,h,i=e-(b.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/b.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/b.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":c.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),b.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,b.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,b.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,b.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,b.normalized.series[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=c.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(c.isNumeric).join(","),"ct:meta":c.serialize(w)}),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=c.normalizeData(this.data),k=[],l=a.startAngle;this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=c.quantity(a.donutWidth);"%"===m.unit&&(m.value*=f/100),f-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?f:"center"===a.labelPosition?0:a.donutSolid?f-m.value/2:f/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(b=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,g){if(0!==j.normalized.series[g]||!a.ignoreEmptyValues){k[g].attr({"ct:series-name":e.name}),k[g].addClass([a.classNames.series,e.className||a.classNames.series+"-"+c.alphaNumerate(g)].join(" "));var p=i>0?l+j.normalized.series[g]/i*360:0,q=Math.max(0,l-(0===g||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=c.polarToCartesian(n.x,n.y,f,q),v=c.polarToCartesian(n.x,n.y,f,p),w=new c.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(f,f,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=f-m.value,r=c.polarToCartesian(n.x,n.y,t,l-(0===g||o?0:.2)),s=c.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[g].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[g],"ct:meta":c.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[g],totalDataSum:i,index:g,meta:e.meta,series:e,group:k[g],element:y,path:w.clone(),center:n,radius:f,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:c.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!c.isFalseyButZero(j.normalized.labels[g])?j.normalized.labels[g]:j.normalized.series[g];var B=a.labelInterpolationFnc(A,g);if(B||0===B){var C=b.elem("text",{dx:z.x,dy:z.y,"text-anchor":d(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:g,group:b,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});
//# ssourceMappingURL=chartist.min.js.map
@/lua/ge/extensions/editor/scriptAIEditor.lua
  for vid, p in pairs(polyLinesToExecute) do                                      -- Execute all the vehicle trajectories using the scriptAI backend.
    scenetree.findObject(vid):queueLuaCommand('ai.startFollowing(' .. serialize(p) .. ')')
  end
              if editor.uiIconImageButton(editor.icons.stop, im.ImVec2(21, 21), nil, nil, nil, 'stopRecordingScript') then
                scenetree.findObject(veh.vid):queueLuaCommand('obj:queueGameEngineLua("extensions.hook(\\"onVehicleSubmitRecording\\","..tostring(objectId)..","..serialize(ai.stopRecording())..")")')
                stopExecute()
@/lua/ge/extensions/core/vehicleBridge.lua
  for k, p in ipairs({...}) do
    params[k] = serialize(p)
  end
  for k, p in ipairs({...}) do
    params[k] = serialize(p)
  end